Files
plainleaf/docs/design-v2/styles.css
T
2026-08-12 16:52:01 +08:00

1857 lines
30 KiB
CSS

:root {
color-scheme: light;
--canvas: #f6f7f5;
--surface: #ffffff;
--sidebar: #f0f2ef;
--text: #242824;
--muted: #687168;
--faint: #929a92;
--border: #dde2dc;
--border-strong: #cbd3cb;
--green: #3f7658;
--green-dark: #335f48;
--green-soft: #ddebe2;
--coral: #c96c5c;
--coral-soft: #f6e4e0;
--blue: #4c7591;
--blue-soft: #e1ebf1;
--yellow: #e7c96f;
--yellow-soft: #f8f1d8;
--danger: #b94a4a;
--shadow: 0 18px 60px rgb(38 48 40 / 18%);
--sidebar-width: 288px;
--topbar-height: 48px;
--statusbar-height: 26px;
--radius: 6px;
--font-ui: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans SC", "Microsoft YaHei", sans-serif;
--font-code: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
}
* {
box-sizing: border-box;
}
html,
body {
width: 100%;
height: 100%;
margin: 0;
overflow: hidden;
background: var(--canvas);
color: var(--text);
font-family: var(--font-ui);
letter-spacing: 0;
}
button,
input,
select,
textarea {
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(--green);
outline-offset: 2px;
}
.app {
display: grid;
grid-template-columns: var(--sidebar-width) minmax(0, 1fr);
width: 100%;
height: 100%;
}
.sidebar {
z-index: 20;
display: flex;
min-width: 0;
flex-direction: column;
background: var(--sidebar);
border-right: 1px solid var(--border);
}
.brand-row {
display: flex;
align-items: center;
justify-content: space-between;
flex: 0 0 58px;
padding: 8px 12px 5px 14px;
}
.brand {
display: flex;
align-items: center;
gap: 10px;
height: 38px;
padding: 0 4px;
color: var(--text);
background: transparent;
cursor: pointer;
font-size: 16px;
font-weight: 700;
}
.brand-mark {
display: grid;
place-items: center;
width: 30px;
height: 30px;
border: 1px solid #c8d7cc;
border-radius: 8px 3px 8px 3px;
color: var(--green-dark);
background: #e6efe9;
transform: rotate(-2deg);
}
.brand-mark svg {
width: 17px;
height: 17px;
stroke-width: 2;
}
.create-button {
display: flex;
align-items: center;
justify-content: center;
gap: 7px;
flex: 0 0 34px;
height: 34px;
margin: 3px 12px 12px;
border-radius: var(--radius);
color: #fff;
background: var(--green);
cursor: pointer;
font-size: 13px;
font-weight: 650;
transition: background 120ms ease;
}
.create-button:hover {
background: var(--green-dark);
}
.create-button svg {
width: 16px;
height: 16px;
}
.primary-nav {
display: grid;
gap: 2px;
padding: 0 8px;
}
.primary-nav-item,
.settings-button {
display: flex;
align-items: center;
gap: 10px;
width: 100%;
height: 34px;
padding: 0 10px;
border-radius: var(--radius);
color: var(--muted);
background: transparent;
cursor: pointer;
font-size: 13px;
text-align: left;
}
.primary-nav-item:hover,
.primary-nav-item.is-active,
.settings-button:hover,
.settings-button.is-active {
color: var(--text);
background: var(--green-soft);
}
.settings-button.is-active {
font-weight: 650;
}
.primary-nav-item.is-active {
font-weight: 650;
}
.primary-nav-item svg,
.settings-button svg {
flex: 0 0 17px;
width: 17px;
height: 17px;
stroke-width: 1.9;
}
.nav-count {
min-width: 18px;
margin-left: auto;
color: var(--coral);
font-size: 11px;
text-align: right;
}
.sidebar-divider {
flex: 0 0 1px;
margin: 12px 12px 0;
background: var(--border);
}
.sidebar-content {
flex: 1;
min-height: 0;
padding: 10px 8px 16px;
overflow: auto;
}
.sidebar-footer {
flex: 0 0 47px;
padding: 6px 8px;
border-top: 1px solid var(--border);
}
.sidebar-heading {
display: flex;
align-items: center;
justify-content: space-between;
height: 28px;
padding: 0 8px;
color: var(--faint);
font-size: 11px;
font-weight: 700;
}
.sidebar-heading strong {
color: var(--text);
font-size: 15px;
font-weight: 650;
}
.sidebar-heading button {
display: grid;
place-items: center;
width: 28px;
height: 28px;
padding: 0;
border-radius: var(--radius);
color: var(--muted);
background: transparent;
cursor: pointer;
}
.sidebar-heading button:hover {
color: var(--text);
background: var(--green-soft);
}
.sidebar-heading button svg {
width: 15px;
height: 15px;
}
.side-section + .side-section {
margin-top: 15px;
}
.side-row,
.tree-row,
.tag-list-row,
.compact-note-row,
.advanced-row {
display: flex;
align-items: center;
min-width: 0;
border-radius: var(--radius);
color: var(--muted);
background: transparent;
cursor: pointer;
font-size: 13px;
text-align: left;
}
.side-row,
.tree-row,
.tag-list-row {
width: 100%;
height: 32px;
padding: 0 8px;
}
.side-row:hover,
.side-row.is-active,
.tree-row:hover,
.tree-row.is-active,
.tag-list-row:hover,
.tag-list-row.is-active,
.compact-note-row:hover,
.advanced-row:hover {
color: var(--text);
background: var(--green-soft);
}
.side-row.is-active,
.tree-row.is-active,
.tag-list-row.is-active {
font-weight: 650;
}
.side-row svg,
.tree-row svg,
.tag-list-row svg {
flex: 0 0 15px;
width: 15px;
height: 15px;
margin-right: 8px;
stroke-width: 1.8;
}
.tree-row .disclosure {
width: 13px;
margin-right: 4px;
}
.tree-row .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;
}
.tree-children.is-collapsed {
display: none;
}
.tag-dot {
flex: 0 0 8px;
width: 8px;
height: 8px;
margin-right: 10px;
border-radius: 50%;
background: var(--green);
}
.tag-dot.coral { background: var(--coral); }
.tag-dot.blue { background: var(--blue); }
.tag-dot.yellow { background: var(--yellow); }
.search-box {
position: relative;
margin: 2px 4px 10px;
}
.search-box > svg {
position: absolute;
top: 10px;
left: 10px;
width: 16px;
height: 16px;
color: var(--faint);
pointer-events: none;
}
.search-box input {
width: 100%;
height: 36px;
padding: 0 32px 0 34px;
border: 1px solid var(--border-strong);
border-radius: var(--radius);
background: var(--surface);
font-size: 13px;
}
.search-box input::-webkit-search-cancel-button {
display: none;
appearance: none;
}
.clear-search {
display: grid;
place-items: center;
position: absolute;
top: 5px;
right: 5px;
width: 26px;
height: 26px;
padding: 0;
border-radius: 4px;
color: var(--faint);
background: transparent;
cursor: pointer;
}
.clear-search svg {
width: 14px;
height: 14px;
}
.scope-control {
display: grid;
grid-template-columns: repeat(3, 1fr);
height: 32px;
margin: 0 4px 14px;
padding: 2px;
border: 1px solid var(--border);
border-radius: var(--radius);
background: #e9ece8;
}
.scope-control button {
padding: 0;
border-radius: 4px;
color: var(--muted);
background: transparent;
cursor: pointer;
font-size: 11px;
}
.scope-control button.is-active {
color: var(--text);
background: var(--surface);
box-shadow: 0 1px 2px rgb(27 35 29 / 10%);
font-weight: 650;
}
.search-result-row {
display: block;
width: 100%;
margin: 0 0 3px;
padding: 10px 9px;
border-radius: var(--radius);
color: var(--text);
background: transparent;
cursor: pointer;
text-align: left;
}
.search-result-row:hover,
.search-result-row.is-active {
background: var(--green-soft);
}
.search-result-title,
.result-meta-line {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
}
.search-result-title strong {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 13px;
}
.search-result-title time {
flex: 0 0 auto;
color: var(--faint);
font-size: 10px;
}
.search-result-row p {
display: -webkit-box;
margin: 5px 0 6px;
overflow: hidden;
color: var(--muted);
font-size: 11px;
line-height: 17px;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.result-path {
overflow: hidden;
color: var(--faint);
font-size: 10px;
text-overflow: ellipsis;
white-space: nowrap;
}
mark {
padding: 0 1px;
border-radius: 2px;
color: inherit;
background: var(--yellow-soft);
}
.empty-results {
padding: 34px 18px;
color: var(--muted);
text-align: center;
}
.empty-symbol {
display: grid;
place-items: center;
width: 48px;
height: 48px;
margin: 0 auto 13px;
border: 1px solid var(--border);
border-radius: 8px 3px 8px 3px;
color: var(--green);
background: var(--surface);
}
.empty-symbol svg {
width: 22px;
height: 22px;
}
.empty-results strong {
display: block;
margin-bottom: 5px;
color: var(--text);
font-size: 13px;
}
.empty-results p {
margin: 0 0 16px;
font-size: 12px;
line-height: 19px;
}
.small-primary-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
height: 32px;
padding: 0 12px;
border-radius: var(--radius);
color: #fff;
background: var(--green);
cursor: pointer;
font-size: 12px;
font-weight: 650;
}
.small-primary-button svg {
width: 14px;
height: 14px;
}
.task-section + .task-section {
margin-top: 16px;
}
.task-group-title {
display: flex;
align-items: center;
justify-content: space-between;
height: 28px;
padding: 0 7px;
color: var(--muted);
font-size: 11px;
font-weight: 700;
}
.task-group-title.is-overdue {
color: var(--coral);
}
.task-item {
display: grid;
grid-template-columns: 22px minmax(0, 1fr);
gap: 4px;
min-height: 48px;
padding: 7px 7px 7px 5px;
border-radius: var(--radius);
}
.task-item:hover {
background: var(--green-soft);
}
.task-check {
display: grid;
place-items: center;
width: 22px;
height: 22px;
padding: 0;
color: var(--faint);
background: transparent;
cursor: pointer;
}
.task-check svg {
width: 17px;
height: 17px;
}
.task-copy {
min-width: 0;
}
.task-title {
display: block;
color: var(--text);
font-size: 12px;
line-height: 18px;
}
.task-source {
display: block;
width: 100%;
margin-top: 2px;
padding: 0;
overflow: hidden;
color: var(--faint);
background: transparent;
cursor: pointer;
font-size: 10px;
text-align: left;
text-overflow: ellipsis;
white-space: nowrap;
}
.task-item.is-complete {
opacity: 0;
transform: translateX(8px);
transition: opacity 180ms ease, transform 180ms ease;
}
.settings-intro {
margin: 4px 8px 14px;
color: var(--muted);
font-size: 11px;
line-height: 18px;
}
.setting-row {
display: flex;
align-items: center;
justify-content: space-between;
min-height: 44px;
padding: 6px 8px;
border-bottom: 1px solid var(--border);
}
.setting-copy strong,
.advanced-row strong {
display: block;
color: var(--text);
font-size: 12px;
font-weight: 650;
}
.setting-copy span,
.advanced-row span {
display: block;
margin-top: 2px;
color: var(--faint);
font-size: 10px;
line-height: 15px;
}
.mini-select {
height: 28px;
padding: 0 7px;
border: 1px solid var(--border);
border-radius: 5px;
background: var(--surface);
font-size: 11px;
}
.switch {
position: relative;
width: 32px;
height: 18px;
border-radius: 9px;
background: #c8cec8;
cursor: pointer;
}
.switch::after {
position: absolute;
top: 2px;
left: 2px;
width: 14px;
height: 14px;
border-radius: 50%;
background: #fff;
box-shadow: 0 1px 2px rgb(20 28 22 / 20%);
content: "";
transition: transform 120ms ease;
}
.switch.is-on {
background: var(--green);
}
.switch.is-on::after {
transform: translateX(14px);
}
.advanced-row {
width: 100%;
min-height: 50px;
margin-bottom: 3px;
padding: 7px 8px;
}
.advanced-row > svg:first-child {
flex: 0 0 17px;
width: 17px;
height: 17px;
margin-right: 9px;
color: var(--muted);
}
.advanced-row > div {
flex: 1;
min-width: 0;
}
.advanced-row > svg:last-child {
flex: 0 0 14px;
width: 14px;
height: 14px;
color: var(--faint);
}
.workspace {
display: flex;
min-width: 0;
min-height: 0;
flex-direction: column;
background: var(--surface);
}
.topbar {
display: flex;
align-items: center;
justify-content: space-between;
flex: 0 0 var(--topbar-height);
min-width: 0;
padding: 0 10px 0 17px;
border-bottom: 1px solid var(--border);
}
.topbar-leading,
.topbar-actions,
.save-state,
.statusbar > div {
display: flex;
align-items: center;
}
.topbar-leading {
min-width: 0;
}
.topbar-actions {
flex: 0 0 auto;
gap: 2px;
}
.breadcrumb {
display: flex;
align-items: center;
min-width: 0;
color: var(--muted);
font-size: 12px;
}
.breadcrumb span {
max-width: 220px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.breadcrumb svg {
flex: 0 0 13px;
width: 13px;
height: 13px;
margin: 0 2px;
color: var(--faint);
}
.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,
.icon-button.is-active {
color: var(--text);
background: var(--canvas);
}
.icon-button svg {
width: 17px;
height: 17px;
stroke-width: 1.8;
}
.save-state {
justify-content: flex-end;
gap: 4px;
width: 70px;
color: var(--muted);
font-size: 11px;
}
.save-state svg {
width: 14px;
height: 14px;
}
.save-state.is-saving {
color: #a56d21;
}
.offline-banner {
display: none;
align-items: center;
gap: 8px;
flex: 0 0 34px;
padding: 0 17px;
border-bottom: 1px solid #ead7a4;
color: #8a6427;
background: #fff6de;
font-size: 12px;
}
.offline-banner.is-visible {
display: flex;
}
.offline-banner svg {
width: 15px;
height: 15px;
}
.workspace-scroll {
flex: 1;
min-height: 0;
overflow: auto;
}
.document-page,
.home-page,
.settings-page {
width: min(100%, 920px);
min-height: 100%;
margin: 0 auto;
padding: 48px 80px 90px;
}
.document-page {
width: min(100%, 880px);
}
.page-title {
width: 100%;
margin: 0;
padding: 0;
border: 0;
color: var(--text);
background: transparent;
font-size: 30px;
font-weight: 650;
line-height: 39px;
}
.page-title:focus {
outline: 0;
}
.page-meta {
display: flex;
align-items: center;
gap: 6px;
margin: 7px 0 32px;
color: var(--faint);
font-size: 11px;
}
.editor-body,
.reading-body {
min-height: 420px;
color: var(--text);
font-size: 16px;
line-height: 29px;
}
.editor-body:focus {
outline: 0;
}
.editor-body p,
.reading-body p {
margin: 0 0 18px;
}
.editor-body h2,
.reading-body h2 {
margin: 34px 0 10px;
font-size: 21px;
font-weight: 650;
line-height: 30px;
}
.editor-body ul,
.reading-body ul {
margin: 0 0 22px;
padding-left: 23px;
}
.editor-body li,
.reading-body li {
margin: 5px 0;
padding-left: 3px;
}
.editor-body blockquote,
.reading-body blockquote {
margin: 22px 0;
padding: 4px 0 4px 15px;
border-left: 3px solid var(--green);
color: var(--muted);
}
.editor-body code,
.reading-body code {
padding: 2px 5px;
border-radius: 4px;
color: var(--coral);
background: var(--canvas);
font-family: var(--font-code);
font-size: 0.9em;
}
.wiki-link {
color: var(--blue);
}
.read-mode .page-title,
.read-mode .editor-body {
display: none;
}
.reading-title {
display: none;
margin: 0 0 32px;
font-size: 30px;
line-height: 39px;
}
.read-mode .reading-title {
display: block;
}
.reading-body {
display: none;
}
.read-mode .reading-body {
display: block;
}
.home-date {
margin: 0 0 6px;
color: var(--muted);
font-size: 12px;
}
.home-title {
margin: 0;
font-size: 30px;
font-weight: 650;
line-height: 39px;
}
.home-subtitle {
margin: 7px 0 26px;
color: var(--muted);
font-size: 14px;
line-height: 22px;
}
.home-actions {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 8px;
margin-bottom: 38px;
}
.home-action {
display: flex;
align-items: center;
gap: 10px;
min-width: 0;
height: 58px;
padding: 0 13px;
border: 1px solid var(--border);
border-radius: 8px;
color: var(--text);
background: var(--surface);
cursor: pointer;
text-align: left;
transition: border-color 120ms ease, background 120ms ease;
}
.home-action:hover {
border-color: var(--border-strong);
background: var(--canvas);
}
.home-action span:first-child {
display: grid;
place-items: center;
flex: 0 0 32px;
width: 32px;
height: 32px;
border-radius: 7px;
}
.home-action span:first-child svg {
width: 16px;
height: 16px;
}
.home-action.green span:first-child { color: var(--green); background: var(--green-soft); }
.home-action.coral span:first-child { color: var(--coral); background: var(--coral-soft); }
.home-action.blue span:first-child { color: var(--blue); background: var(--blue-soft); }
.home-action strong,
.home-action small {
display: block;
}
.home-action strong {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 13px;
}
.home-action small {
margin-top: 2px;
color: var(--faint);
font-size: 10px;
}
.home-grid {
display: grid;
grid-template-columns: minmax(0, 2fr) minmax(220px, 1fr);
gap: 36px;
}
.home-section-title {
display: flex;
align-items: center;
justify-content: space-between;
height: 32px;
margin-bottom: 3px;
border-bottom: 1px solid var(--border);
}
.home-section-title h2 {
margin: 0;
font-size: 15px;
font-weight: 650;
}
.home-section-title button {
color: var(--muted);
background: transparent;
cursor: pointer;
font-size: 11px;
}
.recent-note-row {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 4px 12px;
width: 100%;
min-height: 54px;
padding: 9px 3px;
border-bottom: 1px solid var(--border);
color: var(--text);
background: transparent;
cursor: pointer;
text-align: left;
}
.recent-note-row:hover strong {
color: var(--green-dark);
}
.recent-note-row strong {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 13px;
}
.recent-note-row time,
.recent-note-row span {
color: var(--faint);
font-size: 10px;
}
.recent-note-row span {
grid-column: 1 / -1;
}
.home-task-row {
display: grid;
grid-template-columns: 24px minmax(0, 1fr);
align-items: start;
gap: 5px;
min-height: 50px;
padding: 9px 0;
border-bottom: 1px solid var(--border);
}
.home-task-row button {
display: grid;
place-items: center;
width: 22px;
height: 22px;
padding: 0;
color: var(--faint);
background: transparent;
cursor: pointer;
}
.home-task-row svg {
width: 17px;
height: 17px;
}
.home-task-row strong,
.home-task-row small {
display: block;
}
.home-task-row strong {
font-size: 12px;
font-weight: 500;
line-height: 18px;
}
.home-task-row small {
margin-top: 2px;
color: var(--faint);
font-size: 10px;
}
.settings-page {
width: min(100%, 820px);
}
.settings-page h1 {
margin: 0 0 6px;
font-size: 28px;
line-height: 38px;
}
.settings-page > p {
margin: 0 0 32px;
color: var(--muted);
font-size: 13px;
}
.settings-group {
margin-bottom: 30px;
}
.settings-group h2 {
margin: 0;
padding: 0 0 9px;
border-bottom: 1px solid var(--border);
font-size: 15px;
}
.settings-main-row {
display: flex;
align-items: center;
justify-content: space-between;
min-height: 58px;
border-bottom: 1px solid var(--border);
}
.settings-main-row strong,
.settings-main-row span {
display: block;
}
.settings-main-row strong {
font-size: 13px;
}
.settings-main-row span {
margin-top: 3px;
color: var(--faint);
font-size: 11px;
}
.advanced-tools-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
border-bottom: 1px solid var(--border);
}
.advanced-tool-card {
display: grid;
grid-template-columns: 34px minmax(0, 1fr) 16px;
align-items: center;
gap: 10px;
min-height: 74px;
padding: 10px;
border-bottom: 1px solid var(--border);
color: var(--text);
background: transparent;
cursor: pointer;
text-align: left;
}
.advanced-tool-card:nth-child(odd) {
border-right: 1px solid var(--border);
}
.advanced-tool-card:hover {
background: var(--canvas);
}
.advanced-tool-icon {
display: grid;
place-items: center;
width: 34px;
height: 34px;
border-radius: var(--radius);
color: var(--muted);
background: var(--canvas);
}
.advanced-tool-icon svg {
width: 17px;
height: 17px;
}
.advanced-tool-card strong,
.advanced-tool-card small {
display: block;
}
.advanced-tool-card strong {
font-size: 12px;
}
.advanced-tool-card small {
margin-top: 3px;
color: var(--faint);
font-size: 10px;
line-height: 15px;
}
.advanced-tool-card > svg {
width: 14px;
height: 14px;
color: var(--faint);
}
.statusbar {
display: flex;
align-items: center;
justify-content: space-between;
flex: 0 0 var(--statusbar-height);
min-width: 0;
padding: 0 10px;
border-top: 1px solid var(--border);
color: var(--faint);
background: var(--canvas);
font-size: 10px;
}
.statusbar > div {
gap: 9px;
}
.sync-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--green);
}
.mobile-menu,
.mobile-close,
.mobile-bottom-nav,
.mobile-scrim {
display: none;
}
.modal-layer {
visibility: hidden;
position: fixed;
z-index: 100;
inset: 0;
opacity: 0;
pointer-events: none;
transition: opacity 160ms ease, visibility 160ms ease;
}
.modal-layer.is-visible {
visibility: visible;
opacity: 1;
pointer-events: auto;
}
.modal-scrim {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
padding: 0;
background: rgb(28 34 29 / 35%);
cursor: default;
}
.new-note-dialog {
position: absolute;
top: 50%;
left: 50%;
width: min(440px, calc(100vw - 32px));
padding: 18px;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--surface);
box-shadow: var(--shadow);
transform: translate(-50%, -48%);
transition: transform 160ms ease;
}
.modal-layer.is-visible .new-note-dialog {
transform: translate(-50%, -50%);
}
.dialog-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 15px;
}
.dialog-header h2 {
margin: 0;
font-size: 18px;
line-height: 26px;
}
.quick-create-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 7px;
margin-bottom: 18px;
}
.quick-create-grid button {
display: flex;
align-items: center;
gap: 7px;
min-width: 0;
height: 46px;
padding: 0 8px;
border: 1px solid var(--border);
border-radius: var(--radius);
background: var(--surface);
cursor: pointer;
font-size: 11px;
}
.quick-create-grid button:hover,
.quick-create-grid button.is-selected {
border-color: #9ab7a4;
background: #f5f8f6;
}
.quick-icon {
display: grid;
place-items: center;
flex: 0 0 26px;
width: 26px;
height: 26px;
border-radius: 5px;
}
.quick-icon svg {
width: 14px;
height: 14px;
}
.quick-icon.green { color: var(--green); background: var(--green-soft); }
.quick-icon.coral { color: var(--coral); background: var(--coral-soft); }
.quick-icon.blue { color: var(--blue); background: var(--blue-soft); }
.field-label {
display: block;
margin: 13px 0 6px;
color: var(--muted);
font-size: 11px;
font-weight: 650;
}
.text-field,
.select-wrap {
width: 100%;
height: 38px;
border: 1px solid var(--border-strong);
border-radius: var(--radius);
background: var(--surface);
}
.text-field {
padding: 0 11px;
}
.select-wrap {
display: grid;
grid-template-columns: 26px minmax(0, 1fr) 24px;
align-items: center;
padding: 0 7px;
}
.select-wrap svg {
width: 15px;
height: 15px;
color: var(--faint);
}
.select-wrap select {
width: 100%;
height: 36px;
border: 0;
outline: 0;
background: transparent;
appearance: none;
font-size: 12px;
}
.dialog-actions {
display: flex;
justify-content: flex-end;
gap: 8px;
margin-top: 22px;
}
.primary-button,
.secondary-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
height: 34px;
padding: 0 13px;
border-radius: var(--radius);
cursor: pointer;
font-size: 12px;
font-weight: 650;
}
.primary-button {
color: #fff;
background: var(--green);
}
.secondary-button {
border: 1px solid var(--border);
background: var(--surface);
}
.primary-button svg {
width: 15px;
height: 15px;
}
.popover {
visibility: hidden;
position: fixed;
z-index: 80;
top: 42px;
right: 10px;
width: 176px;
padding: 5px;
border: 1px solid var(--border);
border-radius: var(--radius);
opacity: 0;
background: var(--surface);
box-shadow: 0 10px 35px rgb(38 48 40 / 16%);
transform: translateY(-3px);
transition: opacity 120ms ease, transform 120ms ease, visibility 120ms ease;
}
.popover.is-visible {
visibility: visible;
opacity: 1;
transform: translateY(0);
}
.popover button {
display: flex;
align-items: center;
gap: 9px;
width: 100%;
height: 32px;
padding: 0 8px;
border-radius: 4px;
color: var(--text);
background: transparent;
cursor: pointer;
font-size: 12px;
}
.popover button:hover {
background: var(--canvas);
}
.popover button svg {
width: 15px;
height: 15px;
color: var(--muted);
}
.popover > div {
height: 1px;
margin: 4px;
background: var(--border);
}
.popover .danger-item,
.popover .danger-item svg {
color: var(--danger);
}
.toast {
visibility: hidden;
display: flex;
align-items: center;
gap: 8px;
position: fixed;
z-index: 120;
bottom: 38px;
left: 50%;
min-width: 150px;
height: 38px;
padding: 0 14px;
border: 1px solid var(--border);
border-radius: 6px;
opacity: 0;
color: var(--text);
background: var(--surface);
box-shadow: 0 8px 24px rgb(31 40 33 / 16%);
transform: translate(-50%, 7px);
transition: opacity 160ms ease, transform 160ms ease, visibility 160ms ease;
font-size: 12px;
}
.toast.is-visible {
visibility: visible;
opacity: 1;
transform: translate(-50%, 0);
}
.toast svg {
width: 16px;
height: 16px;
color: var(--green);
}
@media (max-width: 980px) {
:root {
--sidebar-width: 264px;
}
.document-page,
.home-page,
.settings-page {
padding-right: 46px;
padding-left: 46px;
}
.home-grid {
gap: 24px;
}
}
@media (max-width: 720px) {
:root {
--topbar-height: 48px;
--statusbar-height: 0px;
}
.app {
display: block;
padding-bottom: calc(62px + env(safe-area-inset-bottom));
}
.sidebar {
visibility: hidden;
position: fixed;
z-index: 60;
top: 0;
bottom: 0;
left: 0;
width: min(88vw, 340px);
opacity: 0;
box-shadow: 12px 0 40px rgb(29 37 31 / 18%);
transform: translateX(-16px);
transition: opacity 180ms ease, transform 180ms ease, visibility 180ms ease;
}
.app.sidebar-open .sidebar {
visibility: visible;
opacity: 1;
transform: translateX(0);
}
.mobile-scrim {
visibility: hidden;
display: block;
position: fixed;
z-index: 50;
inset: 0;
width: 100%;
height: 100%;
padding: 0;
opacity: 0;
background: rgb(28 34 29 / 30%);
transition: opacity 180ms ease, visibility 180ms ease;
}
.app.sidebar-open .mobile-scrim {
visibility: visible;
opacity: 1;
}
.mobile-menu,
.mobile-close {
display: grid;
}
.workspace {
width: 100%;
height: calc(100vh - 62px - env(safe-area-inset-bottom));
}
.topbar {
padding: 0 8px;
}
.mobile-menu {
margin-right: 3px;
}
.breadcrumb span {
max-width: 150px;
}
.save-state {
width: 24px;
}
.save-state span {
display: none;
}
.document-page,
.home-page,
.settings-page {
width: 100%;
padding: 34px 22px 70px;
}
.page-title,
.home-title,
.reading-title {
font-size: 26px;
line-height: 35px;
}
.page-meta {
margin-bottom: 26px;
}
.editor-body,
.reading-body {
font-size: 16px;
line-height: 28px;
}
.home-subtitle {
margin-bottom: 20px;
}
.home-actions {
grid-template-columns: 1fr;
gap: 7px;
margin-bottom: 29px;
}
.home-action {
height: 54px;
}
.home-grid {
grid-template-columns: 1fr;
gap: 28px;
}
.advanced-tools-grid {
grid-template-columns: 1fr;
}
.advanced-tool-card:nth-child(odd) {
border-right: 0;
}
.statusbar {
display: none;
}
.mobile-bottom-nav {
display: grid;
grid-template-columns: repeat(5, 1fr);
position: fixed;
z-index: 40;
right: 0;
bottom: 0;
left: 0;
height: calc(62px + env(safe-area-inset-bottom));
padding: 4px 6px env(safe-area-inset-bottom);
border-top: 1px solid var(--border);
background: rgb(255 255 255 / 96%);
}
.mobile-bottom-nav > button {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
gap: 2px;
min-width: 0;
height: 54px;
padding: 0;
color: var(--muted);
background: transparent;
cursor: pointer;
font-size: 10px;
}
.mobile-bottom-nav > button svg {
width: 19px;
height: 19px;
}
.mobile-bottom-nav .mobile-new {
align-self: center;
justify-self: center;
width: 44px;
min-width: 44px;
height: 44px;
border-radius: 50%;
color: #fff;
background: var(--green);
}
.mobile-bottom-nav .mobile-new svg {
width: 21px;
height: 21px;
}
.new-note-dialog {
top: auto;
right: 0;
bottom: 0;
left: 0;
width: 100%;
padding: 18px 18px calc(18px + env(safe-area-inset-bottom));
border-right: 0;
border-bottom: 0;
border-left: 0;
border-radius: 8px 8px 0 0;
transform: translateY(20px);
}
.modal-layer.is-visible .new-note-dialog {
transform: translateY(0);
}
.quick-create-grid button {
flex-direction: column;
justify-content: center;
gap: 4px;
height: 70px;
}
.popover {
top: 42px;
right: 8px;
}
.toast {
bottom: calc(75px + env(safe-area-inset-bottom));
}
.desktop-only {
display: none !important;
}
}
@media (max-width: 360px) {
.document-page,
.home-page,
.settings-page {
padding-right: 17px;
padding-left: 17px;
}
.quick-create-grid button {
padding: 0 3px;
font-size: 10px;
}
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
scroll-behavior: auto !important;
transition-duration: 0.01ms !important;
}
}