*, *::before, *::after { box-sizing: border-box; } html, body, #root { height: 100%; margin: 0; } body { font-family: var(--font-body); font-weight: var(--font-weight-body); color: var(--color-text); background: var(--color-bg); line-height: 1.6; } h1, h2, h3, h4 { font-family: var(--font-heading); font-weight: var(--font-weight-heading); line-height: 1.25; } code, pre { font-family: var(--font-mono); font-weight: var(--font-weight-mono); } /* A pond's content root (ADR 0016): sets --font-* (via PondFontScope) so its * body text uses the pond's body font; headings and code re-resolve the same * variables through the global rules above. */ .pond-font-scope { font-family: var(--font-body); font-weight: var(--font-weight-body); } a { color: var(--color-accent); } button { font: inherit; } /* Layout skeleton */ .app { display: grid; grid-template-rows: var(--topbar-height) 1fr; height: 100%; } .app-body { display: flex; min-height: 0; /* Grid items default to a min-content minimum; without this the row can force the whole app wider than the viewport (issue #100). */ min-width: 0; } .topbar { display: flex; align-items: center; gap: var(--space-4); padding: 0 var(--space-4); border-bottom: 1px solid var(--color-border); background: var(--color-bg); } .topbar__brand { font-family: var(--font-heading); font-size: 1.1rem; color: var(--color-text); text-decoration: none; } .topbar__spacer { flex: 1; } .sidebar { width: var(--sidebar-width); flex-shrink: 0; /* Column flex so the trash footer can pin to the bottom (margin-top: auto). */ display: flex; flex-direction: column; border-right: 1px solid var(--color-border); background: var(--color-bg-subtle); padding: var(--space-4); overflow-y: auto; transition: margin-left 0.18s ease-out, opacity 0.15s ease-out; } .sidebar--collapsed { margin-left: calc(-1 * var(--sidebar-width)); opacity: 0; } /* Drag handle on the sidebar's right edge (issue #99). */ .sidebar-resizer { flex-shrink: 0; width: 6px; margin-left: -3px; cursor: col-resize; touch-action: none; background: transparent; } .sidebar-resizer:hover, .sidebar-resizer:focus-visible { background: var(--color-accent); outline: none; } .sidebar__hint { color: var(--color-text-muted); font-size: 0.9rem; } .sidebar__header { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); margin-bottom: var(--space-3); } .sidebar__pond-name { font-size: 1rem; margin: 0; } .sidebar__sort { font: inherit; font-size: 0.85rem; border: 1px solid var(--color-border); border-radius: var(--radius); background: var(--color-bg); padding: var(--space-1) var(--space-2); } .sidebar__pages { list-style: none; margin: 0 0 var(--space-3); padding: 0; } /* Folder view (issue #108): the page tree with collapsible nodes. */ .sidebar__view-toggle { display: flex; gap: var(--space-1); margin-bottom: var(--space-2); } .sidebar__view-btn { font: inherit; font-size: 0.8rem; padding: var(--space-1) var(--space-2); border: 1px solid var(--color-border); border-radius: var(--radius); background: var(--color-bg); color: var(--color-text-muted); cursor: pointer; } .sidebar__view-btn--active { color: var(--color-text); font-weight: 600; background: var(--color-surface); } /* Favorites (issue #132): the latching filter button carries a small star; golden treatment for the TopBar toggle and favorite tree icons. */ .sidebar__view-btn--favorites { display: inline-flex; align-items: center; gap: var(--space-1); } .sidebar__view-btn--favorites svg { width: 0.85rem; height: 0.85rem; color: var(--color-favorite); } .icon-button--favorite { color: var(--color-favorite); } .sidebar__tree-row { display: flex; align-items: center; gap: var(--space-1); min-width: 0; } .sidebar__tree-row .sidebar__page { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* In the tree, the nested children