.reader{--reader-width:720px;max-width:var(--reader-width);color:var(--ink);word-break:keep-all;overflow-wrap:break-word;font-size:17px;line-height:1.85}@media (max-width:767px){.reader{font-size:16px}}.reader .cover{border-top:1px solid var(--line-strong);margin-bottom:28px;padding:28px 0 8px}.reader .cover .label{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--signal);margin:0 0 10px;font-size:12px}.reader .cover h1{letter-spacing:-.035em;margin:0 0 16px;font-size:clamp(32px,5vw,48px);font-weight:600;line-height:1.15}.reader .cover p{color:var(--ink-2);margin:0 0 6px;font-size:18px;font-weight:300;line-height:1.7}.reader .goals,.reader .flow{border-top:1px solid var(--line);margin:0 0 18px;padding:18px 0}.reader .goals h3,.reader .flow .flow-title{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);margin:0 0 10px;font-size:12px;font-weight:500}.reader .goals ul{padding:0;list-style:none}.reader .goals li{padding-left:26px;position:relative}.reader .goals li:before{content:"✓";color:var(--done);font-weight:700;position:absolute;left:0}.reader .flow ol{counter-reset:step;flex-wrap:wrap;gap:6px 0;margin:0;padding:0;list-style:none;display:flex}.reader .flow li{align-items:center;margin:0;font-size:15px;display:flex}.reader .flow li span:before{counter-increment:step;content:counter(step, decimal-leading-zero);font-family:var(--font-mono);color:var(--signal);margin-right:6px;font-size:12px}.reader .flow li.lab span:before{color:var(--done)}.reader .flow li+li:before{content:"→";color:var(--ink-2);margin:0 10px}.reader .sec{border-top:1px solid var(--line-strong);margin:56px 0 0;padding-top:28px;scroll-margin-top:24px}.reader .sec>h1{letter-spacing:-.025em;align-items:baseline;gap:14px;margin:0 0 24px;font-size:clamp(26px,3.4vw,32px);font-weight:600;line-height:1.3;display:flex}.reader .sec>h1 .num,.reader h2 .num{font-family:var(--font-mono);color:var(--signal);font-size:.6em;font-weight:500}.reader h2 .num{margin-right:10px}.reader .sec.lab{border-top:2px solid var(--done)}.reader .sec.lab>h1 .num{color:var(--done)}.reader h2{letter-spacing:-.02em;margin:44px 0 14px;scroll-margin-top:24px;font-size:23px;font-weight:600;line-height:1.4}.reader .sec>h1+h2{margin-top:8px}.reader h3{margin:32px 0 10px;font-size:19px;font-weight:600}.reader p{margin:0 0 16px}.reader ul,.reader ol{margin:0 0 16px;padding-left:1.4em}.reader li{margin:4px 0}.reader li::marker{color:var(--ink-2)}.reader strong{font-weight:600}.reader a{color:var(--link)}.reader p.def{border-left:2px solid var(--signal);padding-left:16px}.reader :not(pre)>code{font-family:var(--font-mono);background:var(--surface-sunken);border-radius:2px;padding:.1em .35em;font-size:.86em}.reader figure{margin:28px 0}.reader figure.fig img{border:1px solid var(--line);cursor:zoom-in;background:#f2f1ed;max-width:100%;height:auto;margin:0 auto;display:block}.reader figure figcaption{color:var(--ink-2);text-align:center;margin-top:10px;font-size:13px;line-height:1.6}.reader figure.tbl figcaption{text-align:left;margin:0 0 8px}.reader .tbl-wrap{overflow-x:auto}.reader table{border-collapse:collapse;width:100%;font-size:15px;line-height:1.6}.reader thead th{font-family:var(--font-mono);letter-spacing:.04em;text-align:left;border-top:2px solid var(--line-strong);border-bottom:2px solid var(--line-strong);white-space:nowrap;padding:10px 12px;font-size:12px;font-weight:500}.reader td,.reader tbody th{border-bottom:1px solid var(--line);vertical-align:top;padding:10px 12px}.reader .box{border-top:2px solid var(--signal);background:var(--surface);margin:24px 0;padding:14px 18px 4px;font-size:15.5px}.reader .box .box-title{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--signal);margin:0 0 6px;font-size:12px}.reader .box.warn{border-top-color:var(--warn)}.reader .box.warn .box-title{color:var(--warn)}.reader .box.prac{border-top-color:var(--ink)}.reader .box.prac .box-title{color:var(--ink)}.reader .code{background:var(--code-bg);color:var(--code-ink);border-radius:2px;margin:20px 0 24px}.reader .code .code-head{font-family:var(--font-mono);color:#a9b1be;border-bottom:1px solid #ffffff1a;align-items:center;gap:10px;padding:8px 14px;font-size:12px;display:flex}.reader .code .code-head .tag{color:var(--code-ink);font-weight:500}.reader .code.run .code-head .tag:before{content:"▶ ";color:#e07a5b}.reader .code .code-head .lang{margin-left:auto}.reader .code .copy{font-family:var(--font-mono);color:#e8e6e0;cursor:pointer;background:0 0;border:1px solid #ffffff40;border-radius:2px;min-height:28px;padding:2px 10px;font-size:12px}.reader .code .copy:hover{border-color:#e8e6e0}.reader .code pre{font-family:var(--font-mono);tab-size:4;margin:0;padding:16px 18px;font-size:13.5px;line-height:1.8;overflow-x:auto}.reader .code pre code{font-size:inherit;color:inherit;background:0 0;padding:0}.reader .code.text pre,.reader .code.term pre{white-space:pre-wrap;overflow-wrap:anywhere}.reader .code pre.numbered{padding-left:0}.reader .code pre.numbered .line{padding-right:12px;display:block}.reader .code pre .ln{text-align:right;color:#8a93a3;-webkit-user-select:none;user-select:none;border-right:1px solid #ffffff1f;width:3.4em;margin-right:12px;padding-right:12px;display:inline-block}.reader .code pre .line.dim,.reader .code pre .line.dim *{color:#8a93a3!important}.reader .code.term .prompt{color:#6fbf8e}.reader .code.term .cmd{color:#fff;font-weight:500}.reader .hl .k,.reader .hl .kn,.reader .hl .kc,.reader .hl .kd,.reader .hl .ow,.reader .hl .nf,.reader .hl .fm,.reader .hl .nc,.reader .hl .nb,.reader .hl .bp{color:var(--code-keyword,#9db7e8)}.reader .hl .s,.reader .hl .s1,.reader .hl .s2,.reader .hl .sa,.reader .hl .sd,.reader .hl .si,.reader .hl .se,.reader .hl .mi,.reader .hl .mf,.reader .hl .m{color:#e3b58c}.reader .hl .c,.reader .hl .c1,.reader .hl .cm,.reader .hl .ch{color:#8a93a3;font-style:italic}@media (max-width:767px){.reader .code{margin-left:-20px;margin-right:-20px}}.reader p.code-sec{border-left:2px solid var(--signal);color:var(--ink-2);margin:36px 0 12px;padding-left:12px}.reader p.code-sec.basic,.reader p.code-sec.print{border-left-color:var(--line)}.reader details.fold{border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:14px 0 20px}.reader details.fold>summary{cursor:pointer;min-height:44px;color:var(--ink-2);align-items:center;gap:10px;font-size:14px;list-style:none;display:flex}.reader details.fold>summary::-webkit-details-marker{display:none}.reader details.fold>summary .open{color:var(--link);margin-left:auto}.reader details.fold>summary .open:before{content:"▸ "}.reader details.fold[open]>summary .open:before{content:"▾ "}.reader .video-block{margin:24px 0}.reader .video-embed{aspect-ratio:16/9;background:#1b2534;position:relative}.reader .video-embed iframe{border:0;width:100%;height:100%;position:absolute;inset:0}.reader .video-block figcaption{text-align:left;border-bottom:3px solid var(--signal);padding-bottom:8px}.reader .hosted-video,.reader .video-locked{aspect-ratio:16/9;background:#1b2534;position:relative}.reader .video-locked{color:#e8ecf2;justify-content:center;align-items:center;display:flex}.reader .video-locked p{margin:0;font-size:15px}.reader .video-hosted-note{border:1px solid var(--line-strong);padding:12px 14px;font-size:14px}.reader .video-missing{border:1px dashed var(--warn);color:var(--warn);padding:12px 14px;font-size:14px}.reader .self-check{border-top:2px solid var(--ink);margin:28px 0 8px;font-size:15px}.reader .self-check-title{justify-content:space-between;margin:0;padding:10px 0;font-weight:600;display:flex}.reader .self-check ul{margin:0;padding:0;list-style:none}.reader .self-check li{border-top:1px solid var(--line);margin:0}.reader .self-check label{cursor:pointer;align-items:flex-start;gap:12px;min-height:44px;padding:11px 0;display:flex}.reader .self-check input{width:18px;height:18px;accent-color:var(--done);flex-shrink:0;margin-top:3px}.reader section[id],.reader figure[id]{scroll-margin-top:80px}.zoom-view{z-index:50;text-align:center;cursor:zoom-out;background:#080c14e6;padding:32px 16px;position:fixed;inset:0;overflow:auto}.zoom-view img{background:#f2f1ed;max-width:none}.zoom-view p{color:#e8e6e0;font-size:14px}
