5 Unit 1: Planets and Orbits
Is the exoplanet the right distance from its star for liquid water?
Earth & Space Science
HS-ESS1-4 Time: 7–9 Days 🧠 Quiz & Evaluate ↓
6 Engage: The Mystery of Comet Borrelly
6.1 ☄️ Frozen, Then Boiling — Every 6 Years
Comet Borrelly has water that is frozen most of the time, but every several years it shoots out a jet of vaporized water and dust. Why?
The answer has everything to do with orbits. Borrelly’s orbit takes it far from the Sun (where water freezes) and close to the Sun (where water vaporizes). The shape and size of its orbit determines where water can exist in each phase.
This is the same question we need to answer for exoplanets: Does the planet’s orbit keep it at the right temperature for liquid water throughout its entire year?
Code
buildQuiz = function(id, title, questions) {
const outer = html`<div id="${id}" style="margin:18px 0 24px 0;text-align:center;">
<button style="
display:inline-flex;align-items:center;gap:7px;
background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);
color:#fff;border:none;padding:9px 22px;border-radius:50px;
font-size:.95em;font-weight:700;cursor:pointer;
box-shadow:0 3px 12px rgba(102,126,234,.45);
transition:transform .15s,box-shadow .15s;"
onmouseover="this.style.transform='scale(1.04)';this.style.boxShadow='0 5px 18px rgba(102,126,234,.55)'"
onmouseout="this.style.transform='scale(1)';this.style.boxShadow='0 3px 12px rgba(102,126,234,.45)'"
>
<span style="font-size:1.1em;">📝</span> ${title}
<span class="chevron" style="transition:transform .3s;">▼</span>
</button>
<div class="quiz-body" style="
max-height:0;opacity:0;overflow:hidden;
transition:max-height .5s cubic-bezier(.4,0,.2,1),opacity .4s ease,margin-top .3s ease;
margin-top:0;text-align:left;">
<button class="close-btn" style="
display:block;margin:0 auto 10px auto;
background:rgba(102,126,234,.12);color:#667eea;border:none;
padding:5px 18px;border-radius:50px;font-size:.85em;
font-weight:600;cursor:pointer;">Hide Quiz</button>
<p style="text-align:center;color:#718096;font-style:italic;font-size:.9em;margin-bottom:12px;">
Select an answer for each question.</p>
</div>
</div>`;
const toggle = outer.querySelector("button");
const chevron = toggle.querySelector(".chevron");
const body = outer.querySelector(".quiz-body");
const closeBtn = body.querySelector(".close-btn");
function expand(){ body.style.maxHeight="2000px";body.style.opacity="1";body.style.marginTop="14px";chevron.style.transform="rotate(180deg)"; }
function collapse(){ body.style.maxHeight="0";body.style.opacity="0";body.style.marginTop="0";chevron.style.transform="rotate(0)"; }
toggle.onclick = () => body.style.maxHeight === "0px" || body.style.maxHeight === "" ? expand() : collapse();
closeBtn.onclick = collapse;
questions.forEach((qq, qi) => {
const card = document.createElement("div");
card.style.cssText = "background:#fff;border-radius:12px;padding:16px 20px;margin-bottom:14px;box-shadow:0 2px 8px rgba(0,0,0,.08);";
card.innerHTML = `<p style="font-weight:700;margin:0 0 10px;">${qi+1}. ${qq.q}</p>`;
qq.options.forEach((opt, oi) => {
const btn = document.createElement("button");
btn.textContent = opt;
btn.style.cssText = "display:block;width:100%;text-align:left;padding:10px 14px;margin:6px 0;border:2px solid #e2e8f0;border-radius:8px;background:#fff;cursor:pointer;font-size:.95em;transition:border-color .2s,background .2s;";
btn.onmouseover = () => { if(!card.dataset.answered){ btn.style.borderColor="#667eea";btn.style.background="#f0f0ff"; }};
btn.onmouseout = () => { if(!card.dataset.answered){ btn.style.borderColor="#e2e8f0";btn.style.background="#fff"; }};
btn.onclick = () => {
if(card.dataset.answered) return;
card.dataset.answered = "true";
card.querySelectorAll("button").forEach(b => { b.style.cursor="default"; b.onmouseover=null; b.onmouseout=null; });
if(oi === qq.correct){
btn.style.borderColor="#48bb78";btn.style.background="#f0fff4";
fb.innerHTML = "✅ Correct! " + qq.explanation;
fb.style.color="#276749";fb.style.background="#f0fff4";
} else {
btn.style.borderColor="#fc8181";btn.style.background="#fff5f5";
card.querySelectorAll("button")[qq.correct].style.borderColor="#48bb78";
card.querySelectorAll("button")[qq.correct].style.background="#f0fff4";
fb.innerHTML = "❌ " + qq.explanation;
fb.style.color="#9b2c2c";fb.style.background="#fff5f5";
}
fb.style.padding="10px 14px";fb.style.marginTop="8px";
};
card.appendChild(btn);
});
const fb = document.createElement("div");
fb.style.cssText = "border-radius:8px;font-size:.9em;transition:all .3s;";
card.appendChild(fb);
body.appendChild(card);
});
return outer;
}7 Explore 1: Patterns in Solar System Data
7.1 🔬 Kepler’s Third Law — The Mathematical Pattern
When you graph orbital period vs. distance from the Sun for all planets, an elegant pattern emerges.
Code
solarSystem = [
{name: "Mercury", period: 0.241, distance: 0.387, color: "#bdc3c7"},
{name: "Venus", period: 0.615, distance: 0.723, color: "#f39c12"},
{name: "Earth", period: 1.0, distance: 1.0, color: "#2ecc71"},
{name: "Mars", period: 1.881, distance: 1.524, color: "#e74c3c"},
{name: "Jupiter", period: 11.86, distance: 5.203, color: "#e67e22"},
{name: "Saturn", period: 29.46, distance: 9.537, color: "#f1c40f"},
{name: "Uranus", period: 84.01, distance: 19.19, color: "#1abc9c"},
{name: "Neptune", period: 164.8, distance: 30.07, color: "#3498db"},
{name: "Comet Borrelly", period: 6.85, distance: 3.61, color: "#9b59b6"}
]
Plot.plot({
title: "Kepler's Third Law: Period² ∝ Distance³",
subtitle: "The relationship between orbital period and distance from the Sun",
width: 700,
height: 400,
x: {label: "Average Distance from Sun (AU)", type: "log", grid: true},
y: {label: "Orbital Period (years)", type: "log", grid: true},
marks: [
Plot.dot(solarSystem, {
x: "distance",
y: "period",
fill: "color",
r: 8,
stroke: "#333",
strokeWidth: 0.5,
title: d => `${d.name}\nDistance: ${d.distance} AU\nPeriod: ${d.period} yr`
,
tip: true}),
Plot.text(solarSystem, {
x: "distance",
y: "period",
text: "name",
dx: 12,
fontSize: 10,
fontWeight: "bold"
}),
// Kepler's law fit line
Plot.line(
d3.range(0.2, 35, 0.1).map(d => ({x: d, y: Math.pow(d, 1.5),
tip: true})),
{x: "x", y: "y", stroke: "#667eea", strokeWidth: 2, strokeDasharray: "5,5"}
)
]
})7.1.1 💡 Kepler’s Third Law
\[T^2 = a^3\]
Where:
- \(T\) = orbital period (in years)
- \(a\) = semi-major axis / average distance (in AU)
This means: if you know how long a planet takes to orbit its star, you can calculate its distance. This is exactly how we figure out exoplanet orbits — we measure the period and calculate the distance!
Code
buildQuiz("kepler-law-quiz", "📌 Check Your Understanding — Kepler's Third Law", [
{
q: "Mars has an orbital period of 1.881 years and a distance of 1.524 AU. Does Kepler's Third Law (T² = a³) hold? Calculate T² and a³.",
options: ["T² = 3.54, a³ = 3.54 — Yes, they match!", "T² = 1.88, a³ = 1.52 — No, they don't match", "T² = 3.54, a³ = 4.57 — Close but not exact", "T² = 2.0, a³ = 2.0 — Only works for Earth"],
correct: 0,
explanation: "T² = 1.881² = 3.538 and a³ = 1.524³ = 3.540. They match almost perfectly! This elegant relationship holds for every object orbiting the Sun."
},
{
q: "Comet Borrelly has an orbital period of 6.85 years. Using T² = a³, what is its average distance from the Sun?",
options: ["About 2.3 AU", "About 3.6 AU", "About 6.85 AU", "About 46.9 AU"],
correct: 1,
explanation: "T² = 6.85² = 46.9. Then a = ³√46.9 ≈ 3.6 AU. Kepler's Third Law lets us calculate distance from period alone — essential for analyzing exoplanets we can't directly observe."
},
{
q: "Why is Kepler's Third Law especially useful for studying exoplanets?",
options: ["It tells us the planet's mass", "It lets us calculate orbital distance from the period, which we can measure via transit timing", "It determines the planet's atmospheric composition", "It predicts whether the planet has moons"],
correct: 1,
explanation: "For exoplanets, we can measure the orbital period by timing how often the planet transits (crosses in front of) its star. Kepler's Third Law then gives us the distance — and distance determines whether the planet is in the habitable zone."
}
])8 Explain 1: The Habitable Zone
8.1 🧠 The “Goldilocks Zone” — Not Too Hot, Not Too Cold
A planet needs to be at just the right distance from its star for liquid water to exist. Too close → water boils. Too far → water freezes. This narrow band is the habitable zone.
Code
Code
{
const innerHZ = Math.sqrt(starLum / 1.1);
const outerHZ = Math.sqrt(starLum / 0.53);
const maxDist = Math.max(5, outerHZ + 1);
const width = 700;
const height = 300;
const svg = d3.create("svg").attr("width", width).attr("height", height);
svg.append("rect").attr("width", width).attr("height", height).attr("fill", "#0a0a2e").attr("rx", 12);
const scale = (550) / maxDist;
const cx = 80;
const cy = 150;
// Habitable zone
svg.append("rect")
.attr("x", cx + innerHZ * scale).attr("y", 40)
.attr("width", (outerHZ - innerHZ) * scale).attr("height", 220)
.attr("fill", "#2ecc71").attr("opacity", 0.15);
// Too hot zone
svg.append("rect")
.attr("x", cx).attr("y", 40)
.attr("width", innerHZ * scale).attr("height", 220)
.attr("fill", "#e74c3c").attr("opacity", 0.1);
// Labels
svg.append("text").attr("x", cx + innerHZ * scale / 2).attr("y", 30)
.attr("text-anchor", "middle").attr("fill", "#e74c3c").attr("font-size", 11).attr("font-weight", "bold")
.text("🔥 TOO HOT");
svg.append("text").attr("x", cx + (innerHZ + outerHZ) / 2 * scale).attr("y", 30)
.attr("text-anchor", "middle").attr("fill", "#2ecc71").attr("font-size", 11).attr("font-weight", "bold")
.text("💧 HABITABLE ZONE");
svg.append("text").attr("x", cx + outerHZ * scale + 40).attr("y", 30)
.attr("text-anchor", "middle").attr("fill", "#3498db").attr("font-size", 11).attr("font-weight", "bold")
.text("🧊 TOO COLD");
// Star
const starR = Math.min(25, 8 + starLum * 5);
svg.append("circle").attr("cx", cx).attr("cy", cy).attr("r", starR)
.attr("fill", "#f39c12").attr("opacity", 0.9);
svg.append("text").attr("x", cx).attr("y", cy + 4).attr("text-anchor", "middle")
.attr("fill", "white").attr("font-size", 12).text("⭐");
// Solar system planets for reference (if Sun)
if (Math.abs(starLum - 1.0) < 0.1) {
const planets = [{name: "V", d: 0.72}, {name: "E", d: 1.0}, {name: "M", d: 1.52}];
planets.forEach(p => {
svg.append("circle").attr("cx", cx + p.d * scale).attr("cy", cy).attr("r", 5)
.attr("fill", p.name === "E" ? "#2ecc71" : "#bdc3c7").attr("stroke", "white").attr("stroke-width", 1);
svg.append("text").attr("x", cx + p.d * scale).attr("y", cy + 20)
.attr("text-anchor", "middle").attr("fill", "#ccc").attr("font-size", 10).text(p.name);
});
}
// Distance markers
svg.append("text").attr("x", cx + innerHZ * scale).attr("y", 280)
.attr("text-anchor", "middle").attr("fill", "#ccc").attr("font-size", 11)
.text(`${innerHZ.toFixed(2)} AU`);
svg.append("text").attr("x", cx + outerHZ * scale).attr("y", 280)
.attr("text-anchor", "middle").attr("fill", "#ccc").attr("font-size", 11)
.text(`${outerHZ.toFixed(2)} AU`);
svg.append("text").attr("x", width/2).attr("y", height - 5).attr("text-anchor", "middle")
.attr("fill", "white").attr("font-size", 13).attr("font-weight", "bold")
.text(`Star luminosity: ${starLum.toFixed(2)}× Sun | HZ: ${innerHZ.toFixed(2)}–${outerHZ.toFixed(2)} AU`);
return svg.node();
}Code
buildQuiz("habitable-zone-quiz", "💧 Check Your Understanding — Habitable Zone", [
{
q: "For a Sun-like star (luminosity = 1.0×), the habitable zone spans approximately 0.95–1.37 AU. Where does Earth (1.0 AU) sit within this range?",
options: ["At the very inner edge — almost too hot", "Comfortably within the zone, closer to the inner edge", "At the very outer edge — almost too cold", "Outside the habitable zone entirely"],
correct: 1,
explanation: "Earth at 1.0 AU sits comfortably within the 0.95–1.37 AU habitable zone, slightly closer to the warm inner boundary. This position allows stable liquid water on the surface."
},
{
q: "If you increase the star's luminosity to 5× the Sun's, what happens to the habitable zone?",
options: ["It shrinks to a tiny band very close to the star", "It stays in the same position", "It moves farther from the star (approximately 2.1–3.1 AU)", "It disappears entirely"],
correct: 2,
explanation: "A brighter star radiates more energy, pushing the habitable zone outward. HZ inner edge = √(5/1.1) ≈ 2.13 AU, outer edge = √(5/0.53) ≈ 3.07 AU. Planets must be farther away to avoid overheating."
},
{
q: "Why must a planet stay within the habitable zone for its ENTIRE orbit, not just part of it?",
options: ["Planets can only have water if they never get cold", "Water needs to remain liquid year-round for biochemistry to function continuously", "The habitable zone only applies at perihelion", "Stars change luminosity based on planet position"],
correct: 1,
explanation: "Life requires persistent liquid water. If a planet swings outside the habitable zone during part of its orbit, surface water could freeze or boil seasonally, preventing the stable conditions needed for sustained biochemistry and life."
}
])9 Explore 2: Orbital Eccentricity
9.1 🔬 Not All Orbits Are Circles
Real orbits are ellipses — some nearly circular, others very elongated. The eccentricity (\(e\)) measures how stretched an orbit is: - \(e = 0\): perfect circle - \(e = 0.5\): moderately elliptical - \(e = 1\): parabola (escape trajectory)
Code
Code
Code
{
const a = semiMajor;
const e = eccentricity;
const b = a * Math.sqrt(1 - e * e);
const c = a * e;
const perihelion = a * (1 - e);
const aphelion = a * (1 + e);
const inHZ = perihelion >= 0.95 * 0.95 && aphelion <= 1.37 * 1.05;
const partialHZ = perihelion < 1.37 && aphelion > 0.95;
const width = 700;
const height = 350;
const svg = d3.create("svg").attr("width", width).attr("height", height);
svg.append("rect").attr("width", width).attr("height", height).attr("fill", "#0a0a2e").attr("rx", 12);
const scaleF = 100;
const ox = 350;
const oy = 170;
// Habitable zone ring
svg.append("ellipse").attr("cx", ox).attr("cy", oy)
.attr("rx", 1.37 * scaleF).attr("ry", 1.37 * scaleF)
.attr("fill", "none").attr("stroke", "#2ecc71").attr("stroke-width", 1).attr("stroke-dasharray", "3,3");
svg.append("ellipse").attr("cx", ox).attr("cy", oy)
.attr("rx", 0.95 * scaleF).attr("ry", 0.95 * scaleF)
.attr("fill", "none").attr("stroke", "#2ecc71").attr("stroke-width", 1).attr("stroke-dasharray", "3,3");
// HZ fill
for (let angle = 0; angle < 360; angle += 1) {
const rad = angle * Math.PI / 180;
const x1 = ox + 0.95 * scaleF * Math.cos(rad);
const y1 = oy + 0.95 * scaleF * Math.sin(rad);
const x2 = ox + 1.37 * scaleF * Math.cos(rad);
const y2 = oy + 1.37 * scaleF * Math.sin(rad);
}
// Orbit ellipse
svg.append("ellipse")
.attr("cx", ox - c * scaleF).attr("cy", oy)
.attr("rx", a * scaleF).attr("ry", b * scaleF)
.attr("fill", "none").attr("stroke", inHZ ? "#2ecc71" : partialHZ ? "#f39c12" : "#e74c3c")
.attr("stroke-width", 2);
// Star at focus
svg.append("circle").attr("cx", ox).attr("cy", oy).attr("r", 8)
.attr("fill", "#f39c12");
// Perihelion and aphelion points
svg.append("circle").attr("cx", ox - c * scaleF - a * scaleF).attr("cy", oy).attr("r", 4)
.attr("fill", "#e74c3c");
svg.append("text").attr("x", ox - c * scaleF - a * scaleF).attr("y", oy - 10)
.attr("text-anchor", "middle").attr("fill", "#e74c3c").attr("font-size", 9).text(`Near: ${perihelion.toFixed(2)} AU`);
svg.append("circle").attr("cx", ox - c * scaleF + a * scaleF).attr("cy", oy).attr("r", 4)
.attr("fill", "#3498db");
svg.append("text").attr("x", ox - c * scaleF + a * scaleF).attr("y", oy - 10)
.attr("text-anchor", "middle").attr("fill", "#3498db").attr("font-size", 9).text(`Far: ${aphelion.toFixed(2)} AU`);
// Status
const status = inHZ ? "✅ Stays within habitable zone all year!" :
partialHZ ? "⚠️ Partially in habitable zone — water may freeze/boil seasonally" :
"❌ Outside habitable zone";
const statusColor = inHZ ? "#2ecc71" : partialHZ ? "#f39c12" : "#e74c3c";
svg.append("text").attr("x", width/2).attr("y", 25).attr("text-anchor", "middle")
.attr("fill", "white").attr("font-size", 14).attr("font-weight", "bold")
.text(`Eccentricity: ${e.toFixed(2)} | Semi-major axis: ${a.toFixed(1)} AU`);
svg.append("text").attr("x", width/2).attr("y", height - 15).attr("text-anchor", "middle")
.attr("fill", statusColor).attr("font-size", 14).attr("font-weight", "bold")
.text(status);
svg.append("text").attr("x", 15).attr("y", 320).attr("fill", "#2ecc71").attr("font-size", 10)
.text("Green dashed = Habitable Zone (0.95–1.37 AU for Sun-like star)");
return svg.node();
}Code
buildQuiz("eccentricity-quiz", "🔵 Check Your Understanding — Orbital Eccentricity", [
{
q: "Earth's orbit has eccentricity e = 0.017 and semi-major axis a = 1.0 AU. Does Earth stay in the habitable zone?",
options: ["No — it swings outside during winter", "Yes — with e = 0.017, the orbit is nearly circular and stays well within the HZ all year", "Only during summer months", "It depends on the Moon's position"],
correct: 1,
explanation: "With e = 0.017, Earth's closest approach (perihelion) is 0.983 AU and farthest (aphelion) is 1.017 AU. Both are well within the 0.95–1.37 AU habitable zone. The nearly circular orbit keeps temperatures remarkably stable."
},
{
q: "If you set eccentricity to 0.5 (keeping a = 1.0 AU), what happens?",
options: ["The planet stays within the habitable zone", "The planet swings out to 1.5 AU and in to 0.5 AU — partially or fully exiting the habitable zone", "The orbit becomes perfectly circular", "The planet escapes the star's gravity"],
correct: 1,
explanation: "With e = 0.5 and a = 1.0 AU: perihelion = 1.0 × (1 − 0.5) = 0.5 AU (too hot!) and aphelion = 1.0 × (1 + 0.5) = 1.5 AU (borderline cold). The planet would experience extreme temperature swings, likely preventing stable liquid water."
},
{
q: "Comet Borrelly has e = 0.62. Why does its water alternate between frozen ice and vaporized gas?",
options: ["The comet spins very fast, creating heat", "Chemical reactions on the comet heat and cool the water", "Its highly elliptical orbit takes it from far outside the HZ (frozen) to deep inside (vaporized)", "Solar wind strips water away, then it reforms"],
correct: 2,
explanation: "With e = 0.62, Borrelly swings between ~1.37 AU (near perihelion, inside the HZ) and ~5.85 AU (far outside). Near the Sun, solar radiation vaporizes surface ice into dramatic jets. Far from the Sun, temperatures plunge and water refreezes."
}
])10 Elaborate: Applying to Exoplanets
10.1 🌍 Real Exoplanet Data
Scientists have discovered thousands of exoplanets using the Kepler Space Telescope. For each one, we can measure the orbital period — and use Kepler’s Third Law to calculate the orbit.
Code
exoplanets = [
{name: "Kepler-442b", period: 112.3, distance: 0.409, ecc: 0.04, starLum: 0.12, zone: "In HZ"},
{name: "Kepler-186f", period: 129.9, distance: 0.432, ecc: 0.04, starLum: 0.04, zone: "In HZ"},
{name: "TRAPPIST-1e", period: 6.1, distance: 0.029, ecc: 0.005, starLum: 0.0005, zone: "In HZ"},
{name: "Kepler-22b", period: 289.9, distance: 0.849, ecc: 0.0, starLum: 0.79, zone: "In HZ"},
{name: "Kepler-452b", period: 384.8, distance: 1.046, ecc: 0.035, starLum: 1.2, zone: "In HZ"},
{name: "55 Cancri e", period: 0.74, distance: 0.015, ecc: 0.17, starLum: 0.6, zone: "Too hot"},
{name: "Kepler-16b", period: 228.8, distance: 0.704, ecc: 0.007, starLum: 0.15, zone: "Too cold"}
]
Plot.plot({
title: "Exoplanets: Distance from Star vs. Orbital Period",
subtitle: "Green = in habitable zone, Red = too hot, Blue = too cold",
width: 700,
height: 380,
x: {label: "Average Distance (AU)", type: "log"},
y: {label: "Orbital Period (days)", type: "log"},
color: {
domain: ["In HZ", "Too hot", "Too cold"],
range: ["#2ecc71", "#e74c3c", "#3498db"],
legend: true
},
marks: [
Plot.dot(exoplanets, {
x: "distance",
y: "period",
fill: "zone",
r: 8,
stroke: "#333"
,
tip: true}),
Plot.text(exoplanets, {
x: "distance",
y: "period",
text: "name",
dx: 12,
fontSize: 9,
fontWeight: "bold"
})
]
})11 Chapter Summary
| Key Concept | Details |
|---|---|
| Kepler’s Third Law | \(T^2 = a^3\) — period and distance are mathematically linked |
| Habitable Zone | Region where liquid water can exist; HZ = \(\sqrt{L/1.1}\) to \(\sqrt{L/0.53}\) AU |
| Eccentricity | Measures orbit shape (0 = circle, ~1 = very elongated); must be low for habitability |
| Earth’s orbit | \(a = 1.0\) AU, \(e = 0.017\) (nearly circular), stays in HZ year-round |
| Comet Borrelly | \(e = 0.62\) — orbit explains water phase changes (frozen ↔︎ vaporized) |
| Exoplanet analysis | Measure period → calculate distance → check if in HZ with low eccentricity |
12 Myth or Fact?
🪐 Planets & Orbits: Myths vs. Facts
Decide whether each statement is a MYTH or a FACT!
13 End-of-Chapter Quiz
Code
function buildOrbitQuiz(id, title, questions) {
const outer = html`<div id="${id}" style="font-family:'Inter',sans-serif; max-width:720px; margin:18px auto;"></div>`;
const header = html`<div style="background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:#fff;border-radius:14px 14px 0 0;padding:18px 24px;">
<div style="font-size:1.1em;font-weight:700;display:flex;align-items:center;gap:8px;"><span style="font-size:1.2em;">📝</span> ${title}</div>
<div style="font-size:0.85em;opacity:0.85;margin-top:4px;">Select an answer for each question.</div>
</div>`;
const body = html`<div style="border:1.5px solid #c7d2fe;border-top:none;border-radius:0 0 14px 14px;overflow:hidden;background:#f8f9ff;padding:16px;"></div>`;
questions.forEach((qq, qi) => {
const card = document.createElement("div");
card.style.cssText = "background:#fff;border-radius:12px;padding:16px 20px;margin-bottom:14px;box-shadow:0 2px 8px rgba(0,0,0,.08);";
card.innerHTML = `<p style="font-weight:700;margin:0 0 10px;color:#1e1b4b;">${qi+1}. ${qq.q}</p>`;
qq.options.forEach((opt, oi) => {
const btn = document.createElement("button");
btn.textContent = opt;
btn.style.cssText = "display:block;width:100%;text-align:left;padding:10px 14px;margin:6px 0;border:2px solid #e2e8f0;border-radius:8px;background:#fff;color:#1e1b4b;cursor:pointer;font-size:.95em;transition:border-color .2s,background .2s;";
btn.onmouseover = () => { if(!card.dataset.answered){ btn.style.borderColor="#667eea";btn.style.background="#f0f0ff"; }};
btn.onmouseout = () => { if(!card.dataset.answered){ btn.style.borderColor="#e2e8f0";btn.style.background="#fff"; }};
btn.onclick = () => {
if(card.dataset.answered) return;
card.dataset.answered = "true";
card.querySelectorAll("button").forEach(b => {
b.style.cursor="default"; b.onmouseover=null; b.onmouseout=null;
b.style.borderColor="#e2e8f0"; b.style.background="#f8fafc"; b.style.color="#475569";
});
if(oi === qq.correct){
btn.style.borderColor="#48bb78";btn.style.background="#f0fff4";btn.style.color="#276749";btn.style.fontWeight="700";
fb.innerHTML = "✅ Correct! " + qq.explanation;
fb.style.color="#276749";fb.style.background="#f0fff4";
} else {
btn.style.borderColor="#fc8181";btn.style.background="#fff5f5";btn.style.color="#9b2c2c";btn.style.fontWeight="700";
const correctBtn = card.querySelectorAll("button")[qq.correct];
correctBtn.style.borderColor="#48bb78";correctBtn.style.background="#f0fff4";correctBtn.style.color="#276749";correctBtn.style.fontWeight="700";
fb.innerHTML = "❌ " + qq.explanation;
fb.style.color="#9b2c2c";fb.style.background="#fff5f5";
}
fb.style.padding="10px 14px";fb.style.marginTop="8px";fb.style.borderRadius="8px";
};
card.appendChild(btn);
});
const fb = document.createElement("div");
fb.style.cssText = "border-radius:8px;font-size:.9em;transition:all .3s;";
card.appendChild(fb);
body.appendChild(card);
});
outer.appendChild(header);
outer.appendChild(body);
return outer;
}Code
buildOrbitQuiz("orbit-summative-quiz", "🪐 Summative Quiz — Planets & Orbits", [
{
q: "Kepler's Third Law states T² = a³. If an exoplanet has an orbital period of 8 years, what is its average distance from its Sun-like star?",
options: [
"2 AU",
"4 AU",
"8 AU",
"64 AU"
],
correct: 1,
explanation: "T² = 8² = 64. Then a³ = 64, so a = ∛64 = 4 AU. The planet orbits at 4 times Earth's distance from its star."
},
{
q: "What determines the boundaries of a star's habitable zone?",
options: [
"The star's mass only",
"The star's luminosity (brightness) — more luminous stars push the HZ farther out",
"The number of planets orbiting the star",
"The star's age"
],
correct: 1,
explanation: "The habitable zone is where stellar radiation allows liquid water. Inner edge: HZ_in = √(L/1.1) AU; outer edge: HZ_out = √(L/0.53) AU. A star 4× more luminous than the Sun has a habitable zone roughly 2× farther out."
},
{
q: "A planet orbits at 1.0 AU with eccentricity e = 0.3. What are its closest and farthest distances from the star?",
options: [
"Perihelion = 0.7 AU, Aphelion = 1.3 AU",
"Perihelion = 0.97 AU, Aphelion = 1.03 AU",
"Perihelion = 0.5 AU, Aphelion = 1.5 AU",
"Perihelion = 1.0 AU, Aphelion = 1.0 AU"
],
correct: 0,
explanation: "Perihelion = a(1 - e) = 1.0(1 - 0.3) = 0.7 AU. Aphelion = a(1 + e) = 1.0(1 + 0.3) = 1.3 AU. With e = 0.3, the planet barely stays within the habitable zone (0.95–1.37 AU for a Sun-like star)."
},
{
q: "Why did Comet Borrelly's water vaporize into jets as it approached the Sun?",
options: [
"The comet's internal radioactive elements generated heat",
"Its highly eccentric orbit (e = 0.62) brought it close enough for solar radiation to vaporize surface ice",
"Solar wind chemically reacted with the comet's surface",
"The comet collided with asteroids near the Sun"
],
correct: 1,
explanation: "With e = 0.62, Borrelly's perihelion is ~1.37 AU — close enough for intense solar radiation to sublimate surface ice into dramatic jets of water vapor and dust. At aphelion (~5.85 AU), the water freezes solid again."
},
{
q: "Looking at the exoplanet scatter plot, which planet is flagged 'Too hot' and why?",
options: [
"Kepler-442b — it's too close to a bright star",
"TRAPPIST-1e — it orbits an M-dwarf too closely",
"55 Cancri e — it orbits at only 0.015 AU, far inside any habitable zone",
"Kepler-16b — it orbits a binary star system"
],
correct: 2,
explanation: "55 Cancri e orbits at just 0.015 AU with a period of 0.74 days. At that distance, surface temperatures exceed 2,000°C — far too hot for liquid water regardless of eccentricity."
},
{
q: "An exoplanet orbits a star with luminosity 0.12× the Sun. The habitable zone inner edge is at √(0.12/1.1) ≈ 0.33 AU. What does this tiny HZ distance imply?",
options: [
"The planet must be very far from the star to be habitable",
"The planet must orbit very close to the dim star, which may cause tidal locking",
"The planet will definitely be habitable because the HZ is well-defined",
"The star is too bright for any planet to be habitable"
],
correct: 1,
explanation: "Dim stars require planets to orbit very close for adequate warmth. At ~0.33 AU, gravitational tidal forces likely lock the planet so one side permanently faces the star (tidally locked), creating extreme temperature differences between the day and night sides."
},
{
q: "For the performance task, which exoplanet has the most Earth-like combination of orbital distance (in HZ) AND low eccentricity?",
options: [
"55 Cancri e (distance = 0.015 AU, e = 0.17)",
"Kepler-452b (distance = 1.046 AU, e = 0.035)",
"TRAPPIST-1e (distance = 0.029 AU, e = 0.005)",
"Kepler-16b (distance = 0.704 AU, e = 0.007)"
],
correct: 1,
explanation: "Kepler-452b orbits at 1.046 AU (nearly identical to Earth's 1.0 AU) around a G-type star with luminosity 1.2× the Sun. Its low eccentricity (0.035) keeps it firmly in the habitable zone. It's often called 'Earth's cousin.'"
},
{
q: "How does eccentricity affect a planet's chance of staying in the habitable zone?",
options: [
"Higher eccentricity is better — the planet samples more temperatures",
"Eccentricity doesn't matter as long as average distance is correct",
"Lower eccentricity keeps the planet at a more constant distance, maintaining stable temperatures for liquid water",
"Only eccentricity = 0 (perfect circle) allows habitability"
],
correct: 2,
explanation: "Lower eccentricity means smaller variation between perihelion and aphelion distances. A planet with low e stays at a near-constant distance, receiving steady energy. High e causes wild temperature swings that prevent stable liquid water, even if the average distance is 'right.'"
},
{
q: "You discover an exoplanet with orbital period T = 1.5 years around a Sun-like star. Is it likely in the habitable zone?",
options: [
"Yes — using T² = a³, a = ∛(2.25) ≈ 1.31 AU, which is within the Sun-like HZ (0.95–1.37 AU)",
"No — 1.5 years is too long for a habitable orbit",
"Cannot determine without knowing the planet's mass",
"Only if the eccentricity is exactly zero"
],
correct: 0,
explanation: "T² = 1.5² = 2.25, so a = ∛2.25 ≈ 1.31 AU. For a Sun-like star, the habitable zone is ~0.95–1.37 AU. At 1.31 AU, the planet sits near the outer edge of the HZ — a promising candidate if eccentricity is low!"
},
{
q: "Which THREE factors must align for an exoplanet to be considered potentially habitable based on orbital analysis?",
options: [
"Large mass, fast rotation, and many moons",
"Correct distance (in HZ), low eccentricity, and a host star with sufficient luminosity for a well-defined HZ",
"Close proximity to the star, high eccentricity, and short orbital period",
"Circular orbit, no atmosphere, and a binary star system"
],
correct: 1,
explanation: "All three must work together: (1) orbital distance within the habitable zone, (2) low eccentricity to stay in the HZ year-round, and (3) a host star whose luminosity creates a habitable zone at the right location. Missing any one factor likely prevents stable liquid water."
}
])