@import"https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable-dynamic-subset.min.css";@import"https://cdn.jsdelivr.net/npm/@fontsource/jetbrains-mono@5/index.css";:root{--ink: #161513;--ink-2: #312d2a;--muted: #6b6762;--faint: #a19c95;--paper: #fbf9f8;--paper-2: #f1efed;--card: #ffffff;--rule: #e4e1dd;--rule-2: #cfcac3;--red: #c74634;--red-2: #a63a2a;--red-fill: #fbedea;--hi: #fff1c2;--hi-2: #f7c948;--mem: #e8eef7;--disk: #f8ece0;--v1: #1f6fa6;--v1-fill: #e4eef7;--v1-soft: #f1f6fb;--v2: #1c7c66;--v2-fill: #e1f1ec;--v2-soft: #f0f8f5;--v3: #c74634;--v3-fill: #fbe9e5;--v3-soft: #fdf4f2;--v0: #6b6762;--v0-fill: #eceae6;--v0-soft: #f5f4f2;--stuck: #7a5cb8;--stuck-fill: #efeaf8;--sans: "Pretendard Variable", Pretendard, "Malgun Gothic", "Apple SD Gothic Neo", "Noto Sans KR", system-ui, sans-serif;--mono: "JetBrains Mono", "D2Coding", Consolas, "Cascadia Mono", "Noto Sans Mono CJK KR", monospace;--w: 920px;--r: 6px;--shadow: 0 1px 2px rgba(22, 21, 19, .05), 0 4px 14px -8px rgba(22, 21, 19, .14);--shadow-2: 0 2px 4px rgba(22, 21, 19, .06), 0 12px 28px -12px rgba(22, 21, 19, .2)}*{box-sizing:border-box}html{scroll-behavior:smooth}html,body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.75;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;word-break:keep-all;overflow-wrap:anywhere}a{color:var(--red);text-decoration:none;text-underline-offset:.18em}a:hover{text-decoration:underline}::selection{background:#f9d6cf}code,pre,.mono{font-family:var(--mono);font-size:.88em;font-feature-settings:"liga" 0,"calt" 0;font-variant-ligatures:none}code{background:var(--paper-2);border:1px solid var(--rule);padding:.05em .38em;border-radius:5px;color:var(--ink-2)}pre{background:var(--paper-2);border:1px solid var(--rule);border-radius:8px;padding:.9em 1.1em;overflow-x:auto;line-height:1.55}pre code{background:none;border:0;padding:0;color:var(--ink)}h1,h2,h3,h4{line-height:1.28;font-weight:700;margin:1.7em 0 .6em;letter-spacing:-.012em}h1{font-size:2rem;margin-top:.5em}h2{font-size:1.32rem;margin-top:2.2em;padding-bottom:.35em;border-bottom:1px solid var(--rule)}h2:before{content:"";display:inline-block;width:.5em;height:.5em;border-radius:1px;background:var(--vc, var(--red));margin-right:.55em;vertical-align:.1em}h3{font-size:1.08rem}p{margin:.75em 0}b,strong{font-weight:650}ol,ul{padding-left:1.4em}li{margin:.25em 0}table{border-collapse:collapse;width:100%;margin:1.1em 0;font-size:.94em;border:1px solid var(--rule);border-radius:8px;overflow:hidden}th,td{padding:.5em .75em;text-align:left;vertical-align:top;border-top:1px solid var(--rule)}thead th{background:var(--paper-2);font-weight:650;border-top:0;color:var(--ink-2);font-size:.92em;letter-spacing:.01em}tbody tr:nth-child(2n) td{background:#fbfaf7}blockquote{margin:1.2em 0;padding:.8em 1.2em;border-left:4px solid var(--vc, var(--red));background:var(--vf, var(--paper-2));border-radius:0 8px 8px 0;font-size:1.04em}hr{border:0;border-top:1px solid var(--rule);margin:2.4em 0}small,.muted{color:var(--muted)}small{font-size:.88em}input{font:inherit}.top{position:sticky;top:0;z-index:10;background:var(--ink-2);border-bottom:3px solid var(--red)}.top .in{max-width:var(--w);margin:0 auto;padding:.65em 20px;display:flex;gap:1.6em;align-items:center;flex-wrap:wrap}.top .brand{font-weight:700;color:#fff;letter-spacing:-.01em;display:inline-flex;align-items:center;gap:.6em}.top .brand:hover{text-decoration:none}.top .brand:before{content:"";width:1.1em;height:1.1em;border-radius:2px;background:var(--red);box-shadow:inset 0 0 0 2px #fff3,0 0 0 1px #0004}.top nav{display:flex;gap:.1em;flex-wrap:wrap;margin-left:auto}.top nav a{color:#d9d4cd;padding:.3em .65em;border-radius:4px;font-size:.93em;font-weight:500;border-bottom:2px solid transparent}.top nav a:hover{background:#ffffff14;text-decoration:none;color:#fff}.top nav a.active{color:#fff;border-bottom-color:var(--red);background:#ffffff10;font-weight:650}main{max-width:var(--w);margin:0 auto;padding:1.2em 20px 5em}footer{border-top:1px solid var(--rule);margin-top:4em;background:var(--ink-2)}footer .in code{background:#ffffff14;border-color:#fff2;color:#f3efe9}footer .in{max-width:var(--w);margin:0 auto;padding:1.4em 20px;color:#c9c3bb;font-size:.88em}.crumbs{color:var(--muted);font-size:.88em;margin-top:1.2em}.crumbs a{color:var(--muted)}.v1{--vc: var(--v1);--vf: var(--v1-fill);--vs: var(--v1-soft)}.v2{--vc: var(--v2);--vf: var(--v2-fill);--vs: var(--v2-soft)}.v3{--vc: var(--v3);--vf: var(--v3-fill);--vs: var(--v3-soft)}.v0{--vc: var(--v0);--vf: var(--v0-fill);--vs: var(--v0-soft)}.tag{display:inline-block;font-size:.76em;font-weight:600;padding:.05em .55em;border:1px solid var(--vc, var(--v0));color:var(--vc, var(--v0));border-radius:999px;line-height:1.7;white-space:nowrap;background:var(--card)}.tag.fill{background:var(--vf, var(--v0-fill));border-color:transparent}a.tag:hover{text-decoration:none;filter:brightness(.95)}.dot{display:inline-block;width:.65em;height:.65em;border-radius:50%;background:var(--vc, var(--v0));margin-right:.4em;vertical-align:0}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1em;margin:1.2em 0}.card{position:relative;border:1px solid var(--rule);border-radius:var(--r);padding:1.1em 1.25em 1.05em;background:var(--card);box-shadow:var(--shadow);transition:transform .15s ease,box-shadow .15s ease}.card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;border-radius:var(--r) 0 0 var(--r);background:var(--vc, var(--red))}.card:hover{transform:translateY(-2px);box-shadow:var(--shadow-2)}.card h3{margin:0 0 .45em;font-size:1.06rem}.card h3 a{color:var(--ink)}.card .goal{color:var(--muted);font-size:.92em;margin:.3em 0}.card.static:hover{transform:none;box-shadow:var(--shadow)}.box{border:1px solid var(--rule);border-radius:var(--r);margin:1.4em 0;background:var(--card);box-shadow:var(--shadow);overflow:hidden}.box>.title{display:flex;align-items:center;gap:.55em;padding:.5em 1em;font-weight:650;background:var(--vf, var(--v1-fill));color:var(--vc, var(--v1));border-bottom:1px solid var(--rule);font-size:.96em}.box>.title:before{content:"■";font-size:.7em;opacity:.8}.box>.body{padding:.6em 1.05em .5em}.box>.body>:first-child{margin-top:.3em}.box.work>.title:before{content:"✎";font-size:1em}.box.observe{--vc: var(--v0);--vf: var(--v0-fill)}.box.observe>.title:before{content:"◎";font-size:1em}.box.stuck{--vc: var(--stuck);--vf: var(--stuck-fill)}.box.stuck>.title:before{content:"?";font-weight:800;width:1.3em;height:1.3em;border-radius:50%;background:var(--stuck);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:.8em}.box.predict{--vc: #8a5a00;--vf: #fff3d6;background:#fffcf4}.box.predict>.title:before{content:"→"}.box.predict details{margin:.2em 0 .4em}.box.predict summary{cursor:pointer;font-weight:650;color:var(--vc);list-style:none;display:inline-flex;align-items:center;gap:.4em}.box.predict summary:before{content:"▸";transition:transform .15s}.box.predict details[open] summary:before{transform:rotate(90deg)}.box.predict summary::-webkit-details-marker{display:none}.box .box{box-shadow:none}.stepper{display:grid;grid-template-columns:repeat(6,1fr);gap:.5em;margin:1.2em 0;position:relative}.stepper button,.stepper a{position:relative;border:1px solid var(--rule-2);background:var(--card);padding:.75em .3em .6em;cursor:pointer;font:inherit;border-radius:10px;line-height:1.3;text-align:center;color:var(--ink);box-shadow:var(--shadow);transition:transform .12s,box-shadow .12s,border-color .12s}.stepper button:hover{transform:translateY(-1px);box-shadow:var(--shadow-2);text-decoration:none}.stepper button.on,.stepper a.on{background:var(--red-fill);border-color:var(--red);border-width:1px;box-shadow:0 0 0 3px #c7463422,var(--shadow)}.stepper .k{display:block;font-size:1.35em;font-weight:700;line-height:1.2}.stepper .t{display:block;font-size:.88em;color:var(--ink-2)}.switch{display:inline-flex;border:1px solid var(--rule-2);border-radius:999px;overflow:hidden;margin:.6em 0;background:var(--card);padding:3px;gap:3px}.switch button{border:0;background:transparent;padding:.3em 1em;cursor:pointer;font:inherit;border-radius:999px;color:var(--muted);font-weight:550}.switch button.on{background:var(--red);color:#fff}.fnlist{display:flex;flex-wrap:wrap;gap:.45em;align-items:center;row-gap:.5em}.fn{font-family:var(--mono);font-size:.86em;border:1px solid var(--vc, var(--v0));background:var(--vf, var(--v0-fill));color:var(--ink);padding:.05em .5em;border-radius:6px}.fn.ghost{opacity:.32}.arrow{color:var(--faint)}.plan{display:grid;grid-template-columns:1fr 1fr;gap:1.2em}@media(max-width:720px){.plan{grid-template-columns:1fr}.stepper{grid-template-columns:repeat(3,1fr)}}.figtabs{display:flex;gap:.4em;flex-wrap:wrap;margin:1em 0 .6em}.figtabs button,.filters button{border:1px solid var(--rule-2);background:var(--card);padding:.3em .85em;cursor:pointer;font:inherit;font-size:.92em;border-radius:999px;color:var(--ink-2)}.figtabs button:hover,.filters button:hover{background:var(--paper-2)}.figtabs button.on,.filters button.on{background:var(--ink-2);color:#fff;border-color:var(--ink-2)}.filters{display:flex;gap:.4em;flex-wrap:wrap;margin:.4em 0 1em;align-items:center}.filters input{padding:.3em .7em;border:1px solid var(--rule-2);border-radius:999px;background:var(--card);min-width:12em}.figwrap{border:1px solid var(--rule);border-radius:var(--r);background:var(--card);padding:.8em;overflow-x:auto;box-shadow:var(--shadow)}svg.fig{width:100%;height:auto;font-family:var(--sans);font-size:13px}svg.fig .box{cursor:pointer;margin:0;border:0;box-shadow:none;overflow:visible}svg.fig .box rect{stroke-width:1;transition:opacity .15s}svg.fig .box.dim rect{opacity:.22}svg.fig .box.dim text{opacity:.3}svg.fig .box.none rect{stroke-dasharray:4 3;fill:#f4f3ef}svg.fig .box.on rect{stroke-width:2.5;filter:drop-shadow(0 2px 3px rgba(0,0,0,.12))}svg.fig text{fill:var(--ink)}svg.fig .sub{fill:var(--muted);font-size:11px}svg.fig .mono{font-family:var(--mono)}.legend{display:flex;gap:1.2em;flex-wrap:wrap;font-size:.88em;margin:.7em 0;color:var(--muted)}.detail{border:1px solid var(--rule);border-radius:var(--r);padding:.8em 1.1em;margin:.9em 0;background:var(--card);min-height:4.2em;box-shadow:var(--shadow)}.detail .code{font-family:var(--mono);font-size:.88em}.growth{display:flex;height:38px;border:1px solid var(--rule-2);border-radius:8px;margin:.9em 0 .3em;overflow:hidden;background:var(--card)}.growth .seg{position:relative;border-right:1px solid #fff;cursor:pointer;transition:filter .12s}.growth .seg:hover{filter:brightness(.9)}.growth .seg span{position:absolute;left:4px;top:9px;font-size:10px;font-weight:600;color:var(--ink-2);white-space:nowrap;overflow:hidden;max-width:100%}.ticks{display:flex;justify-content:space-between;font-size:.8em;color:var(--muted);font-family:var(--mono)}.sec{border:1px solid var(--rule);border-radius:8px;padding:.6em .9em;margin:.55em 0;background:var(--card);border-left:4px solid var(--vc, var(--v0))}.sec .head{display:flex;gap:.7em;align-items:baseline;flex-wrap:wrap}.sec .head .lines{color:var(--muted);font-size:.82em;font-family:var(--mono);margin-left:auto}.chips{display:flex;flex-wrap:wrap;gap:.3em;margin-top:.4em}.chip{font-family:var(--mono);font-size:.78em;padding:.05em .45em;border-radius:5px;border:1px solid var(--vc, var(--v0));background:var(--vf, var(--v0-fill));cursor:pointer;transition:transform .1s}.chip:hover{transform:translateY(-1px)}.chip.const{border-style:dotted}.chip.dim{opacity:.2}.chip.on{outline:2px solid var(--red)}.bars{display:grid;grid-template-columns:6em 1fr 3em;gap:.35em .7em;align-items:center;font-size:.9em}.bars .bar{height:12px;background:var(--vc, var(--v0));border-radius:3px}.codebox{border:1px solid var(--rule);border-radius:var(--r);margin:1.2em 0;overflow:hidden;box-shadow:var(--shadow);background:var(--card)}.codebox .head{display:flex;justify-content:space-between;gap:1em;padding:.4em .9em;background:var(--paper-2);border-bottom:1px solid var(--rule);font-size:.86em;flex-wrap:wrap;color:var(--ink-2)}.codebox .head code{background:none;border:0;padding:0;color:var(--ink);font-weight:600}.codebox pre{border:0;margin:0;background:var(--card);border-radius:0;padding:.6em 0}.codebox .line{display:block;min-height:1.55em;white-space:pre;padding:0 1em 0 .4em;border-left:3px solid transparent}.codebox .ln{display:inline-block;width:3.6em;color:var(--faint);text-align:right;padding-right:1.1em;-webkit-user-select:none;user-select:none;font-size:.9em}.codebox .mark{background:var(--hi);border-left-color:var(--hi-2)}.progress{height:8px;border-radius:999px;background:var(--paper-2);border:1px solid var(--rule);margin:.5em 0 .2em;overflow:hidden}.progress i{display:block;height:100%;background:var(--vc, var(--v1));border-radius:999px}.status{font-size:.74em;font-weight:600;padding:.05em .6em;border-radius:999px;border:1px solid var(--rule-2);color:var(--muted);background:var(--card)}.status.done{border-color:transparent;color:var(--v2);background:var(--v2-fill)}.status.reviewing{border-color:transparent;color:var(--stuck);background:var(--stuck-fill)}.units{list-style:none;padding:0;margin:.5em 0}.units li{display:grid;grid-template-columns:5.5em 1fr auto;gap:.9em;padding:.6em 0;border-bottom:1px solid var(--rule);align-items:baseline}.units li:last-child{border-bottom:0}.units li .q{color:var(--muted);font-size:.9em}.kv{display:grid;grid-template-columns:9.5em 1fr;gap:.45em 1.2em;border:1px solid var(--rule);border-radius:var(--r);padding:.9em 1.1em;background:var(--card)}.kv dt{font-weight:650;color:var(--ink-2)}.kv dd{margin:0}.two{display:grid;grid-template-columns:1fr 1fr;gap:1.6em}@media(max-width:760px){.two,.kv{grid-template-columns:1fr}}.hero{position:relative;border:1px solid var(--rule);border-radius:14px;padding:1.8em 2em 1.6em;margin:1.4em 0 1.8em;background:linear-gradient(180deg,#ffffff,var(--paper-2));box-shadow:var(--shadow);overflow:hidden}.hero:after{content:"";position:absolute;right:-60px;top:-60px;width:220px;height:220px;border-radius:50%;background:radial-gradient(closest-side,#f9d6cfaa,transparent 70%);pointer-events:none}.hero h1{margin:0 0 .5em;font-size:2.1rem;letter-spacing:-.02em}.hero .lead{font-size:1.04em;color:var(--ink-2)}.hero .sql{font-family:var(--mono);font-size:1.12em;background:var(--ink-2);color:#f3efe9;border-radius:8px;padding:.55em 1em;display:inline-block;margin:.3em 0 .6em;box-shadow:var(--shadow)}.hero .sql .kw{color:#ff9d8a}.hero .stats{display:flex;gap:1.6em;flex-wrap:wrap;margin-top:1em;padding-top:1em;border-top:1px dashed var(--rule-2)}.hero .stat b{display:block;font-size:1.4em;letter-spacing:-.02em;line-height:1.1}.hero .stat small{color:var(--muted)}.num{display:inline-flex;align-items:center;justify-content:center;width:1.7em;height:1.7em;border-radius:3px;background:var(--red);color:#fff;font-weight:700;font-size:.85em;margin-right:.5em;flex:none}.h-step{display:flex;align-items:center;gap:.6em}.box.note>.title:before{content:none}.plan table td:last-child{text-align:right;width:5.5em;font-weight:600}.box .fnlist{margin:.2em 0 .4em}.term{border-radius:8px;overflow:hidden;margin:.8em 0;box-shadow:0 8px 24px -12px #16151373;border:1px solid #2a2725}.term .bar{display:flex;align-items:center;gap:.8em;padding:.45em .9em;background:#2d2a27;color:#a39d95;font-size:.8em}.term .dots{display:inline-flex;gap:6px}.term .dots i{width:11px;height:11px;border-radius:50%;background:#5b5652;display:inline-block}.term .dots i:nth-child(1){background:#d96b5f}.term .dots i:nth-child(2){background:#e0b04f}.term .dots i:nth-child(3){background:#6fb96a}.term pre{margin:0;border:0;border-radius:0;background:#1e1c1a;color:#d9d3cb;padding:1em 1.2em 1.1em;font-size:.84em;line-height:1.6}.term .cmd{color:#fff;font-weight:600}.term .ps{color:#8a847c;font-weight:400}.term .prompt{color:#8a847c}.term .in{color:#fff;font-weight:600}.term .out{color:#cfc8bf}.term .dim{color:#6f6961}.term .err{color:#f0917f}.cb{border:1px solid var(--rule);border-radius:8px;overflow:hidden;margin:.6em 0 .9em;background:var(--card)}.cb-bar{display:flex;justify-content:space-between;align-items:center;padding:.25em .8em;background:var(--paper-2);border-bottom:1px solid var(--rule);font-size:.78em;color:var(--muted);font-weight:600;letter-spacing:.02em}.cb-bar button{font:inherit;font-size:.95em;border:1px solid var(--rule-2);background:var(--card);color:var(--ink-2);border-radius:999px;padding:.05em .7em;cursor:pointer}.cb-bar button:hover{border-color:var(--red);color:var(--red)}.cb pre{margin:0;border:0;border-radius:0;background:var(--card);padding:.7em 1em;font-size:.84em;line-height:1.5}.cb.lang-bash pre{background:#f6f4f1}.cb.lang-text pre{background:#fffdf7;color:var(--ink-2)}.cb.lang-text .cb-bar{background:#fbf5e3;color:#8a5a00}.box.work .edit{margin:.4em 0 .6em;padding-left:.9em;border-left:2px solid var(--rule)}.box.work .edit p{margin:.45em 0}.box.work.done{--vc: var(--v2);--vf: var(--v2-fill)}.box.work.done>.title:before{content:"✔"}.umap{border:1px solid var(--rule);border-radius:var(--r);background:var(--card);padding:.7em .9em .6em;margin:1em 0 .4em;box-shadow:var(--shadow)}.umap-head{display:flex;justify-content:space-between;font-size:.9em;margin-bottom:.45em}.umap-strip{list-style:none;padding:0;margin:0;display:flex;gap:.35em;flex-wrap:wrap}.umap-strip li a{display:block;border:1px solid var(--rule-2);border-radius:6px;padding:.25em .55em;color:var(--ink-2);background:var(--paper-2);font-size:.82em;line-height:1.3;min-width:6.5em}.umap-strip li a:hover{text-decoration:none;border-color:var(--red)}.umap-strip li a .k{display:block;font-family:var(--mono);font-size:.85em;color:var(--muted)}.umap-strip li a .t{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:11em}.umap-strip li.done a{background:var(--v2-fill);border-color:transparent}.umap-strip li.on a{background:var(--red-fill);border-color:var(--red);color:var(--ink);font-weight:650}.umap-now{margin-top:.55em;font-size:.92em;border-top:1px dashed var(--rule);padding-top:.45em}.umap-now .tag{margin-right:.3em}.sublist td .q{color:var(--muted);font-size:.9em;margin-top:.15em}.sublist .tag{white-space:normal}
