.books[data-astro-cid-42qkdous]{gap:var(--space-5);max-width:var(--column);display:grid}.intro[data-astro-cid-42qkdous]{color:var(--muted)}.group[data-astro-cid-42qkdous] h2[data-astro-cid-42qkdous]{font-size:var(--text-lg);font-weight:500}.list[data-astro-cid-42qkdous]{gap:var(--space-2);margin-block-start:var(--space-3);padding:0;list-style:none;display:grid}.book[data-astro-cid-42qkdous]{gap:var(--space-1) var(--space-4);padding:var(--space-3) var(--space-4);border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);grid-template-columns:1fr auto;align-items:start;display:grid}.name[data-astro-cid-42qkdous]{font-weight:500}.end[data-astro-cid-42qkdous]{justify-content:flex-end;align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}.used[data-astro-cid-42qkdous]{align-items:center;gap:var(--space-2);flex-wrap:wrap;grid-column:1/-1;display:flex}.book[data-astro-cid-42qkdous][data-done=true] .name[data-astro-cid-42qkdous]{opacity:.7;text-decoration:line-through 1.5px}@media (width<=40rem){.book[data-astro-cid-42qkdous]{grid-template-columns:1fr}.end[data-astro-cid-42qkdous]{justify-content:flex-start}}.roadmap{--spine:var(--line);--branch:var(--muted)}.roadmap .stage.fund{--kc-fill:var(--accent);--kc-line:var(--accent);--kc-soft:color-mix(in oklab, var(--accent) 12%, var(--surface));--kc-on:var(--bg)}.roadmap .stage.prog{--kc-fill:var(--road-yellow);--kc-line:var(--road-yellow-line);--kc-soft:color-mix(in oklab, var(--road-yellow) 22%, var(--surface));--kc-on:var(--road-yellow-on)}.roadmap .stage,.roadmap .milestone{position:relative}.roadmap .stage{column-gap:var(--space-6);padding-block:var(--space-3);grid-template-columns:1fr minmax(13rem,16rem) 1fr;align-items:center;display:grid}.roadmap .stage:before,.roadmap .milestone:before{content:"";background:var(--accent);width:2px;position:absolute;inset-block:0;inset-inline-start:50%;transform:translate(-50%)}.roadmap .map>.stage:first-child:before{inset-block-start:50%}.roadmap .map>.stage:last-child:before{inset-block-end:50%}.roadmap .side{gap:var(--space-2);flex-direction:column;min-width:0;display:flex;position:relative}.roadmap .side.left{border-inline-end:1px dashed var(--branch);align-items:flex-end;padding-inline-end:var(--space-4)}.roadmap .side.right{border-inline-start:1px dashed var(--branch);align-items:flex-start;padding-inline-start:var(--space-4)}.roadmap .side:empty{border:0;padding:0}.roadmap .side:not(:empty):after{content:"";width:var(--space-6);border-block-start:1px dashed var(--branch);position:absolute;inset-block-start:50%}.roadmap .side.left:after{inset-inline-end:calc(var(--space-6) * -1 - 1px)}.roadmap .side.right:after{inset-inline-start:calc(var(--space-6) * -1 - 1px)}.roadmap .node{z-index:1;border:1px solid var(--kc-line);background:var(--kc-soft);color:var(--text);font:inherit;text-align:start;cursor:pointer;border-radius:.5rem;transition:border-color .2s,background-color .2s;position:relative}.roadmap .node:hover{border-color:var(--text)}.roadmap .main{width:100%;min-height:var(--target);padding:var(--space-4);background:var(--kc-fill);color:var(--kc-on);border-width:2px;gap:2px;display:grid}.roadmap .main.opt{background:var(--surface);color:var(--text);border-style:dashed}.roadmap .main .tag{font-size:var(--text-xs);letter-spacing:.08em;text-transform:uppercase;opacity:.8;font-weight:500}.roadmap .main .t{font-size:var(--text-lg);font-weight:600;line-height:var(--leading-snug)}.roadmap .main .step{padding:1px var(--space-2);background:var(--text);color:var(--bg);font-size:var(--text-xs);font-variant-numeric:tabular-nums;border-radius:99px;position:absolute;inset-block-start:-.65rem;inset-inline-end:var(--space-3)}.roadmap .sub{min-height:var(--target);max-width:17rem;font-size:var(--text-sm);align-items:center;font-weight:500;display:flex}.roadmap .sub.opt{background:var(--surface);color:var(--muted);border-style:dashed}.roadmap .sub .lbl{padding:var(--space-2) var(--space-3) var(--space-2) 0;color:inherit;font:inherit;text-align:start;cursor:pointer;background:0 0;border:0;flex:1;align-self:stretch}.roadmap .sub small{font-size:inherit;margin-inline-start:.25em;font-weight:400}.roadmap .ic{width:1rem;height:1rem;margin-inline:var(--space-3) var(--space-2);color:inherit;cursor:pointer;opacity:.5;background:0 0;border:1.5px solid;border-radius:50%;flex:none;place-items:center;padding:0;display:grid;position:relative}.roadmap .ic:after{content:"";position:absolute;inset:-.6rem}.roadmap .ic:hover{color:var(--accent);opacity:1}.roadmap .ic svg{width:.6rem;height:.6rem;display:none}.roadmap [data-st=doing] .ic{border-color:var(--accent);background:conic-gradient(var(--accent) 0 50%, transparent 0);opacity:1}.roadmap [data-st=skip] .ic{opacity:1;background:linear-gradient(currentColor,currentColor) 50%/60% 1.5px no-repeat}.roadmap .ic[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:var(--bg);opacity:1}.roadmap .ic[aria-pressed=true] svg{display:block}.roadmap .sub[data-st=done]{border-color:var(--accent)}.roadmap .sub[data-st=done] .lbl{opacity:.75;text-decoration:line-through 1.5px}.roadmap .sub[data-st=skip],.roadmap .main-cell[data-st=skip] .main{opacity:.45}.roadmap .main-cell{position:relative}.roadmap .stage-ic{z-index:2;background:var(--bg);width:1.4rem;height:1.4rem;color:var(--text);opacity:1;margin:0;position:absolute;inset-block-start:-.7rem;inset-inline-start:var(--space-3)}.roadmap .stage-ic svg{width:.8rem;height:.8rem}.roadmap .main[data-st=done]{outline:3px solid var(--text);outline-offset:3px}.roadmap .main[data-st=doing]{outline:3px dashed var(--text);outline-offset:3px}.roadmap .milestone{justify-items:center;gap:var(--space-1);width:min(26rem,100%);padding:var(--space-4) var(--space-5);border:2px dashed var(--accent);background:var(--bg);text-align:center;border-radius:.5rem;margin-inline:auto;display:grid}.roadmap .milestone:before{z-index:-1;inset-block:calc(var(--space-6) * -1 - 1px)}.roadmap .milestone .text{font-weight:600;line-height:var(--leading-snug)}.roadmap .map>.milestone{margin-block:var(--space-6)}.roadmap .phase{border-style:solid}.roadmap .phase .text{font-size:var(--text-lg)}.roadmap .phase .note{color:var(--muted);font-size:var(--text-sm);line-height:var(--leading-snug)}.roadmap .map>.phase:first-child{margin-block-start:0}.roadmap .map>.phase:first-child:before{inset-block-start:50%}.roadmap .drawer{gap:var(--space-4);width:min(28rem,100%);max-width:none;height:100%;max-height:none;padding:var(--space-5);border:0;border-inline-start:1px solid var(--line);background:var(--bg);color:var(--text);flex-direction:column;margin:0;display:none;position:fixed;inset:0 0 0 auto;overflow-y:auto}.roadmap .drawer[open]{display:flex}.roadmap .drawer::backdrop{background:color-mix(in oklab, var(--bg) 70%, transparent)}.roadmap .drawer h2{font-size:var(--text-xl);font-weight:300;line-height:var(--leading-tight);letter-spacing:-.01em}.roadmap .drawer h2:focus{outline:none}.roadmap .drawer .close,.roadmap .drawer .action{min-height:var(--target);padding-inline:var(--space-4);border:1px solid var(--line);background:var(--surface);color:var(--text);font:inherit;font-size:var(--text-sm);cursor:pointer;border-radius:.5rem}.roadmap .drawer .close{align-self:flex-end}.roadmap .drawer .close:hover,.roadmap .drawer .action:hover{border-color:var(--accent)}.roadmap .drawer .actions{gap:var(--space-2);flex-wrap:wrap;display:flex}.roadmap .drawer .action[aria-pressed=true]{border-color:var(--accent);background:var(--accent);color:var(--bg)}.roadmap .res{gap:var(--space-1);padding:var(--space-3) var(--space-4);background:var(--surface);font-size:var(--text-sm);border-radius:.5rem;display:grid}.roadmap .exit{gap:var(--space-1);padding:var(--space-3) var(--space-4);border-inline-start:3px solid var(--accent);background:color-mix(in oklab, var(--accent) 8%, var(--surface));font-size:var(--text-sm);line-height:var(--leading-snug);border-radius:0 .5rem .5rem 0;display:grid}.roadmap .res[hidden],.roadmap .exit[hidden]{display:none}.roadmap .res b,.roadmap .exit b{color:var(--muted);font-size:var(--text-xs);letter-spacing:.1em;text-transform:uppercase;font-weight:500}.roadmap .res ul{gap:var(--space-1);padding-inline-start:var(--space-4);display:grid}.roadmap .chips{gap:var(--space-2);flex-wrap:wrap;margin-block-start:var(--space-2);padding:0;list-style:none;display:flex}.roadmap .topics{gap:var(--space-1);margin-block-start:var(--space-2);padding:0;list-style:none;display:grid}.roadmap .topics button{align-items:center;gap:var(--space-3);width:100%;min-height:var(--target);color:var(--text);font:inherit;font-size:var(--text-sm);text-align:start;cursor:pointer;background:0 0;border:0;padding:0;display:flex}.roadmap .topics button:hover{color:var(--accent)}.roadmap .dot{border:1.5px solid var(--muted);border-radius:50%;flex:none;width:.65rem;height:.65rem}.roadmap .dot[data-st=done]{border-color:var(--accent);background:var(--accent)}.roadmap .dot[data-st=doing]{border-color:var(--accent);background:conic-gradient(var(--accent) 0 50%, transparent 0)}.roadmap .dot[data-st=skip]{opacity:.45}@media (width<=52rem){.roadmap .stage{row-gap:var(--space-2);padding-block:var(--space-3);grid-template-columns:1fr;padding-inline-start:var(--space-5)}.roadmap .stage:before,.roadmap .map>.stage:first-child:before,.roadmap .map>.stage:last-child:before{inset-inline-start:.4rem;transform:none}.roadmap .map>.stage:first-child:before{inset-block-start:1.5rem}.roadmap .map>.stage:last-child:before{height:1.5rem;inset-block-end:auto}.roadmap .main-cell{order:-1}.roadmap .side.left,.roadmap .side.right{padding:0 0 0 var(--space-4);border-inline:0;border-inline-start:1px dashed var(--branch);align-items:stretch}.roadmap .side:after{display:none}.roadmap .sub{max-width:none}.roadmap .milestone{width:auto;margin-inline:var(--space-5) 0}.roadmap .milestone:before{inset-inline-start:calc(.4rem - var(--space-5) - 2px);transform:none}.roadmap .drawer{border-inline-start:0;border-block-start:1px solid var(--line);border-radius:1rem 1rem 0 0;width:100%;height:auto;max-height:85%;inset:auto 0 0}}.projects[data-astro-cid-wczopqtc]{gap:var(--space-4);max-width:var(--column);display:grid}.intro[data-astro-cid-wczopqtc]{color:var(--muted)}.list[data-astro-cid-wczopqtc]{gap:var(--space-5);padding:0;list-style:none;display:grid}.project[data-astro-cid-wczopqtc]{gap:var(--space-2);padding:var(--space-4) var(--space-5);border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);scroll-margin-block-start:var(--space-5);display:grid}header[data-astro-cid-wczopqtc]{justify-content:space-between;align-items:center;gap:var(--space-2) var(--space-4);flex-wrap:wrap;display:flex}h2[data-astro-cid-wczopqtc]{font-size:var(--text-lg);font-weight:500}.pid[data-astro-cid-wczopqtc]{color:var(--muted);font-variant-numeric:tabular-nums;margin-inline-end:var(--space-2)}.eyebrow[data-astro-cid-wczopqtc]{margin-block-start:var(--space-3)}.scope[data-astro-cid-wczopqtc]{padding:var(--space-2) var(--space-3);border-inline-start:3px solid var(--accent);background:color-mix(in oklab, var(--accent) 8%, var(--surface));font-size:var(--text-sm);line-height:var(--leading-snug)}.points[data-astro-cid-wczopqtc]{gap:var(--space-1);padding-inline-start:var(--space-5);display:grid}.stages[data-astro-cid-wczopqtc]{gap:var(--space-2);flex-wrap:wrap;display:flex}.project[data-astro-cid-wczopqtc][data-done=true] h2[data-astro-cid-wczopqtc]{opacity:.7;text-decoration:line-through 1.5px}.hero[data-astro-cid-yzon3izk]{justify-items:start;gap:var(--space-4);padding-block:var(--space-8) var(--space-6);display:grid}h1[data-astro-cid-yzon3izk]{font-size:var(--text-display);font-weight:300;line-height:var(--leading-tight);letter-spacing:-.02em;text-wrap:balance}.intro[data-astro-cid-yzon3izk]{max-width:52ch;color:var(--muted);font-size:var(--text-lg);line-height:var(--leading-snug)}.progress[data-astro-cid-yzon3izk]{gap:var(--space-2);width:min(100%,28rem);display:grid}.row[data-astro-cid-yzon3izk]{justify-content:space-between;gap:var(--space-4);display:flex}.bar[data-astro-cid-yzon3izk]{background:var(--surface-2);border-radius:99px;height:.5rem;overflow:hidden}.bar[data-astro-cid-yzon3izk] span[data-astro-cid-yzon3izk]{background:var(--accent);height:100%;display:block}.tabs[data-astro-cid-yzon3izk]{gap:var(--space-1);border-block-end:1px solid var(--line);margin-block-end:var(--space-5);display:flex}.tab[data-astro-cid-yzon3izk]{min-height:var(--target);padding-inline:var(--space-4);color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:0;border-block-end:3px solid #0000;font-weight:500}.tab[data-astro-cid-yzon3izk]:hover{color:var(--text)}.tab[data-astro-cid-yzon3izk][aria-selected=true]{border-block-end-color:var(--accent);color:var(--text)}.legend[data-astro-cid-yzon3izk]{gap:var(--space-2) var(--space-5);flex-wrap:wrap;margin-block-end:var(--space-5);padding:0;list-style:none;display:flex}.legend[data-astro-cid-yzon3izk] li[data-astro-cid-yzon3izk]{align-items:center;gap:var(--space-2);display:inline-flex}.sw[data-astro-cid-yzon3izk]{border:1.5px solid var(--line);border-radius:4px;width:.9rem;height:.9rem;display:inline-block}.sw[data-astro-cid-yzon3izk].fund{border-color:var(--accent);background:var(--accent)}.sw[data-astro-cid-yzon3izk].prog{border-color:var(--road-yellow-line);background:var(--road-yellow)}.sw[data-astro-cid-yzon3izk].opt{border-style:dashed;border-color:var(--muted)}.sw[data-astro-cid-yzon3izk].doing{border-color:var(--accent);background:conic-gradient(var(--accent) 0 50%, transparent 0);border-radius:50%}.sw[data-astro-cid-yzon3izk].done{border-color:var(--accent);background:var(--accent);border-radius:50%}.sw[data-astro-cid-yzon3izk].skip{border-color:var(--muted);background:linear-gradient(var(--muted), var(--muted)) center / 60% 1.5px no-repeat;border-radius:50%}.credit[data-astro-cid-yzon3izk]{padding-block:var(--space-7) 0;text-align:center}.roadmap .chip{min-height:1.75rem;padding:0 var(--space-3);border:1px solid var(--line);background:var(--bg);color:var(--text);font:inherit;font-size:var(--text-xs);cursor:pointer;border-radius:99px}.roadmap .chip:hover{border-color:var(--accent);color:var(--accent)}.roadmap .badge{padding:1px var(--space-2);border:1px solid var(--line);font-size:var(--text-xs);border-radius:99px;font-weight:500}.roadmap .badge.paid{border-color:var(--road-yellow-line);background:color-mix(in oklab, var(--road-yellow) 22%, var(--surface))}.roadmap .badge.free{border-color:var(--accent);background:color-mix(in oklab, var(--accent) 12%, var(--surface))}.roadmap .badge.ai{border-color:var(--accent);color:var(--accent)}.roadmap .check{align-items:center;gap:var(--space-2);min-height:var(--target);font-size:var(--text-sm);cursor:pointer;display:inline-flex}.roadmap .check input{width:1.15rem;height:1.15rem;accent-color:var(--accent)}
