@font-face{font-family:'Departure Mono';src:url('/assets/fonts/DepartureMono-Regular.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Inter;src:url('/assets/fonts/inter.woff2') format('woff2');font-display:swap}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:#fafafa;color:#222222;font:17px/1.75 Inter,system-ui,sans-serif}a{color:inherit;text-underline-offset:.22em}a:hover{color:#585858}button,input,select{font:inherit}button,a,input,select,summary{touch-action:manipulation}button{cursor:pointer}a:focus-visible,button:focus-visible,input:focus-visible,summary:focus-visible,select:focus-visible{outline:3px solid #686868;outline-offset:4px}.skip{position:absolute;top:-100px;z-index:20;background:#e4e4e4;padding:12px}.skip:focus{top:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.topbar{display:flex;align-items:center;gap:36px;padding:20px 4vw;border-bottom:1px solid #dfdfdf;background:#fff}.brand{font:700 16px/1.2 'Departure Mono',ui-monospace,monospace;letter-spacing:.05em;text-decoration:none;display:flex;gap:12px;align-items:center}.brand>span{background:#161616;color:#e4e4e4;padding:9px}.brand small{font-size:12px;border-left:1px solid #cbcbcb;padding-left:12px;font-weight:400}.topbar nav{display:flex;gap:24px;font-size:14px}.topbar nav a{text-decoration:none}.search-label{margin-left:auto;max-width:260px}.search-label input{width:100%;padding:10px 14px;font-size:14px;border:1px solid #d4d4d4;border-radius:0;background:#fafafa}.search-results{position:absolute;right:4vw;top:84px;z-index:10;background:white;box-shadow:0 12px 30px #16161626;border:1px solid #dddddd;width:min(520px,92vw);max-height:70vh;overflow:auto;padding:20px}.search-results a{display:block;padding:10px 0;border-bottom:1px solid #e9e9e9}.search-results p{margin:0;font-size:14px}.home{max-width:1360px;margin:auto;padding:54px 5vw 80px}.intro{display:grid;grid-template-columns:1.15fr 1fr;gap:70px;align-items:center;padding-bottom:44px}.eyebrow{font:13px/1.5 'Departure Mono',ui-monospace,monospace;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:#5c5c5c;margin:0 0 18px}h1,h2,h3{line-height:1.15;letter-spacing:-.035em}h1{font-size:clamp(36px,4.5vw,64px);margin:12px 0 20px;max-width:850px}h2{font-size:30px;margin:44px 0 18px}h3{font-size:23px}.intro h1{font-size:clamp(40px,4.5vw,66px)}.lede{font-size:20px;line-height:1.65;color:#5e5e5e;max-width:700px}.intro p{max-width:580px}.button{display:inline-block;background:#161616;color:#fff;padding:13px 20px;text-decoration:none;font-size:15px;font-weight:600;border:1px solid #161616}.button:hover{background:#e4e4e4;color:#161616}.text-link{margin-left:20px;font-size:15px}.terminal{background:#161616;color:#ebebeb;border:1px solid #363636;box-shadow:10px 10px 0 #e4e4e4}.terminal-head{display:flex;justify-content:space-between;border-bottom:1px solid #404040;padding:12px 20px;font:12px 'Departure Mono',ui-monospace,monospace;color:#c8c8c8}.terminal pre{margin:0;padding:24px;font:15px/1.8 'Departure Mono',ui-monospace,monospace;overflow:auto}.terminal .result{padding:14px 24px;border-top:1px solid #404040;color:#e4e4e4;font:14px 'Departure Mono',ui-monospace,monospace}.course-strip{display:flex;gap:30px;flex-wrap:wrap;border-top:1px solid #d5d5d5;border-bottom:1px solid #d5d5d5;padding:18px 0;font:13px 'Departure Mono',ui-monospace,monospace}.course-strip strong{color:#4d4d4d}.map-heading{display:flex;justify-content:space-between;gap:20px;align-items:baseline}.map-heading p{font-size:14px;color:#646464}.stages{display:grid;grid-template-columns:1fr 1fr;gap:24px}.stage{background:#fff;border:1px solid #d5d5d5}.stage-header{display:flex;gap:20px;padding:24px;border-bottom:1px solid #e3e3e3}.stage-num{font:32px/1.2 'Departure Mono',ui-monospace,monospace;color:#8c8c8c}.stage-header h2{font-size:24px;margin:0 0 7px}.stage-header p{margin:0;color:#6b6b6b;font-size:14px}.stage ul{list-style:none;padding:8px 24px;margin:0}.stage li{border-bottom:1px solid #ebebeb}.stage li:last-child{border:0}.stage li a{display:flex;align-items:center;gap:14px;text-decoration:none;padding:10px 0;font-size:15px}.lesson-number{font:12px 'Departure Mono',ui-monospace,monospace;color:#5e5e5e;min-width:24px}.stage-build{display:block;background:#f4f4f4;padding:16px 24px;font-size:14px;font-weight:600;text-decoration:none;border-top:1px solid #e3e3e3}.capstone{display:flex;justify-content:space-between;align-items:center;gap:30px;margin-top:28px;padding:30px;background:#161616;color:#fff}.capstone h2{margin:8px 0;font-size:30px}.capstone p{margin:0;color:#cfcfcf}.capstone .eyebrow{color:#e4e4e4}.capstone .button{background:#e4e4e4;color:#161616}.lesson-shell{display:grid;grid-template-columns:275px minmax(0,1fr);max-width:1440px;margin:auto}.sidebar{background:#f1f1f1;border-right:1px solid #dbdbdb;padding:32px 22px;font-size:14px}.sidebar>p{font:12px 'Departure Mono',ui-monospace,monospace;text-transform:uppercase;letter-spacing:.1em}.sidebar details{margin:18px 0}.sidebar summary{cursor:pointer;font-weight:600;line-height:1.5}.sidebar ul{list-style:none;padding:6px 0 0 12px;margin:0}.sidebar li{margin:8px 0;line-height:1.45}.sidebar a{text-decoration:none;color:#5f5f5f}.sidebar a[aria-current=page]{color:#464646;font-weight:700;text-decoration:underline}.lesson-main{padding:48px clamp(28px,6vw,90px) 70px;max-width:1000px}.lesson-main h1{font-size:clamp(34px,4vw,52px)}.prose{max-width:780px}.prose p,.prose li{max-width:75ch}.prose h2{scroll-margin-top:20px;padding-top:10px}.prose code{font:.88em 'Departure Mono',ui-monospace,monospace;background:#ececec;padding:.14em .3em;overflow-wrap:anywhere}.prose pre{padding:22px;background:#161616;color:#f4f4f4;overflow:auto;border:1px solid #373737;font:14px/1.8 'Departure Mono',ui-monospace,monospace;position:relative;white-space:pre}.prose pre code{padding:0;background:none;color:inherit;overflow-wrap:normal}.prose blockquote{margin:24px 0;padding:14px 22px;border-left:4px solid #747474;background:#f2f2f2}.prose table{border-collapse:collapse;width:100%;font-size:14px;display:block;overflow:auto}.prose td,.prose th{padding:10px;border:1px solid #d6d6d6;text-align:left}.prose .notice{padding:20px;background:#f5f5f5;border:1px solid #adadad;font-size:15px}.copy-code{float:right;background:#383838;color:#fff;border:1px solid #727272;padding:4px 10px;font-size:12px;margin-bottom:8px}.code-wrap{margin:22px 0}.code-wrap pre{clear:both;margin:0}.code-label{font:12px 'Departure Mono',ui-monospace,monospace;letter-spacing:.08em;text-transform:uppercase;color:#676767}.token-keyword{color:#91e8bd}.token-string{color:#f3d896}.token-comment{color:#9eb7c3}.lesson-actions{border-top:1px solid #d3d3d3;margin-top:40px;padding-top:24px;display:flex;gap:14px;align-items:center;flex-wrap:wrap}.complete{padding:12px 18px;background:#f1f1f1;border:1px solid #adadad;color:#4b4b4b}.lesson-pager{display:flex;justify-content:space-between;gap:24px;margin-top:24px;font-size:15px}.page-main{padding:50px 5vw 80px;max-width:1050px;margin:auto}.page-main>h1{font-size:48px}.page-main .prose{max-width:none}footer{display:flex;gap:30px;justify-content:space-between;align-items:center;flex-wrap:wrap;border-top:1px solid #d5d5d5;padding:34px 4vw;background:#fff;font-size:13px}footer p{margin:0;color:#6b6b6b}footer nav{display:flex;gap:20px}progress{accent-color:#6b6b6b;width:140px;height:9px}.explorer select{max-width:100%;padding:12px;background:white;border:1px solid #c8c8c8}.explorer pre{max-height:600px}.flow{font:15px/2 'Departure Mono',ui-monospace,monospace;background:#f1f1f1;padding:18px;border-left:3px solid #676767}.provenance{font-size:13px;color:#666666;margin-top:36px}.toc ul{columns:2;list-style:none;padding:0}.toc a{font-size:14px}.toc{border-bottom:1px solid #dedede;padding-bottom:20px}
@media(max-width:1000px){.topbar{gap:18px;flex-wrap:wrap}.brand small{display:none}.intro{gap:30px}.lesson-shell{grid-template-columns:220px minmax(0,1fr)}.sidebar{padding:25px 16px}.lesson-main{padding:36px 28px}.topbar nav{gap:16px}.search-label{max-width:220px}}
@media(max-width:720px){body{font-size:16px}.topbar{padding:18px 5vw;gap:18px}.topbar nav{margin-left:auto;font-size:13px;gap:12px}.search-label{max-width:none;width:100%;margin:0}.intro{grid-template-columns:1fr;gap:28px}.home{padding-top:32px}.terminal{box-shadow:5px 5px 0 #e4e4e4}.stages{grid-template-columns:1fr}.map-heading{display:block}.map-heading h2{margin-bottom:10px}.course-strip{gap:14px;font-size:12px}.capstone{display:block;padding:24px}.capstone .button{margin-top:20px}.lesson-shell{display:block}.sidebar{border-right:0;border-bottom:1px solid #dbdbdb;padding:14px 5vw}.sidebar>details{margin:10px 0}.sidebar details:not([open]) ul{display:none}.lesson-main{padding:30px 5vw}.page-main{padding-top:30px}.page-main>h1{font-size:36px}.prose pre{padding:16px;font-size:13px}.toc ul{columns:1}.search-results{top:140px}.text-link{display:inline-block;margin:14px 0 0 16px}footer{display:block}footer nav{margin-top:18px;flex-wrap:wrap}footer p{margin-top:16px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

h1,h2,h3,h4,h5,h6,.brand,.eyebrow,summary,summary::marker,.stage-number,.button,.completion,.code-label,.copy-button{font-family:"Departure Mono",monospace;font-weight:400;font-synthesis:none;letter-spacing:0}h1,h2,h3{line-height:1.25;overflow-wrap:anywhere}.brand img{width:36px;height:36px;flex:none}.brand small{font-size:11px}.breadcrumbs{font-size:13px;margin:0 0 22px}.breadcrumbs ol{display:flex;flex-wrap:wrap;gap:8px;list-style:none;padding:0;margin:0}.breadcrumbs li+li::before{content:"/";font-family:"Departure Mono",monospace;margin-right:8px}.byline{font-size:13px;color:#5c5c5c}.intro h1{font-size:clamp(34px,4.2vw,58px)}@media(max-width:600px){h1{font-size:30px}h2{font-size:25px}h3{font-size:20px}.brand img{width:28px;height:28px}}


.icon{display:inline-block;width:1.1em;height:1.1em;vertical-align:-.16em;flex:none;background-color:currentColor;mask:var(--icon) center/contain no-repeat;-webkit-mask:var(--icon) center/contain no-repeat}.icon-arrow-right{--icon:url('/assets/icons/arrow-right.svg')}.icon-arrow-left{--icon:url('/assets/icons/arrow-left.svg')}.icon-arrow-up-right{--icon:url('/assets/icons/arrow-up-right.svg')}.icon-check{--icon:url('/assets/icons/check.svg')}.icon-hammer{--icon:url('/assets/icons/hammer.svg')}.icon-copy{--icon:url('/assets/icons/copy.svg')}.icon-circle{--icon:url('/assets/icons/circle.svg')}.stage li a::after{content:'';width:1.1em;height:1.1em;flex:none;margin-left:auto;background:currentColor;mask:url('/assets/icons/arrow-up-right.svg') center/contain no-repeat;-webkit-mask:url('/assets/icons/arrow-up-right.svg') center/contain no-repeat}.stage li a.done::after{mask-image:url('/assets/icons/check.svg');-webkit-mask-image:url('/assets/icons/check.svg')}.sidebar summary{list-style:none}.sidebar summary::-webkit-details-marker{display:none}.sidebar summary::before{content:'';display:inline-block;width:1em;height:1em;margin-right:.3em;vertical-align:-.13em;background:currentColor;mask:url('/assets/icons/chevron-right.svg') center/contain no-repeat;-webkit-mask:url('/assets/icons/chevron-right.svg') center/contain no-repeat}.sidebar details[open]>summary::before{transform:rotate(90deg)}
