:root { color-scheme: light; --canvas: #f7f8f6; --editor: #ffffff; --navigation: #eef1ee; --rail: #202621; --rail-muted: #9ca69e; --rail-active: #f0f5f1; --text: #20241f; --muted: #687169; --faint: #929a93; --border: #dce2dc; --border-strong: #cbd3cc; --accent: #397453; --accent-hover: #2f6447; --accent-soft: #dcece2; --accent-contrast: #ffffff; --link: #376d8a; --warning: #a86718; --warning-soft: #fff4dc; --danger: #b64a4a; --selection: #e2eee6; --code-bg: #f2f4f2; --shadow-modal: 0 18px 60px rgb(29 36 31 / 22%); --nav-width: 272px; --context-width: 296px; --top-height: 44px; --status-height: 28px; --rail-width: 48px; --radius: 5px; --ui-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans SC", "Microsoft YaHei", sans-serif; --body-font: Inter, "Noto Sans SC", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; --code-font: "JetBrains Mono", "SFMono-Regular", Consolas, monospace; } html[data-theme="dark"] { color-scheme: dark; --canvas: #171a18; --editor: #1e221f; --navigation: #202521; --rail: #111411; --rail-muted: #89938b; --rail-active: #e1e8e2; --text: #e8ece8; --muted: #9ba69d; --faint: #727c74; --border: #343b35; --border-strong: #465048; --accent: #75b18d; --accent-hover: #88c09e; --accent-soft: #283c30; --accent-contrast: #122018; --link: #75a8c2; --warning: #dfa84f; --warning-soft: #3b3020; --danger: #dc7d7d; --selection: #2a3d31; --code-bg: #292e2a; --shadow-modal: 0 22px 70px rgb(0 0 0 / 48%); } * { box-sizing: border-box; } html, body { width: 100%; height: 100%; margin: 0; overflow: hidden; background: var(--canvas); color: var(--text); font-family: var(--ui-font); letter-spacing: 0; } button, input, select { color: inherit; font: inherit; letter-spacing: 0; } button { border: 0; } button:focus-visible, input:focus-visible, select:focus-visible, [contenteditable="true"]:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; } .app-shell { display: grid; grid-template-columns: var(--rail-width) var(--nav-width) 4px minmax(420px, 1fr) 4px var(--context-width); width: 100%; height: 100%; background: var(--canvas); } .activity-rail { z-index: 20; display: flex; flex-direction: column; align-items: center; grid-column: 1; background: var(--rail); color: var(--rail-muted); border-right: 1px solid rgb(255 255 255 / 7%); } .brand-mark, .rail-button { display: grid; place-items: center; position: relative; width: 36px; height: 36px; padding: 0; border-radius: var(--radius); color: inherit; background: transparent; cursor: pointer; } .brand-mark { width: 34px; height: 34px; margin: 8px 0 10px; color: #dce9df; background: #315f45; } .brand-mark svg { width: 19px; height: 19px; } .rail-tools, .rail-footer { display: flex; flex-direction: column; gap: 4px; align-items: center; } .rail-tools { flex: 1; } .rail-footer { margin-bottom: 8px; } .rail-button:hover, .rail-button.is-active { color: var(--rail-active); background: rgb(255 255 255 / 8%); } .rail-button.is-active::before { position: absolute; left: -6px; width: 3px; height: 20px; border-radius: 0 3px 3px 0; background: #79b38e; content: ""; } .rail-button svg, .icon-button svg { width: 18px; height: 18px; stroke-width: 1.8; } .navigation-pane { display: flex; min-width: 0; flex-direction: column; grid-column: 2; background: var(--navigation); border-right: 1px solid var(--border); overflow: hidden; } .pane-header, .context-header { display: flex; align-items: center; justify-content: space-between; flex: 0 0 auto; } .pane-header { height: 72px; padding: 12px 12px 8px 16px; } .workspace-kicker, .dialog-kicker { margin: 0 0 3px; color: var(--faint); font-size: 10px; font-weight: 700; line-height: 14px; } .pane-header h1, .new-note-dialog h2, .mobile-sheet h2 { margin: 0; font-size: 16px; font-weight: 650; line-height: 22px; } .header-actions, .toolbar-actions, .toolbar-leading, .context-tabs, .status-group { display: flex; align-items: center; } .header-actions, .toolbar-actions, .context-tabs { gap: 3px; } .icon-button { display: grid; place-items: center; flex: 0 0 32px; width: 32px; height: 32px; padding: 0; border-radius: var(--radius); color: var(--muted); background: transparent; cursor: pointer; } .icon-button:hover, .context-tab:hover, .context-tab.is-active { color: var(--text); background: var(--selection); } .search-trigger { display: flex; align-items: center; gap: 8px; width: calc(100% - 24px); height: 34px; margin: 0 12px 10px; padding: 0 9px; border: 1px solid var(--border); border-radius: var(--radius); color: var(--muted); background: var(--editor); cursor: pointer; text-align: left; } .search-trigger:hover { border-color: var(--border-strong); } .search-trigger svg { width: 15px; height: 15px; } .search-trigger span { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } kbd { display: inline-flex; align-items: center; justify-content: center; min-width: 22px; height: 20px; padding: 0 5px; border: 1px solid var(--border); border-bottom-color: var(--border-strong); border-radius: 4px; color: var(--faint); background: var(--canvas); font-family: var(--ui-font); font-size: 11px; } .navigation-content { flex: 1; min-height: 0; padding: 0 8px 12px; overflow: auto; } .nav-section { margin-top: 10px; } .section-heading { display: flex; align-items: center; justify-content: space-between; height: 24px; padding: 0 8px; color: var(--faint); font-size: 11px; font-weight: 700; } .section-heading button { display: grid; place-items: center; width: 24px; height: 24px; padding: 0; border-radius: 4px; color: var(--muted); background: transparent; cursor: pointer; } .section-heading button:hover { background: var(--selection); } .nav-row, .tree-row, .tag-row, .task-row, .search-result { display: flex; align-items: center; min-width: 0; border-radius: var(--radius); cursor: pointer; } .nav-row, .tree-row, .tag-row, .task-row { height: 28px; padding: 0 7px; color: var(--muted); font-size: 13px; } .nav-row:hover, .tree-row:hover, .tag-row:hover, .task-row:hover, .tree-row.is-active { color: var(--text); background: var(--selection); } .tree-row.is-active { font-weight: 600; } .tree-row svg, .nav-row svg, .tag-row svg, .task-row svg { flex: 0 0 auto; width: 15px; height: 15px; margin-right: 7px; stroke-width: 1.8; } .tree-row .disclosure { width: 14px; margin-right: 3px; } .tree-row .disclosure.is-placeholder { visibility: hidden; } .row-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .row-meta { flex: 0 0 auto; margin-left: 8px; color: var(--faint); font-size: 11px; } .folder-children.is-collapsed { display: none; } .navigation-footer { display: flex; align-items: center; justify-content: space-between; flex: 0 0 40px; min-width: 0; padding: 0 7px 0 14px; border-top: 1px solid var(--border); color: var(--muted); font-size: 11px; } .sync-summary { display: flex; align-items: center; min-width: 0; gap: 7px; } .sync-summary span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .status-dot { flex: 0 0 7px; width: 7px; height: 7px; border-radius: 50%; background: var(--warning); } .status-dot.is-online { background: #4f956b; } .pane-resizer { z-index: 12; cursor: col-resize; background: transparent; } .pane-resizer:hover, .pane-resizer.is-dragging { background: var(--accent); } .nav-resizer { grid-column: 3; } .context-resizer { grid-column: 5; } .workspace { display: flex; min-width: 0; flex-direction: column; grid-column: 4; background: var(--editor); } .workspace-toolbar { display: flex; align-items: center; justify-content: space-between; flex: 0 0 var(--top-height); min-width: 0; padding: 0 8px 0 14px; border-bottom: 1px solid var(--border); background: var(--editor); } .toolbar-leading { min-width: 0; } .breadcrumb { display: flex; align-items: center; min-width: 0; color: var(--muted); font-size: 12px; white-space: nowrap; } .breadcrumb span { overflow: hidden; text-overflow: ellipsis; } .breadcrumb svg { flex: 0 0 13px; width: 13px; height: 13px; margin: 0 2px; color: var(--faint); } .save-state { display: flex; align-items: center; gap: 4px; width: 66px; color: var(--muted); font-size: 11px; } .save-state svg { width: 14px; height: 14px; } .save-state.is-saving { color: var(--warning); } .segmented-control { display: grid; grid-template-columns: repeat(3, 42px); height: 30px; padding: 2px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--canvas); } .segment { padding: 0; border-radius: 3px; color: var(--muted); background: transparent; cursor: pointer; font-size: 11px; } .segment:hover, .segment.is-active { color: var(--text); background: var(--editor); box-shadow: 0 1px 2px rgb(24 30 25 / 10%); } .show-nav-button { display: none; margin-right: 5px; } .offline-banner { display: none; align-items: center; gap: 8px; flex: 0 0 34px; padding: 0 16px; color: var(--warning); background: var(--warning-soft); border-bottom: 1px solid color-mix(in srgb, var(--warning), transparent 70%); font-size: 12px; } .offline-banner.is-visible { display: flex; } .offline-banner svg { width: 15px; height: 15px; } .document-stage { display: grid; grid-template-columns: minmax(0, 1fr) 0 minmax(0, 0); flex: 1; min-height: 0; overflow: hidden; } .document-stage[data-mode="read"] { grid-template-columns: 0 0 minmax(0, 1fr); } .document-stage[data-mode="split"] { grid-template-columns: minmax(0, 1fr) 1px minmax(0, 1fr); } .document-stage[data-mode="split"] .split-divider { background: var(--border); } .document-editor, .document-preview { min-width: 0; min-height: 0; overflow: auto; } .document-editor { padding: 48px max(40px, calc((100% - 760px) / 2)) 80px; } .document-preview { padding: 48px max(40px, calc((100% - 760px) / 2)) 80px; } .document-stage[data-mode="split"] .document-editor, .document-stage[data-mode="split"] .document-preview { padding-right: 36px; padding-left: 36px; } .page-title-input { display: block; width: 100%; margin: 0; padding: 0; border: 0; color: var(--text); background: transparent; font-family: var(--body-font); font-size: 30px; font-weight: 650; line-height: 38px; } .page-title-input:focus { outline: 0; } .page-meta-line { display: flex; align-items: center; gap: 6px; margin: 7px 0 34px; color: var(--faint); font-size: 12px; line-height: 18px; } .editor-content, .document-preview { color: var(--text); font-family: var(--body-font); font-size: 16px; line-height: 28px; } .editor-content:focus { outline: 0; } .editor-content h2, .document-preview h2 { margin: 34px 0 10px; color: var(--text); font-size: 21px; font-weight: 650; line-height: 30px; } .editor-content p, .document-preview p { margin: 0 0 18px; } .editor-content ul, .document-preview ul { margin: 0 0 22px; padding-left: 23px; } .editor-content li, .document-preview li { margin: 5px 0; padding-left: 3px; } .editor-content code, .document-preview code { padding: 2px 5px; border-radius: 4px; background: var(--code-bg); color: var(--danger); font-family: var(--code-font); font-size: 0.9em; } .editor-content a, .document-preview a, .wiki-link { color: var(--link); text-decoration: none; } .editor-content blockquote, .document-preview blockquote { margin: 24px 0; padding: 4px 0 4px 16px; border-left: 3px solid var(--accent); color: var(--muted); } .document-preview > h1 { margin: 0 0 34px; font-size: 30px; line-height: 38px; } .status-bar { display: flex; align-items: center; justify-content: space-between; flex: 0 0 var(--status-height); min-width: 0; padding: 0 10px; border-top: 1px solid var(--border); color: var(--faint); background: var(--canvas); font-size: 10px; } .status-group { min-width: 0; gap: 12px; } .status-button { display: flex; align-items: center; gap: 5px; height: 22px; padding: 0; color: inherit; background: transparent; cursor: pointer; } .status-button:hover { color: var(--text); } .status-button svg { width: 13px; height: 13px; } .context-pane { display: flex; min-width: 0; flex-direction: column; grid-column: 6; background: var(--canvas); border-left: 1px solid var(--border); overflow: hidden; } .context-header { flex: 0 0 var(--top-height); padding: 0 7px 0 10px; border-bottom: 1px solid var(--border); } .context-tab { display: grid; place-items: center; width: 32px; height: 30px; padding: 0; border-radius: var(--radius); color: var(--muted); background: transparent; cursor: pointer; } .context-tab svg { width: 16px; height: 16px; } .context-content { flex: 1; min-height: 0; padding: 16px 14px 28px; overflow: auto; } .context-title { margin: 0 0 14px; color: var(--muted); font-size: 11px; font-weight: 700; text-transform: uppercase; } .outline-list, .backlink-list, .property-list, .info-list { display: flex; flex-direction: column; gap: 3px; } .outline-item { display: block; width: 100%; min-height: 29px; padding: 5px 7px; border-radius: var(--radius); color: var(--muted); background: transparent; cursor: pointer; text-align: left; font-size: 12px; line-height: 18px; } .outline-item.is-sub { padding-left: 20px; } .outline-item:hover, .outline-item.is-active { color: var(--text); background: var(--selection); } .backlink-item { padding: 8px 6px 10px; border-bottom: 1px solid var(--border); } .backlink-item:last-child { border-bottom: 0; } .backlink-source { display: flex; align-items: center; gap: 6px; margin-bottom: 5px; color: var(--text); font-size: 12px; font-weight: 600; } .backlink-source svg { width: 13px; height: 13px; color: var(--link); } .backlink-excerpt { margin: 0; color: var(--muted); font-size: 11px; line-height: 18px; } .property-row, .info-row { display: grid; grid-template-columns: 78px minmax(0, 1fr); gap: 8px; min-height: 30px; padding: 5px 6px; border-bottom: 1px solid var(--border); font-size: 11px; line-height: 19px; } .property-row dt, .info-row dt { color: var(--faint); } .property-row dd, .info-row dd { min-width: 0; margin: 0; overflow-wrap: anywhere; } .tag-chip { display: inline-flex; align-items: center; height: 20px; margin: 0 4px 4px 0; padding: 0 7px; border-radius: 4px; color: var(--accent); background: var(--accent-soft); font-size: 10px; } .overlay { display: none; position: fixed; inset: 0; z-index: 100; align-items: flex-start; justify-content: center; padding-top: min(16vh, 140px); background: rgb(15 19 16 / 28%); backdrop-filter: blur(2px); } .overlay.is-visible { display: flex; } .command-dialog, .new-note-dialog { width: min(620px, calc(100vw - 32px)); max-height: min(600px, calc(100vh - 80px)); border: 1px solid var(--border-strong); border-radius: 8px; background: var(--editor); box-shadow: var(--shadow-modal); overflow: hidden; } .dialog-search-row { display: flex; align-items: center; gap: 10px; height: 52px; padding: 0 14px; border-bottom: 1px solid var(--border); } .dialog-search-row svg { width: 18px; height: 18px; color: var(--muted); } .dialog-search-row input { flex: 1; min-width: 0; height: 42px; padding: 0; border: 0; outline: 0; color: var(--text); background: transparent; font-size: 16px; } .dialog-section-label { padding: 12px 14px 5px; color: var(--faint); font-size: 10px; font-weight: 700; } .search-results { max-height: 360px; padding: 4px 7px 8px; overflow: auto; } .search-result { min-height: 54px; padding: 7px 9px; color: var(--text); } .search-result:hover, .search-result.is-selected { background: var(--selection); } .search-result-icon { display: grid; place-items: center; flex: 0 0 30px; width: 30px; height: 30px; margin-right: 10px; border: 1px solid var(--border); border-radius: var(--radius); color: var(--muted); background: var(--canvas); } .search-result-icon svg { width: 15px; height: 15px; } .search-result-copy { flex: 1; min-width: 0; } .search-result-title, .search-result-path { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .search-result-title { font-size: 13px; font-weight: 600; } .search-result-path { margin-top: 2px; color: var(--faint); font-size: 11px; } .dialog-footer { display: flex; align-items: center; justify-content: flex-end; gap: 14px; height: 36px; padding: 0 12px; border-top: 1px solid var(--border); color: var(--faint); background: var(--canvas); font-size: 10px; } .dialog-footer span { display: inline-flex; align-items: center; gap: 3px; } .new-note-dialog { width: min(440px, calc(100vw - 32px)); padding: 18px; } .new-note-dialog header, .new-note-dialog footer, .mobile-sheet header { display: flex; align-items: center; justify-content: space-between; } .new-note-dialog label { display: block; margin-top: 18px; color: var(--muted); font-size: 12px; } .new-note-dialog label span { display: block; margin-bottom: 6px; } .new-note-dialog input, .new-note-dialog select { width: 100%; height: 38px; padding: 0 10px; border: 1px solid var(--border); border-radius: var(--radius); color: var(--text); background: var(--canvas); } .new-note-dialog footer { justify-content: flex-end; gap: 8px; margin-top: 22px; } .primary-button, .secondary-button { display: inline-flex; align-items: center; justify-content: center; gap: 7px; height: 36px; padding: 0 13px; border-radius: var(--radius); cursor: pointer; font-weight: 600; font-size: 12px; } .primary-button { color: var(--accent-contrast); background: var(--accent); } .primary-button:hover { background: var(--accent-hover); } .secondary-button { border: 1px solid var(--border); background: var(--canvas); } .primary-button svg { width: 15px; height: 15px; } .popover-menu { display: none; position: fixed; z-index: 90; top: 40px; right: calc(var(--context-width) + 16px); width: 210px; padding: 5px; border: 1px solid var(--border-strong); border-radius: 7px; background: var(--editor); box-shadow: var(--shadow-modal); } .app-shell.is-context-collapsed ~ .popover-menu, .popover-menu.is-context-collapsed { right: 12px; } .popover-menu.is-visible { display: block; } .popover-menu button { display: flex; align-items: center; gap: 9px; width: 100%; height: 32px; padding: 0 8px; border-radius: var(--radius); color: var(--text); background: transparent; cursor: pointer; text-align: left; font-size: 12px; } .popover-menu button:hover { background: var(--selection); } .popover-menu button span { flex: 1; } .popover-menu svg { width: 15px; height: 15px; color: var(--muted); } .mobile-navigation, .mobile-sheet-overlay { display: none; } .app-shell.is-nav-collapsed { grid-template-columns: var(--rail-width) 0 0 minmax(420px, 1fr) 4px var(--context-width); } .app-shell.is-nav-collapsed .navigation-pane, .app-shell.is-nav-collapsed .nav-resizer { display: none; } .app-shell.is-nav-collapsed .show-nav-button { display: grid; } .app-shell.is-context-collapsed { grid-template-columns: var(--rail-width) var(--nav-width) 4px minmax(420px, 1fr) 0 0; } .app-shell.is-context-collapsed .context-pane, .app-shell.is-context-collapsed .context-resizer { display: none; } .app-shell.is-nav-collapsed.is-context-collapsed { grid-template-columns: var(--rail-width) 0 0 minmax(420px, 1fr) 0 0; } .empty-state { display: flex; min-height: 220px; flex-direction: column; align-items: center; justify-content: center; padding: 28px; color: var(--muted); text-align: center; } .empty-state svg { width: 28px; height: 28px; margin-bottom: 12px; color: var(--faint); } .empty-state h3 { margin: 0 0 6px; color: var(--text); font-size: 14px; } .empty-state p { max-width: 240px; margin: 0; font-size: 12px; line-height: 19px; } @media (max-width: 1180px) { :root { --context-width: 270px; } .app-shell { grid-template-columns: var(--rail-width) var(--nav-width) 4px minmax(420px, 1fr) 0 0; } .context-pane, .context-resizer { display: none; } .popover-menu { right: 12px; } } @media (max-width: 760px) { :root { --top-height: 48px; --status-height: 24px; } .app-shell, .app-shell.is-nav-collapsed, .app-shell.is-context-collapsed, .app-shell.is-nav-collapsed.is-context-collapsed { display: block; height: 100%; } .activity-rail, .navigation-pane, .pane-resizer, .context-pane, .segmented-control, #toggleContextButton, #inPageSearchButton, .save-state, .status-bar { display: none !important; } .workspace { height: 100%; padding-bottom: calc(58px + env(safe-area-inset-bottom)); } .workspace-toolbar { padding: 0 8px; } .toolbar-leading { flex: 1; } .show-nav-button { display: grid !important; } .breadcrumb { max-width: calc(100vw - 154px); color: var(--text); font-size: 13px; font-weight: 600; } .breadcrumb span:not(:last-child), .breadcrumb svg { display: none; } .document-stage, .document-stage[data-mode="read"], .document-stage[data-mode="split"] { display: block; } .document-editor { height: 100%; padding: 28px 22px 80px; } .document-preview, .split-divider { display: none; } .page-title-input { font-size: 26px; line-height: 34px; } .page-meta-line { margin-bottom: 28px; } .editor-content { font-size: 16px; line-height: 27px; } .offline-banner { min-height: 38px; flex-basis: auto; padding: 7px 12px; line-height: 17px; } .mobile-navigation { display: grid; position: fixed; z-index: 40; right: 0; bottom: 0; left: 0; grid-template-columns: repeat(5, 1fr); height: calc(58px + env(safe-area-inset-bottom)); padding: 4px 8px env(safe-area-inset-bottom); border-top: 1px solid var(--border); background: color-mix(in srgb, var(--editor) 94%, transparent); backdrop-filter: blur(16px); } .mobile-navigation button { display: flex; min-width: 0; flex-direction: column; align-items: center; justify-content: center; gap: 2px; height: 50px; padding: 0; color: var(--muted); background: transparent; cursor: pointer; font-size: 10px; } .mobile-navigation button:hover { color: var(--accent); } .mobile-navigation svg { width: 19px; height: 19px; } .mobile-navigation .mobile-create { align-self: center; justify-self: center; width: 44px; height: 44px; margin-top: -11px; border-radius: 50%; color: var(--accent-contrast); background: var(--accent); box-shadow: 0 5px 14px rgb(31 76 49 / 28%); } .mobile-navigation .mobile-create svg { width: 22px; height: 22px; } .overlay { align-items: flex-end; padding: 0; } .command-dialog, .new-note-dialog { width: 100%; max-height: min(82vh, 680px); border-width: 1px 0 0; border-radius: 8px 8px 0 0; } .new-note-dialog { padding-bottom: calc(18px + env(safe-area-inset-bottom)); } .mobile-sheet-overlay.is-visible { display: flex; } .mobile-sheet { width: 100%; max-height: 86vh; padding: 0 12px calc(18px + env(safe-area-inset-bottom)); border-top: 1px solid var(--border-strong); border-radius: 8px 8px 0 0; background: var(--navigation); box-shadow: var(--shadow-modal); overflow: auto; } .sheet-handle { width: 34px; height: 4px; margin: 7px auto 4px; border-radius: 4px; background: var(--border-strong); } .mobile-sheet header { height: 48px; padding: 0 2px 0 5px; } .popover-menu { top: 46px; right: 8px; } } @media (max-width: 390px) { .document-editor { padding-right: 18px; padding-left: 18px; } .page-meta-line { flex-wrap: wrap; } }