.lesson-prose{--lf-ink:#1b2a44;--lf-muted:#5b6880;--lf-line:#d5dde9;--lf-head:#f3f6fa;--lf-keep:#e8efff;--lf-keep-edge:#3155d9;--lf-drop:#8a94a6;--lf-null:#fff4d6;--lf-null-edge:#c99a1e}.lesson-figure{margin:28px 0;padding:0}.lesson-figure figcaption{color:var(--lf-muted);margin-top:12px;font-size:13.5px;line-height:1.5}.lf-grid{min-width:0}.lf-grid-head{align-items:baseline;gap:10px;margin-bottom:12px;font-size:13px;display:flex}.lesson-prose .lf-grid-head code{color:var(--lf-ink);background:0 0;border:0;padding:0;font-size:13.5px;font-weight:700}.lf-grid-head span{color:var(--lf-muted)}.lf-scroll{border:1px solid var(--lf-line);background:#fff;border-radius:8px;width:fit-content;min-width:min(100%,260px);max-width:100%;overflow-x:auto}.lf-scroll:focus-visible{outline:2px solid var(--lf-keep-edge);outline-offset:2px}.lesson-prose .lf-scroll table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;min-width:100%;margin:0;font-size:13.5px;display:table;overflow:visible}.lesson-prose .lf-scroll th,.lesson-prose .lf-scroll td{border:0;border-bottom:1px solid var(--lf-line);text-align:left;white-space:nowrap;box-sizing:border-box;height:37px;padding:0 14px}.lesson-prose .lf-scroll td.is-long{white-space:normal;overflow-wrap:anywhere;min-width:16ch;padding-block:8px}.lesson-prose .lf-scroll th{background:var(--lf-head);color:var(--lf-ink);font-family:var(--code-font,Consolas, monospace);font-size:12.5px;font-weight:700}.lesson-prose .lf-scroll th.is-picked{color:var(--lf-keep-edge);background:#dfe8ff}.lesson-prose .lf-scroll td.is-picked{background:#f3f6ff;font-weight:600}.lesson-prose .lf-scroll tbody tr:last-child td{border-bottom:0}.lesson-prose .lf-scroll .is-num{text-align:right}.lf-null{color:#8a6a10;font-size:12.5px;font-style:italic}.lesson-prose .lf-scroll .lf-empty{color:var(--lf-muted);text-align:center;font-style:italic}.lesson-prose .lf-scroll tr.is-kept td,.lesson-prose .lf-scroll tr.is-marked td,.lesson-prose .lf-scroll tr.is-changed td{background:var(--lf-keep)}.lesson-prose .lf-scroll tr.is-kept td:first-child,.lesson-prose .lf-scroll tr.is-marked td:first-child,.lesson-prose .lf-scroll tr.is-changed td:first-child{box-shadow:inset 3px 0 0 var(--lf-keep-edge)}.lesson-prose .lf-scroll tr.is-dropped td{color:var(--lf-drop);-webkit-text-decoration:line-through #b7bfcc;text-decoration:line-through #b7bfcc}.lesson-prose .lf-scroll tr.is-null-fill td{background:var(--lf-null)}.lesson-prose .lf-scroll tr.is-null-fill td:first-child{box-shadow:inset 3px 0 0 var(--lf-null-edge)}.lf-run{border:1px solid var(--lf-line);background:#fafbfd;border-radius:12px;gap:0;padding:18px;display:grid}.lf-stage{min-width:0;position:relative}.lf-stage+.lf-stage{margin-top:22px}.lf-stage+.lf-stage:before{content:"";background:var(--lf-line);width:2px;height:14px;position:absolute;top:-18px;left:11px}.lesson-prose p.lf-stage-title{color:var(--lf-ink);align-items:center;gap:8px;margin:0 0 10px;font-size:13.5px;font-weight:700;display:flex}.lf-stage-title span{border:1px solid var(--lf-line);width:24px;height:24px;color:var(--lf-muted);background:#fff;border-radius:50%;place-items:center;font-size:12px;display:inline-grid}.lf-sources{flex-wrap:wrap;align-items:flex-start;gap:16px;display:flex}.lf-sources>.lf-grid{flex:0 auto;max-width:100%}.lesson-prose pre.lf-sql{color:#e8eef7;white-space:pre;background:#14253d;border-radius:8px;margin:0;padding:14px 16px;font-size:13.5px;line-height:1.65;overflow-x:auto}.lf-sql .lf-k{color:#8fb4ff;font-weight:700}.lf-sql .lf-s{color:#f2c97d}.lf-sql .lf-n{color:#a6e3a1}.lf-sql .lf-c{color:#8796ad;font-style:italic}.lf-params{color:var(--muted,#5b6474);margin:8px 0 0;font-size:13px}.lf-params code{font-family:var(--code-font,Consolas, monospace);color:var(--ink,#1d2433)}.lf-params>span{white-space:nowrap;display:inline-block}.lf-error{color:#9b2c2c;font-family:var(--code-font,Consolas, monospace);background:#fff5f5;border:1px solid #f0c2c2;border-radius:8px;margin:0;padding:10px 14px;font-size:13px}.lf-join{border:1px solid var(--lf-line);background:#fafbfd;border-radius:12px;padding:18px}.lf-join-row{align-items:flex-start;padding-bottom:2px;display:flex;overflow-x:auto}.lf-join-row>.lf-grid{flex:none}.lf-join-lines{flex:none;overflow:visible}.lf-join-lines path{fill:none;stroke:var(--lf-keep-edge);stroke-width:1.6px}.lf-join-null line{stroke:var(--lf-null-edge);stroke-width:1.4px;stroke-dasharray:3 3}.lf-join-null text{fill:#8a6a10;font-size:11px;font-style:italic;font-family:var(--code-font,Consolas, monospace)}.lf-legend{color:var(--lf-muted);flex-wrap:wrap;gap:6px 18px;margin:14px 0 0;padding:0;font-size:13px;list-style:none;display:flex}.lesson-prose .lf-legend li{align-items:center;gap:7px;margin:0;display:flex}.lf-legend i{border:1px solid var(--lf-line);border-radius:2px;width:14px;height:10px}.lf-legend i.is-kept{background:var(--lf-keep);border-color:var(--lf-keep-edge)}.lf-legend i.is-null-fill{background:var(--lf-null);border-color:var(--lf-null-edge)}.lf-legend i.is-dropped{border-style:dashed;border-color:var(--lf-drop);background:#fff}.lesson-prose ol.lf-flow{counter-reset:none;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:10px;margin:0;padding:0;list-style:none;display:grid}.lesson-prose ol.lf-flow li{border:1px solid var(--lf-line);background:#fff;border-radius:10px;align-content:start;gap:6px;margin:0;padding:12px 14px;display:grid;position:relative}.lf-flow-n{color:var(--lf-muted);font-size:12px;font-weight:700}.lesson-prose .lf-flow code{color:var(--lf-keep-edge);background:0 0;border:0;justify-self:start;padding:0;font-size:14px;font-weight:700}.lf-flow-text{color:var(--lf-ink);font-size:13.5px;line-height:1.45}.lesson-callout{--callout:#3155d9;--callout-bg:#f2f5ff;border:1px solid color-mix(in srgb, var(--callout) 22%, transparent);border-left:4px solid var(--callout);background:var(--callout-bg);border-radius:0 10px 10px 0;margin:22px 0;padding:14px 18px}.lesson-callout.is-goal,.lesson-callout.is-prereq{--callout:#2f6f5e;--callout-bg:#f0f8f5}.lesson-callout.is-tip{--callout:#2f7d4f;--callout-bg:#f1f9f4}.lesson-callout.is-warning{--callout:#b5520f;--callout-bg:#fff6ee}.lesson-callout.is-check{--callout:#6a4fc9;--callout-bg:#f6f3ff}.lesson-prose .lesson-callout-title{color:var(--callout);letter-spacing:.02em;text-transform:uppercase;margin:0 0 6px;font-size:13px;font-weight:800}.lesson-prose .lesson-callout>:last-child,.lesson-prose .lesson-callout-answer>:last-child{margin-bottom:0}.lesson-prose .lesson-callout ul{margin:4px 0 0;padding-left:20px}.lesson-callout-answer{margin-top:8px}.lesson-callout-answer summary{color:var(--callout);cursor:pointer;font-weight:700}.lesson-callout-answer summary:focus-visible{outline:2px solid var(--callout);outline-offset:2px}.lesson-prose p.lf-swipe{display:none}@media (max-width:760px){.lf-join-lines{width:56px}.lf-join-null text{display:none}.lesson-prose p.lf-swipe{color:var(--lf-muted);margin:8px 0 0;font-size:12.5px;display:block}.lf-run,.lf-join{border-radius:10px;padding:12px}.lesson-prose .lf-scroll th,.lesson-prose .lf-scroll td{padding:0 10px}.lesson-prose ol.lf-flow{grid-template-columns:1fr}}.erd-diagram{--erd-line:#cfd8e6;--erd-ink:#1b2a44;--erd-muted:#5b6880;--erd-link:#7f93b8;color:var(--erd-ink);font-family:var(--font-sans)}.erd-wide{padding:4px 2px 8px;overflow-x:auto}.erd-canvas{margin:0 auto;position:relative}.erd-links{position:absolute;inset:0;overflow:visible}.erd-links path{fill:none;stroke:var(--erd-link);stroke-width:1.5px}.erd-card{border:1px solid var(--erd-line);background:#fff;border-radius:10px;overflow:hidden;box-shadow:0 1px 2px #1b2a440d}.erd-canvas>.erd-card{position:absolute}.erd-head{box-sizing:border-box;background:#f3f6fa;border-bottom:1px solid #dfe5ee;justify-content:space-between;align-items:center;gap:8px;height:44px;padding:0 12px;display:flex}.erd-name,.erd-col,.erd-type,.erd-ref{font-family:var(--code-font,Consolas, "Cascadia Mono", monospace)}.erd-name{font-size:14px;font-weight:700}.erd-count{color:var(--erd-muted);font-size:12px}.erd-row{box-sizing:border-box;border-top:1px solid #eef2f7;grid-template-columns:44px minmax(0,1fr) auto;align-items:center;gap:4px;height:32px;padding:0 10px 0 8px;font-size:13px;display:grid}.erd-head+.erd-row{border-top:0}.erd-row.is-pk .erd-col{font-weight:700}.erd-col{white-space:nowrap;align-items:center;min-width:0;display:flex;overflow:hidden}.erd-type{color:var(--erd-muted);font-size:11px}.erd-badges{gap:3px;display:flex}.erd-badges abbr{font:800 9.5px/1.4 var(--font-sans);letter-spacing:.02em;border-radius:4px;padding:1px 4px;text-decoration:none}.erd-pk{color:#8a6200;background:#fff1c7}.erd-fk{color:#3155d9;background:#e5ecff}.erd-chip{color:var(--erd-muted);font:10.5px/1.6 var(--font-sans);background:#f1f3f7;border-radius:4px;flex:none;margin-left:5px;padding:0 4px;font-weight:400}.erd-ref{color:#3155d9;grid-column:2/-1;font-size:12px}.erd-stack{display:none}@media (max-width:760px){.erd-wide{display:none}.erd-stack{gap:12px;display:grid}.erd-stack .erd-row{height:auto;min-height:32px;padding-block:6px}}.lf-pyrun{gap:12px;display:grid}.lesson-prose .lf-pyrun>.code-block{margin:0}.lf-pyrun-error{color:#9b2c2c;background:#fff5f5;border:1px solid #f0c2c2;border-radius:8px;padding:10px 14px}.lesson-prose .lf-pyrun-error p{margin:0 0 6px;font-size:13px;font-weight:700}.lesson-prose .lf-pyrun-error pre{color:inherit;white-space:pre-wrap;overflow-wrap:anywhere;background:0 0;border:0;margin:0;padding:0;font-size:13.5px}.lesson-prose .lf-pyrun-empty{border:1px dashed var(--lf-line);color:var(--lf-muted);border-radius:8px;margin:0;padding:10px 14px;font-size:13.5px}.lf-scroll.lf-array{width:fit-content}.lesson-prose .lf-array table{border-collapse:separate;border-spacing:6px 8px;width:auto;padding:4px 8px}.lesson-prose .lf-array th,.lesson-prose .lf-array td{text-align:center;vertical-align:top;background:0 0;border:0;padding:0}.lesson-prose .lf-array .lf-array-index{color:var(--lf-muted);font:600 11.5px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.lesson-prose .lf-array tbody th{color:var(--lf-muted);text-align:right;white-space:nowrap;padding:9px 8px 0 0;font-size:12.5px;font-weight:650}.lf-array-cell{border:1px solid var(--lf-line);min-width:38px;height:36px;color:var(--lf-ink);background:#fff;border-radius:7px;place-items:center;padding:0 8px;font:600 14px/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;display:grid}.lf-array td.is-keep .lf-array-cell{border-color:var(--lf-keep-edge);background:var(--lf-keep)}.lf-array td.is-fill .lf-array-cell{border-color:var(--lf-null-edge);background:var(--lf-null)}.lf-array td.is-drop .lf-array-cell{color:var(--lf-drop);background:#f6f7f9;border-style:dashed;text-decoration:line-through}.lf-array td.is-focus .lf-array-cell{border:2px solid var(--lf-ink)}.lf-array-ptr{flex-direction:column;align-items:center;gap:2px;margin-top:4px;display:flex}.lf-array-ptr b{background:var(--lf-ink);color:#fff;border-radius:999px;padding:1px 6px;font:700 11px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.lf-array-ptr b:before{content:"▲ ";font-size:8px}.lf-scroll.lf-graph{width:fit-content;padding:4px}.lf-graph svg{display:block}.lf-graph .lf-edge line{stroke:#9aa7bb;stroke-width:1.6px}.lf-graph marker path{fill:#7d8aa0}.lf-graph .lf-edge text,.lf-graph .lf-node-note{fill:var(--lf-ink);text-anchor:middle;paint-order:stroke;stroke:#fff;stroke-width:4px;stroke-linejoin:round;font:600 12px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.lf-graph .lf-edge.is-keep line,.lf-graph .lf-edge.is-focus line{stroke:var(--lf-keep-edge);stroke-width:2.6px}.lf-graph .lf-edge.is-drop line{stroke:#c3cad6;stroke-dasharray:5 4}.lf-graph .lf-edge.is-drop text{fill:var(--lf-drop)}.lf-graph .lf-node circle{fill:#fff;stroke:#8f9cb2;stroke-width:1.6px}.lf-graph .lf-node>text:not(.lf-node-note){fill:var(--lf-ink);text-anchor:middle;font:700 13.5px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.lf-graph .lf-node.is-keep circle{fill:var(--lf-keep);stroke:var(--lf-keep-edge)}.lf-graph .lf-node.is-fill circle{fill:var(--lf-null);stroke:var(--lf-null-edge)}.lf-graph .lf-node.is-drop circle{fill:#f6f7f9;stroke:#c3cad6;stroke-dasharray:4 3}.lf-graph .lf-node.is-drop>text{fill:var(--lf-drop)}.lf-graph .lf-node.is-focus circle{stroke:var(--lf-ink);stroke-width:3px}
