.jl-python-page{--py-bg:#070d1b;--py-panel:#121d31;--py-panel-2:#1a2840;--py-border:#394967;--py-text:#f3f3ff;--py-muted:#bac6db;--py-soft:#96a8c6;--py-accent:#d1bbff;--py-bright:#a894ff;background:radial-gradient(ellipse 52% 20% at 87% 0,rgba(112,86,222,.17),transparent 86%),var(--py-bg);color:var(--py-text);min-height:100vh}.jl-python-page *{box-sizing:border-box}.jl-python-page :is(h1,h2,h3,h4,p){margin:0}.jl-python-page a{text-decoration:none}.jl-python-page :is(a,button,textarea,input,summary):focus-visible{outline:3px solid var(--py-accent);outline-offset:3px}.jl-py-container{width:min(100%,1510px);margin:auto;padding:0 clamp(18px,3vw,45px) 80px}.jl-py-crumb{display:flex;flex-wrap:wrap;gap:9px;align-items:center;padding-top:31px;color:var(--py-soft);font-size:12px}.jl-py-crumb a:hover{color:var(--py-accent)}.jl-py-crumb span:last-child{color:var(--py-text)}.jl-py-overline{font-size:11px;color:var(--py-accent);font-weight:850;letter-spacing:.15em;line-height:1.65}.jl-py-hero{padding:clamp(43px,5vw,72px) 0 39px;border-bottom:1px solid var(--py-border)}.jl-py-hero h1{font-size:clamp(42px,5.7vw,76px);font-weight:900;line-height:1.06;letter-spacing:-.06em;margin:15px 0}.jl-py-hero h1 em{font-style:normal;color:var(--py-accent)}.jl-py-hero>p{font-size:clamp(16px,1.6vw,19px);line-height:1.8;color:var(--py-muted);max-width:900px}.jl-py-hero-meta{display:flex;flex-wrap:wrap;gap:8px;margin-top:22px}.jl-py-hero-meta span{border:1px solid var(--py-border);padding:7px 12px;border-radius:99px;background:rgba(150,127,255,.09);font-size:12px;font-weight:750;color:var(--py-muted)}.jl-py-hero-actions{display:flex;gap:9px;flex-wrap:wrap;margin-top:23px}.jl-py-hero-actions a{border:1px solid var(--py-border);padding:12px 17px;font-size:13px;font-weight:800;border-radius:10px;background:var(--py-panel);color:var(--py-text)}.jl-py-hero-actions a:first-child{background:var(--py-accent);color:#1f1542;border-color:var(--py-accent)}.jl-py-reading{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,315px);gap:clamp(25px,3vw,48px);align-items:start}.jl-py-article{min-width:0}.jl-py-article>section{padding:45px 0;border-bottom:1px solid var(--py-border);scroll-margin-top:calc(var(--jl-header-height, 92px) + 28px)}.jl-py-section-heading{display:flex;align-items:center;gap:12px;margin-bottom:13px}.jl-py-section-heading>span{font-size:12px;font-weight:850;color:var(--py-accent);border:1px solid var(--py-border);border-radius:9px;padding:8px 11px}.jl-py-article h2{font-size:clamp(25px,3.1vw,39px);line-height:1.17;letter-spacing:-.04em;font-weight:850}.jl-py-lead{line-height:1.85;max-width:900px;margin-top:14px!important}.jl-py-lead,.jl-py-points{color:var(--py-muted);font-size:15px}.jl-py-points{display:grid;gap:10px;margin-top:19px;padding-left:24px;line-height:1.75}.jl-py-learning-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:20px 0}.jl-py-learning-cards>div{border:1px solid var(--py-border);border-radius:13px;padding:20px;background:var(--py-panel)}.jl-py-learning-cards h3{font-size:16px;font-weight:850;margin-bottom:8px}.jl-py-learning-cards p{font-size:13px;line-height:1.75;color:var(--py-muted)}.jl-py-code-example{margin:18px 0;border:1px solid #566187;background:#0c1425;border-radius:13px;overflow:hidden}.jl-py-code-example>div{display:flex;align-items:center;justify-content:space-between;gap:9px;flex-wrap:wrap;border-bottom:1px solid #36415c;padding:11px 16px;color:#c4b7fa;font-size:11px;font-weight:750;letter-spacing:.09em}.jl-py-code-example pre{white-space:pre;overflow:auto;line-height:1.75;font:14px/1.75 Cascadia Code,Fira Code,Consolas,monospace;padding:18px;color:#e3e7ff;margin:0}.jl-py-predict{border:1px solid #5e5984;background:rgba(145,121,224,.1);padding:15px 18px;border-radius:11px;margin:14px 0}.jl-py-predict summary{cursor:pointer;font-weight:800;font-size:13px;color:var(--py-accent);line-height:1.55}.jl-py-predict p{margin-top:11px!important;font-size:13px;line-height:1.7;color:var(--py-text)}.jl-py-takeaway{border-left:3px solid var(--py-accent);background:rgba(132,107,211,.1);padding:14px 17px;border-radius:0 9px 9px 0;margin-top:18px;font-size:13px;line-height:1.8;color:var(--py-muted)}.jl-py-takeaway strong{color:var(--py-accent)}.jl-py-sidebar{min-width:0;position:sticky;padding:0}.jl-py-sidebar .jl-lesson-nav{max-height:min(72vh,720px)}.jl-py-sidebar .jl-lesson-companion-card{margin-top:18px}.jl-py-mobile-nav{display:none}.jl-py-reading-end{border:1px solid var(--py-border);background:var(--py-panel);border-radius:14px;padding:21px;margin-top:18px}.jl-py-reading-end p{color:var(--py-muted);font-size:14px;line-height:1.8;margin:10px 0}.jl-py-reading-end a{display:inline-flex;padding:11px 14px;border:1px solid #7769b9;background:rgba(139,112,218,.14);border-radius:9px;color:var(--py-accent);font-weight:800;font-size:13px}.jl-py-resource-links{display:grid;gap:12px;margin-top:20px}.jl-py-resource-links a{color:var(--py-accent);font-size:13px;font-weight:750;overflow-wrap:anywhere}.jl-py-resource-links a:hover{text-decoration:underline}.jl-py-practice-hero{max-width:1130px}.jl-py-practice-layout{margin:27px 0 0}.jl-py-practice-intro{padding:23px;border:1px solid var(--py-border);background:var(--py-panel);border-radius:14px;display:flex;gap:20px;align-items:center;justify-content:space-between;flex-wrap:wrap;margin-bottom:20px}.jl-py-practice-intro p{font-size:13px;color:var(--py-muted);line-height:1.7;max-width:750px}.jl-py-practice-intro a{border:1px solid var(--py-border);color:var(--py-accent);border-radius:9px;padding:11px 14px;font-weight:800;font-size:13px}.jl-py-workbench{position:relative;border:1px solid #5b5597;border-radius:18px;background:#0c1529;overflow:hidden;box-shadow:0 15px 65px rgba(0,0,0,.12);margin:26px 0}.jl-py-workbench-header{display:flex;gap:20px;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;padding:24px 24px 19px;background:linear-gradient(135deg,#1e2345,#141d35);border-bottom:1px solid #414b6b}.jl-py-workbench-header>div{max-width:810px}.jl-py-workbench-header h3{font-size:clamp(21px,2vw,27px);margin:6px 0 9px;font-weight:850;color:#f5f3ff}.jl-py-workbench-header p{color:#bcc9df;font-size:13px;line-height:1.75}.jl-py-runtime-pill{padding:7px 11px;border:1px solid #6862a0;background:#332d57;border-radius:99px;font-size:11px;font-weight:800;color:#d4c7ff;white-space:nowrap}.jl-py-challenge-nav{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;padding:16px 21px;background:#101b33}.jl-py-challenge-nav button{border:1px solid #465675;background:#1b2940;border-radius:10px;display:grid;gap:6px;justify-items:start;text-align:left;color:#d5e0f5;padding:12px 11px;cursor:pointer}.jl-py-challenge-nav button small{font-size:10px;font-weight:850;color:#c9b9fa}.jl-py-challenge-nav button span{font-size:11px;font-weight:750;line-height:1.45}.jl-py-challenge-nav button.is-active{background:#413664;border-color:#c5b7ff;color:#fff}.jl-py-challenge-nav button:disabled{opacity:.6;cursor:wait}.jl-py-assignment{padding:22px 24px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;background:#111a30;border-bottom:1px solid #3c4868}.jl-py-assignment>div:first-child{flex:1;min-width:240px}.jl-py-assignment h4{color:#f1edff;font-size:21px;font-weight:850;letter-spacing:-.02em;margin:7px 0}.jl-py-assignment p{color:#c4cedf;font-size:13px;line-height:1.75}.jl-py-assignment-expect{border:1px solid #515b7b;border-radius:9px;padding:10px 12px;background:#101627;display:grid;gap:4px}.jl-py-assignment-expect span{font-size:10px;color:#c4b5ff;letter-spacing:.1em;font-weight:850}.jl-py-assignment-expect code{color:#cce7ce;font:12px/1.6 Cascadia Code,Consolas,monospace}.jl-py-workspace-grid{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(280px,.9fr);gap:0}.jl-py-editor-panel{min-width:0;border-right:1px solid #374461;display:flex;flex-direction:column}.jl-py-editor-toolbar{justify-content:space-between;flex-wrap:wrap;padding:11px 15px;border-bottom:1px solid #374461;background:#19263b;color:#d8e2f1;font-size:12px;font-weight:850}.jl-py-editor-toolbar,.jl-py-editor-toolbar span:first-child{display:flex;align-items:center;gap:8px}.jl-py-editor-toolbar i{width:8px;height:8px;border-radius:50%;background:#b2a8ff}.jl-py-editor-toolbar small{font-weight:650}.jl-py-editor-toolbar small,.jl-py-editor-toolbar span:last-child{font-size:10px;color:#a9bed3}.jl-py-editor{display:grid;grid-template-columns:42px minmax(0,1fr);background:#0a1222;min-height:290px}.jl-py-gutter{font:14px/1.7 Cascadia Code,Consolas,monospace;padding:14px 9px 14px 2px;color:#738ca7;text-align:right;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none;border-right:1px solid #243754}.jl-py-gutter>div{height:23.8px;line-height:23.8px}.jl-py-editor textarea{resize:vertical;min-height:290px;width:100%;padding:14px 12px;border:0;outline:none;background:#0a1222;color:#e1eaff;font:14px/1.7 Cascadia Code,Consolas,monospace;white-space:pre;-moz-tab-size:4;-o-tab-size:4;tab-size:4;overflow:auto}.jl-py-editor textarea:focus{box-shadow:inset 0 0 0 2px #9085c8}.jl-py-editor textarea:disabled{opacity:.82;cursor:wait}.jl-py-editor-actions{padding:13px;display:flex;gap:8px;flex-wrap:wrap;border-top:1px solid #354562}.jl-py-editor-actions button,.jl-py-hints button,.jl-py-success-next button,.jl-py-trace-controls button{border:1px solid #586887;border-radius:9px;padding:10px 13px;min-height:39px;background:#243048;color:#eff4ff;font-size:12px;font-weight:800;cursor:pointer}.jl-py-editor-actions .jl-py-run{background:#c9b8ff;color:#231848;border-color:#c9b8ff}.jl-py-editor-actions .jl-py-check{background:#294c3e;color:#d4fae3;border-color:#4a9473}.jl-py-editor-actions button:disabled,.jl-py-trace-controls button:disabled{opacity:.48;cursor:not-allowed}.jl-py-runtime-status{padding:10px 15px;color:#b9c8df;font-size:11px;line-height:1.6;min-height:45px}.jl-py-hints{margin:0 15px 18px;padding:17px;border-radius:10px;border:1px solid #4a536f;background:#1a2439}.jl-py-hints p{color:#bccbe0;font-size:12px;line-height:1.7;margin:5px 0 12px}.jl-py-hints .jl-py-hint{background:#282849;border-left:2px solid #b4a4fd;padding:9px;margin:9px 0;color:#e1defb}.jl-py-hints button{background:#2a2e50;border-color:#7470b2;color:#e3d8ff}.jl-py-results{min-width:0;display:grid;align-content:start;gap:12px;padding:15px;background:#0d172c}.jl-py-console,.jl-py-empty-trace,.jl-py-feedback,.jl-py-prediction,.jl-py-trace{border:1px solid #43516f;border-radius:11px;padding:17px;background:#142039}.jl-py-output-header{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;align-items:center;border-bottom:1px solid #344760;padding-bottom:10px}.jl-py-output-header>span:last-child{font-size:10px;color:#b8c8dd}.jl-py-console pre{white-space:pre-wrap;overflow-wrap:anywhere;font:13px/1.75 Cascadia Code,Consolas,monospace;margin:11px 0 0;max-height:260px;overflow:auto;color:#d6f3dc}.jl-py-console .jl-py-error{color:#ffbec8;border-top:1px solid #744961;padding-top:10px}.jl-py-console .jl-py-stderr{color:#f2d8a3}.jl-py-muted{font-size:12px;line-height:1.8;color:#aebfce;margin:11px 0 0}.jl-py-trace-heading{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.jl-py-trace-heading>div{display:grid;gap:5px}.jl-py-trace-heading strong{font-size:14px;color:#f3f4ff}.jl-py-trace-heading>span{font-size:12px;color:#aebedb}.jl-py-trace-controls{display:flex;gap:8px;margin:14px 0}.jl-py-trace-controls button{flex:1;padding:8px}.jl-py-vars{display:grid;gap:7px}.jl-py-variable{display:grid;grid-template-columns:minmax(85px,.95fr) minmax(55px,.6fr) minmax(0,1.2fr);align-items:center;gap:10px;padding:9px;border:1px solid #384b64;border-radius:8px;background:#0f1930}.jl-py-variable code{font:12px Cascadia Code,Consolas,monospace;color:#e2d9ff;overflow-wrap:anywhere}.jl-py-variable small{font-size:11px;color:#b4c7db}.jl-py-variable strong{font:12px/1.4 Cascadia Code,Consolas,monospace;color:#c6f2d3;overflow-wrap:anywhere}.jl-py-note{font-size:11px;line-height:1.7;color:#c9c4f5;margin-top:12px}.jl-py-feedback{border-color:#927f53;background:#312b26}.jl-py-feedback.is-pass{border-color:#5f9a7b;background:#1c3a30}.jl-py-feedback>strong{font-size:14px;color:#ebdfbd}.jl-py-feedback.is-pass>strong{color:#bbf6d0}.jl-py-feedback p{font-size:12px;line-height:1.7;color:#dfdacb;margin:6px 0}.jl-py-feedback ul{list-style:none;padding:0;margin:13px 0 0;display:grid;gap:9px}.jl-py-feedback li{display:flex;gap:9px;font-size:11px;color:#f6f0e6}.jl-py-feedback li>span{color:#adf3ca;font-weight:850}.jl-py-feedback li small{display:block;font-size:10px;color:#dad3c5;margin-top:3px;overflow-wrap:anywhere}.jl-py-prediction{display:grid;gap:8px}.jl-py-prediction label{font-size:12px;font-weight:760;color:#d3c8fc}.jl-py-prediction input{background:#0e1a30;color:#f3f5ff;border:1px solid #566687;border-radius:8px;padding:10px;font:13px Consolas,monospace}.jl-py-prediction small{font-size:11px;line-height:1.6;color:#b4d1be}.jl-py-empty-trace p{font-size:12px;line-height:1.8;color:#a9bcd4;margin:9px 0}.jl-py-success-next{margin:0 16px 15px;padding:16px;border-radius:11px;border:1px solid #638a72;background:#1c3e30}.jl-py-success-next strong{color:#ccf7d7;font-size:13px}.jl-py-success-next p{color:#c7e2d1;font-size:12px;line-height:1.7;margin:6px 0 10px}.jl-py-workbench-foot{border-top:1px solid #3e4566;display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap;padding:17px 24px;background:#18213a}.jl-py-workbench-foot p{max-width:770px;font-size:11px;color:#b9c7dc;line-height:1.75}.jl-py-workbench-foot a{align-self:start;color:#e1d6ff;font-size:12px;font-weight:850;border:1px solid #7972b7;padding:10px 12px;border-radius:9px}.jl-py-practice-end{padding:29px 0;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:22px}.jl-py-practice-end h2{font-size:25px;margin:8px 0}.jl-py-practice-end p{color:var(--py-muted);font-size:13px;line-height:1.75}.jl-py-practice-end a{border:1px solid var(--py-border);border-radius:10px;padding:12px 16px;color:var(--py-accent);font-size:13px;font-weight:800}html[data-theme=light] .jl-python-page{--py-bg:#f5f4fb;--py-panel:#fff;--py-panel-2:#f1edfc;--py-border:#d2cde4;--py-text:#241c41;--py-muted:#5a5670;--py-soft:#68627f;--py-accent:#6142b4;--py-bright:#6849b6}html[data-theme=light] .jl-py-workbench{background:#f7f6fc;border-color:#c6b5ea}html[data-theme=light] .jl-py-workbench-header{background:linear-gradient(135deg,#e6dff8,#f3f0fa);border-color:#cec4e5}html[data-theme=light] .jl-py-assignment h4,html[data-theme=light] .jl-py-workbench-header h3{color:#281d49}html[data-theme=light] .jl-py-assignment p,html[data-theme=light] .jl-py-workbench-header p{color:#5d5878}html[data-theme=light] .jl-py-runtime-pill{background:#eee7fb;color:#523a91;border-color:#c1b3e7}html[data-theme=light] .jl-py-assignment,html[data-theme=light] .jl-py-challenge-nav,html[data-theme=light] .jl-py-results{background:#f2effb;border-color:#d3cbe7}html[data-theme=light] .jl-py-challenge-nav button{background:#fff;color:#453961;border-color:#cbc4df}html[data-theme=light] .jl-py-challenge-nav button.is-active{background:#e1d5fb;border-color:#8c6cca}html[data-theme=light] .jl-py-editor-panel{border-color:#ddd5ec}html[data-theme=light] .jl-py-console,html[data-theme=light] .jl-py-empty-trace,html[data-theme=light] .jl-py-hints,html[data-theme=light] .jl-py-prediction,html[data-theme=light] .jl-py-trace{background:#fff;border-color:#d3cce3}html[data-theme=light] .jl-py-feedback li,html[data-theme=light] .jl-py-trace-heading strong{color:#2e2347}html[data-theme=light] .jl-py-empty-trace p,html[data-theme=light] .jl-py-hints p,html[data-theme=light] .jl-py-muted,html[data-theme=light] .jl-py-note{color:#5e5877}html[data-theme=light] .jl-py-variable{background:#f4f1fa;border-color:#ded6ee}html[data-theme=light] .jl-py-variable code{color:#543f98}html[data-theme=light] .jl-py-variable small{color:#65647a}html[data-theme=light] .jl-py-variable strong{color:#257348}html[data-theme=light] .jl-py-prediction label{color:#57418f}html[data-theme=light] .jl-py-prediction input{background:#fff;border-color:#c4b8de;color:#2e2745}html[data-theme=light] .jl-py-feedback{background:#fff7df;border-color:#cab077}html[data-theme=light] .jl-py-feedback.is-pass{background:#e4f6e9;border-color:#8fbd9e}html[data-theme=light] .jl-py-feedback>strong{color:#795623}html[data-theme=light] .jl-py-feedback.is-pass>strong{color:#1f7049}html[data-theme=light] .jl-py-feedback li small,html[data-theme=light] .jl-py-feedback p{color:#5f5972}html[data-theme=light] .jl-py-hints .jl-py-hint{background:#eee9fa;color:#4a387a}html[data-theme=light] .jl-py-workbench-foot{background:#ede8f8;border-color:#cbc3e3}html[data-theme=light] .jl-py-workbench-foot p{color:#5b5471}html[data-theme=light] .jl-py-workbench-foot a{color:#523391}html[data-theme=light] .jl-py-runtime-status{color:#545d70}html[data-theme=light] .jl-py-code-example{background:#12182e}html[data-theme=light] .jl-py-predict{background:#efebf9;border-color:#b7a5df}@media(max-width:1150px){.jl-py-reading{grid-template-columns:minmax(0,1fr) 260px}.jl-py-workspace-grid{grid-template-columns:1fr}.jl-py-editor-panel{border-right:0;border-bottom:1px solid #394869}}@media(max-width:1100px){.jl-py-reading{display:block}.jl-py-sidebar{display:none}.jl-py-mobile-nav{display:block;padding-top:15px}.jl-py-mobile-nav .jl-lesson-nav{max-height:none}.jl-py-article>section{padding:33px 0}}@media(max-width:700px){.jl-py-assignment,.jl-py-workbench-header{padding:18px}.jl-py-learning-cards{grid-template-columns:1fr}.jl-py-challenge-nav{grid-template-columns:repeat(2,minmax(0,1fr));padding:12px}.jl-py-workbench-foot{padding:15px}.jl-py-editor textarea{min-height:250px;font-size:13px}.jl-py-gutter{font-size:13px}.jl-py-results{padding:11px}.jl-py-assignment-expect{width:100%}}@media(prefers-reduced-motion:reduce){.jl-python-page *{scroll-behavior:auto!important;transition:none!important}}.jl-py-draft-settings{padding:.7rem .2rem 1rem;font-size:.83rem;display:flex;flex-direction:column;gap:.35rem;color:var(--py-muted)}.jl-py-draft-settings label{display:flex;align-items:flex-start;gap:.55rem;cursor:pointer}.jl-py-draft-settings input{margin-top:.2rem;accent-color:#a48aff}.jl-py-draft-settings small{line-height:1.45}.jl-py-draft-settings span[role=status]{color:var(--py-accent)}