-
-
-
- setPassword(e.target.value)}
- disabled={isLoading}
- autoComplete="off"
- />
-
- {/* Strength bar */}
- {password && (
- <>
-
- {[1, 2, 3].map((seg) => (
-
= seg
- ? `active-${STRENGTH_CLASSES[strength]}`
- : ""
- }`}
- />
- ))}
+ {/* Fields */}
+
+ {/* Name + Email row */}
+
+
+
+
+ setName(e.target.value)}
+ disabled={isLoading}
+ />
-
- {STRENGTH_LABELS[strength]} password
-
- >
+
+
+
+ {/* Email */}
+
+
+
+
+ setEmail(e.target.value)}
+ disabled={isLoading}
+ />
+
+
+
+ {/* Password */}
+
+
+
+
+ setPassword(e.target.value)}
+ disabled={isLoading}
+ />
+
+ {password && (
+ <>
+
+ {[1, 2, 3].map((seg) => (
+
= seg ? S_CLASS[strength] : ""}`}
+ />
+ ))}
+
+
+ {S_LABEL[strength]} password
+
+ >
+ )}
+
+
+ {/* Error */}
+ {error && (
+
+ ⚠️ {error}
+
)}
+
+ {/* Submit */}
+
- {/* Error */}
- {error && (
-
- ⚠️ {error}
-
- )}
-
- {/* Submit */}
-
+
+ Already have an account?{" "}
+
+ Sign in
+
+
-
-
- Already have an account?{" "}
-
- Sign in
-
-
);
diff --git a/src/pages/student/StudentLayout.tsx b/src/pages/student/StudentLayout.tsx
index 950623a..20b218e 100644
--- a/src/pages/student/StudentLayout.tsx
+++ b/src/pages/student/StudentLayout.tsx
@@ -1,5 +1,5 @@
import { Outlet, NavLink, useLocation } from "react-router-dom";
-import { Home, BookOpen, Award, User, Video, Map } from "lucide-react";
+import { Home, BookOpen, Award, User, Map, SquareLibrary } from "lucide-react";
import { SidebarProvider } from "../../components/ui/sidebar";
import { AppSidebar } from "../../components/AppSidebar";
@@ -27,7 +27,7 @@ const NAV_ITEMS = [
},
{
to: "/student/lessons",
- icon: Video,
+ icon: SquareLibrary,
label: "Lessons",
color: "#0891b2",
bg: "rgba(8,145,178,0.12)",
diff --git a/src/pages/student/lessons/EBRWBoundariesLesson.tsx b/src/pages/student/lessons/EBRWBoundariesLesson.tsx
new file mode 100644
index 0000000..8375d10
--- /dev/null
+++ b/src/pages/student/lessons/EBRWBoundariesLesson.tsx
@@ -0,0 +1,1030 @@
+import React, { useRef, useState, useEffect } from "react";
+import {
+ Check,
+ BookOpen,
+ AlertTriangle,
+ Zap,
+ FileText,
+ GitBranch,
+} from "lucide-react";
+import { PracticeFromDataset } from "../../../components/lessons/LessonShell";
+import {
+ BOUNDARIES_EASY,
+ BOUNDARIES_MEDIUM,
+} from "../../../data/rw/boundaries";
+import ClauseBreakdownWidget, {
+ type ClauseExample,
+} from "../../../components/lessons/ClauseBreakdownWidget";
+import DecisionTreeWidget, {
+ type TreeScenario,
+ type TreeNode,
+} from "../../../components/lessons/DecisionTreeWidget";
+import RevealCardGrid, {
+ type RevealCard,
+} from "../../../components/lessons/RevealCardGrid";
+import useScrollReveal from "../../../components/lessons/useScrollReveal";
+
+interface LessonProps {
+ onFinish?: () => void;
+}
+
+/* ── Data for RevealCardGrid widgets ── */
+const FRAGMENT_TYPES: RevealCard[] = [
+ {
+ label: "Missing Subject",
+ sublabel: '"Collected data for three years."',
+ content: 'Add a subject: "She collected data…"',
+ },
+ {
+ label: "Missing Verb",
+ sublabel: '"The team of researchers in the lab."',
+ content: 'Add a verb: "The team…worked in the lab."',
+ },
+ {
+ label: "-ING Fragment",
+ sublabel: '"Running the experiment."',
+ content:
+ '-ING words are never the main verb alone. Add "was" or a full subject+verb.',
+ },
+ {
+ label: "Subordinate Clause Alone",
+ sublabel: '"Although the results were promising."',
+ content: 'Remove "although," or attach to a main clause.',
+ },
+ {
+ label: "Relative Clause Alone",
+ sublabel: '"Which confirmed the hypothesis."',
+ content: "Attach to the noun it modifies.",
+ },
+];
+
+const CLAUSE_EXAMPLES: ClauseExample[] = [
+ {
+ title: "Legal — Period / Semicolon",
+ segments: [
+ {
+ text: "The experiment failed",
+ type: "ic",
+ label: "Independent Clause",
+ },
+ { text: ";", type: "punct" },
+ {
+ text: " the researchers revised their hypothesis",
+ type: "ic",
+ label: "Independent Clause",
+ },
+ { text: ".", type: "punct" },
+ ],
+ },
+ {
+ title: "Legal — Comma + FANBOYS",
+ segments: [
+ {
+ text: "The evidence was strong",
+ type: "ic",
+ label: "Independent Clause",
+ },
+ { text: ",", type: "punct" },
+ { text: " but", type: "conjunction", label: "FANBOYS Conjunction" },
+ {
+ text: " the committee was skeptical",
+ type: "ic",
+ label: "Independent Clause",
+ },
+ { text: ".", type: "punct" },
+ ],
+ },
+ {
+ title: "Legal — Colon / Single Dash",
+ segments: [
+ {
+ text: "There was only one solution",
+ type: "ic",
+ label: "Independent Clause (required before colon)",
+ },
+ { text: ":", type: "punct" },
+ {
+ text: " abandon the project entirely",
+ type: "modifier",
+ label: "Explanation / List",
+ },
+ { text: ".", type: "punct" },
+ ],
+ },
+ {
+ title: "Legal — Subordinating Conjunction",
+ segments: [
+ {
+ text: "Although the evidence was strong",
+ type: "modifier",
+ label: "Dependent Clause",
+ },
+ { text: ",", type: "punct" },
+ {
+ text: " the committee remained skeptical",
+ type: "ic",
+ label: "Main Clause",
+ },
+ { text: ".", type: "punct" },
+ ],
+ },
+ {
+ title: "No Comma — FANBOYS joins a phrase (not two ICs)",
+ segments: [
+ {
+ text: "The researcher collected data",
+ type: "ic",
+ label: "Independent Clause",
+ },
+ {
+ text: " and",
+ type: "conjunction",
+ label: "FANBOYS — no comma (phrase follows)",
+ },
+ {
+ text: " analyzed results",
+ type: "modifier",
+ label: "Verb Phrase (no subject = not IC)",
+ },
+ { text: ".", type: "punct" },
+ ],
+ },
+];
+
+const TRANSITION_SUBTREE: TreeNode = {
+ id: "transition-check",
+ question:
+ "Is the connector a TRANSITION word (however, therefore, moreover, furthermore, consequently)?",
+ hint: "Transitions are NOT conjunctions. They cannot join two sentences on their own — they need a semicolon before them.",
+ yesLabel: "Yes — there is a transition word",
+ noLabel: "No — no transition word",
+ yes: {
+ id: "transition-fix",
+ question: "",
+ result:
+ "✓ Use a SEMICOLON before the transition: [IC]; however, [IC]. A comma before a transition creates a comma splice.",
+ resultType: "correct",
+ ruleRef: "[IC]; however, / therefore, / moreover, [IC]",
+ },
+ no: {
+ id: "no-transition",
+ question: "",
+ result:
+ "✓ Use a PERIOD or SEMICOLON to separate the two complete sentences.",
+ resultType: "correct",
+ ruleRef: "[IC]. [IC] or [IC]; [IC]",
+ },
+};
+
+const BOUNDARY_TREE: TreeNode = {
+ id: "root",
+ question:
+ "Is there a FANBOYS conjunction (for, and, nor, but, or, yet, so) between the two clauses?",
+ hint: "FANBOYS = For · And · Nor · But · Or · Yet · So. These 7 words can join independent clauses when preceded by a comma.",
+ yesLabel: "Yes — there is a FANBOYS conjunction",
+ noLabel: "No FANBOYS conjunction",
+ yes: {
+ id: "fanboys-check",
+ question:
+ "Can BOTH sides of the conjunction stand alone as complete sentences?",
+ hint: "Cover each side. Does each have its own subject and verb and express a complete thought?",
+ yesLabel: "Yes — both sides are complete sentences",
+ noLabel: "No — one side is a phrase or fragment",
+ yes: {
+ id: "fanboys-both-ic",
+ question: "",
+ result:
+ "✓ Use a COMMA before the FANBOYS conjunction: [IC], [FANBOYS] [IC].",
+ resultType: "correct",
+ ruleRef: "[Independent Clause], [FANBOYS] [Independent Clause]",
+ },
+ no: {
+ id: "fanboys-one-fragment",
+ question: "",
+ result:
+ "✗ No comma needed. The conjunction joins a clause to a phrase, not two full sentences.",
+ resultType: "info",
+ ruleRef: "[IC] [FANBOYS] [phrase] — no comma before conjunction",
+ },
+ },
+ no: {
+ id: "no-fanboys",
+ question:
+ "Is there a SUBORDINATING CONJUNCTION (because, although, since, when, while, if, unless, after, before)?",
+ hint: "Subordinating conjunctions make one clause dependent — this prevents a run-on without needing FANBOYS.",
+ yesLabel: "Yes — there is a subordinating conjunction",
+ noLabel: "No — no subordinating conjunction",
+ yes: {
+ id: "sub-conj",
+ question: "Does the dependent clause come BEFORE the main clause?",
+ hint: "If the dependent clause opens the sentence, a comma separates it from the main clause.",
+ yesLabel: "Yes — dependent clause comes first",
+ noLabel: "No — main clause comes first",
+ yes: {
+ id: "sub-first",
+ question: "",
+ result:
+ "✓ Use a COMMA after the dependent clause: [Subordinate clause], [Main clause].",
+ resultType: "correct",
+ ruleRef: "[Although/Because/When...], [Main clause]",
+ },
+ no: {
+ id: "sub-last",
+ question: "",
+ result:
+ "✓ No comma needed when the main clause comes first: [Main clause] [subordinate clause].",
+ resultType: "info",
+ ruleRef: "[Main clause] [because/although/when...]",
+ },
+ },
+ no: TRANSITION_SUBTREE,
+ },
+};
+
+const TREE_SCENARIOS: TreeScenario[] = [
+ {
+ label: "Sentence 1",
+ sentence:
+ "The data was collected over three years, the researchers published their findings.",
+ tree: BOUNDARY_TREE,
+ },
+ {
+ label: "Sentence 2",
+ sentence:
+ "The findings were unexpected however the team stood by their methodology.",
+ tree: BOUNDARY_TREE,
+ },
+ {
+ label: "Sentence 3",
+ sentence:
+ "Although the sample size was small the results were statistically significant.",
+ tree: BOUNDARY_TREE,
+ },
+];
+
+const EBRWBoundariesLesson: React.FC
= ({ onFinish }) => {
+ const [activeSection, setActiveSection] = useState(0);
+ const sectionsRef = useRef<(HTMLElement | null)[]>([]);
+
+ useEffect(() => {
+ const observers: IntersectionObserver[] = [];
+ sectionsRef.current.forEach((el, idx) => {
+ if (!el) return;
+ const obs = new IntersectionObserver(
+ ([entry]) => {
+ if (entry.isIntersecting) setActiveSection(idx);
+ },
+ { threshold: 0.3 },
+ );
+ obs.observe(el);
+ observers.push(obs);
+ });
+ return () => observers.forEach((o) => o.disconnect());
+ }, []);
+
+ useScrollReveal();
+
+ const scrollToSection = (index: number) => {
+ setActiveSection(index);
+ sectionsRef.current[index]?.scrollIntoView({ behavior: "smooth" });
+ };
+
+ const SectionMarker = ({
+ index,
+ title,
+ icon: Icon,
+ }: {
+ index: number;
+ title: string;
+ icon: React.ElementType;
+ }) => {
+ const isActive = activeSection === index;
+ const isPast = activeSection > index;
+ return (
+
+ );
+ };
+
+ return (
+
+
+
+
+ {/* ── Section 0: What Is a Sentence? ── */}
+
{
+ sectionsRef.current[0] = el;
+ }}
+ className="min-h-screen flex flex-col justify-center mb-24 pt-20 lg:pt-0"
+ >
+
+ Standard English Conventions — Domain 3
+
+
+ Boundaries
+
+
+ Every boundary question is really a sentence question: can you tell
+ where one sentence ends and another begins?
+
+
+ {/* §7.1 What Makes a Sentence */}
+
+
+ What Makes a Complete Sentence?
+
+
+ A sentence (independent clause) requires all three elements. If
+ any is missing, the group of words is a{" "}
+ fragment.
+
+
+ {[
+ { req: "A Subject", ex: "The researcher" },
+ { req: "A Verb", ex: "collected" },
+ { req: "A Complete Thought", ex: "(no dangling subordinator)" },
+ ].map((r) => (
+
+ ))}
+
+
+ Fragment Types — tap to reveal how to fix each:
+
+
+
+
+ Critical Warning: -ING Words Are Never the Main Verb
+
+
+ A word ending in -ing can
+ never be the main verb of a sentence by itself. It always needs
+ a helping verb (is, was, are, were) or it functions as a
+ modifier.
+
+
+ -
+ ✗ "The scientist discovering a new compound."
+ — fragment, no main verb
+
+ -
+ ✓ "The scientist was discovering a new
+ compound." — complete, "was" is the main verb
+
+ -
+ ✓ "Discovering a new compound, the scientist
+ published immediately." — modifier, "published" is the main
+ verb
+
+
+
+
+
+ Meaning ≠ Sentence Status
+
+
+ A group of words can sound complete and meaningful but still be
+ a fragment. Test it grammatically, not by how it sounds.{" "}
+ "The data that confirmed the hypothesis" sounds fine
+ but is a fragment — no verb applies to "the data."
+
+
+
+
+ {/* Group Pronouns */}
+
+
+ Group Pronouns: Who vs. That
+
+
+
+
+ WHO — for people
+
+
+ Introduces a clause modifying a person or group of people.
+
+
+ ✓ "The researchers who studied the data…"
+
+
+
+
+ THAT — for things
+
+
+ Introduces a clause modifying a thing, idea, or place.
+
+
+ ✓ "The study that confirmed the data…"
+
+
+
+
+
+ {/* The Four Sentence Types */}
+
+
+ The Four Sentence Types
+
+
+ Understanding these types helps you identify where boundaries
+ belong.
+
+
+ {[
+ {
+ name: "Simple",
+ desc: "One independent clause.",
+ ex: '"The researcher collected data."',
+ },
+ {
+ name: "Compound",
+ desc: "Two independent clauses joined by a comma + FANBOYS or semicolon.",
+ ex: '"The data was clear, but the committee disagreed."',
+ },
+ {
+ name: "Complex",
+ desc: "One independent + one dependent clause.",
+ ex: '"Although the data was clear, the committee disagreed."',
+ },
+ {
+ name: "Compound-Complex",
+ desc: "Two independent clauses + at least one dependent.",
+ ex: '"Although the data was clear, the lead researcher presented it, and the committee reconsidered."',
+ },
+ ].map((s) => (
+
+
+ {s.name}
+
+
{s.desc}
+
{s.ex}
+
+ ))}
+
+
+
+
+ {/* ── Section 1: Three Legal Separators ── */}
+
{
+ sectionsRef.current[1] = el;
+ }}
+ className="min-h-screen flex flex-col justify-center mb-24"
+ >
+
+ The Three Legal Separators
+
+
+ There are exactly three legal ways to separate two independent
+ clauses. Anything else is an error.
+
+
+ {/* Rule 1 */}
+
+
+
+ 1
+
+
+ Period = Semicolon
+
+
+
+ A semicolon works{" "}
+ exactly like a period — it
+ separates two complete independent clauses. They are
+ interchangeable for boundary purposes.
+
+
+
+ ✓{" "}
+
+ The experiment failed. The researchers revised their
+ hypothesis.
+
+
+
+ ✓{" "}
+
+ The experiment failed; the
+ researchers revised their hypothesis.
+
+
+
+ Critical: never use a semicolon after a comma (,;) and never
+ before a FANBOYS conjunction.
+
+
+
+
+ {/* Rule 2 */}
+
+
+
+ 2
+
+
+ Comma + FANBOYS
+
+
+
+ FANBOYS = For · And · Nor · But
+ · Or · Yet · So. The comma comes{" "}
+ before the conjunction — never
+ after.
+
+
+
+ Critical Rule: Only use a comma when BOTH sides are independent
+ clauses
+
+
+ If FANBOYS joins a clause to a{" "}
+ phrase (no second subject),
+ do NOT use a comma.
+
+
+ -
+ ✗ "She ran to the lab, and collected the samples." —
+ "collected" is a phrase, not an IC
+
+ -
+ ✓ "She ran to the lab and collected the samples." — no comma,
+ FANBOYS joins two verbs
+
+ -
+ ✓ "She ran to the lab, and she collected the samples." —
+ comma, both sides are full ICs
+
+
+
+
+
+ {/* Rule 3 */}
+
+
+
+ 3
+
+
+ Colon = Single Em Dash
+
+
+
+ A colon and a single em dash function identically: the material{" "}
+ before must be a complete
+ independent clause. What follows is an explanation, list, or
+ restatement.
+
+
+
+
+ Legal — IC before colon
+
+
+ "There was only one option: abandon the project."
+
+
+ "She brought three things: a notebook, a pen, and data."
+
+
+
+
+ Illegal — fragment before colon
+
+
+ "The three items she needed: a notebook, a pen, and data."{" "}
+ (no verb before colon)
+
+
+
+
+
Period/Colon Shortcut
+
+ If an answer choice ends a clause with a period or colon, the
+ material before it must be a complete sentence. Use this to
+ immediately eliminate fragment answers.
+
+
+
+
+ {/* §7.5 Subordinating Conjunctions */}
+
+
+ Subordinating Conjunctions
+
+
+ Subordinating conjunctions (because, although, since, when, while,
+ if, unless, after, before, as, once, until) create a dependent
+ clause — solving the run-on without needing FANBOYS.
+
+
+ {[
+ {
+ rule: "Rule 1",
+ label: "Comma after dependent clause (when it comes first)",
+ ex: '"Although the results were surprising, the team continued." → Comma after the subordinate clause.',
+ },
+ {
+ rule: "Rule 2",
+ label:
+ "No comma before subordinate clause (when main clause comes first)",
+ ex: '"The team continued because the results were surprising." → No comma before "because."',
+ },
+ {
+ rule: "Rule 3",
+ label: "Do NOT use two conjunctions together",
+ ex: '"Although X, but Y" is wrong — use only one. Drop either "although" or "but."',
+ },
+ ].map((r) => (
+
+
+ {r.rule}
+
+
+
+ {r.label}
+
+
{r.ex}
+
+
+ ))}
+
+
+
+ Double Conjunction Error (Very Common on SAT)
+
+
+ -
+ ✗ "Although the data was convincing,{" "}
+ but the committee rejected it."
+
+ -
+ ✗ "Because the sample was large,{" "}
+ so the results were significant."
+
+ -
+ ✓ "Although the data was convincing, the committee rejected
+ it." (drop "but")
+
+ -
+ ✓ "The data was convincing, but the committee rejected it."
+ (drop "although")
+
+
+
+
+
+ {/* Clause Anatomy Widget */}
+
+
Clause Anatomy
+
+ Hover over each segment to see its grammatical role and why the
+ boundary is legal.
+
+
+
+
+
+ {/* ── Section 2: Comma Splices & Hidden Traps ── */}
+
{
+ sectionsRef.current[2] = el;
+ }}
+ className="min-h-screen flex flex-col justify-center mb-24"
+ >
+
+ Comma Splices & Hidden Traps
+
+
+ The SAT hides boundary errors behind familiar-looking patterns.
+ Learn to spot all of them.
+
+
+ {/* §7.3 Comma Splice Patterns */}
+
+
+ Comma Splice Trigger Patterns
+
+
+ A comma splice is two independent clauses joined by a comma alone.
+ The SAT uses predictable structures to hide them.
+
+
+
+
+ Pattern 1: Comma + Pronoun
+
+
+ The most common comma splice on the SAT. A pronoun (he, she, it,
+ they, this, that) after a comma usually signals a new
+ independent clause.
+
+
+ -
+ ✗ "The study examined 1,000 participants,{" "}
+ they were all volunteers."
+
+ -
+ ✓ "The study examined 1,000 participants
+ ; they were all volunteers."
+
+ -
+ ✓ "The study examined 1,000 participants,{" "}
+ all of whom were volunteers." (relative
+ clause, not IC)
+
+
+
+
+
+
+ Pattern 2: Comma + Conjunctive Adverb (The Transition Trap)
+
+
+ Words like{" "}
+
+ however, therefore, moreover, furthermore, consequently,
+ nevertheless
+ {" "}
+ are transition adverbs — not conjunctions. They cannot join two
+ clauses with only a comma.
+
+
+ -
+ ✗ "The data was inconclusive, however the
+ team continued." — comma splice
+
+ -
+ ✓ "The data was inconclusive; however, the
+ team continued."
+
+ -
+ ✓ "The data was inconclusive. The team,{" "}
+ however, continued." — mid-sentence position
+
+
+
+
+
+
+ Three Legal Positions for Transition Words
+
+
+ -
+ Start: "[IC]. However,
+ [IC]." — period, then transition at start of new sentence.
+
+ -
+ Middle: "[IC]; however,
+ [IC]." — semicolon before, comma after.
+
+ -
+ Interior: "[IC]. The team,
+ however, continued." — inserted mid-sentence between two
+ commas.
+
+
+
+
+
+
+ Edge Case: Colon or Dash After a Non-Essential Transition
+
+
+ When a transition word is set off as non-essential (between
+ commas), you may see a colon or dash immediately after the
+ closing comma. This is legal because the colon/dash follows the
+ full independent clause, not the transition itself.
+
+
+ ✓ "The data, however, pointed to one conclusion: the hypothesis
+ was wrong."
+
+
+ The colon follows the IC "The data...pointed to one conclusion"
+ — the transition "however" is just a parenthetical insert.
+
+
+
+
+ {/* §7.4 Hidden Boundary Phrases */}
+
+
+ Hidden Boundary Phrases
+
+
+ These three constructions appear innocent but create boundary
+ problems if not punctuated correctly.
+
+
+ {[
+ {
+ type: "Participial Phrase (-ing modifier)",
+ rule: "An -ing phrase at the start of a sentence modifies the subject of the main clause. Separate it with a comma.",
+ bad: '"Running the experiment the researcher observed unexpected results."',
+ good: '"Running the experiment, the researcher observed unexpected results."',
+ note: 'The -ing phrase is NOT a main verb — "observed" is the main verb.',
+ },
+ {
+ type: "With...-ing Construction",
+ rule: '"With + noun + -ing" is a modifying phrase attached to the main clause with a comma.',
+ bad: '"With data showing a 40% increase scientists declared success."',
+ good: '"With data showing a 40% increase, scientists declared success."',
+ note: 'The entire "with…" phrase is a modifier, not a main clause.',
+ },
+ {
+ type: "Which Clause",
+ rule: 'A "which" clause is non-essential — it needs a comma before it. It modifies the noun immediately preceding it.',
+ bad: '"The result which surprised everyone was published."',
+ good: '"The result, which surprised everyone, was published."',
+ note: '"Which" clauses always get commas. "That" clauses never do.',
+ },
+ ].map((p) => (
+
+
+ {p.type}
+
+
{p.rule}
+
+ -
+ ✗ {p.bad}
+
+ -
+ ✓ {p.good}
+
+ - {p.note}
+
+
+ ))}
+
+
+
+ The "Which-Clause-Does-It-Belong-To" Problem
+
+
+ A "which" clause must immediately follow the noun it modifies.
+ Otherwise it is a misplaced modifier.
+
+
+ -
+ ✗ "The scientist published the paper in the journal,{" "}
+ which was groundbreaking." — was the journal
+ or paper groundbreaking?
+
+ -
+ ✓ "The scientist published the paper, which{" "}
+ was groundbreaking, in the journal."
+
+
+
+
+
+
+
Golden Rule
+
+ A comma alone can NEVER join two independent clauses. Semicolons =
+ periods. Transition words (however, therefore) need a semicolon or
+ period before them — never just a comma. -ING words are never the
+ main verb.
+
+
+
+
+ {/* ── Section 3: Decision Tree Lab ── */}
+
{
+ sectionsRef.current[3] = el;
+ }}
+ className="min-h-screen flex flex-col justify-center mb-24"
+ >
+
+ Decision Tree Lab
+
+
+ Work through the boundary logic step by step to identify errors and
+ apply the correct fix.
+
+
+ {[
+ {
+ label: "Comma Splice",
+ desc: "Two complete sentences joined by a comma alone — the most tested boundary error on the SAT.",
+ },
+ {
+ label: "Run-On Sentence",
+ desc: "Two complete sentences with no punctuation between them at all.",
+ },
+ {
+ label: "Transition Trap",
+ desc: 'Using "however" or "therefore" after only a comma. These words need a semicolon before them.',
+ },
+ ].map((t) => (
+
+ ))}
+
+
+
+
+ {/* ── Section 4: Practice ── */}
+
{
+ sectionsRef.current[4] = el;
+ }}
+ className="min-h-screen flex flex-col justify-center mb-24"
+ >
+
+ Practice Questions
+
+ {BOUNDARIES_EASY.slice(0, 2).map((q) => (
+
+ ))}
+ {BOUNDARIES_MEDIUM.slice(0, 1).map((q) => (
+
+ ))}
+
+
+
+
+
+
+ );
+};
+
+export default EBRWBoundariesLesson;
diff --git a/src/pages/student/lessons/EBRWCentralIdeasLesson.tsx b/src/pages/student/lessons/EBRWCentralIdeasLesson.tsx
new file mode 100644
index 0000000..df84755
--- /dev/null
+++ b/src/pages/student/lessons/EBRWCentralIdeasLesson.tsx
@@ -0,0 +1,773 @@
+import React, { useRef, useState, useEffect } from "react";
+import { Check, BookOpen, Lightbulb, Zap, Target } from "lucide-react";
+import { PracticeFromDataset } from "../../../components/lessons/LessonShell";
+import {
+ CENTRAL_IDEAS_EASY,
+ CENTRAL_IDEAS_MEDIUM,
+} from "../../../data/rw/central-ideas-details";
+import EvidenceHunterWidget, {
+ type EvidenceExercise,
+} from "../../../components/lessons/EvidenceHunterWidget";
+import RevealCardGrid, {
+ type RevealCard,
+} from "../../../components/lessons/RevealCardGrid";
+import useScrollReveal from "../../../components/lessons/useScrollReveal";
+
+interface LessonProps {
+ onFinish?: () => void;
+}
+
+/* ── Data for RevealCardGrid widgets ── */
+const WRONG_ANSWER_TAXONOMY: RevealCard[] = [
+ {
+ label: "Off-topic",
+ sublabel: "Is this noun/idea actually in the lines?",
+ content:
+ "Mentions something never in the passage or unrelated to the topic.",
+ },
+ {
+ label: "Too broad",
+ sublabel: "Does answer scope match passage scope?",
+ content:
+ 'Passage focuses on ONE person but answer says "scientists" or "artists" (plural).',
+ },
+ {
+ label: "Too narrow",
+ sublabel: "Is this the MAIN thing or just one example?",
+ content: "Picks a supporting detail instead of the overall idea.",
+ },
+ {
+ label: "Half-right, half-wrong",
+ sublabel: "Read every word in the answer.",
+ content:
+ "First half matches, second half contains a false or unsupported claim.",
+ },
+ {
+ label: "Could-be-true",
+ sublabel: "Can I point to specific words?",
+ content:
+ "Plausible in the real world, but not stated or implied in the text.",
+ },
+ {
+ label: "Wrong scope for purpose",
+ sublabel: "Focus on what the WHOLE passage does.",
+ content: "Describes what the passage mentions but not its primary goal.",
+ },
+];
+
+const STRUCTURE_PATTERNS: RevealCard[] = [
+ {
+ label: "Old Idea → New Idea",
+ content: "Challenge/revision: most common in science passages",
+ },
+ {
+ label: "Problem → Solution",
+ content: "A challenge is identified, then an approach is described",
+ },
+ {
+ label: "Claim → Supporting Evidence",
+ content: "The main point is stated upfront, followed by examples",
+ },
+ {
+ label: "Description → Implication",
+ content: "A scenario is described, then its significance is analyzed",
+ },
+ {
+ label: "Comparison / Contrast",
+ content: "Two entities or views are presented side by side",
+ },
+];
+
+const EVIDENCE_EXERCISES: EvidenceExercise[] = [
+ {
+ question: "Which sentence states the central idea of this passage?",
+ passage: [
+ "For decades, the standard treatment for depression has been antidepressant medication combined with talk therapy.",
+ "These approaches help many patients, but roughly one-third do not respond to first-line treatments.",
+ "Researchers are now investigating ketamine, an anesthetic, as a rapid-acting antidepressant.",
+ "Unlike traditional medications that take weeks to work, ketamine can reduce depressive symptoms within hours.",
+ "This suggests that the neuroscience of depression is far more complex — and far more treatable — than previously assumed.",
+ ],
+ evidenceIndex: 4,
+ explanation:
+ 'Sentence 5 is the "So What" — it draws a broader conclusion about what ketamine research implies about depression science. It\'s the central idea because it states what the author wants us to take away from all the preceding information.',
+ },
+ {
+ question:
+ "Which sentence best expresses the main point the author wants the reader to understand?",
+ passage: [
+ "Ancient Rome is often praised for its engineering feats: aqueducts, roads, and amphitheaters.",
+ "These structures have survived millennia and continue to function in some cases today.",
+ "Less celebrated is Rome's sophisticated financial system, which included credit, interest-bearing loans, and transferable debt.",
+ "Roman bankers financed trade across the Mediterranean, enabling commerce that would otherwise have been impossible.",
+ "The financial innovations of Rome were as consequential as its physical ones, yet history has largely ignored them.",
+ ],
+ evidenceIndex: 4,
+ explanation:
+ 'Sentence 5 is the thesis — the author\'s main argument that Roman financial innovation was equally important to physical engineering. The word "yet" signals this is the key contrast and the point the author most wants to make.',
+ },
+];
+
+const EBRWCentralIdeasLesson: React.FC = ({ onFinish }) => {
+ const [activeSection, setActiveSection] = useState(0);
+ const sectionsRef = useRef<(HTMLElement | null)[]>([]);
+
+ useEffect(() => {
+ const observers: IntersectionObserver[] = [];
+ sectionsRef.current.forEach((el, idx) => {
+ if (!el) return;
+ const obs = new IntersectionObserver(
+ ([entry]) => {
+ if (entry.isIntersecting) setActiveSection(idx);
+ },
+ { threshold: 0.3 },
+ );
+ obs.observe(el);
+ observers.push(obs);
+ });
+ return () => observers.forEach((o) => o.disconnect());
+ }, []);
+
+ useScrollReveal();
+
+ const scrollToSection = (index: number) => {
+ setActiveSection(index);
+ sectionsRef.current[index]?.scrollIntoView({ behavior: "smooth" });
+ };
+
+ const SectionMarker = ({
+ index,
+ title,
+ icon: Icon,
+ }: {
+ index: number;
+ title: string;
+ icon: React.ElementType;
+ }) => {
+ const isActive = activeSection === index;
+ const isPast = activeSection > index;
+ return (
+
+ );
+ };
+
+ return (
+
+
+
+
+ {/* Section 0 — Topic & Main Point */}
+
{
+ sectionsRef.current[0] = el;
+ }}
+ className="min-h-screen flex flex-col justify-center mb-24 pt-20 lg:pt-0"
+ >
+
+ Information & Ideas — Domain 2
+
+
+ Central Ideas & Details
+
+
+ Identify the main point, central claim, and overall structure — and
+ eliminate every wrong answer type.
+
+
+ {/* 4A — Identifying the Topic */}
+
+
+ Identifying the Topic
+
+
+ The topic is the person, thing, or idea that is the primary
+ subject of the passage. Correct answers to main idea questions
+ must reference the topic — wrong answers often shift to a related
+ but different subject.
+
+
+
+
+ Key Principles
+
+
+ -
+ • The topic appears in sentence 1–2 in nearly every SAT
+ passage.
+
+ -
+ • A topic is NOT the same as the theme. Topic = subject;
+ Theme = abstract lesson.
+
+ -
+ • Recognize restatements: a computer → "the machine," "the
+ invention," "the technology."
+
+ -
+ • The topic word usually recurs throughout — by name or via
+ pronoun/compression noun.
+
+ -
+ • Off-topic answers are wrong even if every other word
+ matches the passage.
+
+
+
+
+
+ Common Mistakes
+
+
+ -
+ • Naming a category instead of the specific topic (e.g.,
+ "Japanese art" instead of "Otagaki Rengetsu's art").
+
+ -
+ • Confusing a supporting detail mentioned in one sentence
+ for the main topic.
+
+ -
+ • Missing pronoun shifts: "it" may change referent
+ mid-passage.
+
+ -
+ • Selecting an answer that is too broad in scope — the
+ passage discusses ONE scientist, not all scientists.
+
+
+
+
+
+
+ {/* 4B — Main Point Formula */}
+
+
+ The Main Point Formula
+
+
+ The main point answers the question: "So what?" It is the primary
+ argument the author wants to convey — not just a description of
+ what was discussed.
+
+
+
+ Topic + So What? = Main Point
+
+
+
+ {/* Worked Example — Otagaki Rengetsu */}
+
+
+ Worked Example
+
+
+ "Admired primarily for her exquisite calligraphy,{" "}
+
+ Otagaki Rengetsu
+ {" "}
+ (1791–1875) was among Japan's most celebrated artists. She was
+ also a writer and ceramicist, often inscribing{" "}
+ her poems{" "}
+ in{" "}
+
+ her own calligraphy
+ {" "}
+ onto clay vessels —{" "}
+
+ a distinctive blending of art forms not replicated by any
+ other artist in Japanese history
+
+ .{" "}
+ Her work{" "}
+ was in such great demand during the nineteenth century that
+ every household in Kyoto was said to own{" "}
+
+ her pottery
+
+ , and today{" "}
+
+ scrolls and ceramics
+ {" "}
+ bearing{" "}
+
+ her calligraphy
+ {" "}
+ are sought after by collectors."
+
+
+
+
+ Topic
+
+
+ Otagaki Rengetsu's art
+
+
+
+
+ So What?
+
+
+ Unique, unreplicated qualities
+
+
+
+
+ Main Point
+
+
+ Her artistic creations are prized for their unique qualities
+
+
+
+
+
+
+ Notice the topic tracking:
+ {" "}
+ The topic "Otagaki Rengetsu's art" is introduced in sentence 1
+ and then restated in other words throughout —{" "}
+
+ her poems, her own calligraphy, her work, her pottery,
+ scrolls and ceramics, her calligraphy
+
+ . The topic word recurs by name or via pronoun/compression
+ noun. Every correct answer must reference this specific topic,
+ not a broader category like "Japanese art."
+
+
+
+
+
+ Key locations where the main point is typically found:
+
+
+ -
+ •{" "}
+ First or first two sentences{" "}
+ — most common.
+
+ -
+ • Last sentence — especially
+ when the passage confirms or reasserts the opening claim.
+
+ -
+ • After a major transition{" "}
+ such as however, but, in fact, therefore — the "new idea" is
+ often the real main point.
+
+ -
+ •{" "}
+
+ After a dash, colon, or italicized word
+ {" "}
+ — these signal that something important follows.
+
+
+
+
+ {/* Fiction & Poetry */}
+
+
+ Fiction & Poetry: Special Cases
+
+
+
+
+ Fiction Passages
+
+
+ -
+ • Focus on who the character is and what quality or feeling
+ the passage emphasizes.
+
+ -
+ • Key information often appears at the end (a quoted line of
+ dialogue, a narrator's summary, or a character's
+ reflection).
+
+ -
+ • DO NOT read in symbolism or broader themes beyond what the
+ text literally states.
+
+ -
+ • Wrong answers often import an emotion or quality from
+ outside the text, or conflate a detail with the main idea.
+
+ -
+ Example: Amy Tan passage about ink-making → main point =
+ characters take great pride in their generational ink-making
+ tradition. NOT "the importance of family" (too abstract).
+
+
+
+
+
+ Poetry Passages
+
+
+ -
+ • Read the poem literally first — what is the speaker
+ literally saying?
+
+ -
+ • Identify the speaker's attitude (positive, negative,
+ ambivalent) — this almost always determines the main point.
+
+ -
+ • Look at the last stanza or final couplet for the poem's
+ culminating idea.
+
+ -
+ • Avoid symbolic overreach: "the winter represents death" is
+ interpretation, not literal reading.
+
+ -
+ • Process of elimination is very powerful: eliminate any
+ answer that is either negative when the poem is positive, or
+ that mentions something never stated.
+
+
+
+
+
+
+ {/* 4F — Primary Purpose vs. Main Point */}
+
+
+ Primary Purpose vs. Main Point
+
+
+
+
+
+ |
+ Main Point |
+ Primary Purpose |
+
+
+
+ {[
+ [
+ "Question asked",
+ "What does the author claim?",
+ "Why did the author write this?",
+ ],
+ [
+ "Answer uses",
+ 'Specific nouns, claims, findings ("dark matter cannot be seen but must exist")',
+ "Function verbs: describe, argue, challenge, illustrate, explain, contrast, suggest",
+ ],
+ [
+ "Example",
+ '"Octavia Butler resisted being identified exclusively with science fiction."',
+ '"To present a claim and support it with examples."',
+ ],
+ ].map(([label, mp, pp], i) => (
+
+ |
+ {label}
+ |
+ {mp} |
+ {pp} |
+
+ ))}
+
+
+
+
+
+ {/* Wrong Answer Taxonomy */}
+
+
+ Wrong Answer Taxonomy — tap to reveal each trap:
+
+
+
+
+
+ {/* Section 1 — Old/New & Structure */}
+
{
+ sectionsRef.current[1] = el;
+ }}
+ className="min-h-screen flex flex-col justify-center mb-24"
+ >
+
+ Old/New & Structure
+
+
+ The most important structural pattern on the SAT — and how to
+ describe overall passage organization.
+
+
+ {/* 4C — Old/New */}
+
+
+ Old Idea vs. New Idea Structure
+
+
+ The Old/New template is one of the most important patterns in SAT
+ science and social science passages. Authors present a
+ traditionally held view (old idea), then pivot to a new or
+ contradictory finding.
+
+
+
+
+ Old Idea Signal Phrases
+
+
+ - • "Some/many/most scientists believe..."
+ - • "It is commonly thought that..."
+ - • "Accepted/conventional wisdom holds..."
+ - • "For decades, researchers thought..."
+ - • "Traditionally, it was believed..."
+
+
+ → These phrases signal a view the author DISAGREES with.
+
+
+
+
+ New Idea Signal Phrases
+
+
+ - • "However, but in fact..."
+ - • "Actually, in reality..."
+ - • "But is it really true that...?"
+ - • "It now seems / researchers now think..."
+ - • "Recently, it has been found that..."
+ - • "New research/evidence shows..."
+
+
+ → These phrases signal the view the author AGREES with.
+
+
+
+
+
STRATEGY
+
+ As you read, jot on scratch paper: Old = [3-word summary] | New
+ = [3-word summary]. The main point is almost always the NEW
+ idea. If you identify the old idea, you can predict the new idea
+ before reading it.
+
+
+
+
+ {/* 4G — Overall Structure */}
+
+
+ Overall Structure of a Text — tap to reveal each pattern:
+
+
+ Structure questions ask how a passage is organized. Identify the
+ move from one idea to another — not just what is said, but in what
+ sequence and for what purpose.
+
+
+
+
+ STRATEGY for structure questions
+
+
+ Focus on the first and last sentence. The first usually
+ introduces the main move; the last usually shows where the
+ passage ended up. Then check the answer choices for the option
+ that correctly names both ends.
+
+
+
+
+
+ {/* Section 2 — Pronouns & Compression Nouns */}
+
{
+ sectionsRef.current[2] = el;
+ }}
+ className="min-h-screen flex flex-col justify-center mb-24"
+ >
+
+ Pronouns & Compression Nouns
+
+
+ Failure to track these referents is one of the most common
+ comprehension errors on the SAT.
+
+
+ {/* 4H */}
+
+
+ Tracking Pronouns and Compression Nouns
+
+
+ Pronouns (it, they, this, these) and "compression nouns" (this
+ phenomenon, the former, such developments) refer to ideas already
+ stated. Failure to track these referents is one of the most common
+ comprehension errors on the SAT.
+
+
+
+
+ How to Track Pronouns
+
+
+ -
+ • Always back up to the previous sentence (or earlier) to
+ find the referent.
+
+ - • Singular pronouns (it, this) → singular noun.
+ - • Plural pronouns (they, these) → plural noun.
+ -
+ • "The former" → first-mentioned item; "the latter" →
+ second-mentioned item.
+
+ -
+ • Do NOT start reading at the pronoun; always work backwards
+ first.
+
+
+
+
+
+ Compression Noun Examples
+
+
+ -
+ • "This enhanced convenience" → refers to several sentences
+ of prior description.
+
+ -
+ • "This divergence" → refers to genetic differences between
+ dolphin species.
+
+ -
+ • "Such developments" → refers to a process described in the
+ prior paragraph.
+
+ -
+ • "This phenomenon" → compresses a multi-sentence
+ explanation into one noun.
+
+ -
+ • The referent may be 3–5 lines BEFORE the compression noun.
+
+
+
+
+
+
+
+
Golden Rule
+
+ The main point is NOT the first sentence — it is the "So What"
+ conclusion. Read the whole passage, then ask: "If I had to explain
+ in one sentence what the author WANTS me to believe, what would I
+ say?" That sentence is the main point. For Old/New passages: the
+ NEW idea is almost always the main point.
+
+
+
+
+ {/* Section 3 — Main Point Hunter widget */}
+
{
+ sectionsRef.current[3] = el;
+ }}
+ className="min-h-screen flex flex-col justify-center mb-24"
+ >
+
+ Main Point Hunter
+
+
+ Find the sentence that states the central idea — the "So What"
+ conclusion.
+
+
+
+
+ {/* Section 4 — Practice */}
+
{
+ sectionsRef.current[4] = el;
+ }}
+ className="min-h-screen flex flex-col justify-center mb-24"
+ >
+
+ Practice Questions
+
+ {CENTRAL_IDEAS_EASY.slice(0, 2).map((q) => (
+
+ ))}
+ {CENTRAL_IDEAS_MEDIUM.slice(0, 1).map((q) => (
+
+ ))}
+
+
+
+
+
+
+ );
+};
+
+export default EBRWCentralIdeasLesson;
diff --git a/src/pages/student/lessons/EBRWCommandEvidenceLesson.tsx b/src/pages/student/lessons/EBRWCommandEvidenceLesson.tsx
new file mode 100644
index 0000000..ab638a8
--- /dev/null
+++ b/src/pages/student/lessons/EBRWCommandEvidenceLesson.tsx
@@ -0,0 +1,624 @@
+import React, { useRef, useState, useEffect } from "react";
+import { Check, BookOpen, BarChart3, Zap, Target } from "lucide-react";
+import { PracticeFromDataset } from "../../../components/lessons/LessonShell";
+import {
+ COMMAND_EVIDENCE_EASY,
+ COMMAND_EVIDENCE_MEDIUM,
+} from "../../../data/rw/command-of-evidence";
+import EvidenceHunterWidget, {
+ type EvidenceExercise,
+} from "../../../components/lessons/EvidenceHunterWidget";
+import RevealCardGrid, {
+ type RevealCard,
+} from "../../../components/lessons/RevealCardGrid";
+import useScrollReveal from "../../../components/lessons/useScrollReveal";
+
+interface LessonProps {
+ onFinish?: () => void;
+}
+
+/* ── Data for RevealCardGrid widgets ── */
+const ILLUSTRATION_TRAPS: RevealCard[] = [
+ {
+ label: "Wrong speaker",
+ content:
+ "The quotation features the correct idea but from a different character.",
+ },
+ {
+ label: "Right topic, wrong direction",
+ content:
+ "The quotation mentions the topic but doesn't illustrate the specific claim.",
+ },
+ {
+ label: "Too indirect",
+ content:
+ "The connection between quotation and claim requires too much inferential leaping.",
+ },
+ {
+ label: "Question marks",
+ content: 'A rhetorical question often cannot "illustrate" a direct claim.',
+ },
+];
+
+const VALIDITY_TYPES: RevealCard[] = [
+ {
+ label: "Valid / Necessary",
+ sublabel: "CORRECT on SAT",
+ content:
+ "Must be true given the evidence; the only logical conclusion. Example: If 14% are supershear events → 86% are not.",
+ },
+ {
+ label: "Possible / Speculative",
+ sublabel: "WRONG on SAT",
+ content:
+ 'Might be true but the evidence doesn\'t require it. Example: "Researchers must want more funding" — not stated.',
+ },
+ {
+ label: "Contradicted",
+ sublabel: "WRONG on SAT",
+ content:
+ 'Directly conflicts with information stated in the passage. Example: "Exercise improves fitness equally for all" — passage says otherwise.',
+ },
+ {
+ label: "Off-topic",
+ sublabel: "WRONG on SAT",
+ content:
+ "No logical connection to the claim or evidence. Example: Ocean temperature claim when passage is about land volcanoes.",
+ },
+];
+
+const QUANT_WRONG_ANSWERS: RevealCard[] = [
+ {
+ label: "Wrong subgroup / time period",
+ content: "Accurate data about the WRONG subgroup or time period.",
+ },
+ {
+ label: "Wrong direction",
+ content:
+ "Accurate comparison in the WRONG direction (A > B when claim needs B > A).",
+ },
+ {
+ label: "Wrong number of groups",
+ content: "Involves TWO groups when the claim is about ONE group only.",
+ },
+ {
+ label: "Contradictory trend",
+ content:
+ "Describes a trend that contradicts the claim despite accurate numbers.",
+ },
+ {
+ label: "Right data, wrong claim",
+ content:
+ "Describes the graph accurately but doesn't address the specific claim.",
+ },
+];
+
+const EVIDENCE_EXERCISES: EvidenceExercise[] = [
+ {
+ question:
+ "The researcher concludes that urban green spaces reduce stress. Which sentence from the study best SUPPORTS this conclusion?",
+ passage: [
+ "Participants were randomly assigned to walk for 30 minutes in either an urban park or a busy commercial district.",
+ "Before and after each walk, cortisol levels were measured using saliva samples.",
+ "Participants who walked in the park showed a 15% reduction in cortisol, a primary stress hormone.",
+ "Those who walked in the commercial district showed no significant change in cortisol levels.",
+ "Participants reported feeling calmer after the park walk, though self-report data is inherently subjective.",
+ ],
+ evidenceIndex: 2,
+ explanation:
+ "Sentence 3 provides direct biological evidence (cortisol reduction) that supports the claim about stress reduction. It uses objective measurement rather than self-report, making it the strongest support for the stated conclusion.",
+ },
+ {
+ question:
+ "Which sentence from this passage most effectively ILLUSTRATES the claim that microplastics are now found in unexpected locations?",
+ passage: [
+ "Microplastics are plastic fragments smaller than 5 millimeters.",
+ "They originate from the breakdown of larger plastic items or are manufactured at microscopic size.",
+ "Researchers have detected microplastics in the peak snowpack of Mount Everest.",
+ "Microplastics have also been found in human blood, lung tissue, and placentas.",
+ "The long-term health effects of microplastic exposure are still being studied.",
+ ],
+ evidenceIndex: 2,
+ explanation:
+ "Sentence 3 best illustrates the claim about unexpected locations because Mount Everest is one of the most remote places on Earth — finding microplastics there is a striking, concrete example of how pervasive contamination has become.",
+ },
+];
+
+const EBRWCommandEvidenceLesson: React.FC = ({ onFinish }) => {
+ const [activeSection, setActiveSection] = useState(0);
+ const sectionsRef = useRef<(HTMLElement | null)[]>([]);
+
+ useEffect(() => {
+ const observers: IntersectionObserver[] = [];
+ sectionsRef.current.forEach((el, idx) => {
+ if (!el) return;
+ const obs = new IntersectionObserver(
+ ([entry]) => {
+ if (entry.isIntersecting) setActiveSection(idx);
+ },
+ { threshold: 0.3 },
+ );
+ obs.observe(el);
+ observers.push(obs);
+ });
+ return () => observers.forEach((o) => o.disconnect());
+ }, []);
+
+ useScrollReveal();
+
+ const scrollToSection = (index: number) => {
+ setActiveSection(index);
+ sectionsRef.current[index]?.scrollIntoView({ behavior: "smooth" });
+ };
+
+ const SectionMarker = ({
+ index,
+ title,
+ icon: Icon,
+ }: {
+ index: number;
+ title: string;
+ icon: React.ElementType;
+ }) => {
+ const isActive = activeSection === index;
+ const isPast = activeSection > index;
+ return (
+
+ );
+ };
+
+ return (
+
+
+
+
+ {/* Section 0 — Textual Evidence */}
+
{
+ sectionsRef.current[0] = el;
+ }}
+ className="min-h-screen flex flex-col justify-center mb-24 pt-20 lg:pt-0"
+ >
+
+ Information & Ideas — Domain 2
+
+
+ Command of Evidence
+
+
+ Move beyond the passage to apply its ideas. Two subtypes: Textual
+ Evidence (quotations) and Quantitative Evidence (graphs and tables).
+
+
+
+
+ Overview: Command
+ of Evidence questions ask you to move BEYOND the passage to apply
+ its ideas. You will identify quotations or data that illustrate,
+ support, or undermine a specific claim. There are two main
+ subtypes: Textual Evidence (using quotations or passages) and
+ Quantitative Evidence (using graphs and tables).
+
+
+
+ {/* 5A */}
+
+
+ Illustrating a Claim (Quotation Selection)
+
+
+ These questions ask you to find the quotation from a poem, story,
+ or passage that best illustrates a claim stated in the question
+ stem. The claim is explicitly given to you — your job is to match
+ it to the correct quotation.
+
+
+
+ 3-Step Process for Illustration Questions
+
+
+ {[
+ [
+ "1",
+ "RESTATE the claim in the question stem in your own words. Identify the exact quality or action it describes.",
+ ],
+ [
+ "2",
+ "PREDICT what kind of language would illustrate it — positive/negative tone, specific action, direct statement?",
+ ],
+ [
+ "3",
+ "ELIMINATE quotations that: (a) are too vague, (b) refer to the wrong speaker, (c) describe a different quality entirely.",
+ ],
+ ].map(([n, text]) => (
+
+ ))}
+
+
+
+ Key traps in illustration questions — tap to reveal:
+
+
+
+
+ {/* 5B */}
+
+
+ Supporting a Claim
+
+
+ Support questions ask: "Which finding would MOST DIRECTLY support
+ this conclusion?" The correct answer must provide new evidence
+ consistent with the claim — it doesn't just repeat what the
+ passage already states.
+
+
+
+
+ What Makes a Valid Support?
+
+
+ -
+ • Provides a NEW example or finding, not a restatement.
+
+ -
+ • Is directly consistent with the specific mechanism
+ described.
+
+ - • Makes the claim MORE likely to be true.
+ -
+ • Common patterns: X causes Y → new example of X causing Y;
+ More X → more Y → find a case where less X → less Y.
+
+
+
+
+
+ What Looks Like Support But Isn't
+
+
+ -
+ • The answer discusses the right topic but a different
+ aspect of it.
+
+ -
+ • The answer is consistent with the general field but not
+ the specific claim.
+
+ -
+ • The answer only restates part of what the passage already
+ said.
+
+ -
+ • The answer is factually true but would also be true
+ regardless of the claim.
+
+
+
+
+
+
+ {/* 5C */}
+
+
+ Undermining a Claim
+
+
+ Undermine questions have the same structure as support questions,
+ but in reverse. The correct answer must provide information that
+ makes the claim LESS likely to be true.
+
+
+
+ KEY TECHNIQUE — Flip the Claim
+
+
+ If the claim is "high metabolic rate = survival advantage," then
+ to undermine it you need evidence that high metabolic rate does
+ NOT produce survival advantage (e.g., many high-metabolic
+ creatures went extinct).
+
+
+
+ Common undermine traps:
+
+ {[
+ "The answer is unrelated to the claim rather than contradictory to it — an unrelated finding doesn't undermine anything.",
+ "The answer challenges a secondary detail, not the core mechanism being tested.",
+ "The answer actually supports the claim but is framed in negative-sounding language.",
+ ].map((trap, i) => (
+
+ ))}
+
+
+ {/* 5D */}
+
+
+ Validity of Conclusions — tap to reveal each type:
+
+
+ Some questions ask whether a finding is valid — whether it
+ necessarily follows from the research described.
+
+
+
+
+
+
Golden Rule — Textual Evidence
+
+ The question always tells you the required relationship
+ (illustrate / support / undermine). An answer that accurately
+ quotes the passage but has the WRONG relationship is still wrong.
+ Identify the relationship first, accuracy second.
+
+
+
+
+ {/* Section 1 — Quantitative Evidence */}
+
{
+ sectionsRef.current[1] = el;
+ }}
+ className="min-h-screen flex flex-col justify-center mb-24"
+ >
+
+ Quantitative Evidence
+
+
+ Graphs and tables — the mandatory order of operations and criteria
+ matching technique.
+
+
+ {/* 5E */}
+
+
+ Non-Negotiable Order of Operations
+
+
+ The most important principle:{" "}
+ the graphic alone is never sufficient. You must
+ begin with the passage and the question to know what to look for
+ in the graphic.
+
+
+
+ MANDATORY Order for Graph Questions
+
+
+ {[
+ [
+ "1",
+ "Read the PASSAGE (especially the last sentence — this states the claim).",
+ ],
+ [
+ "2",
+ "Read the QUESTION STEM carefully to identify exactly what you are being asked.",
+ ],
+ [
+ "3",
+ "Extract the CRITERIA from the claim: what specific conditions must be met?",
+ ],
+ [
+ "4",
+ "THEN look at the GRAPHIC with those criteria in mind.",
+ ],
+ [
+ "5",
+ "Match the answer that satisfies ALL criteria — not just part of them.",
+ ],
+ ].map(([n, text]) => (
+
+ ))}
+
+
+
+
+ CRITICAL WARNING
+
+
+ Looking at the graph first is one of the most costly errors on
+ graph questions. Multiple answer choices will accurately
+ describe the graph — only ONE will match the specific claim in
+ the passage. The graphic alone cannot tell you which one is
+ correct.
+
+
+
+
+ {/* 5F */}
+
+
+ When You Do NOT Need the Graph
+
+
+ Many graph questions can be answered using only the passage and
+ the answer choices — without looking at the graph at all.
+
+
+ -
+ •If
+ answer choices contain wording clearly inconsistent with the
+ passage's claim, eliminate them immediately.
+
+ -
+ •
+ Answers addressing the wrong aspect of the claim (wrong time
+ period, wrong variable, wrong group) can be eliminated before
+ consulting the graph.
+
+ -
+ •Once
+ only one answer remains that is consistent with the claim, that
+ is correct — verifying against the graph is optional.
+
+
+
+
EXAMPLE
+
+ Passage claims "print books are preferred in certain
+ situations." Any answer describing a situation where e-books are
+ preferred can be immediately eliminated — without looking at the
+ chart.
+
+
+
+
+ {/* 5G */}
+
+
+ Criteria Matching for Quantitative Questions
+
+
+ The most common error: choosing an answer that accurately
+ describes the graph but fails to match ALL criteria specified in
+ the claim. Build a checklist before looking at the data.
+
+
+
+ Building a Criteria Checklist
+
+
+ - • List every specific condition mentioned in the claim.
+ -
+ • Example: "rebounded AND reached highest level in 60 years" =
+ 2 separate criteria.
+
+ -
+ • An answer meeting only Criterion 1 but not Criterion 2 is
+ wrong, even if it accurately describes the graph.
+
+ -
+ • Write criteria on scratch paper before looking at graphic.
+
+
+
+
+ Common Quantitative Wrong Answers — tap to reveal:
+
+
+
+
+
+
+ Golden Rule — Quantitative Evidence
+
+
+ Always read the passage and question first to extract criteria.
+ Multiple answer choices will accurately describe the graph — only
+ ONE matches the specific claim. "Right data, wrong claim aspect"
+ is the most common wrong answer type.
+
+
+
+
+ {/* Section 2 — Evidence Hunter widget */}
+
{
+ sectionsRef.current[2] = el;
+ }}
+ className="min-h-screen flex flex-col justify-center mb-24"
+ >
+
+ Evidence Hunter
+
+
+ Find the sentence that has the exact relationship the question
+ requires.
+
+
+
+
+ {/* Section 3 — Practice */}
+
{
+ sectionsRef.current[3] = el;
+ }}
+ className="min-h-screen flex flex-col justify-center mb-24"
+ >
+
+ Practice Questions
+
+ {COMMAND_EVIDENCE_EASY.slice(0, 2).map((q) => (
+
+ ))}
+ {COMMAND_EVIDENCE_MEDIUM.slice(0, 1).map((q) => (
+
+ ))}
+
+
+
+
+
+
+ );
+};
+
+export default EBRWCommandEvidenceLesson;
diff --git a/src/pages/student/lessons/EBRWCommasLesson.tsx b/src/pages/student/lessons/EBRWCommasLesson.tsx
index 13272d8..19ed13d 100644
--- a/src/pages/student/lessons/EBRWCommasLesson.tsx
+++ b/src/pages/student/lessons/EBRWCommasLesson.tsx
@@ -239,7 +239,7 @@ const EBRWCommasLesson: React.FC = ({ onFinish }) => {
return (
-