*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:#f4f4f5;color:#111}.app{display:flex;flex-direction:column;height:100vh}.topbar{display:flex;align-items:center;gap:12px;padding:8px 16px;background:#1e293b;color:#f1f5f9}.topbar h1{margin:0;font-size:18px}.topbar .subtitle{font-size:12px;opacity:.7;flex:1}.topbar button,.topbar select{padding:4px 10px;border-radius:4px;border:1px solid #475569;background:#334155;color:#f1f5f9;cursor:pointer;font-size:13px}.topbar button:hover,.topbar select:hover{background:#475569}.grid{flex:1;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:8px;padding:8px;overflow:hidden}.panel{background:#fff;border:1px solid #e4e4e7;border-radius:6px;display:flex;flex-direction:column;overflow:hidden}.panel-header{padding:6px 12px;border-bottom:1px solid #e4e4e7;display:flex;justify-content:space-between;align-items:center}.panel-header h2{margin:0;font-size:13px;font-weight:600;color:#334155}.panel-toggles{display:flex;gap:12px;font-size:11px;color:#475569}.panel-toggles label{display:inline-flex;align-items:center;gap:4px;cursor:pointer;-webkit-user-select:none;user-select:none}.panel-toggles input[type=checkbox]{margin:0;cursor:pointer}.panel-body{padding:8px 12px;overflow:auto;flex:1}.panel svg{display:block;width:100%;height:100%}.drawing-panel{min-height:0}.drawing-panel svg{min-height:0}.dim-section{margin-bottom:10px}.dim-section h3{margin:0 0 4px;font-size:12px;font-weight:600;color:#475569}.dim-section h3 small{font-weight:400;opacity:.6}.chip-grid{display:flex;flex-wrap:wrap;gap:4px}.simplex-chip{padding:2px 8px;border-radius:4px;border:1px solid #cbd5e1;background:#f8fafc;cursor:pointer;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.simplex-chip:hover{background:#f1f5f9}.simplex-chip.selected{background:#facc15;border-color:#a16207;color:#422006}.boundary-display{margin-top:12px;padding:8px 10px;background:#f8fafc;border-radius:4px;font-size:12px}.boundary-display>div{margin:3px 0;line-height:1.6}.inline-chip{padding:1px 5px;margin:0 1px;border:1px solid #cbd5e1;background:#fff;cursor:pointer;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;border-radius:3px}.inline-chip:hover{background:#f1f5f9}.tabs{display:flex;gap:4px;margin-bottom:8px}.tabs button{padding:4px 12px;border:1px solid #cbd5e1;background:#f8fafc;cursor:pointer;font-size:13px;border-radius:4px}.tabs button.active{background:#facc15;border-color:#a16207;font-weight:600}.group{font-size:15px;margin:8px 0;padding:8px 10px;background:#ecfeff;border-radius:4px;border-left:3px solid #06b6d4}.basis-controls{display:flex;gap:6px;align-items:center;margin:8px 0;font-size:12px}.basis-controls button{padding:2px 8px;cursor:pointer;border-radius:3px;border:1px solid #cbd5e1;background:#fff}.basis-controls button:disabled{opacity:.4;cursor:default}.cochain-editor{font-size:12px;max-height:200px;overflow:auto;border:1px solid #e4e4e7;border-radius:4px;padding:4px 8px}.cochain-row{display:flex;justify-content:space-between;align-items:center;margin:2px 0;gap:8px}.cochain-row input{width:70px;font-family:ui-monospace,monospace;padding:2px 4px;border:1px solid #cbd5e1;border-radius:3px}.cochain-row code{font-family:ui-monospace,monospace}.coboundary-display{margin:8px 0;font-size:12px;padding:6px 10px;background:#fef3c7;border-radius:4px;border-left:3px solid #f59e0b}.coboundary-display ul{margin:4px 0;padding-left:18px}.coboundary-display .not-cocycle{color:#b45309;font-weight:600}.dd-check{margin-top:8px;padding:6px 10px;background:#dcfce7;border-radius:4px;border-left:3px solid #15803d;color:#14532d;font-weight:600;font-size:12px}.dd-check--fail{background:#fee2e2;border-left-color:#b91c1c;color:#7f1d1d}.dd-aside{color:#475569;font-weight:400;font-style:italic;font-size:11px}.snapshot-bar{padding:6px 12px;background:#f1f5f9;border-top:1px solid #cbd5e1;display:flex;gap:6px;align-items:center;overflow-x:auto;font-size:12px;flex-wrap:wrap}.snapshot-bar button{padding:3px 8px;cursor:pointer;font-size:12px;border:1px solid #cbd5e1;background:#fff;border-radius:3px}.snapshot-hint{color:#64748b;font-size:11px}.snapshot-chip{display:inline-flex;align-items:center;gap:2px;border:1px solid #cbd5e1;border-radius:4px;background:#fff;padding:0}.snapshot-chip button{border:none;padding:3px 6px;background:transparent}.snapshot-chip.comparing{background:#fef9c3;border-color:#ca8a04}.hint{color:#94a3b8;font-style:italic;font-size:11px;font-family:ui-monospace,monospace}.cup-section{margin:10px 0 4px;padding:8px 10px;background:#ede9fe;border-radius:4px;border-left:3px solid #8b5cf6;font-size:12px}.cup-section h3{margin:0 0 6px;font-size:12px;font-weight:600;color:#5b21b6}.cup-controls{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center;margin-bottom:6px}.cup-controls label{display:inline-flex;align-items:center;gap:4px;cursor:pointer}.cup-controls select{padding:2px 4px;border:1px solid #cbd5e1;border-radius:3px;background:#fff;font-size:12px;margin-left:4px}.cup-controls input[type=radio]{margin:0;cursor:pointer}.cup-result{margin-top:4px;padding:5px 8px;background:#fff;border-radius:3px;border:1px solid #ddd6fe}.cup-result ul{margin:2px 0;padding-left:18px}.cup-result li{line-height:1.5}.cup-result code{font-family:ui-monospace,monospace}.cup-result .cocycle-ok{color:#059669;font-weight:600;margin-top:4px}.cup-result .not-cocycle{color:#b45309;font-weight:600;margin-top:4px}.grid--cols-1{grid-template-columns:1fr;grid-template-rows:1fr}.grid--cols-2{grid-template-columns:1fr 1fr;grid-template-rows:1fr}.grid--cols-3,.grid--cols-4{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}.grid--chain{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;grid-auto-flow:column}.grid--chain .cohomology-panel{grid-column:2;grid-row:1 / span 2}.pair-selector{display:flex;align-items:center;gap:8px;padding:6px 8px;background:#f8fafc;border-radius:4px;margin-bottom:8px}.pair-selector button{padding:2px 10px;border:1px solid #cbd5e1;background:#fff;border-radius:3px;cursor:pointer;font-size:14px}.pair-selector button:disabled{opacity:.35;cursor:default}.pair-label{font-size:13px;font-weight:600;color:#1e293b}.chain-view{display:flex;flex-direction:column;gap:10px}.layer-card{border:1px solid #e4e4e7;border-radius:6px;padding:10px 12px;background:#fff}.layer-card__title{font-size:13px;font-weight:600;color:#1e293b;margin-bottom:6px}.shadow-row--header{display:grid;grid-template-columns:1fr 70px 60px;gap:8px;align-items:center;font-size:11px;color:#64748b;font-weight:600;padding-bottom:2px;border-bottom:1px solid #e4e4e7;margin-bottom:2px}.cochain-row--shadow{display:grid;grid-template-columns:1fr 70px 60px;gap:8px;align-items:center}.cochain-row--shadow input{width:100%}.shadow-cell{font-family:ui-monospace,monospace;font-size:12px;color:#94a3b8;text-align:center;padding:2px 4px;border-radius:3px;background:#f8fafc}.shadow-cell--match{color:#15803d;background:#dcfce7;font-weight:600}.anno-yes{color:#059669;font-weight:600}.anno-no{color:#b45309;font-weight:600}.tutorial-launcher{background:#facc15!important;color:#422006!important;border-color:#a16207!important;font-weight:600}.privacy-link{font-size:11px!important;opacity:.65;padding:4px 8px!important}.privacy-link:hover{opacity:1}.consent-banner{position:fixed;left:12px;right:12px;bottom:12px;background:#1e293b;color:#f1f5f9;border-radius:8px;padding:12px 16px;box-shadow:0 8px 24px #00000040;display:flex;align-items:center;gap:16px;flex-wrap:wrap;z-index:100;font-size:13px}.consent-text{flex:1;min-width:240px;line-height:1.4}.consent-more{margin-top:6px;font-size:12px;opacity:.85}.consent-buttons{display:flex;gap:8px;align-items:center}.consent-buttons button{padding:6px 12px;border-radius:4px;border:1px solid #475569;background:#334155;color:#f1f5f9;cursor:pointer;font-size:13px}.consent-buttons button:hover{background:#475569}.consent-buttons button.link{background:transparent;border:none;text-decoration:underline;color:#cbd5e1;padding:6px 4px}.welcome-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a8c;display:flex;align-items:center;justify-content:center;z-index:200;padding:16px}.welcome-modal{background:#fff;border-radius:10px;padding:24px 28px;max-width:520px;box-shadow:0 16px 40px #00000040}.welcome-modal h2{margin:0 0 12px;color:#1e293b;font-size:20px}.welcome-modal p{margin:0 0 18px;color:#475569;line-height:1.5;font-size:14px}.welcome-buttons{display:flex;gap:10px;justify-content:flex-end}.welcome-buttons button{padding:8px 16px;border-radius:5px;border:1px solid #cbd5e1;background:#f8fafc;color:#1e293b;cursor:pointer;font-size:13px}.welcome-buttons button:hover{background:#f1f5f9}.welcome-buttons button.primary{background:#facc15;border-color:#a16207;color:#422006;font-weight:600}.welcome-buttons button.primary:hover{background:#eab308}.tutorial-bar{background:#fef3c7;border-top:2px solid #a16207;padding:10px 16px;display:flex;flex-direction:column;gap:6px;position:relative;overflow:hidden;min-height:72px}.tutorial-resize{position:absolute;top:-5px;left:0;right:0;height:10px;cursor:ns-resize;z-index:5;touch-action:none}.tutorial-resize:before{content:"";position:absolute;top:4px;left:50%;transform:translate(-50%);width:44px;height:3px;background:#a16207;opacity:.35;border-radius:2px}.tutorial-resize:hover:before,.tutorial-resize:active:before{opacity:.85}.tutorial-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.tutorial-title{display:flex;align-items:center;gap:10px;color:#422006}.tutorial-progress{font-size:11px;padding:2px 8px;background:#a16207;color:#fef3c7;border-radius:10px;font-weight:600}.tutorial-title strong{font-size:14px}.exit-link{background:transparent;border:none;color:#92400e;text-decoration:underline;cursor:pointer;font-size:12px;padding:2px 6px}.exit-link:hover{color:#422006}.tutorial-prose{color:#422006;line-height:1.55;font-size:13px;white-space:pre-line;flex:1 1 auto;overflow-y:auto;min-height:0}.tutorial-paragraph{margin:0 0 8px;max-width:900px}.tutorial-paragraph:last-child{margin-bottom:0}.tutorial-prose strong{color:#422006;font-weight:700}.tutorial-controls{display:flex;align-items:center;gap:12px;margin-top:4px}.tutorial-controls button{padding:5px 14px;border-radius:4px;border:1px solid #a16207;background:#fff;color:#422006;cursor:pointer;font-size:13px}.tutorial-controls button:hover:not(:disabled){background:#fef9c3}.tutorial-controls button:disabled{opacity:.4;cursor:default}.tutorial-controls button.primary{background:#facc15;font-weight:600}.tutorial-controls button.pulse{animation:pulse 1.6s ease-in-out infinite}@keyframes pulse{0%,to{box-shadow:0 0 #a1620780}50%{box-shadow:0 0 0 6px #a1620700}}.tutorial-goal{flex:1;display:flex;justify-content:center;min-height:18px;font-size:12px}.goal-reached{color:#059669;font-weight:600}.goal-hint{color:#92400e;font-style:italic}.glossary-launcher{background:#0891b2!important;color:#ecfeff!important;border-color:#155e75!important;font-weight:600}.glossary-modal{background:#fff;border-radius:10px;max-width:760px;width:100%;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 16px 40px #00000040}.glossary-header{display:flex;justify-content:space-between;align-items:center;padding:18px 24px 10px;border-bottom:1px solid #e4e4e7}.glossary-header h2{margin:0;color:#1e293b;font-size:20px}.glossary-close{background:transparent;border:none;cursor:pointer;font-size:24px;line-height:1;color:#64748b;padding:0 8px;border-radius:4px}.glossary-close:hover{color:#1e293b;background:#f1f5f9}.glossary-body{overflow-y:auto;padding:12px 24px 20px}.glossary-section{margin-top:18px}.glossary-section:first-child{margin-top:6px}.glossary-chapter-title{font-size:12px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.05em;margin:0 0 8px;padding-bottom:4px;border-bottom:1px solid #e4e4e7}.glossary-entry{padding:10px 0;border-bottom:1px dashed #f1f5f9}.glossary-entry:last-child{border-bottom:none}.glossary-term{display:flex;align-items:baseline;gap:8px;margin-bottom:4px}.glossary-term strong{color:#1e293b;font-size:14px}.glossary-symbol{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;color:#5b21b6;background:#ede9fe;padding:1px 6px;border-radius:3px}.glossary-short{color:#475569;font-size:13px;line-height:1.5;margin-bottom:4px;font-style:italic}.glossary-long{color:#1e293b;font-size:13px;line-height:1.55}.glossary-long em,.glossary-short em{color:#475569}.delta-eq-section{margin:8px 0}.delta-eq-section>h4{margin:0 0 4px;font-size:11px;font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.04em}.layer-card__section-title{margin:8px 0 4px;font-size:11px;font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.04em}.delta-eq-list{border:1px solid #e4e4e7;border-radius:4px;background:#fcfcfd;padding:4px 6px}.delta-eq-row{display:grid;grid-template-columns:auto auto 1fr auto auto auto auto;gap:6px;align-items:center;font-family:ui-monospace,monospace;font-size:12px;padding:3px 4px;border-bottom:1px dashed #f1f5f9}.delta-eq-row:last-child{border-bottom:none}.delta-eq-target{color:#0891b2;font-weight:500}.delta-eq-symbolic,.delta-eq-numeric{display:inline-flex;flex-wrap:wrap;gap:4px;align-items:center;color:#475569}.delta-eq-term{display:inline-flex;align-items:center;gap:2px}.delta-eq-num{color:#1e293b}.delta-eq-result{padding:1px 8px;border-radius:3px;font-weight:600;font-family:ui-monospace,monospace;font-size:12px;white-space:nowrap}.delta-eq-result--zero{background:#dcfce7;color:#15803d}.delta-eq-result--nonzero{background:#fee2e2;color:#b91c1c}.face-chip{padding:1px 5px;border:1px solid #cbd5e1;background:#fff;border-radius:3px;font-family:ui-monospace,monospace;font-size:11px;color:#1e293b;cursor:pointer}.face-chip:hover{background:#f1f5f9;border-color:#94a3b8}.h-chip-row{margin:8px 0 4px;display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:6px 8px;background:#ecfeff;border-radius:4px;border-left:3px solid #06b6d4}.h-chip{padding:4px 10px;background:#06b6d4;color:#fff;border:none;border-radius:4px;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit}.h-chip:hover{background:#0891b2}.h-chip--inert{background:#cbd5e1;color:#475569;cursor:default}.h-chip-meta{font-size:11px;color:#475569}.h-chip-class{font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:#1e3a8a;background:#eff6ff;border:1px solid #bfdbfe;padding:1px 6px;border-radius:4px}.h-chip-class--none{color:#94a3b8;background:#f8fafc;border-color:#e2e8f0}.h-chip-nav{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:#1e293b}.h-chip-nav button{padding:1px 8px;border:1px solid #cbd5e1;background:#fff;border-radius:3px;cursor:pointer;font-size:12px}.h-chip-nav button:hover{background:#f1f5f9}.h-chip-clear{margin-left:auto;padding:2px 10px;border:1px solid #cbd5e1;background:#fff;border-radius:3px;cursor:pointer;font-size:11px;color:#475569}.h-chip-clear:hover{background:#f1f5f9}.layer-status{display:flex;gap:18px;flex-wrap:wrap;font-size:12px;margin:6px 0;padding:4px 8px;background:#f8fafc;border-radius:3px}.cup-q{font-size:12px;color:#475569;padding:2px 6px;background:#fff;border-radius:3px}.grid--3col{grid-template-columns:1fr 1fr 1fr;grid-template-rows:1fr 1fr}.grid--3col>.panel{min-height:0}.space-view-panel{grid-column:1;grid-row:1}.nerve-geom-panel{grid-column:1;grid-row:2}.drawing-panel{grid-column:2;grid-row:1}.nerve-set-panel{grid-column:2;grid-row:2}.grid--3col .cohomology-panel{grid-column:3;grid-row:1 / span 2}.space-view-canvas-wrap{flex:1;min-height:0;position:relative}.space-view-canvas-wrap canvas{display:block;width:100%;height:100%}.immersion-note{font-size:11px;color:#92400e;cursor:help;background:#fef3c7;border-radius:3px;padding:2px 6px}.cover-chip{display:inline-flex;align-items:center;font-size:12px;padding:3px 8px;border-radius:10px;border:1px solid transparent;white-space:nowrap;font:inherit}.cover-chip--incomplete{color:#64748b;background:#f1f5f9;border-color:#e2e8f0;cursor:pointer}.cover-chip--incomplete:hover{color:#334155;background:#e2e8f0;border-color:#cbd5e1}.cover-chip--active{color:#92400e;background:#fef3c7;border-color:#f59e0b}.cover-chip--good{color:#166534;background:#dcfce7;border-color:#86efac}.cover-chip--bad{color:#991b1b;background:#fee2e2;border-color:#fca5a5;cursor:help}.empty-cover-highlight{fill:red;fill-opacity:.55}
