.nb-columns{display:grid;grid-template-columns:repeat(var(--nb-col-count, 2),1fr);gap:1.5rem}@media(max-width:600px){.nb-columns{grid-template-columns:1fr}}.nb-h1{font-size:1.6rem;font-weight:700;letter-spacing:-.02em;line-height:1.2;margin:2rem 0 .5rem}.nb-h2{font-size:1.25rem;font-weight:600;letter-spacing:-.01em;line-height:1.3;margin:1.75rem 0 .4rem}.nb-h3{font-size:1.05rem;font-weight:600;line-height:1.4;margin:1.5rem 0 .35rem}p{line-height:1.75;margin:.25rem 0}br{display:block;content:"";margin:.5rem 0}.nb-list{padding-left:1.5rem;margin:.5rem 0;display:flex;flex-direction:column;gap:.25rem}.nb-list li{line-height:1.7}.nb-list .nb-list{margin:.25rem 0}.nb-todo{display:flex;flex-direction:column;gap:.25rem;margin:.2rem 0}.nb-todo label{display:flex;align-items:flex-start;gap:.5rem;cursor:default;line-height:1.7}.nb-todo input[type=checkbox]{margin-top:.3em;accent-color:var(--accent);flex-shrink:0}.nb-todo-children{margin-left:1.5rem}.nb-toggle{border:none;margin:.35rem 0}.nb-toggle summary{cursor:pointer;list-style:none;display:flex;align-items:flex-start;gap:.4rem;padding:.15rem 0;line-height:1.7}.nb-toggle summary:before{content:"▶";font-size:.6em;margin-top:.45em;flex-shrink:0;transition:transform .15s;color:var(--muted)}.nb-toggle[open] summary:before{transform:rotate(90deg)}.nb-toggle summary::-webkit-details-marker{display:none}.nb-toggle-body{padding-left:1.25rem;margin-top:.25rem;border-left:2px solid var(--border)}.nb-quote{border-left:3px solid var(--accent);margin:1rem 0;padding:.25rem 0 .25rem 1rem;color:var(--muted);line-height:1.75;font-style:italic}.nb-callout{display:flex;gap:.75rem;align-items:flex-start;padding:.875rem 1rem;border-radius:6px;margin:.75rem 0;background:var(--surface);border:1px solid var(--border)}.nb-callout-icon{font-size:1.25rem;flex-shrink:0;line-height:1}.nb-callout-icon-img{width:1.25rem;height:1.25rem;object-fit:contain;flex-shrink:0}.nb-callout-body{flex:1;line-height:1.7;min-width:0}.nb-color-gray{background:#78777426;border-color:#7877744d}.nb-color-brown{background:#9f6b5326;border-color:#9f6b534d}.nb-color-orange{background:#d9730d26;border-color:#d9730d4d}.nb-color-yellow{background:#cb912f26;border-color:#cb912f4d}.nb-color-green{background:#44836126;border-color:#4483614d}.nb-color-blue{background:#337ea926;border-color:#337ea94d}.nb-color-purple{background:#9065b026;border-color:#9065b04d}.nb-color-pink{background:#c14c8a26;border-color:#c14c8a4d}.nb-color-red{background:#d44c4726;border-color:#d44c474d}.nb-color-gray-bg{background:#7877741f}.nb-color-brown-bg{background:#9f6b531f}.nb-color-orange-bg{background:#d9730d1f}.nb-color-yellow-bg{background:#cb912f1f}.nb-color-green-bg{background:#4483611f}.nb-color-blue-bg{background:#337ea91f}.nb-color-purple-bg{background:#9065b01f}.nb-color-pink-bg{background:#c14c8a1f}.nb-color-red-bg{background:#d44c471f}.nb-code-figure{margin:1rem 0;border-radius:8px;overflow:hidden;border:1px solid var(--border)}.nb-code-header{display:flex;justify-content:space-between;align-items:center;padding:.4rem .875rem;background:#1a1a1a;border-bottom:1px solid var(--border)}.nb-code-lang{font-family:var(--mono);font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.nb-code{margin:0;padding:1rem;background:#111;overflow-x:auto;font-family:var(--mono);font-size:.85rem;line-height:1.65;color:#e8e8e8}.nb-code code{background:none;padding:0;border:none;font:inherit;color:inherit}.nb-inline-code{font-family:var(--mono);font-size:.875em;background:#ffffff12;border:1px solid var(--border);border-radius:4px;padding:.1em .35em}.nb-eq{font-family:var(--mono);font-size:.875em;background:#ffffff0d;border-radius:3px;padding:.1em .3em}.nb-divider{border:none;border-top:1px solid var(--border);margin:1.5rem 0}.nb-media-figure{margin:1.25rem 0}.nb-image{max-width:100%;border-radius:6px;display:block}.nb-video-wrapper{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:6px}.nb-youtube{position:absolute;inset:0;width:100%;height:100%;border:none;border-radius:6px}.nb-video{max-width:100%;border-radius:6px;display:block}.nb-audio{width:100%}.nb-embed-wrapper{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:6px}.nb-embed{position:absolute;inset:0;width:100%;height:100%;border:none;border-radius:6px}.nb-caption{display:block;margin-top:.5rem;font-size:.8rem;color:var(--muted);text-align:center}.nb-file{margin:.5rem 0}.nb-file-link{display:inline-flex;align-items:center;gap:.4rem;padding:.4rem .75rem;border:1px solid var(--border);border-radius:6px;font-size:.875rem;color:var(--text);transition:border-color .15s,color .15s}.nb-file-link:hover{border-color:var(--accent);color:var(--accent)}.nb-file-icon{font-size:1em}.nb-bookmark{margin:.75rem 0}.nb-bookmark-link{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.75rem 1rem;border:1px solid var(--border);border-radius:6px;background:var(--surface);transition:border-color .15s;text-decoration:none}.nb-bookmark-link:hover{border-color:var(--accent)}.nb-bookmark-url{font-size:.8rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nb-bookmark-arrow{flex-shrink:0;color:var(--muted);font-size:.9rem}.nb-equation{margin:1rem 0;padding:.75rem 1rem;background:var(--surface);border:1px solid var(--border);border-radius:6px;text-align:center;overflow-x:auto}.nb-equation code{font-family:var(--mono);font-size:.9rem;color:var(--muted)}.nb-table-wrapper{margin:1rem 0;overflow-x:auto;border-radius:6px;border:1px solid var(--border)}.nb-table{width:100%;border-collapse:collapse;font-size:.9rem}.nb-table th,.nb-table td{padding:.5rem .875rem;border:1px solid var(--border);text-align:left;line-height:1.5}.nb-table thead th{background:var(--surface);font-weight:600;font-size:.8rem}.nb-table tbody tr:nth-child(2n){background:#ffffff05}.nb-table tbody th{font-weight:500;background:var(--surface)}.nb-child-page{display:inline-flex;align-items:center;gap:.4rem;padding:.35rem .6rem;border:1px solid var(--border);border-radius:6px;font-size:.875rem;color:var(--muted);margin:.25rem 0}.nb-mention{color:var(--accent)}strong{font-weight:600}em{font-style:italic}del{opacity:.6}u{text-decoration-color:var(--muted)}a{color:var(--accent);text-decoration:underline;text-underline-offset:3px}a:hover{opacity:.8}main[data-astro-cid-xh7mzcst]{flex:1;padding-top:3rem;padding-bottom:4rem;display:flex;flex-direction:column;gap:2rem}.breadcrumb[data-astro-cid-xh7mzcst]{font-size:.875rem;color:var(--muted)}.breadcrumb[data-astro-cid-xh7mzcst] a[data-astro-cid-xh7mzcst]:hover{color:var(--accent)}.project-header[data-astro-cid-xh7mzcst]{display:flex;flex-direction:column;gap:1rem;padding-bottom:2rem;border-bottom:1px solid var(--border)}h1[data-astro-cid-xh7mzcst]{font-family:var(--display);font-optical-sizing:auto;font-size:clamp(2rem,5vw,3.25rem);font-weight:500;letter-spacing:-.02em;line-height:1.1}.meta[data-astro-cid-xh7mzcst]{display:flex;align-items:center;gap:1rem;flex-wrap:wrap}time[data-astro-cid-xh7mzcst]{font-size:.8rem;font-family:var(--mono);color:var(--muted)}.status[data-astro-cid-xh7mzcst]{font-size:.75rem;font-family:var(--mono);color:var(--accent);border:1px solid var(--accent);border-radius:4px;padding:.15rem .5rem}.tag-list[data-astro-cid-xh7mzcst]{list-style:none;display:flex;flex-wrap:wrap;gap:.4rem}.tag[data-astro-cid-xh7mzcst]{font-size:.7rem;font-family:var(--mono);color:var(--muted);border:1px solid var(--border);border-radius:4px;padding:.15rem .5rem;text-transform:uppercase;letter-spacing:.05em}.ext-link[data-astro-cid-xh7mzcst]{font-size:.8rem;color:var(--accent)}.ext-link[data-astro-cid-xh7mzcst]:hover{text-decoration:underline}.nb-body[data-astro-cid-xh7mzcst]{padding-top:2rem;font-size:.95rem;max-width:72ch;display:flex;flex-direction:column;gap:.25rem}.empty-body[data-astro-cid-xh7mzcst]{padding-top:2rem;color:var(--muted);font-size:.9rem}.progress-bar[data-astro-cid-xh7mzcst]{position:fixed;top:0;left:0;height:2px;width:0%;background:var(--accent);z-index:100;transition:width .05s linear;animation:reading-progress linear;animation-timeline:scroll(root block)}@keyframes reading-progress{0%{width:0%}to{width:100%}}
