:root { --surface: #1a1a19; --surface-2: #201f1e; --surface-3: #262523; --line: #3c3c38; --line-soft: #2b2a28; --text: #e8e6df; --text-2: #c3c2b7; --muted: #8a8880; --accent: #3987e5; --warn: #c98500; --bad: #e66767; color-scheme: dark; } * { box-sizing: border-box; } html, body { margin: 0; padding: 0; background: var(--surface); color: var(--text); font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif; font-size: 15px; line-height: 1.6; } a { color: var(--accent); } code, pre, .mono { font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace; } .app { display: flex; align-items: flex-start; min-height: 100vh; } /* ---------- sidebar ---------- */ .sidebar { position: sticky; top: 0; flex: 0 0 250px; height: 100vh; overflow-y: auto; padding: 20px 14px 24px 20px; border-right: 1px solid var(--line-soft); background: var(--surface-2); } .brand-title { font-size: 16px; font-weight: 600; letter-spacing: 0.01em; } .brand-sub { font-size: 12px; color: var(--muted); margin-bottom: 18px; } .nav-part-title { font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--muted); margin: 16px 0 4px; } .sidebar ol { list-style: none; margin: 0; padding: 0; } .nav-item { display: flex; gap: 8px; align-items: baseline; width: 100%; text-align: left; background: none; border: none; color: var(--text-2); padding: 4px 6px; border-radius: 5px; font: inherit; font-size: 13.5px; line-height: 1.35; cursor: pointer; } .nav-item:hover { background: var(--surface-3); color: var(--text); } .nav-item.active { background: var(--surface-3); color: var(--text); box-shadow: inset 2px 0 0 var(--accent); } .nav-num { display: inline-block; min-width: 14px; color: var(--muted); font-variant-numeric: tabular-nums; font-size: 12px; } .nav-foot { margin-top: 26px; font-size: 11.5px; line-height: 1.5; color: var(--muted); } /* ---------- main column ---------- */ .main { flex: 1 1 auto; min-width: 0; padding: 28px 32px 80px; } .chapter { max-width: 860px; margin: 0 auto; } .chapter-part { font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--muted); } .chapter-head h2 { margin: 4px 0 6px; font-size: 25px; font-weight: 600; letter-spacing: -0.01em; } .chapter-blurb { margin: 0 0 8px; color: var(--text-2); } .prose { max-width: 720px; } .prose h3 { font-size: 17px; margin: 26px 0 6px; } .prose p { margin: 12px 0; } .prose ul, .prose ol { padding-left: 22px; } .prose li { margin: 5px 0; } .prose code { background: var(--surface-3); padding: 1px 4px; border-radius: 3px; font-size: 13px; } .prose blockquote { margin: 14px 0; padding: 2px 14px; border-left: 2px solid var(--line); color: var(--text-2); } .prose table { border-collapse: collapse; font-size: 13.5px; margin: 12px 0; } .prose th, .prose td { border-bottom: 1px solid var(--line-soft); padding: 4px 12px 4px 0; text-align: left; font-variant-numeric: tabular-nums; } .katex-display { overflow-x: auto; overflow-y: hidden; padding: 2px 0; } /* ---------- labs ---------- */ .lab { margin: 24px 0 30px; padding: 14px 16px 16px; border: 1px solid var(--line-soft); border-radius: 8px; background: var(--surface-2); } .lab-head h3 { margin: 0; font-size: 15px; font-weight: 600; } .lab-caption { margin: 2px 0 0; font-size: 13px; color: var(--muted); } .controls { display: flex; flex-wrap: wrap; gap: 10px 20px; margin: 12px 0 4px; } .control { display: flex; flex-direction: column; gap: 2px; font-size: 12px; } .control-toggle { flex-direction: row; align-items: center; gap: 6px; } .control-label { color: var(--muted); } .control-value { color: var(--text); font-variant-numeric: tabular-nums; } .control input[type='range'] { width: 150px; accent-color: var(--accent); } .control select { background: var(--surface-3); color: var(--text); border: 1px solid var(--line); border-radius: 4px; padding: 2px 6px; font: inherit; font-size: 12.5px; } .lab-bar { display: flex; align-items: center; gap: 14px; margin: 10px 0 6px; flex-wrap: wrap; } .lab-bar-gap { flex: 1 1 auto; } button { font: inherit; font-size: 12.5px; padding: 3px 12px; border-radius: 5px; border: 1px solid var(--line); background: var(--surface-3); color: var(--text); cursor: pointer; } button:hover:not(:disabled) { border-color: var(--muted); } button:disabled { opacity: 0.5; cursor: default; } button.primary { background: #1c5cab; border-color: #256abf; } button.ghost { background: none; border-color: transparent; color: var(--muted); } button.ghost:hover { color: var(--text); } .stat { display: flex; flex-direction: column; line-height: 1.25; } .stat-label { font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); } .stat-value { font-size: 13px; font-variant-numeric: tabular-nums; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; } .warn { color: var(--warn); font-size: 12px; } .lab-error { color: var(--bad); background: #2a1d1d; border: 1px solid #4a2b2b; border-radius: 6px; padding: 8px 10px; font-size: 12.5px; white-space: pre-wrap; overflow-x: auto; } .lab-log { background: var(--surface-3); border-radius: 6px; padding: 8px 10px; font-size: 12px; max-height: 260px; overflow: auto; white-space: pre; color: var(--text-2); } .lab-placeholder { color: var(--muted); font-size: 13px; padding: 26px 0; text-align: center; } .lab-figures { display: flex; flex-direction: column; gap: 6px; } .figure-row { display: flex; flex-wrap: wrap; gap: 10px; } .figure-row > * { flex: 1 1 320px; min-width: 300px; } .lab-editor { margin-top: 10px; border: 1px solid var(--line-soft); border-radius: 6px; overflow: hidden; } .lab-editor-bar { display: flex; align-items: center; gap: 10px; padding: 4px 8px; font-size: 12px; color: var(--muted); background: var(--surface-3); } .editor-host .cm-editor { max-height: 460px; font-size: 12.5px; } /* ---------- static figures ---------- */ .static-figure { margin: 22px 0; max-width: 720px; } .static-figure figcaption { margin-top: 8px; font-size: 12.5px; line-height: 1.5; color: var(--muted); } /* ---------- plots ---------- */ .plot-host { width: 100%; } .plot-title { font-size: 12px; color: var(--text-2); margin: 6px 0 -4px; } .legend { display: flex; flex-wrap: wrap; gap: 4px 16px; font-size: 12px; color: var(--text-2); margin: -4px 0 6px 44px; } .legend-item { display: inline-flex; align-items: center; gap: 5px; } .legend-item.dim { opacity: 0.4; } .legend-value { color: var(--muted); font-variant-numeric: tabular-nums; } /* ---------- tables of numbers ---------- */ .numtable { border-collapse: collapse; font-size: 12.5px; font-variant-numeric: tabular-nums; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; margin: 4px 0 2px; } .numtable th { text-align: right; color: var(--muted); font-weight: 500; padding: 2px 10px 2px 0; border-bottom: 1px solid var(--line-soft); } .numtable td { text-align: right; padding: 1px 10px 1px 0; } /* ---------- library ---------- */ .lib-file { border-bottom: 1px solid var(--line-soft); } .lib-name { background: none; border: none; color: var(--text); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; padding: 6px 0; cursor: pointer; } .lib-src { background: var(--surface-2); border-radius: 6px; padding: 10px 12px; font-size: 12.5px; overflow-x: auto; color: var(--text-2); } .pager { display: flex; max-width: 860px; margin: 30px auto 0; padding-top: 14px; border-top: 1px solid var(--line-soft); } @media (max-width: 900px) { .app { flex-direction: column; } .sidebar { position: static; width: 100%; height: auto; flex: none; border-right: none; border-bottom: 1px solid var(--line-soft); } .main { padding: 18px 14px 60px; } }