:root{--c-bg: #090d18;--c-bg-card: #0f1526;--c-bg-elevated: #172035;--c-bg-hover: #1d2942;--c-border: #2a3954;--c-border-muted: #1b2638;--c-text: #dde4f4;--c-text-2: #8a9bbf;--c-text-3: #4a5d80;--c-accent: #7c6ef6;--c-accent-h: #9d90fe;--c-accent-sub: rgba(124, 110, 246, .1);--c-accent-sub-b: rgba(124, 110, 246, .25);--c-success: #34c98e;--c-warning: #f6b03c;--c-error: #ea4c5a;--c-info: #4eb1f7;--s1: 4px;--s2: 8px;--s3: 12px;--s4: 16px;--s5: 20px;--s6: 24px;--s8: 32px;--s10: 40px;--s12: 48px;--s16: 64px;--r-sm: 4px;--r-md: 8px;--r-lg: 12px;--r-xl: 16px;--r-full: 9999px;--font: "Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: "JetBrains Mono", "Fira Code", "Cascadia Code", ui-monospace, monospace;--tx-xs: .75rem;--tx-sm: .875rem;--tx-base: 1rem;--tx-lg: 1.125rem;--tx-xl: 1.25rem;--tx-2xl: 1.5rem;--tx-3xl: 1.875rem;--tx-4xl: 2.25rem;--sh-sm: 0 1px 3px rgba(0,0,0,.5), 0 1px 2px rgba(0,0,0,.6);--sh-md: 0 4px 14px rgba(0,0,0,.5);--sh-lg: 0 8px 32px rgba(0,0,0,.6);--ease: cubic-bezier(.16, 1, .3, 1);--dur-fast: .12s;--dur-base: .2s;--view-col: 880px;--view-col-inset: max(var(--s6), calc((100% - var(--view-col)) / 2 + var(--s6)))}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;height:100%;background:var(--c-bg);color:var(--c-text);font-family:var(--font);font-size:var(--tx-base);line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6{margin:0;line-height:1.25;font-weight:600}p{margin:0}a{color:var(--c-accent);text-decoration:none}a:hover{color:var(--c-accent-h)}button{font-family:var(--font);font-size:inherit;cursor:pointer;border:none;background:none;padding:0;line-height:1;color:inherit}button:disabled{opacity:.4;cursor:not-allowed}input{font-family:var(--font)}ol,ul{list-style:none;margin:0;padding:0}#root{height:100%}.clestr-app{display:flex;flex-direction:column;min-height:100vh}.app-header{text-align:center;padding:var(--s16) var(--s6) var(--s8)}.app-logo{font-size:var(--tx-4xl);font-weight:800;letter-spacing:-.04em;background:linear-gradient(130deg,var(--c-accent) 0%,var(--c-info) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;margin-bottom:var(--s2)}.app-tagline{font-size:var(--tx-lg);color:var(--c-text-2);font-weight:400;margin-bottom:var(--s2)}.app-acronym{font-size:var(--tx-xs);color:var(--c-text-3);letter-spacing:.04em}.app-acronym mark{background:none;color:var(--c-accent);font-weight:700}.landing{display:flex;flex-direction:column;align-items:center;gap:var(--s6);padding:var(--s6) var(--s6) var(--s10);max-width:1040px;margin:0 auto;width:100%;flex:1}.landing .naddr-input-section{margin-top:auto;padding-top:var(--s8)}.naddr-input-section{width:100%;display:flex;flex-direction:column;gap:var(--s3)}.input-label{font-size:var(--tx-sm);font-weight:500;color:var(--c-text-2)}.naddr-row{display:flex;gap:var(--s2)}.naddr-input{flex:1;padding:var(--s3) var(--s4);background:var(--c-bg-card);border:1px solid var(--c-border);border-radius:var(--r-md);color:var(--c-text);font-size:var(--tx-sm);font-family:var(--font-mono);transition:border-color var(--dur-fast),box-shadow var(--dur-fast);outline:none}.naddr-input::placeholder{color:var(--c-text-3)}.naddr-input:focus{border-color:var(--c-accent);box-shadow:0 0 0 3px var(--c-accent-sub)}.btn-primary{padding:var(--s3) var(--s5);background:var(--c-accent);color:#fff;font-size:var(--tx-sm);font-weight:600;border-radius:var(--r-md);transition:background var(--dur-fast),transform var(--dur-fast),box-shadow var(--dur-fast);white-space:nowrap}.btn-primary:hover{background:var(--c-accent-h);transform:translateY(-1px);box-shadow:0 4px 12px #7c6ef666}.btn-primary:active{transform:none;box-shadow:none}.btn-secondary{padding:var(--s3) var(--s5);background:var(--c-bg-elevated);color:var(--c-text-2);font-size:var(--tx-sm);font-weight:500;border-radius:var(--r-md);border:1px solid var(--c-border);transition:background var(--dur-fast),color var(--dur-fast),border-color var(--dur-fast)}.btn-secondary:hover{background:var(--c-bg-hover);color:var(--c-text);border-color:var(--c-accent)}.divider{display:flex;align-items:center;gap:var(--s4);width:100%;font-size:var(--tx-sm);color:var(--c-text-3)}.divider:before,.divider:after{content:"";flex:1;height:1px;background:var(--c-border-muted)}.loading{font-size:var(--tx-sm);color:var(--c-text-2)}.error-msg{width:100%;padding:var(--s3) var(--s4);background:#ea4c5a14;border:1px solid rgba(234,76,90,.25);border-radius:var(--r-md);font-size:var(--tx-sm);color:var(--c-error)}.course-shell{display:flex;flex-direction:column;height:100vh;overflow:hidden}.course-nav{display:flex;align-items:center;gap:var(--s1);padding:0 var(--s4);height:48px;background:var(--c-bg-card);border-bottom:1px solid var(--c-border-muted);flex-shrink:0}.nav-home{font-size:var(--tx-sm);font-weight:500;color:var(--c-text-2);padding:var(--s2) var(--s3);border-radius:var(--r-sm);transition:color var(--dur-fast),background var(--dur-fast);margin-right:auto}.nav-home:hover{color:var(--c-text);background:var(--c-bg-elevated)}.nav-tab{font-size:var(--tx-sm);font-weight:500;color:var(--c-text-3);padding:var(--s2) var(--s4);border-radius:var(--r-sm);transition:color var(--dur-fast),background var(--dur-fast)}.nav-tab:hover{color:var(--c-text-2);background:var(--c-bg-elevated)}.nav-tab--active{color:var(--c-accent);background:var(--c-accent-sub)}.course-index{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.toc-scroll{flex:1;min-height:0;overflow-y:auto}.course-toc{max-width:var(--view-col);margin:0 auto;padding:var(--s8) var(--s6)}.course-header{margin-bottom:var(--s8)}.course-title{font-size:var(--tx-3xl);font-weight:700;letter-spacing:-.025em;margin-bottom:var(--s3);color:var(--c-text)}.course-summary{font-size:var(--tx-base);color:var(--c-text-2);line-height:1.7;margin-bottom:var(--s4)}.course-meta{display:flex;align-items:center;gap:var(--s2)}.chapter-count,.course-type{font-size:var(--tx-xs);font-weight:600;padding:3px var(--s2);border-radius:var(--r-full);background:var(--c-bg-elevated);color:var(--c-text-3);border:1px solid var(--c-border-muted);letter-spacing:.02em;text-transform:uppercase}.toc-cta{display:flex;align-items:center;justify-content:space-between;gap:var(--s4);width:100%;padding:var(--s4) var(--s5);margin-bottom:var(--s6);background:var(--c-accent);color:#fff;border-radius:var(--r-lg);font-weight:600;transition:background var(--dur-fast),transform var(--dur-fast),box-shadow var(--dur-fast)}.toc-cta:hover{background:var(--c-accent-h);color:#fff;transform:translateY(-1px);box-shadow:0 4px 12px #7c6ef666}.toc-cta-label{font-size:var(--tx-lg)}.toc-cta-target{font-size:var(--tx-sm);font-weight:500;opacity:.85;text-align:right}.chapter-list{display:flex;flex-direction:column;gap:var(--s2)}.chapter-btn{width:100%;display:flex;align-items:center;gap:var(--s4);padding:var(--s4) var(--s5);background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-lg);text-align:left;transition:background var(--dur-fast),border-color var(--dur-fast),transform var(--dur-base) var(--ease),box-shadow var(--dur-fast)}.chapter-btn:hover{background:var(--c-bg-elevated);border-color:var(--c-accent);transform:translate(6px);box-shadow:var(--sh-sm)}.chapter-num{flex-shrink:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;font-size:var(--tx-xs);font-weight:700;font-family:var(--font-mono);color:var(--c-accent);background:var(--c-accent-sub);border-radius:var(--r-full)}.chapter-label{flex:1;font-size:var(--tx-base);font-weight:500;color:var(--c-text)}.chapter-arrow{color:var(--c-text-3);font-size:var(--tx-lg);transition:transform var(--dur-base) var(--ease),color var(--dur-fast)}.chapter-btn:hover .chapter-arrow{transform:translate(4px);color:var(--c-accent)}.breadcrumb{flex-shrink:0;display:flex;align-items:center;flex-wrap:wrap;gap:var(--s1);padding:var(--s3) var(--s6);font-size:var(--tx-xs);border-bottom:1px solid var(--c-border-muted);background:var(--c-bg-card)}.breadcrumb-item{display:inline-flex;align-items:center;gap:var(--s1)}.breadcrumb-sep{color:var(--c-text-3);font-size:10px}.breadcrumb-link{background:none;border:none;cursor:pointer;font:inherit;line-height:inherit;color:var(--c-text-2);font-weight:500;padding:1px 3px;border-radius:var(--r-sm);transition:color var(--dur-fast),background var(--dur-fast);white-space:nowrap;max-width:180px;overflow:hidden;text-overflow:ellipsis}.breadcrumb-link:hover{color:var(--c-accent);background:var(--c-accent-sub)}.breadcrumb-current{color:var(--c-text);font-weight:500;padding:1px 3px;white-space:nowrap;max-width:220px;overflow:hidden;text-overflow:ellipsis}.nested-course{display:flex;flex-direction:column;height:100%;overflow:hidden}.publication-reader{flex:1;min-height:0;overflow-y:auto}.back-btn{display:inline-flex;align-items:center;gap:var(--s2);font-size:var(--tx-sm);font-weight:500;color:var(--c-text-2);padding:var(--s3) var(--s5);margin:var(--s3) var(--s5) 0;border-radius:var(--r-sm);transition:color var(--dur-fast),background var(--dur-fast)}.back-btn:hover{color:var(--c-accent);background:var(--c-accent-sub)}.loading-state{display:flex;align-items:center;justify-content:center;padding:var(--s16)}.empty{color:var(--c-text-3);font-size:var(--tx-sm)}.chapter-content{max-width:760px;margin:0 auto;padding:var(--s6) var(--s6) var(--s16)}.chapter-title{font-size:var(--tx-3xl);font-weight:700;letter-spacing:-.025em;margin-bottom:var(--s8);padding-bottom:var(--s5);border-bottom:1px solid var(--c-border-muted)}.chapter-nav{display:flex;justify-content:space-between;align-items:stretch;gap:var(--s4);margin-top:var(--s12);padding-top:var(--s6);border-top:1px solid var(--c-border-muted)}.chapter-nav-spacer{flex:1}.chapter-nav-btn{flex:1;display:flex;align-items:center;gap:var(--s3);padding:var(--s4) var(--s5);background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-lg);transition:background var(--dur-fast),border-color var(--dur-fast),transform var(--dur-base) var(--ease);text-align:left;max-width:50%}.chapter-nav-btn:hover{background:var(--c-bg-elevated);border-color:var(--c-accent);transform:translateY(-1px)}.chapter-nav-btn--next{justify-content:flex-end;text-align:right;background:var(--c-accent-sub);border-color:var(--c-accent-sub-b)}.chapter-nav-btn--next:hover{background:var(--c-accent-sub-b)}.chapter-nav-arrow{flex-shrink:0;font-size:var(--tx-xl);color:var(--c-text-3);transition:color var(--dur-fast),transform var(--dur-base) var(--ease)}.chapter-nav-btn:hover .chapter-nav-arrow{color:var(--c-accent)}.chapter-nav-btn--prev:hover .chapter-nav-arrow{transform:translate(-3px)}.chapter-nav-btn--next:hover .chapter-nav-arrow{transform:translate(3px)}.chapter-nav-btn--return{border-color:var(--c-accent-sub-b);background:#7c6ef60a}.chapter-nav-btn--return:hover{background:var(--c-accent-sub);border-color:var(--c-accent)}.chapter-nav-btn--return .chapter-nav-hint{color:var(--c-accent)}.chapter-nav-arrow--return{font-size:var(--tx-2xl);color:var(--c-accent);opacity:.7}.chapter-nav-btn--return:hover .chapter-nav-arrow--return{opacity:1;transform:translateY(-2px)}.chapter-nav-label{display:flex;flex-direction:column;gap:2px;min-width:0}.chapter-nav-hint{font-size:var(--tx-xs);font-weight:600;color:var(--c-text-3);text-transform:uppercase;letter-spacing:.06em}.chapter-nav-title{font-size:var(--tx-sm);font-weight:500;color:var(--c-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.djot-content{font-size:var(--tx-base);line-height:1.85;color:var(--c-text)}.djot-content>*+*{margin-top:var(--s5)}.djot-content h1{font-size:var(--tx-2xl);font-weight:700;letter-spacing:-.02em;margin-top:var(--s10);padding-bottom:var(--s3);border-bottom:1px solid var(--c-border-muted)}.djot-content h2{font-size:var(--tx-xl);font-weight:600;margin-top:var(--s8)}.djot-content h3{font-size:var(--tx-lg);font-weight:600;color:var(--c-text-2);margin-top:var(--s6)}.djot-content h1:first-child,.djot-content h2:first-child{margin-top:0}.djot-content p{margin:0}.djot-content p+p{margin-top:var(--s4)}.djot-content strong{font-weight:650;color:var(--c-text)}.djot-content em{font-style:italic}.djot-content code{font-family:var(--font-mono);font-size:.875em;padding:.1em .35em;background:var(--c-bg-elevated);border:1px solid var(--c-border-muted);border-radius:var(--r-sm);color:var(--c-info)}.djot-content pre{margin:var(--s5) 0;padding:var(--s5);background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-lg);overflow-x:auto}.djot-content pre code{padding:0;background:none;border:none;color:var(--c-text);font-size:var(--tx-sm);line-height:1.75}.djot-content blockquote{margin:var(--s5) 0;padding:var(--s4) var(--s5);border-left:3px solid var(--c-accent);background:var(--c-accent-sub);border-radius:0 var(--r-md) var(--r-md) 0;color:var(--c-text-2)}.djot-content ul,.djot-content ol{padding-left:var(--s6);margin:var(--s4) 0}.djot-content ul{list-style:disc}.djot-content ol{list-style:decimal}.djot-content li{margin:var(--s1) 0}.djot-content li::marker{color:var(--c-accent)}.djot-content hr{border:none;border-top:1px solid var(--c-border-muted);margin:var(--s8) 0}.djot-content a{text-decoration:underline;text-decoration-color:transparent;transition:text-decoration-color var(--dur-fast)}.djot-content a:hover{text-decoration-color:currentColor}.djot-content table{width:100%;border-collapse:collapse;margin:var(--s5) 0;font-size:var(--tx-sm)}.djot-content th,.djot-content td{padding:var(--s3) var(--s4);border:1px solid var(--c-border);text-align:left}.djot-content th{background:var(--c-bg-elevated);font-weight:600}.djot-content tr:nth-child(2n) td{background:var(--c-bg-card)}.prereq-graph{flex:1;display:flex;flex-direction:column;overflow:hidden}.pg-header{padding:var(--s5) var(--s6) var(--s4);border-bottom:1px solid var(--c-border-muted);flex-shrink:0}.pg-header-row{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--s4);margin-bottom:var(--s2)}.pg-course-title{font-size:var(--tx-xl);font-weight:700;letter-spacing:-.02em}.pg-subtitle{font-size:var(--tx-sm);color:var(--c-text-3)}.pg-loading{display:inline-flex;align-items:center;gap:var(--s2);font-size:var(--tx-xs);color:var(--c-accent);margin-top:var(--s2)}.pg-loading:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--c-accent);animation:pg-pulse 1.2s ease-in-out infinite}@keyframes pg-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.7)}}.pg-view-toggle{display:flex;gap:2px;padding:2px;background:var(--c-bg-card);border-radius:var(--r-md);border:1px solid var(--c-border-muted);flex-shrink:0}.pg-toggle-btn{font-size:var(--tx-xs);font-weight:600;padding:var(--s1) var(--s3);border-radius:calc(var(--r-md) - 2px);color:var(--c-text-3);letter-spacing:.01em;transition:all var(--dur-fast)}.pg-toggle-btn:hover{color:var(--c-text-2)}.pg-toggle-btn--active{background:var(--c-bg-elevated);color:var(--c-text);box-shadow:var(--sh-sm)}.pg-cycles{margin:var(--s3) var(--s6) 0;padding:var(--s3) var(--s4);background:#f6b03c14;border:1px solid rgba(246,176,60,.2);border-radius:var(--r-md);color:var(--c-warning);font-size:var(--tx-xs)}.pg-cycle{margin-top:var(--s1);font-family:var(--font-mono)}.pg-list-view{flex:1;overflow-y:auto;padding:var(--s5) var(--s6)}.pg-list{display:flex;flex-direction:column;gap:var(--s2);max-width:560px;margin:0 auto}.pg-item{display:flex;align-items:center;gap:var(--s3);padding:var(--s3) var(--s4);background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-lg);transition:border-color var(--dur-fast)}.pg-item--root{border-color:var(--c-accent-sub-b);background:#7c6ef60d}.pg-item--missing{opacity:.6;border-style:dashed}.pg-item--cyclic{border-color:#f6b03c40;background:#f6b03c0a}.pg-index{flex-shrink:0;width:26px;height:26px;display:flex;align-items:center;justify-content:center;font-size:var(--tx-xs);font-weight:700;font-family:var(--font-mono);color:var(--c-text-3);background:var(--c-bg-elevated);border-radius:var(--r-full)}.pg-item--root .pg-index{color:var(--c-accent);background:var(--c-accent-sub)}.pg-item-body{flex:1;display:flex;align-items:center;flex-wrap:wrap;gap:var(--s2)}.pg-item-title{font-size:var(--tx-sm);font-weight:500;color:var(--c-text)}.pg-item--missing .pg-item-title{color:var(--c-text-3);font-style:italic}.pg-badge{font-size:10px;font-weight:700;padding:2px var(--s2);border-radius:var(--r-full);letter-spacing:.04em;text-transform:uppercase}.pg-badge--root{background:var(--c-accent-sub);color:var(--c-accent);border:1px solid var(--c-accent-sub-b)}.pg-badge--cycle{background:#f6b03c1a;color:var(--c-warning);border:1px solid rgba(246,176,60,.25)}.pg-requires{font-size:var(--tx-xs);color:var(--c-text-3)}.pg-actions{padding:var(--s5) var(--s6);text-align:center;border-top:1px solid var(--c-border-muted);flex-shrink:0}.graph-viewport{flex:1;position:relative;overflow:hidden;background:var(--c-bg);background-image:radial-gradient(circle at 20% 30%,rgba(124,110,246,.04) 0%,transparent 55%),radial-gradient(circle at 80% 70%,rgba(78,177,247,.03) 0%,transparent 50%)}.graph-canvas{width:100%;height:100%;display:block;cursor:grab;user-select:none;-webkit-user-select:none}.graph-canvas.is-panning{cursor:grabbing}.gn-edge{stroke:var(--c-border);stroke-width:1.5;fill:none;opacity:.75}.gn-arrowhead{fill:var(--c-border)}.gn-node{cursor:pointer}.gn-node:focus{outline:none}.gn-rect{fill:var(--c-bg-elevated);stroke:var(--c-border);stroke-width:1.5;transition:fill .13s,stroke .13s}.gn-rect--root{fill:#7c6ef614;stroke:var(--c-accent);stroke-width:2}.gn-rect--missing{fill:var(--c-bg-card);stroke:var(--c-border-muted);stroke-dasharray:5 3;opacity:.65}.gn-rect--selected{stroke:var(--c-info)!important;stroke-width:2!important;fill:#4eb1f714!important}.gn-node:hover .gn-rect:not(.gn-rect--selected){stroke:var(--c-accent);fill:var(--c-bg-hover)}.gn-node:focus-visible .gn-rect{stroke:var(--c-info);stroke-width:2}.gn-label{font-family:var(--font);font-size:13px;fill:var(--c-text);pointer-events:none;user-select:none;-webkit-user-select:none}.gn-label--root{font-weight:600;fill:var(--c-accent-h)}.gn-label--missing{fill:var(--c-text-3)}.gn-node-badge{font-family:var(--font);font-size:9px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;pointer-events:none;user-select:none;-webkit-user-select:none}.gn-node-badge--root{fill:var(--c-accent)}.gn-node-badge--missing{fill:var(--c-text-3)}.gn-node-badge--structure{fill:var(--c-info)}.gn-node-badge--prereq{fill:var(--c-text-3)}.gn-legend{position:absolute;left:var(--s3);bottom:var(--s3);display:flex;flex-direction:column;gap:var(--s1);padding:var(--s3);max-width:240px;background:#0f1526eb;border:1px solid var(--c-border-muted);border-radius:var(--r-md);font-size:var(--tx-xs);color:var(--c-text-2);pointer-events:none}.gn-legend-row{display:flex;align-items:center;gap:var(--s2)}.gn-legend-swatch{flex-shrink:0;width:18px;height:11px;border-radius:3px;background:var(--c-bg-elevated);border:1.5px solid var(--c-border)}.gn-legend-swatch--root{background:#7c6ef614;border-color:var(--c-accent)}.gn-legend-swatch--structure{background:#4eb1f70f;border-color:var(--c-info);border-style:dashed}.gn-legend-swatch--missing{background:transparent;border-color:var(--c-text-3);border-style:dashed}.gn-legend-mark{flex-shrink:0;width:14px;height:14px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--r-full);font-size:9px;font-weight:700;color:var(--c-bg)}.gn-legend-mark--complete{background:var(--c-success)}.gn-legend-mark--inprogress{background:var(--c-warning)}.gn-legend-caption{margin-top:var(--s1);padding-top:var(--s1);border-top:1px solid var(--c-border-muted);color:var(--c-text-3);line-height:1.4}.gn-rect--structure{fill:#4eb1f70f;stroke:var(--c-info);stroke-width:1.5;stroke-dasharray:5 3}.gn-node:hover .gn-rect--structure:not(.gn-rect--selected){fill:#4eb1f71f;stroke:var(--c-info)}.gn-controls{position:absolute;bottom:var(--s4);right:var(--s4);display:flex;flex-direction:column;gap:var(--s1)}.gn-control-btn{width:30px;height:30px;display:flex;align-items:center;justify-content:center;background:var(--c-bg-card);border:1px solid var(--c-border);border-radius:var(--r-md);font-size:16px;line-height:1;color:var(--c-text-2);transition:all var(--dur-fast);box-shadow:var(--sh-sm)}.gn-control-btn:hover{background:var(--c-bg-elevated);color:var(--c-text);border-color:var(--c-accent)}.gn-control-btn:disabled{opacity:.4}.gn-graph-and-panel{flex:1;min-height:0;display:flex;overflow:hidden}.gn-side-panel{width:320px;flex-shrink:0;background:var(--c-bg-card);border-left:1px solid var(--c-border);display:flex;flex-direction:column;animation:gn-panel-in .15s var(--ease)}@keyframes gn-panel-in{0%{opacity:0;transform:translate(12px)}to{opacity:1;transform:none}}.gn-sp-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--s3);padding:var(--s4) var(--s5);border-bottom:1px solid var(--c-border-muted);flex-shrink:0}.gn-sp-header-text{flex:1;min-width:0}.gn-sp-label{font-size:10px;font-weight:600;color:var(--c-text-3);text-transform:uppercase;letter-spacing:.06em;margin-bottom:var(--s1)}.gn-sp-title{font-size:var(--tx-sm);font-weight:600;color:var(--c-text);word-break:break-word}.gn-sp-close{flex-shrink:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;font-size:var(--tx-lg);color:var(--c-text-3);border-radius:var(--r-sm);transition:color var(--dur-fast),background var(--dur-fast);line-height:1}.gn-sp-close:hover{color:var(--c-text);background:var(--c-bg-elevated)}.gn-sp-body{flex:1;min-height:0;overflow-y:auto;padding:var(--s4) var(--s5);display:flex;flex-direction:column;gap:var(--s3)}.gn-sp-section-title{display:flex;align-items:center;gap:var(--s2);font-size:var(--tx-xs);font-weight:600;color:var(--c-text-3);text-transform:uppercase;letter-spacing:.06em}.gn-sp-loading-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--c-accent);animation:pg-pulse 1.2s ease-in-out infinite}.gn-sp-empty{font-size:var(--tx-xs);color:var(--c-text-3)}.gn-sp-list{display:flex;flex-direction:column;gap:var(--s2)}.gn-sp-item{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);padding:var(--s3) var(--s4);background:var(--c-bg-elevated);border:1px solid var(--c-border-muted);border-radius:var(--r-md);width:100%;text-align:left}.gn-sp-item--clickable{cursor:pointer;transition:background var(--dur-fast),border-color var(--dur-fast)}.gn-sp-item--clickable:hover{background:var(--c-bg-hover);border-color:var(--c-accent)}.gn-sp-item--clickable:hover .gn-sp-item-arrow{color:var(--c-accent)}.gn-sp-item-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.gn-sp-item-title{font-size:var(--tx-xs);font-weight:500;color:var(--c-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gn-sp-item-author{font-size:10px;font-family:var(--font-mono);color:var(--c-text-3)}.gn-sp-item-arrow{flex-shrink:0;font-size:var(--tx-sm);color:var(--c-text-3);transition:color var(--dur-fast)}.settings-overlay{position:fixed;inset:0;background:#0000008c;z-index:50}.settings-panel{position:fixed;top:0;right:0;bottom:0;width:360px;max-width:100vw;background:var(--c-bg-card);border-left:1px solid var(--c-border-muted);display:flex;flex-direction:column;z-index:51;box-shadow:-12px 0 32px #0006}.settings-header{display:flex;align-items:center;justify-content:space-between;padding:var(--s4) var(--s5);border-bottom:1px solid var(--c-border-muted);flex-shrink:0}.settings-title{font-size:var(--tx-lg);font-weight:600}.settings-close{background:none;border:none;cursor:pointer;font:inherit;color:var(--c-text-3);padding:var(--s2) var(--s3);border-radius:var(--r-sm);transition:color var(--dur-fast),background var(--dur-fast)}.settings-close:hover{color:var(--c-text);background:var(--c-bg-elevated)}.settings-body{flex:1;min-height:0;overflow-y:auto;padding:var(--s6);display:flex;flex-direction:column;gap:var(--s8)}.settings-section{display:flex;flex-direction:column;gap:var(--s3)}.settings-section-title{font-size:var(--tx-xs);font-weight:600;color:var(--c-text-3);text-transform:uppercase;letter-spacing:.08em;display:flex;align-items:center;gap:var(--s2)}.settings-badge{font-size:var(--tx-xs);font-weight:500;text-transform:none;letter-spacing:0;color:var(--c-accent);background:var(--c-accent-sub);padding:1px 7px;border-radius:var(--r-full)}.settings-pubkey{font-family:var(--font-mono);font-size:var(--tx-sm);color:var(--c-text);background:var(--c-bg-elevated);padding:var(--s2) var(--s3);border-radius:var(--r-sm);border:1px solid var(--c-border-muted)}.settings-relay-list{list-style:none;display:flex;flex-direction:column;gap:var(--s1)}.settings-relay-item{font-family:var(--font-mono);font-size:var(--tx-xs);color:var(--c-text-2);background:var(--c-bg-elevated);padding:var(--s2) var(--s3);border-radius:var(--r-sm);border:1px solid var(--c-border-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.settings-relay-input{font-family:var(--font-mono);font-size:var(--tx-sm);background:var(--c-bg-elevated);border:1px solid var(--c-border-muted);border-radius:var(--r-sm);color:var(--c-text);padding:var(--s3);resize:vertical;width:100%;box-sizing:border-box;line-height:1.7;transition:border-color var(--dur-fast)}.settings-relay-input:focus{outline:none;border-color:var(--c-accent);box-shadow:0 0 0 2px var(--c-accent-sub)}.editor-page{max-width:960px;margin:0 auto;padding:var(--s5) var(--s4);width:100%;box-sizing:border-box}.editor-panel{display:flex;flex-direction:column;gap:var(--s3)}.editor-heading{font-size:var(--tx-xl);margin:0}.editor-title-input{font-size:var(--tx-md);background:var(--c-bg-elevated);border:1px solid var(--c-border-muted);border-radius:var(--r-sm);color:var(--c-text);padding:var(--s2) var(--s3);width:100%;box-sizing:border-box}.editor-title-input:focus,.editor-source:focus,.editor-add-input:focus{outline:none;border-color:var(--c-accent);box-shadow:0 0 0 2px var(--c-accent-sub)}.editor-d-preview{font-size:var(--tx-xs);color:var(--c-text-3);margin:0}.editor-row{display:flex;gap:var(--s3);align-items:center}.editor-select{background:var(--c-bg-elevated);border:1px solid var(--c-border-muted);border-radius:var(--r-sm);color:var(--c-text);padding:var(--s1) var(--s2);font:inherit}.editor-split{display:grid;grid-template-columns:1fr 1fr;gap:var(--s3);min-height:320px}.editor-pane{display:flex;flex-direction:column;gap:var(--s1);min-width:0}.editor-pane>.editor-source,.editor-pane>.editor-preview{flex:1}.editor-pane-header{display:flex;align-items:baseline;gap:var(--s2);font-size:var(--tx-xs);font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--c-text-3)}.editor-pane-hint{font-weight:400;text-transform:none;letter-spacing:normal}@media(max-width:720px){.editor-split{grid-template-columns:1fr}}.editor-source{font-family:var(--font-mono);font-size:var(--tx-sm);background:var(--c-bg-elevated);border:1px solid var(--c-border-muted);border-radius:var(--r-sm);color:var(--c-text);padding:var(--s3);width:100%;box-sizing:border-box;resize:vertical;min-height:320px;line-height:1.6}.editor-intro{min-height:120px}.editor-preview{border:1px solid var(--c-border-muted);border-radius:var(--r-sm);padding:var(--s3);overflow:auto;background:var(--c-bg-card)}.editor-preview-empty{color:var(--c-text-3);font-size:var(--tx-sm)}.editor-section{display:flex;flex-direction:column;gap:var(--s2)}.editor-section-title{font-size:var(--tx-md);margin:var(--s2) 0 0}.editor-hint{font-size:var(--tx-xs);color:var(--c-text-3);margin:0}.editor-ref-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--s1)}.editor-ref-item{display:flex;justify-content:space-between;align-items:center;gap:var(--s2);background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-sm);padding:var(--s1) var(--s3)}.editor-ref-label{font-size:var(--tx-sm);overflow-wrap:anywhere}.editor-ref-kind{font-family:var(--font-mono);font-size:var(--tx-xs);color:var(--c-text-3)}.editor-ref-actions{display:flex;gap:var(--s1);flex-shrink:0}.editor-mini-btn{font-size:var(--tx-xs);padding:2px var(--s2)}.editor-prof{color:var(--c-text-3)}.editor-add-row{display:flex;gap:var(--s2);flex-wrap:wrap}.editor-add-input{flex:1;min-width:160px;font-size:var(--tx-sm);background:var(--c-bg-elevated);border:1px solid var(--c-border-muted);border-radius:var(--r-sm);color:var(--c-text);padding:var(--s2) var(--s3);box-sizing:border-box}.editor-prof-input{flex:0 1 200px}.editor-actions{display:flex;gap:var(--s3);margin-top:var(--s2)}.edit-link{font-size:var(--tx-xs);color:var(--c-text-3);text-decoration:none;align-self:flex-start}.edit-link:hover{color:var(--c-text);text-decoration:underline}.drafts-new-row{display:flex;gap:var(--s2);flex-wrap:wrap;margin-bottom:var(--s4)}.file-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:60;width:min(480px,calc(100vw - var(--s4) * 2));max-height:85vh;overflow-y:auto;background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-md);box-shadow:0 12px 48px #0006}.file-modal-body{padding:var(--s4);display:flex;flex-direction:column;gap:var(--s3)}.file-summary{min-height:72px}.file-target-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--s1);max-height:220px;overflow-y:auto}.file-target{width:100%;text-align:left;background:var(--c-bg-elevated);border:1px solid var(--c-border-muted);border-radius:var(--r-sm);color:var(--c-text);padding:var(--s2) var(--s3);cursor:pointer;font:inherit;font-size:var(--tx-sm)}.file-target:hover{border-color:var(--c-accent)}.file-target--active{border-color:var(--c-accent);box-shadow:0 0 0 2px var(--c-accent-sub)}a.drafts-link-btn{text-decoration:none;display:inline-flex;align-items:center}.draft-staged{margin-bottom:var(--s4)}.embed{margin:var(--s4) 0;display:flex;flex-direction:column;gap:var(--s2)}.embed-frame-16x9{position:relative;width:100%;aspect-ratio:16 / 9;background:#000;border-radius:var(--r-md);overflow:hidden}.embed-frame-16x9 iframe{position:absolute;inset:0;width:100%;height:100%;border:0}.embed-video video{width:100%;max-height:70vh;border-radius:var(--r-md);background:#000}.embed-page iframe{width:100%;height:min(70vh,640px);border:1px solid var(--c-border-muted);border-radius:var(--r-md);background:var(--c-bg-card)}.embed-open-link{font-size:var(--tx-xs);color:var(--c-text-3);text-decoration:none;align-self:flex-end}.embed-open-link:hover{color:var(--c-text);text-decoration:underline}.external-identifier{font-size:var(--tx-sm);color:var(--c-text-2)}.external-summary{margin-top:var(--s3)}.staging-page{max-width:720px;margin:0 auto;padding:var(--s5) var(--s4);width:100%;box-sizing:border-box}.staging-heading{font-size:var(--tx-xl);margin:0 0 var(--s4)}.capture-bar{background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-md);padding:var(--s4);margin-bottom:var(--s5);display:flex;flex-direction:column;gap:var(--s3)}.capture-hint{font-size:var(--tx-sm);color:var(--c-text-3);margin:0}.capture-fields{display:flex;flex-direction:column;gap:var(--s2)}.capture-url-input,.capture-meta-input{font-size:var(--tx-sm);background:var(--c-bg-elevated);border:1px solid var(--c-border-muted);border-radius:var(--r-sm);color:var(--c-text);padding:var(--s2) var(--s3);width:100%;box-sizing:border-box;transition:border-color var(--dur-fast)}.capture-url-input{font-family:var(--font-mono)}.capture-url-row{display:flex;gap:var(--s2)}.capture-url-row .capture-url-input{flex:1;min-width:0}.capture-tab-btn{flex-shrink:0;white-space:nowrap}.capture-url-input:focus,.capture-meta-input:focus{outline:none;border-color:var(--c-accent);box-shadow:0 0 0 2px var(--c-accent-sub)}.capture-normalized{font-family:var(--font-mono);font-size:var(--tx-xs);color:var(--c-text-3);margin:0;overflow-wrap:anywhere}.capture-targets{display:flex;flex-wrap:wrap;gap:var(--s2)}.capture-target-btn{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.capture-feedback{font-size:var(--tx-xs);color:var(--c-success, #3a9d5d);margin:0}.staging-empty{color:var(--c-text-3);font-size:var(--tx-sm)}.staging-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--s3)}.staging-item{background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-md);padding:var(--s3) var(--s4);display:flex;justify-content:space-between;gap:var(--s3);align-items:flex-start;flex-wrap:wrap}.staging-item-main{display:flex;flex-direction:column;gap:var(--s1);min-width:0}.staging-item-title{font-size:var(--tx-sm);font-weight:600;color:var(--c-text);overflow-wrap:anywhere}.staging-item-url{font-family:var(--font-mono);font-size:var(--tx-xs);color:var(--c-text-3);overflow-wrap:anywhere}.staging-item-note{font-size:var(--tx-xs);color:var(--c-text-2);margin:0}.staging-item-actions{display:flex;align-items:center;gap:var(--s2);flex-shrink:0}.staging-item-date{font-size:var(--tx-xs);color:var(--c-text-3)}.staging-item-btn{font-size:var(--tx-xs);padding:var(--s1) var(--s2)}.settings-nostrconnect{display:flex;flex-direction:column;gap:var(--s3);align-items:center}.qr-code{background:#fff;border-radius:var(--r-sm);padding:var(--s2);width:200px;max-width:100%;box-sizing:border-box}.qr-code svg{display:block;width:100%;height:auto}.settings-bunker-input{font-family:var(--font-mono);font-size:var(--tx-sm);background:var(--c-bg-elevated);border:1px solid var(--c-border-muted);border-radius:var(--r-sm);color:var(--c-text);padding:var(--s2) var(--s3);width:100%;box-sizing:border-box;transition:border-color var(--dur-fast)}.settings-bunker-input:focus{outline:none;border-color:var(--c-accent);box-shadow:0 0 0 2px var(--c-accent-sub)}.settings-hint{font-size:var(--tx-xs);color:var(--c-text-3);line-height:1.5}.settings-toggle{display:flex;align-items:center;gap:var(--s2);font-size:var(--tx-sm);cursor:pointer}.settings-actions{display:flex;gap:var(--s3)}.settings-btn{flex:1}.settings-toggle{background:none;border:none;cursor:pointer;font:inherit;font-size:var(--tx-sm);color:var(--c-text-3);padding:var(--s2) var(--s3);border-radius:var(--r-sm);transition:color var(--dur-fast),background var(--dur-fast);line-height:1}.settings-toggle:hover{color:var(--c-text-2);background:var(--c-bg-elevated)}.app-header{position:relative}.landing-settings-toggle{position:absolute;top:var(--s4);right:var(--s4)}.nav-curate{margin-left:auto;text-decoration:none;color:var(--c-text-2);font-size:var(--tx-base);font-weight:500;padding:var(--s2) var(--s3);border-radius:var(--r-sm);line-height:1;white-space:nowrap}.nav-curate:hover{color:var(--c-text);background:var(--c-bg-elevated)}.nav-install{text-decoration:none;color:var(--c-text-2);font-size:var(--tx-base);font-weight:500;padding:var(--s2) var(--s3);border-radius:var(--r-sm);line-height:1;white-space:nowrap}.nav-install:hover{color:var(--c-text);background:var(--c-bg-elevated)}.nav-settings-toggle{font-size:var(--tx-lg)}.install-page{align-items:stretch;gap:var(--s8)}.install-hero{text-align:center;display:flex;flex-direction:column;align-items:center;gap:var(--s3);padding:var(--s6) 0 var(--s2)}.install-title{font-size:var(--tx-4xl);font-weight:800;letter-spacing:-.03em;margin:0}.install-sub{font-size:var(--tx-lg);color:var(--c-text-2);max-width:60ch;margin:0}.install-download-btn{margin-top:var(--s2);font-size:var(--tx-lg);padding:var(--s3) var(--s6);text-decoration:none}.install-download-note{font-size:var(--tx-sm);color:var(--c-text-3);margin:0}.install-section{width:100%;display:flex;flex-direction:column;gap:var(--s4)}.install-features{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--s4)}.install-feature{display:flex;gap:var(--s3);padding:var(--s4);background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-lg)}.install-feature-icon{font-size:var(--tx-2xl);line-height:1.2}.install-feature-text{display:flex;flex-direction:column;gap:var(--s1)}.install-feature-title{font-size:var(--tx-base);font-weight:600;color:var(--c-text);margin:0}.install-feature-body{font-size:var(--tx-sm);color:var(--c-text-2);line-height:1.5;margin:0}.install-steps{margin:0;padding-left:var(--s5);display:flex;flex-direction:column;gap:var(--s3);color:var(--c-text);font-size:var(--tx-sm);line-height:1.5}.install-steps code,.install-note code{font-family:var(--font-mono);font-size:.9em;background:var(--c-bg-elevated);padding:1px 4px;border-radius:var(--r-sm)}.install-note{font-size:var(--tx-sm);color:var(--c-text-3);line-height:1.5;margin:0}.completion-toggle{display:flex;justify-content:flex-end;padding:var(--s6) 0 var(--s4);border-top:1px solid var(--c-border-muted);margin-top:var(--s8)}.completion-btn{background:none;border:1px solid var(--c-border);border-radius:var(--r-sm);color:var(--c-text-2);cursor:pointer;font:inherit;font-size:var(--tx-sm);padding:var(--s2) var(--s5);transition:color var(--dur-fast),border-color var(--dur-fast),background var(--dur-fast)}.completion-btn:hover{color:var(--c-accent);border-color:var(--c-accent);background:var(--c-accent-sub)}.completion-done{display:flex;align-items:center;gap:var(--s2);font-size:var(--tx-sm);color:var(--c-accent);font-weight:500}.completion-check{font-size:var(--tx-base);line-height:1}.completion-confirm{display:flex;flex-direction:column;align-items:flex-end;gap:var(--s3)}.completion-public-label{display:flex;align-items:center;gap:var(--s2);font-size:var(--tx-sm);color:var(--c-text-2);cursor:pointer;user-select:none}.completion-public-label input[type=checkbox]{cursor:pointer}.completion-confirm-actions{display:flex;gap:var(--s2)}.completion-confirm-btn{font-size:var(--tx-sm);padding:var(--s2) var(--s4)}.completion-cancel-btn{background:none;border:none;cursor:pointer;font:inherit;font-size:var(--tx-sm);color:var(--c-text-3);padding:var(--s2) var(--s3);border-radius:var(--r-sm);transition:color var(--dur-fast)}.completion-cancel-btn:hover{color:var(--c-text-2)}.completion-cancel-btn:disabled{opacity:.5;cursor:default}.completion-error{font-size:var(--tx-xs);color:#e05c5c}.toc-tab-bar{display:flex;border-bottom:1px solid var(--c-border-muted);flex-shrink:0;padding:0 var(--view-col-inset);gap:var(--s1)}.toc-tab{background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;font:inherit;font-size:var(--tx-sm);color:var(--c-text-3);padding:var(--s3) var(--s4);margin-bottom:-1px;transition:color var(--dur-fast),border-color var(--dur-fast)}.toc-tab:hover{color:var(--c-text-2)}.toc-tab--active{color:var(--c-text);border-bottom-color:var(--c-accent)}.completion-btn--disabled{opacity:.35;cursor:not-allowed}.graph-tab-pane{flex:1;min-height:0;display:flex;overflow:hidden}.completion-vis{font-size:var(--tx-xs);font-weight:500;letter-spacing:.03em;text-transform:uppercase;padding:1px var(--s2);border-radius:4px;line-height:1.4}.completion-vis--private{color:var(--c-accent);background:var(--c-accent-sub)}.completion-vis--public{color:var(--c-text-3);background:var(--c-surface-2, rgba(255,255,255,.06));border:1px solid var(--c-border-muted)}.curr-and-course-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--s1)}.curr-and-course-item{width:100%}.curr-and-course-children{display:flex;flex-direction:column;gap:var(--s1);margin:var(--s1) 0 var(--s2) var(--s6);padding-left:var(--s3);border-left:2px solid var(--c-border-muted)}.curr-and-course-btn{width:100%;display:flex;align-items:center;gap:var(--s3);background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-lg);padding:var(--s3) var(--s4);cursor:pointer;text-align:left;transition:background var(--dur-fast),border-color var(--dur-fast),box-shadow var(--dur-fast)}.curr-and-course-btn:hover{background:var(--c-bg-elevated);border-color:var(--c-accent);box-shadow:var(--sh-sm)}.curr-and-course-item-main{flex:1;display:flex;flex-direction:column;gap:var(--s1);min-width:0}.curr-and-course-topline{display:flex;align-items:center;gap:var(--s2);min-width:0}.curr-and-course-summary{font-size:var(--tx-xs);color:var(--c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mini-progress{position:relative;display:flex;align-items:center;height:6px;max-width:320px;margin-top:var(--s1);background:var(--c-bg-elevated);border-radius:var(--r-full);overflow:visible}.mini-progress-fill{height:100%;background:var(--c-success);border-radius:var(--r-full);transition:width var(--dur-base) var(--ease)}.mini-progress-text{position:absolute;left:calc(100% + var(--s2));font-size:var(--tx-xs);font-family:var(--font-mono);color:var(--c-text-3);line-height:1;white-space:nowrap}.curr-and-course-badge{flex-shrink:0;font-size:var(--tx-xs);font-weight:600;letter-spacing:.04em;text-transform:uppercase;padding:1px var(--s2);border-radius:4px}.curr-and-course-badge--curriculum{color:var(--c-accent);background:var(--c-accent-sub)}.curr-and-course-badge--course{color:var(--c-text-3);background:transparent;border:1px solid var(--c-border)}.curr-and-course-title{font-size:var(--tx-sm);font-weight:500;color:var(--c-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.curr-and-course-item-meta{flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;gap:2px}.curr-and-course-meta-count{font-size:var(--tx-xs);color:var(--c-text-3);white-space:nowrap}.curr-and-course-arrow{flex-shrink:0;color:var(--c-text-3);font-size:var(--tx-sm)}.recent-section{width:100%;display:flex;flex-direction:column;gap:var(--s3)}.recent-heading{font-size:var(--tx-sm);font-weight:600;color:var(--c-text-3);text-transform:uppercase;letter-spacing:.06em;margin:0}.recent-empty{width:100%;padding:var(--s4) 0}.recent-empty-msg{font-size:var(--tx-sm);color:var(--c-text-3);text-align:center;margin:0}.app-topbar{display:flex;align-items:center;gap:var(--s1);padding:0 var(--s4);height:48px;background:var(--c-bg-card);border-bottom:1px solid var(--c-border-muted);flex-shrink:0}.nav-brand{font-size:var(--tx-lg);font-weight:800;letter-spacing:-.03em;background:linear-gradient(130deg,var(--c-accent) 0%,var(--c-info) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;padding:var(--s2) var(--s2);margin-right:auto}a.nav-home,a.chapter-btn,a.chapter-nav-btn,a.breadcrumb-link,a.curr-and-course-btn,a.gn-sp-item{text-decoration:none;color:inherit}.curr-and-course-badge--learning-path{color:var(--c-warm, #b8860b);background:transparent;border:1px dashed var(--c-border)}.settings-toggle{position:relative}.settings-gear-badge{position:absolute;top:3px;right:3px;width:8px;height:8px;border-radius:50%;background:var(--c-warning);border:1px solid var(--c-bg-card)}.settings-error{font-size:var(--tx-xs);color:var(--c-error);margin:var(--s1) 0 0;word-break:break-word}.gn-sp-item--viewing{border-color:var(--c-accent);background:var(--c-accent-sub)}.gn-sp-viewing-badge{flex-shrink:0;font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--c-accent);background:var(--c-bg-card);border:1px solid var(--c-accent);border-radius:4px;padding:0 var(--s2)}.gn-sp-item-title{display:flex;align-items:center;gap:var(--s2);overflow:visible}.gn-sp-item-title-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.alt-callout{margin:0 0 var(--s6);padding:var(--s3) var(--s4);background:var(--c-bg-elevated);border:1px solid var(--c-border-muted);border-left:3px solid var(--c-accent);border-radius:var(--r-md);font-size:var(--tx-sm)}.alt-callout-title{font-size:var(--tx-xs);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--c-text-3);margin-bottom:var(--s2)}.alt-callout-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--s1)}.alt-callout-item{display:flex;align-items:baseline;gap:var(--s2);min-width:0}a.alt-callout-link{color:var(--c-accent);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}a.alt-callout-link:hover{text-decoration:underline}.alt-callout-author{font-size:var(--tx-xs);color:var(--c-text-3);flex-shrink:0}.alt-callout-more{display:inline-block;margin-top:var(--s2);font-size:var(--tx-xs);color:var(--c-text-3)}button.pg-item{width:100%;text-align:left;cursor:pointer;transition:border-color var(--dur-fast),background var(--dur-fast)}button.pg-item:hover{border-color:var(--c-border);background:var(--c-bg-elevated)}.pg-item--selected,button.pg-item.pg-item--selected:hover{border-color:var(--c-accent);background:var(--c-accent-sub)}.pg-item-more{flex-shrink:0;color:var(--c-text-3);font-size:var(--tx-sm)}.progress-tracker{display:flex;align-items:center;flex-wrap:wrap;gap:var(--s3) var(--s5);margin:0 0 var(--s6);padding:var(--s3) var(--s4);background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-md)}.progress-row{flex:1;min-width:200px;display:flex;align-items:center;gap:var(--s3)}.progress-bar{flex:1;height:8px;background:var(--c-bg-elevated);border-radius:4px;overflow:hidden}.progress-fill{height:100%;background:var(--c-success);border-radius:4px;transition:width var(--dur-base) var(--ease)}.progress-count{flex-shrink:0;font-size:var(--tx-xs);color:var(--c-text-2);font-variant-numeric:tabular-nums}.progress-tracker .completion-toggle{flex-shrink:0;border-top:none;margin-top:0;padding:0}.chapter-num--complete{color:var(--c-success)!important;background:#34c98e1f!important}.pg-item--complete .pg-index{color:var(--c-success);background:#34c98e1f}.pg-badge--complete{font-size:var(--tx-xs);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--c-success);background:#34c98e1f;border-radius:4px;padding:0 var(--s2)}.gn-rect--complete{stroke:var(--c-success)}.gn-complete-circle{fill:var(--c-success);stroke:var(--c-bg);stroke-width:1.5}.gn-complete-check{fill:#fff;font-size:11px;font-weight:700}.congrats-overlay{position:fixed;inset:0;background:#0000008c;z-index:60}.congrats-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:61;width:min(400px,calc(100vw - var(--s8)));display:flex;flex-direction:column;align-items:center;gap:var(--s3);padding:var(--s8) var(--s6) var(--s6);background:var(--c-bg-card);border:1px solid var(--c-border);border-radius:var(--r-xl);box-shadow:var(--sh-lg);text-align:center}.congrats-emoji{font-size:2.5rem;line-height:1}.congrats-title{font-size:var(--tx-xl);color:var(--c-text)}.congrats-text{font-size:var(--tx-sm);color:var(--c-text-2)}.congrats-actions{display:flex;gap:var(--s2);margin-top:var(--s2);flex-wrap:wrap;justify-content:center}.curr-and-course-complete{flex-shrink:0;font-size:var(--tx-xs);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--c-success);background:#34c98e1f;border-radius:4px;padding:1px var(--s2)}.pg-badge--inprogress{font-size:var(--tx-xs);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--c-warning);background:#f6b03c1f;border-radius:4px;padding:0 var(--s2);font-variant-numeric:tabular-nums}.gn-rect--inprogress{stroke:var(--c-warning)}.gn-progress-circle{fill:var(--c-warning);stroke:var(--c-bg);stroke-width:1.5}.gn-progress-glyph{fill:#fff;font-size:11px;font-weight:700}.gn-sp-item-progress{font-size:10px;color:var(--c-warning);font-variant-numeric:tabular-nums}.gn-sp-item-progress--done{color:var(--c-success)}.signin-callout{width:100%;display:flex;align-items:center;flex-wrap:wrap;gap:var(--s3) var(--s4);padding:var(--s3) var(--s4);background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-md)}.signin-callout-text{flex:1;min-width:200px;font-size:var(--tx-sm);color:var(--c-text-2)}.signin-callout .settings-error{flex-basis:100%}.compose-page{max-width:1200px;margin:0 auto;padding:var(--s5) var(--s4) 0;width:100%;box-sizing:border-box;min-height:calc(100vh - 48px);display:flex;flex-direction:column}.compose-layout{display:grid;grid-template-columns:300px minmax(0,1fr);gap:var(--s5);align-items:start;padding-bottom:var(--s5)}.compose-layout--page{grid-template-columns:minmax(0,1fr)}.compose-sidebar{display:flex;flex-direction:column;gap:var(--s4);min-width:0}.compose-sidebar .capture-bar{margin-bottom:0}.compose-inbox{background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-md);padding:var(--s3)}.compose-inbox-list{margin:0}.compose-inbox-item{padding:var(--s2);cursor:grab;transition:transform var(--dur-fast),box-shadow var(--dur-fast),border-color var(--dur-fast)}.compose-inbox-item:hover{transform:translateY(-2px) rotate(-.4deg);box-shadow:var(--sh-sm);border-color:var(--c-accent-sub-b)}.compose-inbox-item:active{cursor:grabbing}.compose-inbox-hint{margin-bottom:var(--s2)}.compose-inbox-target{color:var(--c-text-2)}.compose-main{display:flex;flex-direction:column;gap:var(--s5);min-width:0}.compose-top{display:grid;grid-template-columns:minmax(220px,300px) minmax(0,1fr);gap:var(--s5);align-items:start;min-width:0}.compose-editor-area .editor-split,.compose-editor-area .editor-source{min-height:420px}.compose-stage{min-width:0;display:flex;flex-direction:column;gap:var(--s2)}.compose-stage-header{display:flex;align-items:center;gap:var(--s2);font-size:var(--tx-xs);font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--c-text-3)}.compose-stage-num{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:var(--r-full);background:var(--c-accent-sub);color:var(--c-accent);font-family:var(--font-mono);font-size:10px}.compose-layout--page .compose-top{grid-template-columns:minmax(0,1fr)}.compose-tree{background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-md);padding:var(--s2);font-size:var(--tx-sm)}.tree-level{list-style:none;margin:0;padding-left:var(--s4)}.compose-tree>.tree-level{padding-left:var(--s1)}.tree-entry{margin:0}.tree-row{display:flex;align-items:center;gap:var(--s1);border-radius:var(--r-sm);padding:2px var(--s1)}.tree-row:hover{background:var(--c-bg-hover)}.tree-row--active{background:var(--c-accent-sub)}.tree-row--root{width:100%;border:none;background:none;color:var(--c-text);font:inherit;font-weight:600;text-align:left;cursor:pointer;padding:var(--s1) var(--s2)}.tree-row--root.tree-row--active{background:var(--c-accent-sub)}.tree-row-label{flex:1;min-width:0;border:none;background:none;color:var(--c-text);font:inherit;text-align:left;cursor:pointer;padding:2px 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-row-actions{visibility:hidden;flex-shrink:0}.tree-row:hover .tree-row-actions,.tree-row:focus-within .tree-row-actions,.tree-row--active .tree-row-actions{visibility:visible}.tree-add-row{display:flex;gap:var(--s1);padding:var(--s1) 0 var(--s1) var(--s1)}.compose-detail{min-width:0}.compose-detail-form{background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-md);padding:var(--s4)}.compose-compact-stub{display:flex;flex-direction:column;gap:var(--s3);align-items:flex-start}.editor-form{display:flex;flex-direction:column;gap:var(--s3)}.compose-footer{position:sticky;bottom:0;display:flex;align-items:center;justify-content:flex-end;gap:var(--s4);margin-top:auto;padding:var(--s3) var(--s4);background:var(--c-bg-elevated);border:1px solid var(--c-border-muted);border-bottom:none;border-radius:var(--r-md) var(--r-md) 0 0}.compose-save-state{font-size:var(--tx-sm);color:var(--c-text-2);margin-right:auto}.compose-list-header{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);margin-bottom:var(--s3)}.compose-list-header .editor-section-title{margin:0}@media(max-width:900px){.compose-layout,.compose-top{grid-template-columns:minmax(0,1fr)}.tree-row-actions{visibility:visible}}.tree-gap{list-style:none;height:4px;margin:0;border-radius:var(--r-full)}.tree-gap--active{height:10px;background:var(--c-accent);box-shadow:0 0 8px #7c6ef699}.tree-row--drop{outline:2px dashed var(--c-accent);outline-offset:-1px;background:var(--c-accent-sub)}.tree-row--dragging{opacity:.4}.drag-overlay-chip{background:var(--c-bg-elevated);border:1px solid var(--c-accent-sub-b);border-radius:var(--r-sm);padding:var(--s1) var(--s3);font-size:var(--tx-sm);color:var(--c-text);box-shadow:0 4px 16px #00000080;max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.author-chip{display:inline-flex;align-items:center;gap:var(--s1);font-size:var(--tx-sm);color:var(--c-text-2);min-width:0}.author-chip--link{text-decoration:none}.author-chip--link:hover .author-chip-name{text-decoration:underline}.author-chip-avatar{width:20px;height:20px;border-radius:var(--r-full);object-fit:cover;flex-shrink:0}.author-chip-avatar--fallback{display:inline-flex;align-items:center;justify-content:center;color:#fff;font-size:11px;font-weight:600}.author-chip-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pub-author-row{margin:var(--s2) 0}.profile-page{max-width:1040px;margin:0 auto;padding:var(--s6) var(--s6) var(--s10);width:100%}.profile-header{display:flex;align-items:flex-start;gap:var(--s4);margin-bottom:var(--s6)}.profile-avatar{width:72px;height:72px;border-radius:var(--r-full);object-fit:cover;flex-shrink:0}.profile-avatar--fallback{background:var(--c-accent-sub)}.profile-header-text{min-width:0}.profile-name{margin:0 0 var(--s1);font-size:var(--tx-xl)}.profile-npub{display:flex;align-items:center;gap:var(--s2);margin:0 0 var(--s2);font-size:var(--tx-sm);color:var(--c-text-2)}.profile-about{margin:0;font-size:var(--tx-sm);color:var(--c-text-2);white-space:pre-wrap}.profile-section{margin-bottom:var(--s6)}.btn-inline{background:none;border:none;padding:0;color:var(--c-accent);font-size:var(--tx-sm);cursor:pointer}.btn-inline:hover{text-decoration:underline}.author-chip-hop{flex-shrink:0;padding:0 var(--s2);border-radius:var(--r-full);background:var(--c-accent-sub);color:var(--c-accent);font-size:11px;line-height:1.6}.settings-hops-input{width:64px;background:var(--c-bg-elevated);color:var(--c-text);border:1px solid var(--c-accent-sub-b);border-radius:var(--r-sm);padding:var(--s1) var(--s2);font-size:var(--tx-sm)}.pub-author-row{display:flex;align-items:center;gap:var(--s3)}.reaction-like{background:none;border:1px solid var(--c-accent-sub-b);border-radius:var(--r-full);padding:0 var(--s2);color:var(--c-text-2);font-size:var(--tx-sm);cursor:pointer;line-height:1.7}.reaction-like:hover:not(:disabled){border-color:var(--c-accent)}.reaction-like:disabled{cursor:default}.reaction-like--done{color:var(--c-accent)}.comments-section{margin-top:var(--s6)}.comments-toggle{display:flex;align-items:center;gap:var(--s2);width:100%;background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-md);padding:var(--s3) var(--s4);color:var(--c-text);font-size:var(--tx-base);font-weight:600;text-align:left;cursor:pointer;transition:background var(--dur-fast),border-color var(--dur-fast)}.comments-toggle:hover{background:var(--c-bg-elevated);border-color:var(--c-border)}.comments-hint{color:var(--c-text-2);font-size:var(--tx-sm);margin:var(--s2) 0}.comments-list{list-style:none;margin:var(--s3) 0 0;padding:0;display:flex;flex-direction:column;gap:var(--s4)}.comments-list--outside{opacity:.85}.comment-item{min-width:0}.comment-meta{display:flex;align-items:center;gap:var(--s2)}.comment-time{color:var(--c-text-3);font-size:11px}.comment-content{margin:var(--s1) 0;font-size:var(--tx-sm);white-space:pre-wrap;overflow-wrap:anywhere}.comments-replies{list-style:none;margin:var(--s2) 0 0;padding:0 0 0 var(--s4);border-left:2px solid var(--c-accent-sub-b);display:flex;flex-direction:column;gap:var(--s3)}.comments-outside-toggle{background:none;border:none;padding:0;margin-top:var(--s3);color:var(--c-accent);font-size:var(--tx-sm);cursor:pointer}.comments-outside-toggle:hover{text-decoration:underline}.comment-composer{margin:var(--s3) 0}.comment-input{width:100%;box-sizing:border-box;background:var(--c-bg-elevated);color:var(--c-text);border:1px solid var(--c-accent-sub-b);border-radius:var(--r-sm);padding:var(--s2);font-size:var(--tx-sm);font-family:inherit;resize:vertical}.comment-composer-actions{display:flex;gap:var(--s2);margin-top:var(--s1)}.badge-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--s3)}.badge-item{display:flex;align-items:center;gap:var(--s3)}.badge-image{width:48px;height:48px;border-radius:var(--r-sm);object-fit:cover;flex-shrink:0}.badge-image--fallback{display:inline-flex;align-items:center;justify-content:center;font-size:28px;background:var(--c-accent-sub)}.badge-text{display:flex;flex-direction:column;gap:2px;min-width:0}.badge-name{font-weight:600}.badge-description{color:var(--c-text-2);font-size:var(--tx-sm)}.badge-issuer{display:inline-flex;align-items:center;gap:var(--s1);color:var(--c-text-3);font-size:11px}.badge-admin{margin-top:var(--s4)}.badge-admin-title{margin:0 0 var(--s2);font-size:var(--tx-base)}.badge-admin--own{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,340px);gap:var(--s6);align-items:start}@media(max-width:720px){.badge-admin--own{grid-template-columns:minmax(0,1fr)}}.badge-admin-col{min-width:0}.badge-def-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--s2)}.badge-def-card{display:flex;align-items:center;gap:var(--s3);background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-md);padding:var(--s3) var(--s4)}.badge-admin-form{display:flex;flex-direction:column;gap:var(--s2)}.badge-admin-form--card{background:var(--c-bg-card);border:1px solid var(--c-border-muted);border-radius:var(--r-md);padding:var(--s4)}.badge-award-select{background:var(--c-bg-elevated);color:var(--c-text);border:1px solid var(--c-accent-sub-b);border-radius:var(--r-sm);padding:var(--s1) var(--s2);font-size:var(--tx-sm)}.search-section{width:100%;margin-bottom:var(--s4)}.search-input{width:100%;box-sizing:border-box;background:var(--c-bg-elevated);color:var(--c-text);border:1px solid var(--c-accent-sub-b);border-radius:var(--r-sm);padding:var(--s2) var(--s3);font-size:var(--tx-sm)}.search-input:focus{outline:none;border-color:var(--c-accent)}.pub-author-row--header{padding:0 var(--view-col-inset)}.course-index>.edit-link{align-self:stretch;padding:0 var(--view-col-inset)}.pub-comments{max-width:var(--view-col);margin:0 auto;padding:0 var(--s6) var(--s8);width:100%;box-sizing:border-box}.nav-profile{text-decoration:none;color:var(--c-text-2);font-size:var(--tx-base);font-weight:500;padding:var(--s2) var(--s3);border-radius:var(--r-sm);line-height:1;white-space:nowrap}.nav-profile:hover{color:var(--c-text);background:var(--c-bg-elevated)}