.python-assignment{margin:20px 0 26px;padding:22px;border:1px solid var(--python-line);border-top:3px solid var(--python-ink);border-radius:4px;background:var(--panel)}
.python-assignment h3{font-size:15px;margin:22px 0 9px;color:var(--text)}.python-assignment>h3:first-child{margin-top:0}
.python-assignment p,.lab-extras .python-assignment p{font-size:14px;line-height:1.7;color:var(--text)}
.result-fixture{padding:14px 16px;margin:18px 0;background:var(--python-bg);border-left:2px solid var(--python-line)}.result-fixture h3{margin-top:0}.result-fixture p:last-child{margin-bottom:0}
.python-assignment .result-help,.lab-extras .python-assignment .result-help{font-size:12px;color:var(--muted)}
.python-run{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:12px 0 22px}.python-run pre{flex:1 1 260px;margin:0;min-width:0;padding:12px 15px;border:1px solid var(--line);background:var(--code-bg);color:var(--code-text);overflow:auto;font:13px/1.7 var(--mono)}.python-run code{font:inherit}.python-run .btn.small{font-size:12px}
.result-kind{display:block;color:var(--python-ink);font-size:12px;font-weight:600;margin-bottom:6px}
.expected-output{margin:14px 0 20px;padding:17px;border:1px solid var(--line);border-radius:3px;background:var(--code-bg);color:var(--code-text);font:13px/1.8 var(--mono);white-space:pre;overflow:auto;max-height:360px}.expected-output code{font:inherit}
.result-checks{padding-left:21px;margin:12px 0 16px;font-size:14px;line-height:1.7}.result-checks li{margin:7px 0}.result-checks li::marker{color:var(--python-ink)}
.python-assignment>a{font-size:12px}.reference-solution>summary{font-size:14px}
.lesson-goals{padding-left:21px;font-size:14px;line-height:1.8}.lesson-goals li{margin:6px 0}.lesson-prerequisite{padding:12px 15px;background:var(--panel2)}.lesson-reading{margin:22px 0}.lesson-reading summary{display:list-item;line-height:1.9}.lesson-api{width:100%;border-collapse:collapse;font-size:12px;line-height:1.7}.lesson-api caption{text-align:left;font-weight:600;margin:15px 0 10px;color:var(--text)}.lesson-api th,.lesson-api td{text-align:left;vertical-align:top;padding:12px 10px;border-bottom:1px solid var(--line)}.lesson-api th{font-size:11px;color:var(--muted)}.lesson-api code{font:11px/1.8 var(--mono);overflow-wrap:anywhere}.lesson-api td:first-child{width:32%}
.lesson-path{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.lesson-stage-button{padding:12px 10px;border:1px solid var(--activity-line);background:var(--panel);color:var(--activity-ink);text-align:left;border-radius:3px;font:12px var(--sans)}.lesson-stage-button span,.lesson-stage-button small{display:block}.lesson-stage-button span{font-weight:600}.lesson-stage-button small{font-size:10px;margin-top:7px;color:var(--muted)}.lesson-stage-button[aria-pressed=true]{border-width:2px;padding:11px 9px;background:var(--activity-bg)}.python-assignment .lesson-progress{font-size:11px;color:var(--muted);margin:12px 0 25px}.lesson-stage-heading{display:flex;flex-wrap:wrap;align-items:center;gap:12px}.python-assignment .lesson-stage-title{font-size:20px;margin:15px 0}.lesson-contract{margin:20px 0;padding:14px 16px;background:var(--python-bg);border-left:2px solid var(--python-ink);font-size:12px}.lesson-contract p{margin:8px 0 0}.lesson-instructions{font-size:14px;line-height:1.8;padding-left:23px;margin:20px 0}.lesson-instructions li{margin:8px 0}.lesson-hints{margin:20px 0}.lesson-hint{font-size:12px;padding:10px 0;border-top:1px solid var(--line)}.lesson-hint summary{cursor:pointer;color:var(--accent)}.lesson-check-results{list-style:none;padding:0;font-size:12px;line-height:1.8}.lesson-check-results li{padding:12px 14px;border:1px solid var(--line);margin:10px 0;border-left:3px solid var(--attack-ink)}.lesson-check-results li[data-passed=true]{border-left-color:var(--accent);background:var(--positive-bg)}.lesson-check-results strong,.lesson-check-results span{display:block}.lesson-check-results span{color:var(--muted);overflow-wrap:anywhere}.lesson-test-source,.lesson-solution-code{padding:15px;background:var(--code-bg);color:var(--code-text);font:12px/1.8 var(--mono);white-space:pre;overflow:auto;max-height:400px}.lesson-test-source code,.lesson-solution-code code{font:inherit}.lesson-tests,.lesson-solution{margin-top:18px}.lesson-tests summary,.lesson-solution summary{font-size:12px}.lesson-reflection{margin:26px 0;padding:18px;border:1px solid var(--review-line);background:var(--review-bg)}.lesson-reflection h3{margin-top:12px}.lesson-next{margin:18px 0}
@media(max-width:650px){.lesson-path{grid-template-columns:1fr}.lesson-stage-button{display:flex;justify-content:space-between;gap:10px;align-items:center}.lesson-stage-button small{margin:0;white-space:nowrap}.lesson-api{min-width:520px}.lesson-reflection{padding:14px}.python-assignment .lesson-stage-title{font-size:18px}}
.python-workspace{min-width:0}.python-editor-heading{display:flex;justify-content:space-between;gap:12px;padding:11px 14px;border:1px solid var(--line);border-bottom:0;background:var(--python-bg);font:12px var(--mono);color:var(--text)}.python-editor-heading label{font-weight:600}.python-editor-heading span{font:11px var(--sans);color:var(--muted)}
.python-editor{display:block;width:100%;box-sizing:border-box;height:340px;min-height:180px;max-height:700px;margin:0;padding:16px;border:1px solid var(--line);border-radius:0;background:var(--code-bg);color:var(--code-text);font:13px/1.75 var(--mono);tab-size:4;resize:vertical;white-space:pre;overflow:auto}.python-editor:focus,.python-inputs textarea:focus{outline:2px solid var(--accent);outline-offset:2px}
.python-controls{display:flex;flex-wrap:wrap;align-items:center;gap:9px;margin:16px 0 10px}.python-runtime-note{flex:1 1 220px;font-size:11px;color:var(--muted)}.python-assignment .python-status,.lab-extras .python-assignment .python-status{font-size:12px;line-height:1.6;margin:8px 0 20px;color:var(--muted);min-height:20px}.python-status[data-state=running],.python-status[data-state=done]{color:var(--accent)}.python-status[data-state=error]{color:var(--attack-ink)}
.python-inputs{font-size:12px;margin:14px 0;color:var(--muted)}.python-inputs summary{cursor:pointer;padding:6px 0}.python-inputs label{display:block;margin:10px 0 7px}.python-inputs textarea{box-sizing:border-box;width:100%;padding:10px;border:1px solid var(--line);border-radius:3px;background:var(--code-bg);color:var(--code-text);font:12px/1.7 var(--mono);resize:vertical}
.python-output-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px;align-items:start}.python-output-panel{min-width:0}.python-output-panel h4{font-size:12px;margin:0 0 8px;color:var(--text)}.python-output-panel .result-kind{font-size:10px;margin-bottom:8px;font-weight:400}.actual-output{margin:14px 0 20px;padding:17px;border:1px solid var(--line);border-radius:3px;background:var(--code-bg);color:var(--code-text);font:13px/1.8 var(--mono);white-space:pre;overflow:auto;min-height:120px;max-height:360px}.python-output-panel .expected-output{min-height:120px;margin-top:0}.python-output-panel .actual-output{margin-top:0}.python-assignment .python-local{margin:22px 0 0;border-color:var(--line)}.python-local summary{font-size:12px}
@media(max-width:1050px){.code-detail .python-output-grid{grid-template-columns:1fr}}@media(max-width:700px){.python-output-grid{grid-template-columns:1fr}.python-editor{height:290px;font-size:12px;padding:12px}.python-editor-heading{padding:10px;font-size:11px}.python-editor-heading span{display:none}.actual-output{padding:13px;font-size:12px;max-height:320px}.python-runtime-note{flex-basis:100%}}
@media(max-width:650px){.python-assignment{padding:16px}.expected-output{padding:13px;font-size:12px;max-height:320px}.python-run pre{flex-basis:100%}}
@media print{.expected-output,.actual-output{max-height:none;white-space:pre-wrap;overflow:visible}.python-editor,.python-controls,.python-inputs,.python-editor-heading{display:none}.python-assignment{break-inside:avoid}}
.lesson-methods{margin:22px 0 30px;padding:18px;border:1px solid var(--python-line);border-radius:4px;background:var(--panel2)}.lesson-methods>h3{margin-top:14px}.snippet-choices{display:flex;flex-wrap:wrap;gap:8px;margin:18px 0}.snippet-choices button{white-space:normal;text-align:left}.snippet-choices [aria-pressed=true]{border-color:var(--python-ink);background:var(--python-bg);color:var(--python-ink)}.method-snippet{min-width:0}.method-snippet>h4{font-size:14px;margin:20px 0 8px}.method-snippet-code{margin:14px 0;padding:16px;border:1px solid var(--line);border-radius:3px;background:var(--code-bg);color:var(--code-text);font:12px/1.8 var(--mono);overflow:auto;white-space:pre}.method-snippet-code code{font:inherit}.method-notes{margin:18px 0;font-size:13px;line-height:1.7}.method-notes>div{margin:12px 0}.method-notes dt{color:var(--python-ink);font-weight:600}.method-notes dt code{font:12px var(--mono)}.method-notes dd{margin:4px 0 0;color:var(--muted)}.snippet-expected{margin:0 0 20px;padding:14px;border:1px solid var(--line);border-radius:3px;background:var(--code-bg);color:var(--code-text);font:12px/1.8 var(--mono);white-space:pre;overflow:auto;min-height:70px;max-height:220px}.snippet-expected code{font:inherit}.snippet-output{min-height:70px;max-height:220px;font-size:12px;padding:14px}.lesson-attacker{margin:20px 0;padding:16px;border:1px solid var(--attack-line);border-left:3px solid var(--attack-ink);border-radius:3px;background:var(--attack-bg)}.lesson-attacker h4{margin:0;font-size:14px;color:var(--attack-ink)}.attacker-inputs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.attacker-inputs h5{font-size:12px;margin:8px 0;color:var(--text)}.attacker-inputs ul{margin:0;padding-left:18px;font-size:13px;line-height:1.8}.attacker-inputs li{margin:5px 0}.lesson-attacker>p:last-child{margin-bottom:0}
@media(max-width:650px){.lesson-methods{padding:13px}.attacker-inputs{grid-template-columns:1fr;gap:8px}.method-snippet-code{font-size:11px;padding:12px}.snippet-choices button{width:100%}}

.lesson-solution-locked{padding:14px 16px}.lesson-solution-locked p{margin:0}.lesson-solution-locked .result-help{margin-top:8px}
