:root{color:#142d34;font-synthesis:none;background:#f7f3eb;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0}button,input,textarea,select{font:inherit}button,a,input,textarea,select,summary{outline-offset:3px}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid #0a7e81}button{cursor:pointer}a{color:inherit}.site-head{border-bottom:1px solid #dcd9cf;justify-content:space-between;align-items:center;height:84px;padding:0 clamp(24px,5vw,88px);display:flex}.brand{letter-spacing:-.04em;align-items:center;gap:13px;font-size:19px;font-weight:760;text-decoration:none;display:flex}.brand-mark{color:#fff;background:#11363b;border-radius:11px;place-items:center;width:40px;height:40px;font-family:Georgia,serif;font-size:29px;font-style:italic;line-height:1;display:grid}.brand-mark span{color:#e7bb79}.head-tail{letter-spacing:.18em;color:#758383;align-items:center;gap:15px;font-size:10px;font-weight:750;display:flex}.head-line{background:#0e9a92;border-radius:50%;width:33px;height:1px}.case-nav{z-index:10;position:relative}.case-nav details{background:0 0;border:0;margin:0;padding:0}.case-nav summary{color:#24575c;cursor:pointer;padding:10px 12px;font-size:13px;font-weight:750;list-style:none}.case-nav summary::-webkit-details-marker{display:none}.case-nav summary span{margin-left:12px}.case-menu{background:#fffdfa;border:1px solid #d6ded7;border-radius:7px;width:min(340px,100vw - 32px);padding:15px;position:absolute;top:calc(100% + 8px);right:0;box-shadow:0 16px 40px #14363b22}.case-menu a{border-radius:4px;padding:10px 9px;font-size:14px;text-decoration:none;display:block}.case-menu a:hover,.case-menu a:focus-visible,.case-menu a[aria-current=page]{background:#edf4ed}.landing h1,.simple-page h1{letter-spacing:-.068em;margin:25px 0;font-size:clamp(45px,6vw,78px);font-weight:690;line-height:1.07}.landing h1 em,.simple-page h1 em{color:#23777a;letter-spacing:-.065em;font-family:Georgia,serif;font-weight:400}.lede{color:#52666b;max-width:650px;margin:0;font-size:19px;line-height:1.65}.landing-actions{align-items:center;gap:32px;margin:33px 0 68px;display:flex}.primary{color:#fff;background:#126b6d;border:0;border-radius:5px;justify-content:space-between;align-items:center;gap:36px;padding:16px 20px;font-weight:700;text-decoration:none;display:inline-flex;box-shadow:0 5px 14px #0c6b6c22}.primary:hover{background:#075556}.text-link{color:#24575c;border-bottom:1px solid #7eacab;padding-bottom:3px;font-size:14px;font-weight:700;text-decoration:none}.case-rule{border-bottom:1px solid #cfd5ce;justify-content:space-between;padding-bottom:14px;display:flex}.lesson-card{background:#fffdfa;border:1px solid #deded4;border-radius:6px;max-width:100%;margin-top:26px;padding:52px 55px;position:relative;overflow:hidden;box-shadow:0 15px 35px #14363b0c}.lesson-card:before{content:"";background:#d6ac72;width:5px;position:absolute;top:0;bottom:0;left:0}.landing .lesson-card{flex-direction:column;min-height:390px;display:flex}.landing .lesson-card>div:last-child{flex-direction:column;flex:1;align-items:flex-start;display:flex}.landing .lesson-card .lesson-meta{width:100%;margin-top:auto}.folder-tab{letter-spacing:.15em;color:#776048;background:#efe7d9;padding:10px 14px;font-size:10px;font-weight:800;position:absolute;top:0;right:0}.folder-tab span{margin-left:24px}.lesson-card h2{letter-spacing:-.035em;margin:12px 0;font-family:Georgia,serif;font-size:43px;font-weight:400}.lesson-card p:not(.kicker){color:#556b6d;max-width:650px;font-size:16px;line-height:1.65}.lesson-meta{color:#52666b;border-top:1px solid #e6e7df;flex-wrap:wrap;gap:35px;margin-top:30px;padding-top:21px;font-size:12px;display:flex}.lesson-meta b{margin-right:6px}.lesson-action{margin-top:26px}.topic-overview{border-top:1px solid #cfd5ce;margin-top:70px;padding-top:24px}.topic-overview h2{font-family:Georgia,serif;font-size:clamp(27px,3vw,38px);font-weight:400}.topic-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;display:grid}.topic-grid>div{background:#fffdfa;border:1px solid #deded4;border-radius:6px;padding:25px}.topic-grid h3{margin-bottom:8px;font-family:Georgia,serif;font-size:27px;font-weight:400}.topic-grid p{color:#556b6d;line-height:1.6}.privacy-callout{color:#547073;align-items:baseline;gap:35px;max-width:1000px;margin-top:34px;font-size:13px;display:flex}.privacy-callout strong{color:#23474d}.privacy-callout p{max-width:630px;line-height:1.6}.simple-page{max-width:1000px;min-height:calc(100vh - 170px);margin:auto;padding:70px 30px}.simple-page>p{color:#566d70;max-width:650px;font-size:17px;line-height:1.65}.simple-page .lesson-card{max-width:800px}.lab{padding:30px clamp(20px,3.5vw,58px) 45px}.lab-head{justify-content:space-between;align-items:end;gap:20px;display:flex}.lab-head h1{letter-spacing:-.045em;margin:6px 0 0;font-size:clamp(25px,2.6vw,35px)}.lab-head h1 span{color:#607479;font-weight:400}.lab-tools{flex-wrap:wrap;align-items:center;gap:9px;display:flex}.lab-tools button,.question-actions button,.terminal-controls button,.vm-error button{color:#23545a;background:0 0;border:1px solid #bfcac7;border-radius:4px;padding:9px 12px;font-size:12px;font-weight:680}.lab-tools button:hover,.question-actions button:hover{background:#e6f0ec}.status{white-space:nowrap;margin-right:8px;font-size:12px;font-weight:750}.status-ready{color:#167768}.status-failed{color:#a54636}.progress-line{letter-spacing:.08em;color:#617576;border-bottom:1px solid #d8dbd3;align-items:center;gap:15px;padding:20px 0;font-size:11px;font-weight:750;display:flex}.progress-line progress{accent-color:#147c7c;width:100px;height:7px}.progress-line span:last-child{margin-left:auto}.notice{color:#34575b;background:#edf4ed;border-left:3px solid #25827d;padding:11px 15px;font-size:13px}.mobile-tabs{display:none}.lab-grid{grid-template-columns:minmax(310px, var(--reading-width)) minmax(370px, 1fr);background:#fffdfa;border:1px solid #d9ded7;align-items:start;gap:0;min-height:700px;margin-top:22px;display:grid}.reading,.answers{min-height:650px;max-height:calc(100vh - 210px);padding:30px clamp(22px,2.8vw,45px);overflow:auto}.reading{border-right:1px solid #d8ded7}.section-label{border-bottom:1px solid #e3e4dd;justify-content:space-between;gap:20px;margin:0 0 25px;padding-bottom:11px;display:flex}.reading .section-label:not(:first-child){margin-top:50px}.reading h2,.answers h2{letter-spacing:-.035em;margin:0 0 20px;font-family:Georgia,serif;font-size:clamp(26px,2.5vw,37px);font-weight:400;line-height:1.12}.reading h3{margin-top:30px;font-size:17px}.reading p,.answers>p{color:#53696b;font-size:14px;line-height:1.7}.reading code,.answers code{color:#174d51;background:#eaf0eb;border-radius:3px;padding:2px 4px;font-size:.91em}.learning-goal{background:#edf2ec;border-left:3px solid #16837c;margin:25px 0;padding:18px 20px}.learning-goal p{color:#284f53;margin:8px 0 0}.step{margin:22px 0}.step strong{color:#1a4e53;margin-bottom:8px;font-size:13px;display:block}.code-row{align-items:stretch;gap:6px;max-width:100%;margin:6px 0;display:flex}.code-row code{white-space:nowrap;color:#194b50;background:#eef2ee;flex:1;padding:8px 10px;font-size:12px;display:block;overflow:auto}.copy{color:#226563;background:#f8fbf7;border:1px solid #cbd9d3;border-radius:3px;flex:none;padding:0 10px;font-size:11px;font-weight:700}.copy:hover{background:#e1f1eb}details{background:#f3f5ef;border:1px solid #e1e8de;border-radius:4px;margin:35px 0;padding:15px 18px}summary{cursor:pointer;font-weight:700}.reference-row{margin-top:13px;font-size:12px}.reference-row>span:first-child{color:#4d696a;font-weight:700}.resize-control{position:absolute;left:-9999px}.workstation{color:#dbe8ea;background:#101c27;flex-direction:column;min-height:650px;max-height:calc(100vh - 210px);display:flex}.terminal-head{color:#dbeaea;letter-spacing:.13em;background:#1e303c;border-bottom:1px solid #37505b;justify-content:space-between;align-items:center;padding:13px 17px;font-size:10px;font-weight:750;display:flex}.terminal-head small{color:#91a9ad;margin-left:12px;font-size:9px}.terminal-light{background:#55bbac;border-radius:50%;width:7px;height:7px;margin-right:9px;display:inline-block}.terminal-controls{gap:5px;display:flex}.terminal-controls button{color:#c6dde0;border-color:#526b73;padding:4px 7px;font-size:10px}.terminal-body{flex:1;min-height:490px;padding:15px}.xterm-mount{width:100%;height:100%;min-height:470px}.xterm{height:100%;padding:0}.terminal-foot{color:#aac2c6;border-top:1px solid #354b57;justify-content:space-between;gap:12px;padding:11px 17px;font-size:11px;line-height:1.4;display:flex}.vm-loading,.vm-error{color:#eaf1ee;background:#25404a;padding:14px 18px;font-size:12px}.vm-error{background:#523b39}.vm-error p{margin:7px 0}.vm-error button{color:#fff;border-color:#e3bbb4}.plain-output{background:#233440;padding:12px 18px}.plain-output label{margin-bottom:6px;font-size:12px;display:block}.plain-output textarea{color:#e4f5f0;background:#071219;width:100%;font-family:monospace;font-size:12px}.answers{border-left:1px solid #d9ded7}.question{border-top:1px solid #e1e6de;padding:22px 0}.question>label{color:#244a50;align-items:baseline;gap:12px;margin-bottom:12px;font-size:14px;font-weight:750;display:flex}.question-no{letter-spacing:.15em;color:#16817c;font-size:11px}.question input,.question select,.question textarea{color:#1f3f44;background:#fff;border:1px solid #b9c9c5;border-radius:4px;width:100%;padding:11px;font-size:13px}.question input{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.question>p{color:#637678;font-size:12px;line-height:1.5}.question-actions{gap:7px;margin-top:10px;display:flex}.question-actions button:disabled{opacity:.4;cursor:default}.hint{background:#f2f0e8;border-left:3px solid #d3ad6b;margin-top:11px;padding:8px 12px}.hint p{color:#5f5b4c;font-size:12px;line-height:1.55}.feedback{font-size:12px;line-height:1.5}.feedback-correct{color:#176b59}.feedback-incorrect,.feedback-malformed{color:#a13c32}.completion{background:#e6f0ea;border:1px solid #c8ddd2;margin:20px 0;padding:23px}.completion h3{margin:0;font-family:Georgia,serif;font-size:25px;font-weight:400}.completion p{color:#466568;font-size:13px;line-height:1.6}.completion button{font-size:12px}.lab-bottom{color:#6f8081;justify-content:space-between;gap:15px;padding-top:20px;font-size:11px;display:flex}@media (min-width:1051px){.lab-grid:has(.answers){grid-template-columns:minmax(310px, var(--reading-width)) minmax(370px, 1fr)}.answers{border-top:1px solid #d9ded7;grid-column:1/-1;min-height:0;max-height:none}.answers .question{max-width:850px}.resize-control{color:#49696b;background:#eef3ed;border-top:1px solid #d9ded7;grid-area:2/1/auto/-1;align-items:center;gap:12px;padding:6px 18px;font-size:11px;display:flex;position:static}.resize-control input{width:180px}.workstation{grid-area:1/2}.reading{grid-area:1/1}}@media (max-width:1050px){.lab-head{flex-direction:column;align-items:start}.lab-grid{min-height:0;display:block}.reading,.answers,.workstation{min-height:0;max-height:none;display:none}.reading.mobile-show,.answers.mobile-show,.workstation.mobile-show{display:block}.workstation.mobile-show{min-height:620px;display:flex}.mobile-tabs{border-bottom:1px solid #c9d5cf;gap:6px;margin-top:20px;display:flex}.mobile-tabs button{color:#5a7475;background:0 0;border:0;padding:12px 16px;font-weight:700}.mobile-tabs button[aria-selected=true]{color:#126b6d;border-bottom:3px solid #126b6d}.resize-control{display:none}.reading,.answers{padding:30px}.xterm-mount{min-height:500px}}@media (max-width:600px){.topic-grid{grid-template-columns:1fr}.site-head{height:70px;padding:0 20px}.head-tail{display:none}.landing{padding:48px 22px 65px}.landing h1{font-size:48px}.lede{font-size:16px}.landing-actions{flex-direction:column;align-items:start;gap:20px;margin-bottom:48px}.lesson-card{padding:42px 25px 25px}.landing .lesson-card{min-height:505px}.lesson-card h2{font-size:36px}.privacy-callout{display:block}.lab{padding:22px 14px}.lab-head h1{font-size:26px}.lab-tools{gap:6px}.lab-tools .status{width:100%}.progress-line span:last-child,.terminal-head small{display:none}.terminal-head{flex-wrap:wrap;gap:10px}.terminal-body{min-height:440px;padding:8px}.xterm-mount{min-height:430px}.reading,.answers{padding:24px 20px}.terminal-foot{display:block}.terminal-foot span{margin-top:4px;display:block}.lab-bottom,footer{flex-direction:column;gap:5px}.mobile-tabs button{padding:11px 10px;font-size:12px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}.leave-terminal{color:#d4e5e5;background:#243943;border:1px solid #57727a;border-radius:3px;margin-top:8px;padding:5px 8px;font-size:11px}.landing{max-width:1300px;margin:auto;padding:70px clamp(24px,5vw,88px) 100px}.eyebrow,.kicker,.section-label,.case-rule,.lesson-meta b,.learning-goal strong{letter-spacing:.16em;color:#547373;font-size:11px;font-weight:800}.eyebrow{align-items:center;gap:10px;display:flex}.dot{background:#0e9a92;border-radius:50%;width:8px;height:8px;display:inline-block}.head-line{background:#a9b8b7;border-radius:0}@media (max-width:600px){.landing{padding:48px 22px 65px}}footer{color:#6c7c7e;border-top:1px solid #dcd9cf;justify-content:space-between;gap:20px;padding:28px clamp(24px,5vw,88px);font-size:12px;display:flex}@media (max-width:600px){footer{flex-direction:column;gap:5px}}.mobile-note{display:none}@media (max-width:1050px){.mobile-note{color:#395e60;background:#eaf2eb;margin:15px 0 0;padding:10px 14px;font-size:12px;line-height:1.5;display:block}}footer{color:#526a6c}.progress-line{color:#53696b}.lab-bottom{color:#526a6c}.terminal-body,.xterm-mount{min-width:0;overflow:hidden}.gui-grid{grid-template-columns:minmax(285px,320px) minmax(0,1fr);grid-template-areas:"brief workstation""answers workstation";align-items:start;gap:16px;display:grid}.gui-grid>section{min-width:0;display:block}.gui-lab .mobile-tabs{display:none}.gui-reading,.gui-answers,.gui-workstation{background:#fffdfa;border:1px solid #deded4;border-radius:6px;padding:20px}.gui-reading{grid-area:brief;line-height:1.55}.gui-reading h2{font-family:Georgia,serif;font-size:31px}.gui-reading h3{margin:28px 0 5px}.gui-reading p{color:#465f63}.gui-workstation{color:#142d34;background:#fffdfa;grid-area:workstation;min-height:0;max-height:none;padding:0;display:block;overflow:hidden}.gui-workstation .terminal-head{padding:14px 18px}.vm-screen{cursor:default;background:#111b25;outline:none;min-height:220px;position:relative;overflow:hidden}.vm-screen canvas{image-rendering:auto;width:100%;height:auto;display:block}.vm-screen:focus-visible{outline-offset:-3px;outline:3px solid #0a7e81}.file-controls{border-top:1px solid #ccd8d8;grid-template-columns:minmax(170px,30%) 1fr;min-height:330px;display:grid}.file-list{background:#edf2ef;border-right:1px solid #ccd8d8;flex-direction:column;gap:6px;padding:14px 10px;display:flex}.file-list strong{color:#29535a;margin:10px 5px 4px;font-size:12px}.file-list span{color:#718183;padding:4px 6px;font-size:12px}.file-list button{text-align:left;overflow-wrap:anywhere;background:0 0;border:0;border-radius:4px;padding:8px 7px;font-size:12px}.file-list button[aria-pressed=true]{color:#fff;background:#156e70;font-weight:700}.file-detail{min-width:0;padding:17px}.file-detail h3{overflow-wrap:anywhere;margin:0;font-size:17px}.file-detail>p{color:#607376;font-size:13px}.action-row{flex-wrap:wrap;gap:7px;margin:17px 0;display:flex}.action-row button,.file-editor button,.hash-result button,.comparison button{color:#125254;background:#e3efed;border:1px solid #87b4b0;border-radius:4px;padding:8px 10px;font-size:12px;font-weight:700}.action-row button:hover:not(:disabled),.file-editor button:hover:not(:disabled),.hash-result button:hover,.comparison button:hover{background:#c8e4df}.action-row button:disabled,.file-list button:disabled{opacity:.5;cursor:not-allowed}.file-preview,.file-editor,.hash-result,.comparison{background:#f8fbf8;border:1px solid #d7e2dd;border-radius:4px;margin-top:14px;padding:12px;font-size:12px}.file-preview strong,.file-editor label,.hash-result strong,.comparison strong{color:#184e54;margin-bottom:8px;display:block}.file-preview pre{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:12px}.file-editor textarea{width:100%;margin:8px 0;display:block}.hash-result code,.comparison code{overflow-wrap:anywhere;margin-bottom:10px;line-height:1.5;display:block}.hash-result button{margin-top:6px}.action-status{background:#fff1d9;border-radius:4px;margin:12px 0;padding:10px}.advanced-terminal{border-top:1px solid #d7e2dd;padding:15px}.advanced-terminal summary{cursor:pointer;font-weight:700}.advanced-terminal .xterm-mount{min-height:230px;margin-top:12px}.gui-answers h2{font-family:Georgia,serif;font-size:28px}.gui-answers{grid-area:answers}.gui-answers .question{padding:16px 0}@media (max-width:1150px){.gui-lab .mobile-tabs{display:flex}.gui-grid{display:block}.gui-grid>section{display:none}.gui-grid>section.mobile-show{min-height:0;display:block}.gui-workstation{margin:0}.vm-screen{min-height:180px}}@media (max-width:540px){.file-controls{grid-template-columns:1fr}.file-list{border-bottom:1px solid #ccd8d8;border-right:0}.vm-screen canvas{min-width:500px}}.python-editor{gap:14px;padding:24px;display:grid}.python-editor textarea{resize:vertical;color:#152c32;background:#f8fbf9;border:1px solid #9cb0b0;border-radius:7px;width:100%;min-height:230px;padding:14px;font:14px/1.5 Consolas,monospace}.python-editor .primary{justify-self:start}.python-output{color:#e6f1ee;background:#0e1d28;border-radius:7px;padding:16px;overflow:auto}.python-output pre{white-space:pre-wrap;overflow-wrap:anywhere}.python-output small{overflow-wrap:anywhere}.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:-moz-fit-content;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}
