/* React mounts into #root; display:contents removes it from the flex chain */ #root { display: contents; } /* Reset body to a layout container (book-page.css targets body for page content) */ html, body { height: 100vh; overflow: hidden; display: flex; flex-direction: column; padding: 0; max-width: unset; margin: 0; background-image: none; } /* ── App header ── */ header { display: flex; align-items: center; justify-content: space-between; padding: 10px 20px; background: var(--surface2); border-bottom: 1px solid var(--border-bright); flex-shrink: 0; } .logo { font-family: var(--font-display); font-size: 0.7rem; letter-spacing: 0.18em; text-transform: uppercase; color: var(--teal); } .toolbar { display: flex; align-items: center; gap: 12px; } /* ── Prev / Next buttons ── */ .tab { background: var(--surface3); border: 1px solid var(--border-bright); color: var(--text); font-family: var(--font-mono); font-size: 0.72rem; padding: 5px 14px; cursor: pointer; transition: background 0.15s, color 0.15s, border-color 0.15s; } .tab:hover:not(:disabled) { background: var(--surface); color: var(--teal); border-color: var(--teal-dim); } .tab:disabled { opacity: 0.35; cursor: default; } #layout { display: flex; flex: 1; overflow: hidden; } /* ── Sidebar ── */ #sidebar { width: 270px; flex-shrink: 0; display: flex; flex-direction: column; background: var(--surface); border-right: 1px solid var(--border-bright); overflow: hidden; } #sidebar-header { padding: 14px 16px; background: var(--surface2); border-bottom: 1px solid var(--border-bright); flex-shrink: 0; } #sidebar-header p { font-family: var(--font-mono); font-size: 0.7rem; color: var(--text-dim); margin-top: 4px; } #page-list { flex: 1; overflow-y: auto; list-style: none; padding: 4px 0; } #page-list li button { width: 100%; text-align: left; padding: 6px 14px; background: none; border: none; cursor: pointer; color: var(--text-dim); font-family: var(--font-body); font-size: 0.88rem; display: flex; gap: 10px; align-items: baseline; transition: background 0.15s, color 0.15s; } #page-list li button:hover { background: var(--surface2); color: var(--text); } #page-list li.active button { background: var(--surface3); color: var(--teal); } .page-num { flex-shrink: 0; min-width: 24px; font-family: var(--font-mono); font-size: 0.72rem; color: var(--border-bright); } li.active .page-num { color: var(--teal-dim); } /* ── Main area ── */ #main { flex: 1; display: flex; flex-direction: column; overflow: hidden; } /* ── Nav bar ── */ #nav { display: flex; align-items: center; gap: 10px; padding: 10px 20px; background: var(--surface); border-bottom: 1px solid var(--border-bright); flex-shrink: 0; } #page-title { flex: 1; text-align: center; font-family: var(--font-display); font-size: 0.65rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } #page-indicator { font-family: var(--font-mono); font-size: 0.72rem; color: var(--text-dim); white-space: nowrap; } /* ── Scrollable content ── */ #content { flex: 1; overflow-y: auto; background: var(--bg); background-image: radial-gradient(ellipse at 20% 10%, rgba(78,205,196,.04) 0%, transparent 50%), radial-gradient(ellipse at 80% 90%, rgba(201,168,76,.04) 0%, transparent 50%); } /* ── Page sections ── */ .page-section { max-width: 860px; margin: 0 auto; padding: 32px; border-bottom: 1px solid var(--border); } .page-section:last-child { border-bottom: none; min-height: calc(100vh - 80px); } /* Override book-page.css header rule inside sections */ .page-section header { border-bottom: 1px solid var(--border); padding-bottom: 0.8em; margin-bottom: 1.4em; } /* ── Search modal ── */ .search-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.55); z-index: 1000; display: flex; align-items: flex-start; justify-content: center; padding-top: 10vh; } .search-modal { width: 580px; max-width: calc(100vw - 40px); max-height: 70vh; background: var(--surface2); border: 1px solid var(--border-bright); display: flex; flex-direction: column; overflow: hidden; } .search-input { width: 100%; padding: 14px 16px; background: var(--surface); border: none; border-bottom: 1px solid var(--border-bright); color: var(--text); font-family: var(--font-body); font-size: 1rem; outline: none; flex-shrink: 0; } .search-input::placeholder { color: var(--text-dim); } .search-results { overflow-y: auto; flex: 1; list-style: none; padding: 0; margin: 0; } .search-result { padding: 10px 16px; border-bottom: 1px solid var(--border); cursor: pointer; display: flex; flex-direction: column; gap: 3px; transition: background 0.1s; } .search-result:last-child { border-bottom: none; } .search-result:hover, .search-result.active { background: var(--surface3); } .search-result-meta { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; } .search-result-heading { font-family: var(--font-display); font-size: 0.7rem; letter-spacing: 0.08em; color: var(--teal); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; } .search-result-page { font-family: var(--font-mono); font-size: 0.7rem; color: var(--text-dim); white-space: nowrap; flex-shrink: 0; } .search-result-snippet { font-size: 0.85rem; color: var(--text-dim); line-height: 1.5; } .search-result-snippet mark { background: none; color: var(--gold); font-weight: 600; } .search-empty { padding: 24px 16px; text-align: center; color: var(--text-dim); font-family: var(--font-mono); font-size: 0.8rem; } .search-footer { display: flex; gap: 16px; padding: 7px 14px; border-top: 1px solid var(--border); background: var(--surface3); flex-shrink: 0; } .search-footer span { font-family: var(--font-mono); font-size: 0.68rem; color: var(--text-dim); } /* ── Heading permalink buttons ── */ .page-section h1, .page-section h2, .page-section h3 { position: relative; scroll-margin-top: 60px; } .heading-link { position: absolute; left: -24px; top: 50%; transform: translateY(-50%); background: none; border: none; cursor: pointer; color: var(--text-dim); font-family: var(--font-mono); font-size: 17px; padding: 2px 4px; line-height: 1; transition: color 0.15s; user-select: none; } /* h1 has padding-bottom: 0.3em — shift button up so it centers with the text line, not the full box */ .page-section h1 > .heading-link { top: calc(50% - 5px); } .heading-link:hover, .heading-link--copied { color: var(--teal); }