Files
rustpad/static/css/styles.css
T
2026-08-04 09:22:41 +02:00

6713 lines
122 KiB
CSS

/*
* Copyright (C) 2026 Mateusz Gruszczynski @linuxiarz.pl
* Source-Available Code / Dual-Licensed.
*
* Free for non-commercial and evaluation use under terms of BSL/GPLv3.
* Commercial or production use requires a valid paid license.
* See LICENSE file in repository root for details.
*/
:root,
:root[data-theme="dark"] {
color-scheme: dark;
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-synthesis: none;
background: #0b0d11;
color: #f4f6f8;
--bg: #0b0d11;
--surface: #11141a;
--surface-2: #151922;
--surface-3: #1a1f29;
--surface-inset: #0d1015;
--surface-raised: #11151c;
--surface-toolbar: #10141a;
--surface-panel: #101319;
--control-bg: #0e1116;
--surface-deep: #0a0d12;
--code-bg: #0b0e13;
--surface-black: #080b10;
--surface-floating: #171b23;
--surface-dialog: #11151b;
--surface-card: #171c24;
--surface-hover: #242b36;
--surface-strong: #11161e;
--surface-strong-2: #262b35;
--control-active: #1a2029;
--panel: var(--surface-card);
--editor-canvas: #0d1015;
--preview-canvas: #0e1116;
--note-action-bg: #171c24;
--note-action-hover: #222a36;
--note-action-border: #3a4351;
--note-action-text: #e0e5ec;
--note-action-accent-bg: #272246;
--toolbar-action-bg: #171c24;
--toolbar-action-hover: #232b37;
--toolbar-action-border: #343d4a;
--toolbar-action-text: #d8dee7;
--border: #272d38;
--border-strong: #343c49;
--divider: #202631;
--control-border: #303745;
--border-muted: #707887;
--select-border: #596273;
--border-neutral: #4b5565;
--text: #f4f6f8;
--text-label: #dce1e8;
--text-secondary: #d2d8e1;
--text-tertiary: #b8c0cc;
--text-heading: #dce2eb;
--editor-text: #edf1f6;
--editor-placeholder: #515a68;
--text-muted-strong: #abb5c3;
--accent-text: #aa9df8;
--text-dim: #c5ccd6;
--text-soft: #d1d7df;
--accent-text-strong: #9e92f5;
--text-bright: #e6eaf0;
--code-text: #c9d0da;
--text-on-owner: #eef1f5;
--text-max: #eef2f7;
--gutter-text: #596270;
--warning-text: #fff2a8;
--text-subtle: #b9c2cf;
--code-text-soft: #c3cad4;
--dialog-text: #d7dae0;
--footer-accent: #d9d2ff;
--success-soft: #8ed9a4;
--accent-pale: #d8d3ff;
--danger-soft: #ffb6bd;
--muted: #929cab;
--muted-2: #697383;
--muted-fallback: #9ca3af;
--on-accent: #fff;
--danger-button-text: #fff4f5;
--danger-subtle-bg: rgba(255, 123, 145, .08);
--danger-subtle-hover: rgba(255, 123, 145, .14);
--theme-contrast: white;
--theme-shadow-mix: black;
--accent: #7561e0;
--accent-hover: #6955cb;
--accent-soft: #272246;
--accent-border: #8372ef;
--focus: #7567db;
--link: #a99ef8;
--link-hover: #c3bbff;
--caret: #9b89ff;
--owner-fallback: #8b7af4;
--warning: #e3a94d;
--warning-muted: #d6a84b;
--danger: #ff7b91;
--success: #40d3a3;
--success-fallback: #42b883;
--warning-bg: #6d5b16;
--danger-border: #7f3340;
--danger-bg: #6e2935;
--danger-hover: #7c3040;
--status-success-border: #2f855a;
--status-info-border: #3182ce;
--status-warning-border: #d69e2e;
--status-danger-border: #c53030;
--status-success-bg: rgba(47, 133, 90, .14);
--status-info-bg: rgba(49, 130, 206, .14);
--status-warning-bg: rgba(214, 158, 46, .14);
--status-danger-bg: rgba(197, 48, 48, .14);
--syntax-keyword: #c792ea;
--syntax-string: #c3e88d;
--syntax-number: #f78c6c;
--live-gradient-start: #f0aa74;
--live-gradient-mid: #cf633d;
--live-gradient-end: #8f3827;
--select-arrow: #9aa3b2;
--wash-faint: rgba(255, 255, 255, .015);
--wash-soft: rgba(255, 255, 255, .02);
--wash-subtle: rgba(255, 255, 255, .025);
--wash-medium: rgba(255, 255, 255, .04);
--wash-hover: rgba(255, 255, 255, .07);
--wash-border: rgba(255, 255, 255, .12);
--wash-strong: rgba(255, 255, 255, .75);
--accent-a08: rgba(124, 104, 238, .08);
--accent-a25: rgba(124, 104, 238, .25);
--accent-a30: rgba(124, 104, 238, .3);
--accent-a35: rgba(124, 104, 238, .35);
--focus-ring: rgb(117 103 219 / .18);
--danger-a45: rgba(255, 123, 145, .45);
--live-border: rgba(195, 91, 54, .28);
--shadow-28: rgba(0, 0, 0, .28);
--shadow-38: rgb(0 0 0 / 38%);
--shadow-40: rgba(0, 0, 0, .4);
--shadow-45: rgb(0 0 0 / 45%);
--shadow-58: rgb(0 0 0 / .58);
--overlay-68: rgb(0 0 0 / .68);
--overlay-72: rgba(4, 6, 10, .72);
--overlay-78: rgba(4, 6, 9, .78);
--overlay-82: rgba(4, 6, 9, .82);
--glass-92: rgba(13, 16, 21, .92);
--glass-toolbar: rgba(17, 21, 28, .88);
--top-header-height: 54px;
--top-header-control-height: 34px;
}
:root[data-theme="light"] {
color-scheme: light;
background: #f7f4ee;
color: #29251f;
--bg: #f7f4ee;
--surface: #fffdf9;
--surface-2: #f5f1ea;
--surface-3: #ece6de;
--surface-inset: #fbf8f3;
--surface-raised: #fffdf9;
--surface-toolbar: #faf7f2;
--surface-panel: #fcfaf6;
--control-bg: #fdfbf7;
--surface-deep: #efeae2;
--code-bg: #f6f2ec;
--surface-black: #e9e3da;
--surface-floating: #fffdf9;
--surface-dialog: #fffdf9;
--surface-card: #faf7f2;
--surface-hover: #f0ebe4;
--surface-strong: #fffbf6;
--surface-strong-2: #e9e3da;
--control-active: #eeeaf7;
--editor-canvas: #fdfcf9;
--preview-canvas: #fffdf9;
--note-action-bg: #fffdf9;
--note-action-hover: #f1ecf8;
--note-action-border: #c8c0b5;
--note-action-text: #403a33;
--note-action-accent-bg: #eee9f8;
--toolbar-action-bg: #fffdf9;
--toolbar-action-hover: #f0ebf8;
--toolbar-action-border: #d0c8bd;
--toolbar-action-text: #4b443c;
--border: #e2dcd3;
--border-strong: #cbc3b8;
--divider: #e9e3db;
--control-border: #bcb2a6;
--border-muted: #a99d8f;
--select-border: #9d9183;
--border-neutral: #8f8376;
--text: #29251f;
--text-label: #3a352e;
--text-secondary: #4a443c;
--text-tertiary: #655d53;
--text-heading: #302b25;
--editor-text: #2c2822;
--editor-placeholder: #8b8175;
--text-muted-strong: #625a50;
--accent-text: #5d50a5;
--text-dim: #575047;
--text-soft: #4a443c;
--accent-text-strong: #544795;
--text-bright: #322d27;
--code-text: #413b34;
--text-on-owner: #28231e;
--text-max: #211e1a;
--gutter-text: #82786d;
--warning-text: #624700;
--text-subtle: #5f574d;
--code-text-soft: #5a5249;
--dialog-text: #403a33;
--footer-accent: #554993;
--success-soft: #236948;
--accent-pale: #5b4fa1;
--danger-soft: #8b3340;
--muted: #6b6359;
--muted-2: #756c61;
--muted-fallback: #746b61;
--on-accent: #fff;
--danger-button-text: #7f2836;
--danger-subtle-bg: #f7e7e6;
--danger-subtle-hover: #efd4d4;
--theme-contrast: black;
--theme-shadow-mix: #6c6258;
--accent: #6859b5;
--accent-hover: #5b4da5;
--accent-soft: #ece7f6;
--accent-border: #7566bd;
--focus: #6b5cb5;
--link: #5c4da3;
--link-hover: #4c3f8b;
--caret: #6859b5;
--owner-fallback: #7060c1;
--warning: #9a6816;
--warning-muted: #7e5d1d;
--danger: #9b3443;
--success: #237553;
--success-fallback: #277b58;
--warning-bg: #f4e7be;
--danger-border: #c98289;
--danger-bg: #f2dddd;
--danger-hover: #e9cbcd;
--status-success-border: #4c8064;
--status-info-border: #56759c;
--status-warning-border: #a27831;
--status-danger-border: #a54b55;
--status-success-bg: rgba(61, 121, 88, .10);
--status-info-bg: rgba(68, 103, 148, .09);
--status-warning-bg: rgba(155, 112, 35, .11);
--status-danger-bg: rgba(155, 52, 67, .09);
--syntax-keyword: #7046a5;
--syntax-string: #36704a;
--syntax-number: #a54c25;
--live-gradient-start: #c9794e;
--live-gradient-mid: #ae5d3c;
--live-gradient-end: #7c3d2c;
--select-arrow: #6f665c;
--wash-faint: rgba(49, 43, 36, .015);
--wash-soft: rgba(49, 43, 36, .025);
--wash-subtle: rgba(49, 43, 36, .035);
--wash-medium: rgba(49, 43, 36, .05);
--wash-hover: rgba(49, 43, 36, .065);
--wash-border: rgba(49, 43, 36, .13);
--wash-strong: rgba(49, 43, 36, .56);
--accent-a08: rgba(104, 89, 181, .08);
--accent-a25: rgba(104, 89, 181, .20);
--accent-a30: rgba(104, 89, 181, .24);
--accent-a35: rgba(104, 89, 181, .28);
--focus-ring: rgb(104 89 181 / .17);
--danger-a45: rgba(155, 52, 67, .30);
--live-border: rgba(174, 93, 60, .23);
--shadow-28: rgba(73, 61, 48, .10);
--shadow-38: rgb(73 61 48 / 14%);
--shadow-40: rgba(73, 61, 48, .16);
--shadow-45: rgb(73 61 48 / 18%);
--shadow-58: rgb(73 61 48 / .22);
--overlay-68: rgb(47 42 36 / .44);
--overlay-72: rgba(47, 42, 36, .48);
--overlay-78: rgba(47, 42, 36, .52);
--overlay-82: rgba(47, 42, 36, .56);
--glass-92: rgba(255, 253, 249, .94);
--glass-toolbar: rgba(255, 253, 249, .90);
}
* {
box-sizing: border-box;
}
html {
min-width: 320px;
background: var(--bg);
}
body {
min-height: 100vh;
margin: 0;
background: var(--bg);
color: var(--text);
}
button,
input,
select,
textarea {
font: inherit;
}
button,
a,
input,
select,
textarea {
-webkit-tap-highlight-color: transparent;
}
button {
cursor: pointer;
}
button:disabled {
cursor: wait;
opacity: .65;
}
a {
color: inherit;
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
.brand {
color: var(--text);
font-weight: 700;
text-decoration: none;
letter-spacing: -.02em;
}
.site-header {
width: min(720px, calc(100% - 32px));
min-height: var(--top-header-height);
margin: 0 auto;
display: flex;
align-items: center;
border-bottom: 1px solid var(--border);
}
.home-layout {
width: min(520px, calc(100% - 32px));
margin: 0 auto;
padding: 72px 0;
}
.home-intro {
margin-bottom: 28px;
}
.home-intro h1 {
margin: 0;
font-size: clamp(2rem, 7vw, 3rem);
letter-spacing: -.04em;
}
.home-intro p {
margin: 10px 0 0;
color: var(--muted);
line-height: 1.6;
}
.panel {
border: 1px solid var(--border);
border-radius: 12px;
background: var(--surface);
}
.create-panel {
padding: 24px;
}
#create-form {
display: grid;
gap: 20px;
padding-top: 22px;
}
.field {
display: grid;
gap: 8px;
}
.field label {
color: var(--text-label);
font-size: .86rem;
font-weight: 750;
}
.label-row,
.field-meta {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
}
.label-row span,
.field-meta,
.field small {
color: var(--muted-2);
font-size: .73rem;
}
input,
select {
border: 1px solid var(--border-strong);
outline: none;
background: var(--control-bg);
color: var(--text);
}
select option,
select optgroup {
background: var(--control-bg);
color: var(--text);
}
input {
width: 100%;
min-height: 46px;
padding: 0 13px;
border-radius: 10px;
}
input:focus,
select:focus,
textarea:focus {
border-color: var(--focus);
outline: 1px solid var(--focus);
outline-offset: 1px;
}
.password-input {
position: relative;
}
.password-input input {
padding-right: 72px;
}
.text-button {
position: static;
transform: none;
border: 0;
background: transparent;
color: var(--link);
padding: 4px 2px;
font-size: .78rem;
}
.text-button:hover {
color: var(--link-hover);
}
.password-toggle {
position: absolute;
top: 50%;
right: 8px;
transform: translateY(-50%);
padding: 7px;
}
.form-message {
min-height: 1.2em;
margin: -5px 0 0;
font-size: .8rem;
}
.error {
color: var(--danger);
}
.primary-button,
.secondary-button,
.inline-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
min-height: 40px;
border-radius: 8px;
font-weight: 650;
text-decoration: none;
}
.primary-button {
width: 100%;
border: 1px solid var(--accent-border);
background: var(--accent);
color: var(--on-accent);
padding: 0 16px;
}
.primary-button:hover {
background: var(--accent-hover);
}
.secondary-button {
border: 1px solid var(--border-strong);
background: var(--surface-2);
color: var(--text-secondary);
padding: 0 13px;
}
.secondary-button:hover {
background: var(--surface-3);
}
.inline-button {
width: auto;
margin-top: 18px;
padding: 0 18px;
}
.app-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 24px;
min-height: var(--top-header-height);
padding: 0 16px;
border-bottom: 1px solid var(--border);
background: var(--surface-inset);
}
.pad-page .app-header {
min-height: var(--top-header-height);
padding-block: 6px;
}
.header-divider {
height: 24px;
}
.app-header .secondary-button,
.public-header .secondary-button,
.pad-page .header-actions>.secondary-button,
.pad-page .page-settings>summary.secondary-button {
min-height: var(--top-header-control-height);
padding-inline: 10px;
}
.app-header__main,
.header-actions {
display: flex;
align-items: center;
gap: 14px;
min-width: 0;
}
.header-divider {
width: 1px;
background: var(--border);
}
.document-heading {
min-width: 0;
}
.document-heading--copy {
border-radius: 6px;
cursor: copy;
outline: none;
}
.document-heading--copy:hover,
.document-heading--copy:focus-visible {
background: color-mix(in srgb, var(--accent) 10%, transparent);
box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 10%, transparent);
}
.document-heading h1 {
overflow: hidden;
margin: 0;
font-size: 1rem;
white-space: nowrap;
text-overflow: ellipsis;
}
.document-url {
overflow: hidden;
max-width: 360px;
margin: 3px 0 0;
color: var(--muted-2);
font-size: .72rem;
white-space: nowrap;
text-overflow: ellipsis;
}
.status {
display: inline-flex;
align-items: center;
gap: 8px;
min-height: 34px;
padding: 0 8px;
color: var(--muted);
font-size: .78rem;
}
.status__dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--warning);
}
.status__dot.is-online {
background: var(--success);
}
.status__dot.is-offline {
background: var(--danger);
}
.connection-notice {
position: absolute;
top: 64px;
left: 50%;
z-index: 18;
display: flex;
width: min(520px, calc(100% - 32px));
box-sizing: border-box;
align-items: center;
gap: 12px;
padding: 11px 14px;
border: 1px solid color-mix(in srgb, var(--danger) 48%, var(--border-strong));
border-radius: 12px;
background: color-mix(in srgb, var(--surface-strong, var(--surface-strong)) 94%, var(--danger));
box-shadow: 0 16px 42px var(--shadow-38);
opacity: 0;
pointer-events: none;
transform: translate(-50%, -10px) scale(.98);
transition: opacity .2s ease, transform .2s ease, border-color .2s ease;
}
.connection-notice.is-visible {
opacity: 1;
transform: translate(-50%, 0) scale(1);
}
.connection-notice.is-restored {
border-color: color-mix(in srgb, var(--success) 58%, var(--border-strong));
background: color-mix(in srgb, var(--surface-strong, var(--surface-strong)) 94%, var(--success));
}
.connection-notice__signal {
display: inline-flex;
width: 26px;
height: 26px;
align-items: center;
justify-content: center;
flex: 0 0 auto;
gap: 3px;
border-radius: 50%;
background: color-mix(in srgb, var(--danger) 18%, transparent);
}
.connection-notice.is-restored .connection-notice__signal {
background: color-mix(in srgb, var(--success) 18%, transparent);
}
.connection-notice__signal span {
width: 3px;
height: 10px;
border-radius: 3px;
background: var(--danger);
animation: connection-pulse .9s ease-in-out infinite;
}
.connection-notice__signal span:nth-child(2) {
animation-delay: .12s;
}
.connection-notice__signal span:nth-child(3) {
animation-delay: .24s;
}
.connection-notice.is-restored .connection-notice__signal span {
background: var(--success);
animation: none;
}
.connection-notice__content {
display: grid;
min-width: 0;
gap: 2px;
}
.connection-notice__content strong {
color: var(--text);
font-size: .84rem;
}
.connection-notice__content>span {
color: var(--muted);
font-size: .76rem;
line-height: 1.35;
}
@keyframes connection-pulse {
0%,
100% {
transform: scaleY(.45);
opacity: .48;
}
50% {
transform: scaleY(1);
opacity: 1;
}
}
.editor-layout {
position: relative;
display: grid;
grid-template-columns: minmax(0, 1fr) 0;
height: calc(100vh - 70px);
overflow: hidden;
transition: grid-template-columns .18s ease;
}
.history-open .editor-layout {
grid-template-columns: minmax(0, 1fr) 340px;
}
.editor-panel {
position: relative;
display: grid;
grid-template-rows: auto minmax(0, 1fr) auto;
min-width: 0;
background: var(--surface);
}
.editor-toolbar {
display: flex;
align-items: center;
gap: 8px;
min-height: 52px;
padding: 8px 12px;
border-bottom: 1px solid var(--border);
background: var(--surface-panel);
}
.toolbar-group,
.view-switch {
display: inline-flex;
align-items: center;
gap: 4px;
padding-right: 8px;
border-right: 1px solid var(--border);
}
.toolbar-group:last-child,
.view-switch {
padding-right: 0;
border-right: 0;
}
.toolbar-fill {
flex: 1;
}
.editor-toolbar button,
.editor-toolbar select {
min-height: 34px;
border: 1px solid transparent;
border-radius: 7px;
background: transparent;
color: var(--text-tertiary);
padding: 0 9px;
font-size: .78rem;
}
.editor-toolbar button:hover,
.editor-toolbar select:hover {
border-color: var(--border);
background: var(--surface-2);
color: var(--text);
}
.editor-toolbar select {
border-color: var(--border);
background: var(--surface-raised);
}
.view-switch {
padding: 3px;
border: 1px solid var(--border);
border-radius: 9px;
background: var(--surface-inset);
}
.view-switch button.active {
background: var(--surface-3);
color: var(--text);
}
.workspace {
display: grid;
min-height: 0;
background: var(--control-bg);
}
.workspace.view-split {
grid-template-columns: 1fr 1fr;
}
.workspace.view-edit {
grid-template-columns: 1fr;
}
.workspace.view-preview {
grid-template-columns: 1fr;
}
.workspace.view-edit .preview-column,
.workspace.view-preview .editor-column {
display: none;
}
.workspace>.editor-column,
.workspace>.preview-column {
transition: opacity .18s ease, transform .18s ease;
}
.editor-column,
.preview-column {
display: grid;
min-width: 0;
min-height: 0;
}
.editor-column {
grid-template-rows: 30px auto minmax(0, 1fr);
}
.preview-column {
grid-template-rows: 30px minmax(0, 1fr);
}
.preview-column {
border-left: 1px solid var(--border);
}
.column-label {
display: flex;
align-items: center;
padding: 0 18px;
border-bottom: 1px solid var(--divider);
background: var(--surface-toolbar);
color: var(--muted-2);
font-size: .7rem;
font-weight: 750;
letter-spacing: .08em;
text-transform: uppercase;
}
textarea {
display: block;
width: 100%;
height: 100%;
min-height: 0;
resize: none;
padding: 24px;
border: 0;
outline: none;
background: var(--surface-inset);
color: var(--editor-text);
font: 400 17px/1.72 ui-monospace, SFMono-Regular, Consolas, monospace;
caret-color: var(--caret);
}
textarea::placeholder {
color: var(--editor-placeholder);
}
textarea::selection {
background: var(--accent-a35);
}
.preview {
overflow: auto;
min-height: 0;
color: var(--text-heading);
}
.markdown-body h1,
.markdown-body h2,
.markdown-body h3 {
letter-spacing: -.03em;
}
.markdown-body h1:first-child,
.markdown-body h2:first-child,
.markdown-body h3:first-child {
margin-top: 0;
}
.markdown-body h1 {
font-size: 2rem;
}
.markdown-body h2 {
font-size: 1.5rem;
}
.markdown-body code {
padding: .16em .36em;
border: 1px solid var(--control-border);
border-radius: 5px;
background: var(--control-active);
}
.markdown-body pre {
overflow: auto;
padding: 16px;
border: 1px solid var(--border);
border-radius: 10px;
background: var(--surface-deep);
}
.markdown-body pre code {
padding: 0;
border: 0;
background: transparent;
}
.markdown-body blockquote {
padding: .2em 1em;
border-left: 3px solid var(--accent);
color: var(--text-muted-strong);
}
.markdown-body a {
color: var(--accent-text);
}
.markdown-body hr {
border: 0;
border-top: 1px solid var(--border);
}
.editor-footer {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
min-height: 38px;
padding: 0 16px;
border-top: 1px solid var(--border);
color: var(--muted-2);
font-size: .72rem;
}
.document-stats {
display: flex;
gap: 14px;
}
.history-panel {
position: relative;
width: 340px;
overflow: hidden;
border-left: 1px solid var(--border);
background: var(--surface-panel);
transform: translateX(100%);
transition: transform .18s ease;
}
.history-panel.open {
transform: translateX(0);
}
.history-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
padding: 18px;
}
.history-help {
margin: 0;
padding: 0 18px 16px;
border-bottom: 1px solid var(--border);
color: var(--muted);
font-size: .8rem;
line-height: 1.5;
}
.icon-button {
display: grid;
place-items: center;
width: 34px;
height: 34px;
border: 1px solid var(--border);
border-radius: 8px;
background: transparent;
color: var(--text-dim);
font-size: 1.2rem;
}
.history-list {
overflow: auto;
height: calc(100vh - 185px);
padding: 10px 18px 24px;
}
.revision {
position: relative;
display: grid;
grid-template-columns: 12px 1fr;
gap: 10px;
padding: 13px 0;
}
.revision::after {
content: "";
position: absolute;
top: 25px;
bottom: -13px;
left: 5px;
width: 1px;
background: var(--border);
}
.revision:last-child::after {
display: none;
}
.revision__marker {
position: relative;
z-index: 1;
width: 11px;
height: 11px;
margin-top: 3px;
border: 2px solid var(--owner-fallback);
border-radius: 50%;
}
.revision time {
display: block;
color: var(--text-soft);
font-size: .8rem;
}
.revision small {
display: block;
margin-top: 4px;
color: var(--muted-2);
}
.revision button {
margin-top: 10px;
border: 0;
background: transparent;
color: var(--accent-text-strong);
padding: 0;
font-size: .76rem;
font-weight: 750;
}
.empty {
padding: 28px 0;
color: var(--muted-2);
text-align: center;
font-size: .82rem;
}
dialog {
width: min(420px, calc(100% - 24px));
padding: 0;
border: 0;
background: transparent;
color: inherit;
}
dialog::backdrop {
background: var(--overlay-82);
}
.dialog-panel {
display: grid;
gap: 12px;
padding: 24px;
border: 1px solid var(--border);
border-radius: 12px;
background: var(--surface);
text-align: left;
}
.dialog-panel input {
margin-top: 6px;
}
.dialog-panel .primary-button {
margin-top: 2px;
}
.dialog-link {
color: var(--muted);
font-size: .78rem;
}
.toast {
position: fixed;
right: 20px;
bottom: 20px;
z-index: 20;
padding: 11px 14px;
border: 1px solid var(--border-strong);
border-radius: 10px;
background: var(--surface-floating);
color: var(--text-bright);
font-size: .8rem;
opacity: 0;
transform: translateY(8px);
pointer-events: none;
transition: .16s ease;
}
.toast.visible {
opacity: 1;
transform: translateY(0);
}
.error-page {
display: grid;
place-items: center;
min-height: 100vh;
padding: 24px;
text-align: center;
}
.error-page h1 {
margin: 0;
font-size: clamp(2rem, 6vw, 4rem);
letter-spacing: -.05em;
}
.error-page p {
color: var(--muted);
}
@media (max-width: 980px) {
.app-header {
align-items: flex-start;
min-height: auto;
padding: 8px 14px;
}
.app-header__main,
.header-actions {
flex-wrap: wrap;
}
.editor-layout {
height: calc(100vh - 92px);
}
.toolbar-settings {
display: none;
}
.history-open .editor-layout {
grid-template-columns: minmax(0, 1fr);
}
.history-panel {
position: absolute;
top: 0;
right: 0;
bottom: 0;
z-index: 10;
}
}
@media (max-width: 720px) {
.site-header,
.home-layout {
width: min(100% - 24px, 520px);
}
.document-url,
.header-divider {
display: none;
}
.home-layout {
padding: 44px 0;
}
.app-header {
gap: 10px;
}
.status {
display: none;
}
.app-header .secondary-button,
.public-header .secondary-button,
.pad-page .page-settings>summary.secondary-button {
min-height: 36px;
}
}
@media (max-width: 480px) {
.create-panel {
padding: 20px;
}
.header-actions {
gap: 6px;
}
.secondary-button {
min-height: 36px;
padding: 0 10px;
font-size: .75rem;
}
.history-panel {
width: 100%;
}
}
.preview--raw {
white-space: pre-wrap;
overflow-wrap: anywhere;
font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
}
.workspace-page {
width: min(1100px, calc(100% - 32px));
margin: 0 auto;
padding: 44px 0 80px;
}
.workspace-top {
display: flex;
align-items: end;
justify-content: space-between;
gap: 24px;
padding-bottom: 24px;
border-bottom: 1px solid var(--border);
}
.workspace-top h2 {
margin: 0;
font-size: 2rem;
}
.workspace-top p {
margin: 7px 0 0;
color: var(--muted);
}
.notes-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
gap: 12px;
padding-top: 20px;
}
.note-card {
min-height: 130px;
padding: 18px;
border: 1px solid var(--border);
border-radius: 10px;
background: var(--surface);
text-decoration: none;
transition: border-color .15s, background .15s;
}
.note-card:hover {
border-color: var(--border-strong);
background: var(--surface-2);
}
.note-card h3 {
margin: 0;
font-size: 1rem;
}
.note-card p {
margin: 36px 0 0;
color: var(--muted);
font-size: .75rem;
}
.error-card {
width: min(560px, 100%);
padding: 32px;
border: 1px solid var(--border);
border-radius: 12px;
background: var(--surface);
}
.error-code {
margin: 0 0 10px;
color: var(--muted-2);
font: 700 .78rem/1 ui-monospace, SFMono-Regular, Consolas, monospace;
letter-spacing: .12em;
}
.error-card h1 {
font-size: clamp(1.8rem, 6vw, 3rem);
}
.error-card>p:not(.error-code) {
max-width: 46ch;
margin: 14px auto 0;
line-height: 1.6;
}
.error-actions {
display: flex;
justify-content: center;
gap: 8px;
margin-top: 24px;
}
@media (max-width: 480px) {
.error-card {
padding: 24px 18px;
}
.error-actions {
flex-direction: column;
}
.error-actions .inline-button {
width: 100%;
}
}
/* Home: standalone note and workspace are separate choices. */
.home-layout--wide {
width: min(1040px, calc(100% - 32px));
}
.create-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 20px;
align-items: start;
}
.create-panel__heading {
margin-bottom: 22px;
}
.create-panel__heading h2 {
margin: 0;
font-size: 1.35rem;
}
.create-panel__heading p {
margin: 7px 0 0;
color: var(--muted);
line-height: 1.5;
}
.create-panel form {
display: grid;
gap: 18px;
}
.create-panel .primary-button {
width: 100%;
}
@media (max-width: 760px) {
.home-layout--wide {
width: min(100% - 24px, 560px);
}
.create-grid {
grid-template-columns: 1fr;
}
}
/* Collaborative editor additions */
.editor-shell {
display: grid;
grid-template-columns: auto minmax(0, 1fr);
min-height: 0;
overflow: hidden;
background: var(--surface-inset);
}
.line-gutter {
overflow: hidden;
padding: 24px 8px 24px 0;
border-right: 1px solid var(--border);
color: var(--muted-2);
font: 400 17px/1.72 ui-monospace, SFMono-Regular, Consolas, monospace;
text-align: right;
user-select: none;
}
.line-gutter div {
height: 1.72em;
}
.hide-editor-line-numbers .editor-shell {
grid-template-columns: 0 minmax(0, 1fr);
}
.hide-editor-line-numbers .line-gutter {
width: 0;
padding: 0;
border: 0;
}
.editor-shell textarea {
padding-left: 18px;
}
.line-toggle {
display: inline-flex;
align-items: center;
gap: 6px;
color: var(--muted);
font-size: .78rem;
white-space: nowrap;
}
.line-toggle input {
width: auto;
min-height: auto;
margin: 0;
accent-color: var(--accent);
}
.user-color-control {
position: relative;
display: inline-flex;
align-items: center;
gap: 0.35rem;
}
.user-chip {
display: inline-flex;
align-items: center;
gap: 7px;
padding: 4px 6px;
border: 0;
border-radius: 7px;
background: transparent;
color: var(--text-heading);
font: inherit;
font-size: .78rem;
}
.user-chip:hover,
.user-chip:focus-visible {
background: var(--surface-2);
outline: none;
}
.user-chip__dot {
width: 10px;
height: 10px;
flex: 0 0 auto;
border: 1px solid color-mix(in srgb, var(--owner, var(--accent)) 72%, var(--theme-contrast));
border-radius: 50%;
background: var(--owner, var(--accent));
box-shadow: 0 0 0 2px color-mix(in srgb, var(--owner, var(--accent)) 18%, transparent);
}
.user-color-picker {
position: absolute;
top: calc(100% + 4px);
left: 0;
width: 1px;
height: 1px;
padding: 0;
border: 0;
opacity: 0;
pointer-events: none;
}
.dialog-copy {
margin: 0 0 4px;
color: var(--muted);
line-height: 1.5;
}
.history-header h2 {
margin: 0;
}
.history-header p {
margin: 4px 0 0;
color: var(--muted-2);
font-size: .75rem;
}
.revision__marker {
border-color: var(--owner, var(--owner-fallback));
background: var(--owner, var(--owner-fallback));
}
.revision__meta {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 8px;
}
.revision__meta strong {
font-size: .82rem;
}
.revision__snippet {
margin: 8px 0 0;
color: var(--muted);
font-size: .76rem;
line-height: 1.45;
}
.revision__preview {
max-height: 180px;
overflow: auto;
margin-top: 10px;
padding: 10px;
border: 1px solid var(--border);
border-radius: 7px;
background: var(--code-bg);
color: var(--code-text);
font: .72rem/1.5 ui-monospace, monospace;
white-space: pre-wrap;
}
.revision button+button {
margin-left: 12px;
}
.mermaid {
overflow: auto;
padding: 12px;
border: 1px solid var(--border);
border-radius: 10px;
background: var(--surface-deep);
}
@media (max-width: 720px) {
.line-gutter {
width: 48px;
padding-top: 18px;
font-size: 15px;
}
.editor-shell textarea {
padding: 18px 12px;
font-size: 15px;
}
.user-color-control {
display: none;
}
}
.markdown-body img {
margin: 16px auto;
}
.markdown-body a {
overflow-wrap: anywhere;
}
.public-page {
min-height: 100vh;
background: var(--background);
}
.public-header__actions {
display: flex;
align-items: center;
gap: 12px;
}
.public-header {
position: sticky;
top: 0;
z-index: 5;
display: flex;
align-items: center;
justify-content: space-between;
min-height: var(--top-header-height);
padding: 0 max(20px, calc((100vw - 900px) / 2));
border-bottom: 1px solid var(--border);
background: var(--glass-92);
backdrop-filter: blur(12px);
}
.public-document {
margin: 0 auto;
padding: 56px 0 96px;
}
.public-document>h1 {
margin: 0;
font-size: clamp(2rem, 6vw, 4rem);
line-height: 1.08;
}
.public-meta {
margin: 12px 0 36px;
color: var(--muted);
font-size: .8rem;
}
.public-content {
min-height: 240px;
border: 1px solid var(--border);
border-radius: 14px;
background: var(--surface);
}
.public-content img {
cursor: zoom-in;
}
.public-page.hide-preview-line-numbers .public-content {
padding-left: 32px;
}
@media (max-width: 600px) {
.public-document {
padding-top: 32px;
}
.public-content {
padding: 20px 20px 20px 52px;
}
.public-page.hide-preview-line-numbers .public-content {
padding-left: 20px;
}
}
/* Layout safeguards and home footer */
.app-header__main,
.document-heading {
min-width: 0;
}
.document-url {
overflow-wrap: anywhere;
}
.home-page {
display: flex;
min-height: 100vh;
flex-direction: column;
}
.home-page .home-layout {
flex: 1 0 auto;
}
.home-footer {
flex: 0 0 auto;
text-align: center;
}
.home-footer__inner {
flex-wrap: wrap;
}
.home-footer__separator {
color: var(--border-strong);
}
.home-footer .text-button {
font-size: inherit;
text-decoration: underline;
text-underline-offset: 3px;
}
.home-footer a {
color: var(--muted);
text-decoration: none;
}
.home-footer a:hover {
color: var(--text);
}
.home-header {
background: transparent;
width: min(1040px, calc(100% - 32px));
border-bottom-color: var(--live-border);
}
.home-brand {
background: linear-gradient(110deg, var(--live-gradient-start) 0%, var(--live-gradient-mid) 48%, var(--live-gradient-end) 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
@media (max-width: 760px) {
.home-footer {
width: min(100% - 24px, 560px);
margin-bottom: 20px;
}
}
.line-owner-label {
position: absolute;
left: 7px;
top: 50%;
max-width: 88px;
overflow: hidden;
padding: 2px 6px;
border: 1px solid color-mix(in srgb, var(--owner) 65%, transparent);
border-radius: 999px;
background: color-mix(in srgb, var(--owner) 18%, var(--surface-inset));
color: var(--text-on-owner);
font: 600 10px/1.2 system-ui, sans-serif;
text-overflow: ellipsis;
white-space: nowrap;
transform: translateY(-50%);
}
@media (min-width: 721px) {
.line-gutter {
width: 132px;
}
}
@media (max-width: 720px) {
.line-owner-label {
display: none;
}
}
/* Compact line numbers; author labels sit over the edited text, not in the gutter. */
.line-gutter {
width: 48px;
}
.line-gutter div {
position: static;
}
.owner-labels {
position: absolute;
right: 12px;
left: 48px;
overflow: hidden;
pointer-events: none;
}
.owner-label {
position: absolute;
right: calc(var(--editor-rendered-font-size, 14px) * .57);
box-sizing: border-box;
max-width: min(calc(var(--editor-rendered-font-size, 14px) * 12.8571), 45%);
max-height: calc(var(--editor-line-height, 29px) - 2px);
overflow: hidden;
padding: .14em .5em;
border: 1px solid color-mix(in srgb, var(--owner) 62%, transparent);
border-radius: 999px;
background: color-mix(in srgb, var(--owner) 18%, var(--surface-inset));
color: var(--text-on-owner);
font: 600 calc(var(--editor-rendered-font-size, 14px) * .7143)/1.25 system-ui, sans-serif;
opacity: .82;
text-overflow: ellipsis;
white-space: nowrap;
}
.hide-editor-line-numbers .owner-labels {
left: 0;
}
.line-owner-label {
display: none !important;
}
@media (min-width: 721px) {
.line-gutter {
width: 48px;
}
}
@media (max-width: 720px) {
.line-gutter {
width: 42px;
}
.owner-labels {
left: 42px;
right: 4px;
}
}
/* Editor display preferences and author overlay */
.editor-shell {
position: relative;
}
.owner-labels {
z-index: 4;
top: 0;
bottom: 0;
height: auto;
}
.owner-line {
position: absolute;
right: 0;
left: 0;
height: var(--editor-line-height, 31px);
border-left: 3px solid var(--owner);
background: transparent;
}
.owner-label {
z-index: 1;
transform: translateY(2px);
}
.editor-controls {
display: inline-flex;
align-items: center;
gap: 7px;
}
.editor-controls label {
display: inline-flex;
align-items: center;
gap: 4px;
color: var(--muted);
font-size: .72rem;
}
.editor-controls select {
width: auto;
min-height: 30px;
padding: 3px 24px 3px 7px;
border-radius: 6px;
font-size: .74rem;
}
.editor-workspace-font-system textarea,
.editor-workspace-font-system .preview {
font-family: Inter, ui-sans-serif, system-ui, sans-serif;
}
.editor-workspace-font-serif textarea,
.editor-workspace-font-serif .preview {
font-family: ui-serif, Georgia, Cambria, "Times New Roman", serif;
}
.editor-workspace-font-arial textarea,
.editor-workspace-font-arial .preview {
font-family: Arial, Helvetica, sans-serif;
}
.editor-workspace-font-georgia textarea,
.editor-workspace-font-georgia .preview {
font-family: Georgia, "Times New Roman", serif;
}
.editor-workspace-font-mono textarea,
.editor-workspace-font-mono .preview {
font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
}
.compact-editor .editor-toolbar {
min-height: 42px;
padding-top: 5px;
padding-bottom: 5px;
}
.compact-editor .column-label {
min-height: 30px;
font-size: .68rem;
}
.compact-editor textarea,
.compact-editor .preview {
padding-top: 14px;
padding-bottom: 14px;
font-size: calc(var(--editor-font-size, 18px) - 2px);
line-height: 1.45;
}
.workspace textarea,
.workspace .preview {
font-size: var(--editor-font-size, 18px);
}
@media (max-width: 900px) {
.editor-controls {
order: 3;
width: 100%;
}
.editor-toolbar {
flex-wrap: wrap;
}
}
.editor-shell textarea {
white-space: pre;
overflow: auto;
overflow-wrap: normal;
word-break: normal;
}
/* Keep line numbers exactly aligned with the logical text lines. */
.line-gutter {
box-sizing: border-box;
font-size: var(--editor-font-size, 18px);
line-height: normal;
}
.line-gutter div {
box-sizing: border-box;
padding-right: 8px;
line-height: inherit;
}
.compact-editor .line-gutter {
font-size: calc(var(--editor-font-size, 18px) - 2px);
}
/* Image crop/resize dialog. */
.image-editor-dialog {
width: min(920px, calc(100% - 28px));
max-width: none;
padding: 0;
border: 1px solid var(--border);
border-radius: 14px;
background: var(--surface-dialog);
color: var(--text-max);
}
.image-editor-dialog::backdrop {
background: var(--overlay-78);
backdrop-filter: blur(4px);
}
.image-editor-panel {
display: grid;
gap: 16px;
padding: 18px;
}
.image-editor-head {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 18px;
}
.image-editor-head h2 {
margin: 0;
}
.image-editor-head p {
margin: 5px 0 0;
color: var(--muted);
}
.image-crop-stage {
display: grid;
place-items: center;
min-height: 360px;
max-height: 58vh;
overflow: hidden;
border: 1px solid var(--border);
border-radius: 10px;
background: var(--surface-black);
}
.image-crop-stage canvas {
display: block;
max-width: 100%;
max-height: 58vh;
cursor: grab;
touch-action: none;
}
.image-crop-stage canvas:active {
cursor: grabbing;
}
.image-editor-controls {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
}
.image-editor-controls label {
display: grid;
gap: 6px;
color: var(--muted);
font-size: .78rem;
}
.image-editor-controls select,
.image-editor-controls input {
width: 100%;
}
.image-editor-actions {
display: flex;
justify-content: flex-end;
gap: 10px;
}
@media (max-width: 680px) {
.image-editor-controls {
grid-template-columns: 1fr;
}
.image-crop-stage {
min-height: 260px;
}
}
/* Wider published page workspace. */
.public-header {
padding-inline: max(20px, calc((100vw - 1180px) / 2));
}
.public-document {
width: min(1180px, calc(100% - 32px));
}
.public-content {
padding: clamp(24px, 4vw, 52px);
}
/* Preview and attachment management */
.preview {
overscroll-behavior: contain;
scrollbar-gutter: stable;
}
.markdown-body img {
display: block;
width: auto;
max-width: 100%;
height: auto;
object-fit: contain;
border-radius: 8px;
}
.workspace.view-preview .markdown-body img {
max-height: calc(100vh - 210px);
}
.note-card-wrap {
position: relative;
border: 1px solid var(--border);
border-radius: 12px;
background: var(--surface);
overflow: hidden;
}
.note-card-wrap .note-card {
border: 0;
border-radius: 0;
}
.protect-badge,
.file-flag {
display: inline-flex;
padding: 3px 7px;
border: 1px solid var(--border-strong);
border-radius: 999px;
color: var(--muted);
font-size: .68rem;
white-space: nowrap;
}
.file-flag.detached {
border-color: var(--danger-a45);
color: var(--danger);
}
.note-delete-button {
width: 100%;
min-height: 36px;
border: 0;
border-top: 1px solid color-mix(in srgb, var(--danger) 28%, var(--border));
background: var(--danger-subtle-bg);
color: var(--danger-button-text);
font-weight: 650;
}
.note-delete-button:hover {
background: var(--danger-subtle-hover);
}
.dialog-check {
display: flex;
align-items: center;
gap: 9px;
color: var(--muted);
font-size: .82rem;
}
.dialog-check input {
width: auto;
min-height: auto;
}
.footer-link {
border: 0;
background: transparent;
color: var(--muted);
padding: 0;
font-size: inherit;
text-decoration: underline;
text-underline-offset: 2px;
}
.files-dialog {
overflow: hidden;
}
.files-panel {
grid-template-rows: auto minmax(0, 1fr);
max-height: calc(100vh - 28px);
}
.files-list {
overflow-y: auto;
overscroll-behavior: contain;
scrollbar-gutter: stable;
}
.files-head {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 18px;
}
.files-head h2,
.files-head p {
margin: 0;
}
.files-head p {
margin-top: 5px;
color: var(--muted);
font-size: .8rem;
}
.files-list {
display: grid;
gap: 9px;
overflow: auto;
min-height: 80px;
}
.file-row {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 12px;
padding: 12px;
border: 1px solid var(--border);
border-radius: 9px;
background: var(--control-bg);
}
.file-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-weight: 650;
}
.file-meta {
margin-top: 4px;
color: var(--muted-2);
font-size: .72rem;
}
.file-actions {
display: flex;
justify-content: flex-end;
gap: 6px;
}
.file-actions button {
border: 1px solid var(--border);
border-radius: 6px;
background: var(--surface-2);
color: var(--text);
padding: 0 8px;
font-size: .72rem;
}
@media (max-width: 620px) {
.file-row {
grid-template-columns: 1fr;
}
.file-actions {
justify-content: flex-start;
}
}
.files-panel {
min-height: 0;
height: min(590px, calc(100vh - 28px));
}
.files-list {
align-content: start;
}
.file-row {
align-items: start;
}
.file-row-main {
min-width: 0;
}
.file-actions {
align-items: center;
align-self: start;
flex-wrap: nowrap;
}
.file-actions button {
min-height: 34px;
height: 34px;
white-space: nowrap;
}
.file-code {
grid-column: 1 / -1;
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 8px;
align-items: stretch;
}
.file-code[hidden] {
display: none;
}
.file-code textarea {
width: 100%;
min-height: 76px;
max-height: 150px;
resize: vertical;
box-sizing: border-box;
font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
.file-code button {
align-self: stretch;
min-width: 74px;
}
.file-delete {
border-color: var(--danger-border) !important;
background: var(--danger-subtle-bg) !important;
color: var(--danger-button-text) !important;
}
.file-delete:hover {
background: var(--danger-subtle-hover) !important;
}
@media (max-width: 760px) {
.file-actions {
flex-wrap: wrap;
justify-content: flex-start;
}
.file-code {
grid-template-columns: 1fr;
}
}
.notes-toolbar {
display: flex;
align-items: center;
gap: 10px;
margin-top: 18px;
padding-bottom: 14px;
border-bottom: 1px solid var(--border);
}
.notes-toolbar__label {
color: var(--muted);
font-size: .82rem;
font-weight: 600;
}
.workspace-actions {
display: flex;
align-items: center;
gap: 10px;
}
.notes-view-switch {
display: inline-flex;
padding: 3px;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--surface);
}
.notes-view-switch button {
min-height: 32px;
padding: 0 11px;
border: 0;
border-radius: 6px;
background: transparent;
color: var(--muted);
}
.notes-view-switch button.active {
background: var(--surface-3);
color: var(--text);
}
.note-card {
display: block;
min-width: 0;
}
.note-card-title {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 10px;
min-width: 0;
}
.note-card-title h3 {
min-width: 0;
overflow-wrap: anywhere;
word-break: break-word;
line-height: 1.4;
}
.note-card p {
overflow-wrap: anywhere;
}
.notes-table {
display: block;
padding-top: 20px;
}
.notes-table-scroll {
width: 100%;
overflow-x: auto;
border: 1px solid var(--border);
border-radius: 10px;
background: var(--surface);
}
.notes-table table {
width: 100%;
min-width: 980px;
border-collapse: collapse;
}
.notes-table th,
.notes-table td {
padding: 13px 15px;
border-bottom: 1px solid var(--border);
text-align: left;
vertical-align: middle;
}
.notes-table th {
color: var(--muted);
font-size: .72rem;
text-transform: uppercase;
letter-spacing: .05em;
}
.notes-table tbody tr:last-child td {
border-bottom: 0;
}
.notes-table tbody tr:hover {
background: var(--surface-2);
}
.note-table-link {
display: block;
max-width: 52ch;
color: var(--text);
font-weight: 650;
text-decoration: none;
overflow-wrap: anywhere;
}
.note-table-link:hover {
text-decoration: underline;
}
.note-status {
color: var(--muted);
font-size: .75rem;
}
.notes-table-actions {
width: 1%;
white-space: nowrap;
text-align: right !important;
}
.note-delete-button--inline {
width: auto;
min-height: 32px;
padding: 0 10px;
border: 1px solid var(--danger-border);
border-radius: 6px;
}
@media (max-width: 700px) {
.workspace-top {
align-items: flex-start;
}
.workspace-actions {
align-items: stretch;
flex-direction: column-reverse;
}
.notes-view-switch button {
flex: 1;
}
}
.note-card-meta {
display: grid;
gap: 5px;
margin-top: 28px;
color: var(--muted);
font-size: .75rem;
}
.note-card p {
margin-top: 0;
}
.note-author {
color: var(--muted);
overflow-wrap: anywhere;
}
.note-delete-button:disabled {
cursor: not-allowed;
color: var(--muted-2);
opacity: .55;
}
.notes-view-switch button {
cursor: pointer;
}
.notes-view-switch button.active {
cursor: default;
}
/* Preview editing and source line numbers. */
.preview {
position: relative;
padding: 12px 24px 12px 62px;
line-height: 1.32;
}
.preview-source-line {
position: relative;
min-height: 1.32em;
}
.preview-source-line::before {
content: attr(data-source-line);
position: absolute;
top: 0;
left: var(--preview-line-left, -50px);
width: 32px;
color: var(--gutter-text);
text-align: right;
font: 400 .72rem/1.32 ui-monospace, SFMono-Regular, Consolas, monospace;
user-select: none;
}
.preview-editable {
border-radius: 4px;
outline: none;
cursor: text;
user-select: text;
-webkit-user-select: text;
}
.preview-editable[contenteditable="true"] {
caret-color: auto;
}
.preview-editable:hover {
background: var(--wash-subtle);
}
.preview-editable:focus {
background: var(--accent-a08);
box-shadow: 0 0 0 1px var(--accent-a25);
}
.markdown-body p {
margin: .18em 0;
}
.markdown-body h1,
.markdown-body h2,
.markdown-body h3 {
margin: .48em 0 .18em;
}
.markdown-body blockquote {
margin: .3em 0;
}
.markdown-body ul,
.markdown-body ol {
margin: .22em 0;
}
.compact-editor .preview {
line-height: 1.24;
}
.hide-preview-line-numbers .preview {
padding-left: 24px;
}
.hide-preview-line-numbers .preview-source-line::before {
display: none;
}
.markdown-body .table-wrap {
overflow-x: auto;
margin: .7em 0;
}
.markdown-body table {
width: 100%;
border-collapse: collapse;
}
.markdown-body th,
.markdown-body td {
padding: .55em .7em;
border: 1px solid var(--border);
vertical-align: top;
}
.markdown-body th {
background: var(--surface-2);
color: var(--text);
}
.markdown-body mark {
padding: .05em .18em;
border-radius: 3px;
background: var(--warning-bg);
color: var(--warning-text);
}
.markdown-body sub,
.markdown-body sup {
line-height: 0;
}
.markdown-body dl {
margin: .7em 0;
}
.markdown-body dt {
font-weight: 750;
}
.markdown-body dd {
margin: .25em 0 .65em 1.5em;
color: var(--text-subtle);
}
/* Task-list layout. Keep the checkbox in the same marker gutter as a bullet. */
.markdown-body .task-list-item {
position: relative;
display: block;
min-height: 1.32em;
margin: 0;
padding: 0;
line-height: 1.32;
list-style: none;
}
.markdown-body .task-checkbox {
position: absolute;
top: 0;
left: -1.45em;
appearance: none;
box-sizing: border-box;
width: 1em;
min-width: 1em;
max-width: 1em;
height: 1em;
min-height: 1em;
max-height: 1em;
margin: .14em 0 0;
padding: 0;
border: 1px solid var(--border-muted);
border-radius: 2px;
background: var(--surface-2);
box-shadow: none;
cursor: pointer;
}
.markdown-body .task-checkbox:checked {
border-color: var(--accent);
background-color: var(--accent);
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M2 6.5 4.7 9 10 3'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
background-size: .78em .78em;
}
.markdown-body .task-checkbox:focus {
outline: none;
}
.markdown-body .task-checkbox:focus-visible {
box-shadow: 0 0 0 2px var(--accent-a30);
}
.markdown-body .task-list-item>.list-item-content {
display: block;
min-width: 0;
margin: 0;
padding: 0;
line-height: inherit;
}
.markdown-body .task-list-item>ul,
.markdown-body .task-list-item>ol {
min-width: 0;
}
.compact-editor .markdown-body .task-list-item {
min-height: 1.24em;
line-height: 1.24;
}
.markdown-body .footnotes {
margin-top: 1.5em;
color: var(--muted);
font-size: .88em;
}
.markdown-body .footnotes ol {
padding-left: 1.5em;
}
.markdown-body .footnote-backref {
text-decoration: none;
}
.shortcuts-panel {
width: 100%;
}
.shortcut-grid {
display: grid;
grid-template-columns: max-content 1fr;
gap: 10px 18px;
align-items: center;
}
.shortcut-grid kbd {
padding: 5px 8px;
border: 1px solid var(--border-strong);
border-bottom-width: 2px;
border-radius: 6px;
background: var(--surface-inset);
color: var(--text-bright);
font: 600 .76rem/1.2 ui-monospace, SFMono-Regular, Consolas, monospace;
}
.shortcut-grid span {
color: var(--code-text-soft);
font-size: .82rem;
}
@media (max-width: 520px) {
.shortcut-grid {
grid-template-columns: 1fr;
gap: 5px;
}
.shortcut-grid span {
margin-bottom: 7px;
}
}
.footer-left,
.footer-right {
display: flex;
align-items: center;
gap: 6px;
min-width: 0;
}
.footer-status.status {
min-height: 0;
padding: 0;
font-size: inherit;
}
.footer-connection-block {
display: inline-flex;
align-items: center;
gap: 4px;
}
:is(.connection-details, .mobile-connection-details) {
position: relative;
}
:is(.connection-details, .mobile-connection-details)>summary {
display: inline-flex;
align-items: center;
gap: 7px;
color: var(--muted-2);
cursor: pointer;
list-style: none;
}
:is(.connection-details, .mobile-connection-details)>summary::-webkit-details-marker {
display: none;
}
.connection-details__chevron {
font-size: .68rem;
transition: transform .16s ease;
}
.connection-details[open] .connection-details__chevron {
transform: rotate(180deg);
}
.connection-diagnostics-popover {
position: absolute;
z-index: 55;
left: 0;
bottom: calc(100% + 9px);
width: min(400px, calc(100vw - 24px));
padding: 12px;
border: 1px solid var(--border-strong);
border-radius: 10px;
background: var(--surface-card);
box-shadow: 0 16px 40px var(--shadow-45);
color: var(--text);
font-family: inherit;
white-space: normal;
}
.connection-diagnostics-popover>strong {
display: block;
margin-bottom: 9px;
font-size: .78rem;
}
.connection-diagnostics-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 6px;
margin: 0;
}
.connection-diagnostics-grid>div {
min-width: 0;
padding: 7px 8px;
border: 1px solid var(--border);
border-radius: 7px;
background: var(--surface-inset);
}
.connection-diagnostics-grid__wide {
grid-column: 1 / -1;
}
.connection-diagnostics-grid dt {
margin: 0 0 3px;
color: var(--muted);
font-size: .62rem;
font-weight: 700;
letter-spacing: .05em;
text-transform: uppercase;
}
.connection-diagnostics-grid dd {
overflow-wrap: anywhere;
margin: 0;
color: var(--text);
font-family: inherit;
font-size: .7rem;
font-weight: 600;
line-height: 1.35;
}
:is(.connection-details, .mobile-connection-details):is(.is-quality-excellent, .is-quality-good) [data-connection-diagnostic="quality"] {
color: var(--success);
}
:is(.connection-details, .mobile-connection-details).is-quality-degraded [data-connection-diagnostic="quality"] {
color: var(--warning);
}
:is(.connection-details, .mobile-connection-details).is-quality-poor [data-connection-diagnostic="quality"] {
color: var(--danger);
}
.markdown-more {
position: relative;
}
.markdown-more>summary,
.pad-page .toolbar-action {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 34px;
padding: 0 9px;
border: 1px solid transparent;
border-radius: 7px;
color: var(--text-tertiary);
font-size: .78rem;
font-weight: 600;
line-height: 1;
white-space: nowrap;
list-style: none;
cursor: pointer;
}
.markdown-more>summary::-webkit-details-marker {
display: none;
}
.markdown-more>summary:hover,
.markdown-more[open]>summary {
border-color: var(--border);
background: var(--surface-2);
color: var(--text);
}
.markdown-more-menu {
position: absolute;
top: calc(100% + 8px);
left: 0;
z-index: 30;
display: grid;
grid-template-columns: repeat(2, minmax(120px, 1fr));
gap: 4px;
width: 290px;
padding: 8px;
border: 1px solid var(--border-strong);
border-radius: 9px;
background: var(--surface-raised);
box-shadow: 0 14px 40px var(--shadow-40);
}
.editor-toolbar .markdown-more-menu button {
justify-content: flex-start;
text-align: left;
}
.hljs {
color: var(--dialog-text);
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-literal {
color: var(--syntax-keyword);
}
.hljs-string,
.hljs-attr {
color: var(--syntax-string);
}
.hljs-number,
.hljs-symbol {
color: var(--syntax-number);
}
.hljs-comment {
color: var(--muted-2);
font-style: italic;
}
.public-content .task-checkbox {
pointer-events: auto;
}
@media (max-width:720px) {
.footer-left,
.footer-right {
flex-wrap: wrap
}
.markdown-more-menu {
position: fixed;
left: 12px;
right: 12px;
top: auto;
bottom: 58px;
width: auto;
}
}
.public-task-toggle {
display: inline-flex;
align-items: center;
gap: 7px;
color: var(--muted);
font-size: .76rem;
white-space: nowrap;
}
.public-task-toggle input {
width: 15px;
min-height: 15px;
height: 15px;
margin: 0;
accent-color: var(--accent);
}
.public-page .preview-source-line {
cursor: default;
}
.public-page .task-checkbox:not(:disabled) {
cursor: pointer;
}
.public-page .task-checkbox:disabled {
cursor: not-allowed;
opacity: .55;
}
.identity-actions,
.identity-links {
display: flex;
gap: 10px;
align-items: center;
flex-wrap: wrap;
}
.identity-actions .primary-button {
flex: 1 0 100%;
}
.identity-panel__close {
position: absolute;
top: 14px;
right: 14px;
}
.auth-panel {
display: grid;
gap: 12px;
padding-top: 14px;
border-top: 1px solid var(--border);
}
.auth-panel h3 {
margin: 0;
}
.auth-panel label {
display: grid;
gap: 6px;
}
/* Account footer and authentication dialog. */
.home-footer {
width: min(1040px, calc(100% - 32px));
margin: auto auto 24px;
padding-top: 24px;
color: var(--muted);
font-size: .78rem;
}
.home-footer__inner {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
padding-top: 18px;
border-top: 1px solid var(--border);
}
.home-footer__account {
display: inline-flex;
min-width: 0;
align-items: center;
flex-wrap: wrap;
gap: 8px;
}
.home-footer__user {
display: grid;
min-width: 0;
max-width: min(360px, 42vw);
gap: 2px;
color: var(--text);
font-weight: 600;
line-height: 1.2;
text-align: left;
}
.home-footer__user-primary,
.home-footer__user-secondary {
display: block;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.home-footer__user-secondary {
color: var(--muted);
font-size: .68rem;
font-weight: 400;
}
.home-footer__user-secondary[hidden] {
display: none;
}
.home-footer__author {
margin-left: auto;
}
.footer-action {
min-height: 34px;
padding: 0 12px;
border: 1px solid var(--border);
border-radius: 8px;
background: transparent;
color: var(--muted);
font: inherit;
cursor: pointer;
}
.footer-action:hover {
border-color: var(--border-strong);
background: var(--surface-2);
color: var(--text);
}
.footer-action--primary {
border-color: color-mix(in srgb, var(--accent) 30%, var(--border));
color: var(--footer-accent);
}
.app-dialog {
width: min(440px, calc(100% - 28px));
padding: 0;
border: 0;
background: transparent;
}
.app-dialog::backdrop {
background: var(--overlay-72);
backdrop-filter: blur(3px);
}
.identity-panel {
position: relative;
display: grid;
gap: 18px;
width: 100%;
padding: 28px;
}
#profile-dialog {
width: min(820px, calc(100% - 32px));
max-width: 820px;
max-height: min(90dvh, 760px);
}
#profile-dialog .identity-panel {
grid-template-columns: repeat(2, minmax(0, 1fr));
column-gap: 20px;
max-height: min(90dvh, 760px);
overflow-y: auto;
scrollbar-gutter: stable;
}
#profile-dialog .identity-panel__header,
#profile-dialog .identity-fields,
#profile-dialog .profile-actions,
#profile-dialog .form-message {
grid-column: 1 / -1;
}
#profile-dialog .identity-fields {
grid-template-columns: repeat(2, minmax(0, 1fr));
align-items: start;
column-gap: 18px;
}
#profile-dialog .profile-theme-field,
#profile-dialog .profile-suggestion {
grid-column: 1 / -1;
}
.profile-actions {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 12px;
}
.profile-actions:has(#profile-delete[hidden]) {
grid-template-columns: 1fr;
}
.profile-actions>button {
width: 100%;
}
.profile-actions .primary-button {
margin-top: 0;
}
.identity-panel__header {
padding-right: 38px;
}
.identity-panel__header h2 {
margin: 0 0 7px;
}
.identity-panel__header p {
margin: 0;
}
.identity-fields {
display: grid;
gap: 14px;
}
.identity-fields label {
display: grid;
gap: 7px;
color: var(--muted);
font-size: .78rem;
}
.modal-close {
position: absolute;
top: 12px;
right: 12px;
display: grid;
width: 34px;
height: 34px;
padding: 0;
place-items: center;
border: 1px solid transparent;
border-radius: 8px;
background: transparent;
color: var(--muted);
font: 400 1.45rem/1 system-ui;
cursor: pointer;
}
.modal-close:hover {
border-color: var(--border);
background: var(--surface-2);
color: var(--text);
}
.identity-links {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
}
.identity-links .text-button {
padding: 2px 0;
}
.form-message.success {
color: var(--success-soft);
}
@media (max-width: 600px) {
.home-footer__inner {
align-items: stretch;
flex-direction: column;
text-align: center;
}
.home-footer__account {
justify-content: center;
row-gap: 8px;
}
.home-footer__user {
flex: 1 1 100%;
max-width: 100%;
text-align: center;
}
.home-footer__author {
margin-left: 0;
}
.identity-panel {
padding: 24px 20px 20px;
}
#profile-dialog {
width: min(440px, calc(100% - 24px));
}
#profile-dialog .identity-panel,
#profile-dialog .identity-fields,
.profile-actions {
grid-template-columns: 1fr;
}
#profile-dialog .identity-fields>*,
#profile-dialog .profile-actions,
#profile-dialog .form-message {
grid-column: 1;
}
.identity-links {
align-items: flex-start;
flex-direction: column;
}
}
.home-footer__account[hidden],
.footer-action[hidden],
.identity-links [hidden],
.identity-fields [hidden],
.auth-panel[hidden] {
display: none !important;
}
.system-dialog-panel {
position: relative;
}
.dialog-actions {
display: flex;
justify-content: flex-end;
gap: 10px;
margin-top: 4px;
}
.secondary-button,
.danger-button {
min-height: 42px;
padding: 0 16px;
border: 1px solid var(--border);
border-radius: 9px;
background: var(--surface-2);
color: var(--text);
font: inherit;
cursor: pointer;
}
.secondary-button:hover {
border-color: var(--muted);
}
.danger-button {
border-color: var(--danger-border);
background: var(--danger-bg);
color: var(--danger-button-text);
}
.danger-button:hover {
background: var(--danger-hover);
}
/* Native hidden must win over component display declarations. */
[hidden] {
display: none !important;
}
.identity-panel #auth-panel:not([hidden]) {
margin-top: 4px;
}
.identity-panel #nickname:disabled {
opacity: .55;
cursor: not-allowed;
}
#resources-dialog {
width: min(760px, calc(100% - 28px));
max-width: 760px;
}
.resources-panel {
position: relative;
box-sizing: border-box;
width: 100%;
min-width: 0;
max-height: 80vh;
overflow-x: hidden;
overflow-y: auto;
}
.resources-panel__header {
min-width: 0;
padding-right: 38px;
}
.resources-panel__header h2 {
margin: 0 0 7px;
overflow-wrap: anywhere;
}
.resources-panel__header p {
margin: 0;
overflow-wrap: anywhere;
}
.resources-list {
display: grid;
min-width: 0;
gap: 10px;
margin-top: 18px;
}
.resource-row {
display: flex;
min-width: 0;
justify-content: space-between;
gap: 16px;
padding: 12px;
border: 1px solid var(--border);
border-radius: 10px;
}
.resource-row> :first-child {
min-width: 0;
}
.resource-row a {
display: block;
max-width: 100%;
font-weight: 700;
overflow-wrap: anywhere;
word-break: break-word;
}
.resource-row small {
display: block;
max-width: 100%;
margin-top: 4px;
color: var(--muted-2);
overflow-wrap: anywhere;
}
.resource-actions {
display: flex;
flex: 0 0 auto;
gap: 8px;
flex-wrap: wrap;
}
.resource-actions button {
padding: 7px 10px;
}
@media (max-width:640px) {
.resource-row {
align-items: flex-start;
flex-direction: column
}
.resource-actions {
width: 100%
}
}
.resource-main {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
width: 100%;
}
.resource-inline {
width: 100%;
margin-top: 12px;
padding-top: 12px;
border-top: 1px solid var(--border);
}
.resource-password-form label {
display: grid;
gap: 6px;
font-size: .8rem;
}
.resource-password-form input {
width: 100%;
}
.resource-inline-help {
margin: 6px 0 0;
color: var(--muted);
font-size: .75rem;
}
.resource-inline-message {
margin: 8px 0 0;
}
.resource-inline-actions {
display: flex;
justify-content: flex-end;
gap: 8px;
margin-top: 10px;
}
.resource-delete-confirm>p:first-child {
margin: 0;
}
@media (max-width: 640px) {
.resource-main {
align-items: flex-start;
flex-direction: column;
}
.resource-actions {
width: 100%;
}
}
.resource-row {
align-items: stretch;
flex-direction: column;
}
/* Stable scrolling and collapsible Markdown sections. */
.editor-shell {
width: 100%;
max-width: 100%;
}
.editor-shell textarea {
min-width: 0;
max-width: 100%;
overscroll-behavior: contain;
overflow-anchor: none;
}
.line-gutter {
position: relative;
z-index: 5;
flex: none;
}
.preview,
.editor-shell textarea {
scrollbar-gutter: stable;
}
.markdown-details {
margin: .65em 0;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--wash-faint);
}
.markdown-details>summary {
padding: .55em .8em;
color: var(--text);
font-weight: 650;
cursor: pointer;
user-select: none;
}
.markdown-details[open]>summary {
border-bottom: 1px solid var(--border);
}
.markdown-details__content {
padding: .35em .8em .7em;
}
.markdown-details__content> :first-child {
margin-top: 0;
}
.markdown-details__content> :last-child {
margin-bottom: 0;
}
/* Full-height editor: keep header/footer visible and scroll only the work area. */
.pad-page {
height: 100dvh;
min-height: 0;
overflow: hidden;
display: grid;
grid-template-rows: auto minmax(0, 1fr);
}
.pad-page .app-header {
min-width: 0;
}
.pad-page .editor-layout {
height: auto;
min-height: 0;
overflow: hidden;
}
.pad-page .editor-panel {
min-height: 0;
overflow: hidden;
}
.pad-page .workspace {
min-height: 0;
overflow: hidden;
}
.pad-page .editor-column,
.pad-page .preview-column,
.pad-page .editor-shell {
min-height: 0;
overflow: hidden;
}
.pad-page .editor-shell textarea,
.pad-page .preview {
height: 100%;
min-height: 0;
overflow: auto;
}
.pad-page .editor-footer {
position: relative;
z-index: 8;
flex: none;
background: var(--surface);
}
@media (max-width: 980px) {
.pad-page .editor-layout {
height: auto;
}
}
/* A collapsible section has one source-line marker; its rendered Markdown does not repeat line numbers inside. */
.markdown-details__content .preview-source-line::before {
display: none;
}
.markdown-details__content {
overflow: visible;
}
.markdown-details__content pre {
overflow: auto;
}
/* Ephemeral room presence and chat */
.room-details {
position: relative;
display: inline-block;
}
.room-details>summary {
display: inline-flex;
align-items: center;
gap: 6px;
cursor: pointer;
color: var(--text);
list-style: none;
}
.room-details>summary::-webkit-details-marker {
display: none;
}
.chat-unread {
min-width: 17px;
height: 17px;
padding: 0 5px;
border-radius: 999px;
background: var(--accent);
color: var(--on-accent);
font-size: 10px;
line-height: 17px;
text-align: center;
}
.room-popover {
position: absolute;
bottom: calc(100% + 10px);
left: 0;
z-index: 40;
display: grid;
grid-template-columns: 150px minmax(280px, 380px);
width: min(560px, calc(100vw - 24px));
max-height: min(430px, 70vh);
overflow: hidden;
border: 1px solid var(--border);
border-radius: 10px;
background: var(--surface);
box-shadow: 0 18px 50px var(--shadow-38);
color: var(--text);
}
.room-users {
padding: 14px;
overflow: auto;
border-right: 1px solid var(--border);
}
.room-users strong,
.room-chat__head strong {
display: block;
margin-bottom: 8px;
font-size: .75rem;
}
.room-users ul {
display: grid;
gap: 7px;
margin: 0;
padding: 0;
list-style: none;
}
.room-users li {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: var(--muted);
}
.room-chat {
display: grid;
grid-template-rows: auto minmax(120px, 1fr) auto;
min-height: 280px;
}
.room-chat__head {
padding: 12px 14px 8px;
border-bottom: 1px solid var(--border);
}
.room-chat__head strong {
margin: 0;
}
.room-chat__head span {
color: var(--muted-2);
font-size: .66rem;
}
.chat-messages {
display: flex;
flex-direction: column;
gap: 8px;
overflow-y: auto;
padding: 12px 14px;
}
.chat-message {
margin: 0;
overflow-wrap: anywhere;
line-height: 1.35;
}
.chat-message strong {
margin-right: 6px;
color: var(--text);
}
.chat-message span {
color: var(--muted);
}
.chat-empty {
margin: auto;
color: var(--muted-2);
}
.chat-form {
display: grid;
grid-template-columns: 1fr auto;
gap: 8px;
padding: 10px;
border-top: 1px solid var(--border);
}
.chat-form input {
min-width: 0;
padding: 8px 10px;
border: 1px solid var(--border);
border-radius: 6px;
background: var(--surface-2);
color: var(--text);
}
.chat-form button {
padding: 8px 12px;
border: 1px solid var(--border);
border-radius: 6px;
background: var(--accent);
color: var(--on-accent);
cursor: pointer;
}
@media (max-width: 700px) {
.room-popover {
grid-template-columns: 1fr;
left: auto;
right: -120px;
}
.room-users {
max-height: 110px;
border-right: 0;
border-bottom: 1px solid var(--border);
}
}
.room-user {
display: flex;
align-items: center;
gap: 8px;
min-width: 0;
}
.room-user__dot {
width: 9px;
height: 9px;
flex: 0 0 auto;
border-radius: 50%;
background: var(--owner, var(--accent));
box-shadow: 0 0 0 2px color-mix(in srgb, var(--owner, var(--accent)) 18%, transparent);
}
.room-user>span:last-child {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.chat-message a {
color: var(--accent);
text-decoration: underline;
text-underline-offset: 2px;
overflow-wrap: anywhere;
}
.chat-message a:hover {
filter: brightness(1.15);
}
/* Sharing panel */
.share-panel {
display: grid;
gap: 18px;
}
.share-panel-head {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 16px;
}
.share-panel-head h3,
.share-section h4 {
margin: 0;
}
.share-panel-head p {
margin: 4px 0 0;
color: var(--muted);
}
.share-section {
display: grid;
gap: 10px;
border: 1px solid var(--border);
}
.share-form-grid {
display: grid;
grid-template-columns: minmax(220px, 1fr) minmax(140px, auto) auto;
gap: 10px;
align-items: end;
}
.share-form-grid label {
display: grid;
gap: 5px;
}
.share-link-form {
grid-template-columns: minmax(180px, 1fr) minmax(140px, auto) minmax(110px, 140px) auto auto;
}
.share-forever {
display: flex !important;
align-items: center;
gap: 7px !important;
min-height: 38px;
white-space: nowrap;
}
.share-forever input {
width: auto;
}
.share-list {
display: grid;
gap: 8px;
}
.share-list-row {
display: grid;
grid-template-columns: minmax(180px, 1fr) auto auto;
gap: 8px;
align-items: center;
border-top: 1px solid var(--border);
}
.share-list-row:first-child {
border-top: 0;
}
.share-list-row strong,
.share-list-row small {
display: block;
overflow-wrap: anywhere;
}
.share-list-row small {
color: var(--muted);
margin-top: 2px;
}
.share-role {
color: var(--muted);
font-size: .82rem;
}
.share-link-row {
grid-template-columns: minmax(170px, 1fr) minmax(130px, auto) 100px auto auto auto;
}
.share-link-row input,
.share-link-row select {
min-width: 0;
}
.share-empty {
margin: 0;
color: var(--muted);
}
@media (max-width:800px) {
.share-form-grid,
.share-link-form,
.share-list-row,
.share-link-row {
grid-template-columns: 1fr;
align-items: stretch;
}
.share-panel-head {
flex-direction: column;
}
.share-panel-head>button {
align-self: flex-end;
}
}
/* Share dialog */
.share-dialog {
width: min(900px, calc(100% - 28px));
max-width: 900px;
max-height: min(88dvh, 860px);
padding: 0;
overflow: hidden;
}
.share-dialog::backdrop {
background: var(--overlay-68);
backdrop-filter: blur(3px);
}
.share-dialog .share-panel {
display: grid;
grid-template-rows: auto minmax(0, 1fr) auto;
max-height: min(88dvh, 860px);
gap: 0;
}
.share-dialog .share-panel-head {
padding: 20px 22px 16px;
border-bottom: 1px solid var(--border);
background: var(--surface);
}
.share-dialog .share-panel-head strong {
color: var(--text);
}
.share-dialog-body {
display: grid;
gap: 16px;
padding: 18px 22px 22px;
overflow-y: auto;
background: color-mix(in srgb, var(--surface) 92%, var(--theme-shadow-mix));
}
.share-dialog-footer {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
min-height: 64px;
padding: 12px 22px;
border-top: 1px solid var(--border);
background: var(--surface);
}
.share-dialog-footer .form-message {
margin: 0;
}
.dialog-close {
width: 34px;
height: 34px;
flex: 0 0 auto;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--surface-2);
color: var(--muted);
font-size: 1.35rem;
line-height: 1;
cursor: pointer;
}
.dialog-close:hover {
color: var(--text);
border-color: var(--border-strong);
}
.share-section {
padding: 16px;
background: var(--surface);
}
.share-section-head h4 {
margin: 0;
}
.share-section-head p {
margin: 4px 0 2px;
color: var(--muted);
font-size: .82rem;
}
.share-form-grid label>span:not(.sr-only),
.share-link-row label>span:not(.sr-only) {
color: var(--muted);
font-size: .76rem;
}
.share-dialog select {
width: 100%;
min-height: 42px;
padding: 0 38px 0 12px;
border: 1px solid var(--border-strong);
border-radius: 8px;
background-color: var(--surface-toolbar);
color: var(--text);
appearance: none;
background-image: linear-gradient(45deg, transparent 50%, var(--select-arrow) 50%), linear-gradient(135deg, var(--select-arrow) 50%, transparent 50%);
background-position: calc(100% - 16px) 17px, calc(100% - 11px) 17px;
background-size: 5px 5px, 5px 5px;
background-repeat: no-repeat;
cursor: pointer;
}
.share-dialog select:hover {
border-color: var(--select-border);
}
.share-dialog select:focus {
border-color: var(--focus);
box-shadow: 0 0 0 3px var(--focus-ring);
outline: none;
}
.share-dialog input[type="text"],
.share-dialog input[type="number"] {
min-height: 42px;
border-radius: 8px;
padding: 0 12px;
}
.share-hours-field {
display: grid;
grid-template-columns: minmax(70px, 1fr) auto;
align-items: center;
min-height: 42px;
border: 1px solid var(--border-strong);
border-radius: 8px;
background: var(--surface-toolbar);
overflow: hidden;
}
.share-hours-field:focus-within {
border-color: var(--focus);
box-shadow: 0 0 0 3px var(--focus-ring);
}
.share-hours-field input {
width: 100%;
min-width: 0;
border: 0 !important;
background: transparent;
box-shadow: none !important;
outline: 0 !important;
}
.share-hours-field span {
padding: 0 11px;
color: var(--muted);
font-size: .76rem;
}
.share-list-row {
min-height: 58px;
padding: 10px 0;
}
.share-list-identity {
display: flex;
align-items: center;
gap: 10px;
min-width: 0;
}
.share-avatar {
display: grid;
place-items: center;
width: 34px;
height: 34px;
flex: 0 0 auto;
border-radius: 50%;
background: color-mix(in srgb, var(--accent) 20%, var(--surface-2));
color: var(--accent-pale);
font-weight: 700;
}
.share-list-identity>div,
.share-link-info {
min-width: 0;
}
.share-row-actions {
display: flex;
gap: 7px;
justify-content: flex-end;
}
.compact-button {
min-height: 36px;
padding: 7px 11px;
}
@media (max-width: 800px) {
.share-dialog {
width: calc(100% - 16px);
max-height: calc(100dvh - 16px);
}
.share-dialog .share-panel {
max-height: calc(100dvh - 16px);
}
.share-dialog .share-panel-head,
.share-dialog-body,
.share-dialog-footer {
padding-left: 14px;
padding-right: 14px;
}
.share-dialog-footer {
align-items: stretch;
flex-direction: column;
}
.share-dialog-footer>button {
align-self: flex-end;
}
.share-row-actions {
justify-content: stretch;
}
.share-row-actions button {
flex: 1;
}
}
/* Refined sharing dialog and shared-resource attribution. */
.share-dialog {
border: 1px solid var(--border-strong);
border-radius: 18px;
background: var(--surface);
box-shadow: 0 28px 90px var(--shadow-58);
}
.share-dialog .share-panel {
overflow: hidden;
border-radius: inherit;
}
.share-dialog .share-panel-head {
border-radius: 18px 18px 0 0;
}
.share-dialog-footer {
border-radius: 0 0 18px 18px;
}
.share-dialog-body {
scrollbar-gutter: stable;
}
.share-section {
border-radius: 12px;
box-shadow: inset 0 1px 0 var(--wash-subtle);
}
.resource-copy {
min-width: 0;
}
.resource-title-line {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px;
min-width: 0;
}
.resource-title-line a {
min-width: 0;
}
.resource-shared-badge {
display: inline-flex;
align-items: center;
min-height: 22px;
padding: 3px 8px;
border: 1px solid color-mix(in srgb, var(--accent) 45%, var(--border));
border-radius: 999px;
background: color-mix(in srgb, var(--accent) 12%, transparent);
color: color-mix(in srgb, var(--accent) 70%, var(--theme-contrast));
font-size: .68rem;
font-weight: 650;
line-height: 1.2;
}
.resource-row--shared {
border-color: color-mix(in srgb, var(--accent) 30%, var(--border));
background: color-mix(in srgb, var(--accent) 4%, transparent);
}
@media (max-width: 640px) {
.share-dialog,
.share-dialog .share-panel,
.share-dialog .share-panel-head,
.share-dialog-footer {
border-radius: 14px;
}
.share-dialog .share-panel-head {
border-radius: 14px 14px 0 0;
}
.share-dialog-footer {
border-radius: 0 0 14px 14px;
}
}
/* Markdown alerts. */
.markdown-body .markdown-alert {
margin: 1em 0;
padding: .8em 1em;
border: 1px solid;
border-left-width: 4px;
border-radius: 8px;
}
.markdown-body .markdown-alert> :first-child {
margin-top: 0;
}
.markdown-body .markdown-alert> :last-child {
margin-bottom: 0;
}
.markdown-body .markdown-alert--success {
border-color: var(--status-success-border);
background: var(--status-success-bg);
}
.markdown-body .markdown-alert--info {
border-color: var(--status-info-border);
background: var(--status-info-bg);
}
.markdown-body .markdown-alert--warning {
border-color: var(--status-warning-border);
background: var(--status-warning-bg);
}
.markdown-body .markdown-alert--danger {
border-color: var(--status-danger-border);
background: var(--status-danger-bg);
}
/* Fenced code line numbers for every language: ```lang=, ```lang=101, ```= or ```=101. */
.markdown-body pre.code-with-lines code {
counter-reset: none;
}
.markdown-body pre.code-with-lines .code-line {
display: block;
min-height: 1.35em;
padding-left: 4.6em;
position: relative;
white-space: pre;
}
.markdown-body pre.code-with-lines .code-line::before {
content: attr(data-line);
position: absolute;
left: 0;
width: 3.4em;
padding-right: .8em;
border-right: 1px solid var(--border);
color: var(--muted-2);
text-align: right;
user-select: none;
}
/* Generated table of contents. */
.markdown-body .markdown-toc {
margin: 1em 0;
padding: .8em 1em;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--surface-2);
}
.markdown-body .markdown-toc ol {
margin: 0;
padding-left: 1.4em;
}
.markdown-body .markdown-toc li {
margin: .25em 0;
}
.markdown-body .markdown-toc .toc-level-2 {
margin-left: 1em;
}
.markdown-body .markdown-toc .toc-level-3 {
margin-left: 2em;
}
.markdown-body .markdown-toc .toc-level-4,
.markdown-body .markdown-toc .toc-level-5,
.markdown-body .markdown-toc .toc-level-6 {
margin-left: 3em;
}
/* Nested Markdown lists keep markers and source-line numbers in separate gutters. */
.markdown-body ul,
.markdown-body ol {
padding-left: 1.75em;
}
.markdown-body .list-source-line::before {
right: auto;
}
.markdown-body .list-item-content {
min-width: 0;
overflow-wrap: anywhere;
word-break: break-word;
}
.markdown-body .contains-task-items>.task-list-item {
list-style: none;
}
/* Keep the editor gutter inside the mobile workspace. */
@media (max-width: 720px) {
.pad-page .editor-shell {
grid-template-columns: 38px minmax(0, 1fr);
min-width: 0;
max-width: 100%;
}
.pad-page .line-gutter {
width: 38px;
min-width: 0;
padding-right: 0;
overflow: hidden;
}
.pad-page .line-gutter div {
padding-right: 6px;
}
.pad-page .owner-labels {
left: 38px;
}
.pad-page.hide-editor-line-numbers .editor-shell {
grid-template-columns: 0 minmax(0, 1fr);
}
}
.emoji-picker {
position: relative;
}
.emoji-picker>summary {
display: flex;
align-items: center;
min-height: 34px;
padding: 0 9px;
border: 1px solid transparent;
border-radius: 7px;
color: var(--text-tertiary);
font-size: .78rem;
list-style: none;
cursor: pointer;
white-space: nowrap;
}
.emoji-picker>summary::-webkit-details-marker {
display: none;
}
.emoji-picker>summary:hover,
.emoji-picker[open]>summary {
border-color: var(--border);
background: var(--surface-2);
color: var(--text);
}
.emoji-picker-panel {
position: absolute;
top: calc(100% + 8px);
left: 0;
z-index: 40;
width: min(360px, calc(100vw - 24px));
padding: 10px;
border: 1px solid var(--border-strong);
border-radius: 10px;
background: var(--surface-raised);
box-shadow: 0 14px 40px var(--shadow-45);
}
.emoji-search {
width: 100%;
min-height: 36px;
margin: 0 0 8px;
}
.emoji-categories {
display: flex;
gap: 3px;
padding-bottom: 7px;
overflow-x: auto;
scrollbar-width: thin;
}
.editor-toolbar .emoji-category,
.editor-toolbar .emoji-item {
display: grid;
place-items: center;
flex: 0 0 auto;
padding: 0;
font-family: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", sans-serif;
}
.editor-toolbar .emoji-category {
width: 31px;
min-height: 31px;
border-color: transparent;
font-size: 1rem;
}
.editor-toolbar .emoji-category[aria-pressed="true"] {
border-color: var(--border-strong);
background: var(--surface-2);
}
.emoji-grid {
display: grid;
grid-template-columns: repeat(8, minmax(0, 1fr));
gap: 3px;
max-height: 290px;
overflow-y: auto;
overscroll-behavior: contain;
}
.editor-toolbar .emoji-item {
width: 100%;
min-height: 38px;
border-color: transparent;
font-size: 1.45rem;
line-height: 1;
}
.editor-toolbar .emoji-item:hover,
.editor-toolbar .emoji-item:focus-visible {
border-color: var(--border);
background: var(--surface-2);
transform: scale(1.08);
}
.emoji-empty {
margin: 18px 0 10px;
color: var(--muted);
text-align: center;
font-size: .82rem;
}
@media (max-width: 720px) {
.emoji-picker-panel {
position: fixed;
left: 12px;
right: 12px;
top: auto;
bottom: 58px;
width: auto;
}
.emoji-grid {
grid-template-columns: repeat(7, minmax(0, 1fr));
max-height: min(45vh, 320px);
}
}
.share-link-info {
display: grid;
gap: 6px;
}
.share-link-inline {
display: grid;
grid-template-columns: minmax(180px, 1fr) auto;
gap: 7px;
align-items: center;
margin-top: 3px;
}
.share-link-inline input {
width: 100%;
min-width: 0;
min-height: 36px;
padding: 0 10px;
border: 1px solid var(--border-strong);
border-radius: 7px;
background: var(--surface-toolbar);
color: var(--text);
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
font-size: .76rem;
}
.share-link-legacy {
color: var(--warning, var(--warning-muted)) !important;
}
@media (max-width: 800px) {
.share-link-inline {
grid-template-columns: 1fr;
}
}
.editor-column-label {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
}
.document-owner-badge {
max-width: 50%;
overflow: hidden;
padding: 2px 8px;
border: 1px solid color-mix(in srgb, var(--owner) 58%, transparent);
border-radius: 999px;
background: color-mix(in srgb, var(--owner) 14%, transparent);
color: var(--text);
font-size: .7rem;
font-weight: 600;
line-height: 1.35;
text-overflow: ellipsis;
white-space: nowrap;
}
.document-owner-badge[hidden] {
display: none;
}
/* Per-character authorship overlay. The textarea remains the editable surface. */
.authorship-layer {
position: absolute;
z-index: 1;
inset: 0 0 0 48px;
overflow: hidden;
padding: 24px;
color: transparent;
font: inherit;
font-size: var(--editor-font-size, 14px);
line-height: inherit;
white-space: pre;
tab-size: 4;
pointer-events: none;
}
.authorship-fragment {
border-radius: 2px;
background: color-mix(in srgb, var(--owner) 18%, transparent);
color: transparent;
}
.editor-shell textarea {
position: relative;
z-index: 3;
background: transparent;
}
.hide-editor-line-numbers .authorship-layer {
left: 0;
}
@media (max-width: 720px) {
.authorship-layer {
left: 42px;
}
.hide-editor-line-numbers .authorship-layer {
left: 0;
}
}
/* Multiple authors can contribute to one line. */
.owner-label-group {
position: absolute;
right: calc(var(--editor-rendered-font-size, 14px) * .57);
display: flex;
max-width: min(calc(var(--editor-rendered-font-size, 14px) * 30), 70%);
gap: calc(var(--editor-rendered-font-size, 14px) * .2857);
overflow: hidden;
transform: translateY(-50%);
white-space: nowrap;
}
.owner-label-group .owner-label {
position: static;
right: auto;
flex: 0 1 auto;
min-width: 0;
max-width: calc(var(--editor-rendered-font-size, 14px) * 10.7143);
transform: none;
}
/* Keep public TOC targets visible below the sticky page header. */
.public-content :is(h1, h2, h3, h4, h5, h6)[id] {
scroll-margin-top: 88px;
}
/* Shared semantic action buttons. Keep legacy class names as aliases. */
.action-button,
.primary-button,
.secondary-button,
.danger-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
min-height: 42px;
padding: 0 16px;
border: 1px solid var(--border);
border-radius: 9px;
font: inherit;
font-weight: 650;
line-height: 1;
text-decoration: none;
cursor: pointer;
transition: background-color .15s, border-color .15s, color .15s;
}
.action-button--primary,
.primary-button {
border-color: var(--accent-border);
background: var(--accent);
color: var(--on-accent);
}
.action-button--primary:hover,
.primary-button:hover {
background: var(--accent-hover);
}
.action-button--secondary,
.secondary-button {
border-color: var(--border-strong);
background: var(--surface-2);
color: var(--text-secondary);
}
.action-button--secondary:hover,
.secondary-button:hover {
border-color: var(--border-neutral);
background: var(--surface-3);
}
.action-button--danger,
.danger-button {
border-color: var(--danger-border);
background: var(--danger-bg);
color: var(--danger-button-text);
}
.action-button--danger:hover,
.danger-button:hover {
background: var(--danger-hover);
}
.action-button.compact-button {
min-height: 36px;
padding: 7px 11px;
}
.file-actions button,
.file-code button {
height: auto;
}
.footer-access {
color: var(--muted, var(--muted-fallback));
font-weight: 600;
}
.profile-suggestion {
margin: 0;
color: var(--muted);
font-size: .82rem;
}
#profile-dialog input[readonly] {
cursor: default;
opacity: .78;
}
.header-navigation {
display: flex;
align-items: center;
margin-left: auto;
}
.header-menu-toggle {
display: none;
}
.header-user-control {
flex: 0 0 auto;
margin-left: auto;
}
.profile-color-field input[type="color"] {
width: 100%;
min-height: 42px;
padding: 4px;
cursor: pointer;
}
.profile-theme-field {
min-width: 0;
margin: 0;
padding: 0;
border: 0;
}
.profile-theme-field legend {
margin-bottom: 8px;
color: var(--text-label);
font-size: .86rem;
font-weight: 750;
}
.theme-options {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px;
}
.theme-option {
position: relative;
display: grid;
grid-template-columns: auto minmax(0, 1fr);
align-items: start;
gap: 10px;
min-width: 0;
padding: 12px;
border: 1px solid var(--border-strong);
border-radius: 10px;
background: var(--surface-2);
cursor: pointer;
}
.theme-option:hover {
border-color: var(--accent-border);
background: var(--surface-3);
}
.theme-option:has(input:checked) {
border-color: var(--accent-border);
background: var(--accent-soft);
box-shadow: 0 0 0 1px var(--accent-a25);
}
.theme-option:has(input:focus-visible) {
outline: 2px solid var(--focus);
outline-offset: 2px;
}
.theme-option input {
width: 1rem;
min-height: auto;
margin: 2px 0 0;
accent-color: var(--accent);
}
.theme-option span,
.theme-option strong,
.theme-option small {
display: block;
min-width: 0;
}
.theme-option strong {
color: var(--text);
font-size: .84rem;
}
.theme-option small {
margin-top: 3px;
color: var(--muted);
font-size: .72rem;
line-height: 1.35;
}
@media (max-width: 520px) {
.theme-options {
grid-template-columns: 1fr;
}
}
/* Keep the view controls visible on Full HD displays using 125% scaling.
Only the formatting group becomes horizontally scrollable. */
@media (min-width: 1500px) and (max-width: 1699px) {
.pad-page .editor-toolbar {
flex-wrap: nowrap;
overflow: visible;
}
.pad-page .toolbar-group {
min-width: 0;
flex: 1 1 auto;
overflow-x: auto;
overflow-y: hidden;
padding-bottom: 2px;
scrollbar-width: thin;
}
.pad-page .toolbar-group:has(>.emoji-picker[open]),
.pad-page .toolbar-group:has(>.markdown-more[open]) {
overflow: visible;
}
.pad-page :is(.editor-controls, .toolbar-action, .line-toggle, .view-switch) {
flex: 0 0 auto;
}
.pad-page .toolbar-fill {
display: none;
}
}
/* Responsive note editor -------------------------------------------------- */
@media (max-width: 1499px) {
.pad-page {
display: flex;
flex-direction: column;
min-width: 0;
height: 100vh;
height: 100dvh;
min-height: 0;
overflow: hidden;
}
.pad-page .app-header {
align-items: stretch;
gap: 10px;
padding: 6px 10px;
}
.pad-page .app-header__main {
min-width: 0;
flex: 1 1 auto;
}
.pad-page .document-heading {
flex: 1;
}
.pad-page .header-user-control {
margin-left: auto;
}
.pad-page .header-navigation {
position: relative;
flex: 0 0 auto;
margin-left: 0;
}
.pad-page .header-menu-toggle {
display: inline-flex;
width: 36px;
min-width: 36px;
height: 36px;
align-items: center;
justify-content: center;
flex-direction: column;
gap: 5px;
padding: 0;
border: 1px solid var(--border-strong);
border-radius: 8px;
background: var(--surface-2);
}
.pad-page .header-menu-toggle span {
width: 18px;
height: 2px;
border-radius: 2px;
background: currentColor;
transition: transform .18s ease, opacity .18s ease;
}
.pad-page .header-menu-toggle[aria-expanded="true"] span:nth-child(1) {
transform: translateY(7px) rotate(45deg);
}
.pad-page .header-menu-toggle[aria-expanded="true"] span:nth-child(2) {
opacity: 0;
}
.pad-page .header-menu-toggle[aria-expanded="true"] span:nth-child(3) {
transform: translateY(-7px) rotate(-45deg);
}
.pad-page .header-actions {
position: absolute;
top: calc(100% + 8px);
right: 0;
z-index: 20;
display: none;
width: min(320px, calc(100vw - 20px));
max-height: min(70dvh, 520px);
align-items: stretch;
flex-direction: column;
gap: 8px;
overflow-y: auto;
padding: 10px;
border: 1px solid var(--border-strong);
border-radius: 10px;
background: var(--surface-inset);
box-shadow: 0 16px 40px var(--shadow-45);
}
.pad-page .header-actions.is-open {
display: flex;
}
.pad-page .header-actions>* {
width: 100%;
flex: 0 0 auto;
}
.pad-page .header-actions .secondary-button,
.pad-page .header-actions .user-chip {
justify-content: flex-start;
}
.pad-page .header-actions .page-settings>summary {
box-sizing: border-box;
display: flex;
width: 100%;
min-height: 36px;
align-items: center;
justify-content: space-between;
}
.pad-page .header-actions .page-settings-menu {
position: static;
width: 100%;
min-width: 0;
margin-top: 8px;
box-shadow: none;
}
.pad-page .header-actions .public-task-toggle {
min-height: 40px;
padding: 8px 10px;
}
.pad-page .editor-layout {
flex: 1 1 0;
width: 100%;
height: 0;
min-height: 0;
}
.pad-page .editor-panel {
height: 100%;
}
.pad-page .editor-toolbar {
display: grid;
grid-template-columns: minmax(0, 1fr) auto auto;
gap: 8px;
min-height: 0;
padding: 8px;
overflow: visible;
}
.pad-page .toolbar-group {
min-width: 0;
overflow-x: auto;
padding-right: 0;
border-right: 0;
scrollbar-width: thin;
}
.pad-page .editor-controls,
.pad-page .toolbar-action,
.pad-page .line-toggle,
.pad-page .toolbar-fill {
display: none;
}
.pad-page #mode-toggle {
display: inline-flex;
width: auto;
min-width: 0;
align-self: center;
justify-content: center;
white-space: nowrap;
}
.pad-page .toolbar-group:has(>.emoji-picker[open]),
.pad-page .toolbar-group:has(>.markdown-more[open]) {
overflow: visible;
}
.pad-page .view-switch {
position: sticky;
right: 0;
z-index: 2;
width: max-content;
max-width: 100%;
align-self: center;
justify-self: end;
flex: 0 0 auto;
background: var(--surface-inset);
}
.pad-page .view-switch button {
min-width: 56px;
white-space: nowrap;
}
.pad-page textarea,
.pad-page .preview,
.pad-page .authorship-layer {
padding: 16px;
}
.pad-page:not(.hide-preview-line-numbers) .preview {
padding-left: 62px;
}
.pad-page .editor-footer {
align-items: center;
gap: 8px;
min-height: 42px;
padding: 6px 10px;
overflow-x: auto;
white-space: nowrap;
scrollbar-width: thin;
}
.pad-page .footer-left,
.pad-page .footer-right {
flex: 0 0 auto;
}
}
@media (max-width: 760px) {
.connection-notice {
top: 76px;
width: calc(100% - 20px);
padding: 10px 12px;
}
.pad-page .editor-toolbar {
grid-template-columns: minmax(0, 1fr) auto;
align-items: center;
}
.pad-page #mode-toggle {
display: none;
}
.pad-page .view-switch {
position: static;
display: inline-flex;
width: max-content;
justify-self: end;
box-sizing: border-box;
}
.pad-page .view-switch button {
width: auto;
min-width: 62px;
}
.pad-page .view-switch button[data-view="split"] {
display: none;
}
.pad-page .workspace,
.pad-page .workspace.view-split {
grid-template-columns: minmax(0, 1fr);
}
.pad-page .workspace.view-edit .editor-column,
.pad-page .workspace.view-split .editor-column {
display: flex;
opacity: 1;
transform: translateX(0);
}
.pad-page .workspace.view-preview .preview-column {
display: grid;
opacity: 1;
transform: translateX(0);
}
.pad-page .workspace.view-edit .preview-column,
.pad-page .workspace.view-preview .editor-column,
.pad-page .workspace.view-split .preview-column {
display: none;
opacity: 0;
}
.pad-page .preview-column {
border-left: 0;
}
}
@media (prefers-reduced-motion: reduce) {
.connection-notice,
.connection-notice__signal span {
animation: none;
transition: none;
}
}
@media (max-width: 720px) {
.pad-page #save-state {
display: none;
}
}
@media (max-width: 520px) {
.pad-page .app-header {
padding-inline: 10px;
}
.pad-page .brand {
max-width: 40vw;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.pad-page .document-heading h1 {
font-size: .9rem;
}
.pad-page .user-chip__name {
max-width: 88px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.pad-page .editor-toolbar {
padding: 6px;
}
.pad-page .editor-toolbar button,
.pad-page .editor-toolbar select {
min-height: 32px;
padding-inline: 8px;
}
.pad-page textarea,
.pad-page .preview,
.pad-page .authorship-layer {
padding: 12px;
}
}
@media (min-width: 1921px) {
.pad-page .workspace.view-split {
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
}
}
.document-read-only .preview-editable {
cursor: default;
}
.document-read-only .task-checkbox {
pointer-events: none;
cursor: not-allowed;
}
/* Per-note author color override */
.use-global-color {
display: inline-grid;
width: 1.75rem;
height: 1.75rem;
padding: 0;
place-items: center;
border: 1px solid var(--border);
border-radius: 50%;
background: var(--surface-2);
color: var(--muted);
cursor: pointer;
}
.use-global-color:hover {
border-color: var(--accent);
color: var(--text);
}
/* Quick actions appear when the editor header switches to its compact menu. */
.mobile-editor-bubble {
display: none;
}
@media (max-width: 1499px) {
.pad-page .mobile-editor-bubble {
position: fixed;
right: 10px;
bottom: calc(10px + env(safe-area-inset-bottom, 0px));
z-index: 45;
display: flex;
align-items: center;
gap: 5px;
max-width: calc(100vw - 20px);
padding: 5px;
isolation: isolate;
border: 1px solid var(--wash-border);
border-radius: 999px;
background: transparent;
box-shadow: 0 8px 24px var(--shadow-28);
}
.pad-page .mobile-editor-bubble::before {
position: absolute;
z-index: -1;
inset: 0;
border-radius: inherit;
background: var(--glass-toolbar);
backdrop-filter: blur(10px);
content: "";
pointer-events: none;
}
.mobile-editor-bubble>button,
.mobile-editor-bubble>.mobile-color-button {
display: inline-grid;
width: 34px;
height: 34px;
padding: 0;
place-items: center;
border: 0;
border-radius: 50%;
background: var(--wash-hover);
color: var(--text);
font-size: 1rem;
touch-action: manipulation;
}
.mobile-color-button {
position: relative;
flex: 0 0 auto;
overflow: hidden;
cursor: pointer;
}
.mobile-color-button input[type="color"] {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
padding: 0;
border: 0;
opacity: 0;
cursor: pointer;
}
.mobile-color-dot {
width: 15px;
height: 15px;
border: 2px solid var(--wash-strong);
border-radius: 50%;
background: var(--owner, var(--accent));
}
.mobile-connection-status {
display: inline-flex;
align-items: center;
gap: 5px;
min-width: 0;
min-height: 34px;
padding: 0 8px 0 4px;
border-radius: 999px;
background: var(--wash-hover);
color: var(--muted);
font-size: .72rem;
white-space: nowrap;
}
.mobile-connection-details {
flex: 0 0 auto;
}
.mobile-connection-details[open]>.mobile-connection-status {
background: color-mix(in srgb, var(--accent) 24%, var(--wash-hover));
}
.mobile-connection-status #mobile-status-text {
max-width: 92px;
overflow: hidden;
text-overflow: ellipsis;
}
#mobile-socket-latency {
color: var(--muted-2);
font-size: .66rem;
}
.mobile-connection-diagnostics-popover {
position: fixed;
right: 12px;
bottom: calc(64px + env(safe-area-inset-bottom, 0px));
left: auto;
width: min(400px, calc(100vw - 24px));
max-height: calc(100dvh - 88px);
overflow-y: auto;
overscroll-behavior: contain;
scrollbar-gutter: stable;
}
.pad-page .toast {
bottom: calc(62px + env(safe-area-inset-bottom, 0px));
}
}
/* Movable quick actions for compact editor screens. */
@media (max-width: 1499px) {
.pad-page .mobile-editor-bubble {
user-select: none;
}
.pad-page .footer-connection-block {
display: none;
}
.pad-page .room-popover.is-mobile-open {
position: fixed;
right: 12px;
bottom: calc(72px + env(safe-area-inset-bottom, 0px));
left: auto;
z-index: 60;
width: min(560px, calc(100vw - 24px));
max-height: min(560px, calc(100dvh - 96px));
}
.pad-page .mobile-editor-bubble.is-dragging {
transition: none;
cursor: grabbing;
}
.mobile-editor-bubble>.mobile-bubble-drag {
width: 24px;
background: transparent;
color: var(--muted-2);
cursor: grab;
font-size: .85rem;
letter-spacing: -3px;
touch-action: none;
}
.mobile-chat-button {
position: relative;
}
.mobile-chat-unread {
position: absolute;
top: -4px;
right: -4px;
display: inline-grid;
min-width: 17px;
height: 17px;
padding: 0 4px;
place-items: center;
border: 2px solid var(--surface-raised);
border-radius: 999px;
background: var(--danger);
color: var(--on-accent);
font-size: .58rem;
font-weight: 700;
line-height: 1;
}
.mobile-chat-unread[hidden] {
display: none;
}
}
/* Authorship display modes */
.editor-column-label {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
}
.authorship-mode-control {
display: inline-flex;
gap: 2px;
padding: 2px;
border: 1px solid var(--border);
border-radius: 8px;
background: color-mix(in srgb, var(--panel) 88%, transparent);
}
.authorship-mode-control button {
min-height: 26px;
padding: 0 9px;
border: 0;
border-radius: 6px;
background: transparent;
color: var(--muted);
font-size: 11px;
}
.authorship-mode-control button.active {
background: var(--surface-strong, var(--surface-strong-2));
color: var(--text);
}
.participant-badges {
display: flex;
flex-wrap: wrap;
align-items: center;
align-content: center;
gap: 6px;
min-width: 0;
min-height: 0;
padding: 7px 12px;
border-bottom: 1px solid var(--border);
}
.participant-badges[hidden] {
display: none;
}
.participant-badge {
display: inline-flex;
flex: 0 0 auto;
align-items: center;
width: auto;
max-width: 100%;
min-height: 0;
padding: 3px 8px;
border: 1px solid color-mix(in srgb, var(--owner) 65%, transparent);
border-radius: 999px;
background: color-mix(in srgb, var(--owner) 18%, transparent);
font: 600 11px/1.3 system-ui, sans-serif;
}
@media (max-width: 720px) {
.editor-column-label {
align-items: center;
}
.authorship-mode-control button {
padding-inline: 7px;
}
.participant-badges {
padding: 6px 8px;
}
.public-task-toggle {
width: 100%;
}
}
.public-page-options {
display: grid;
gap: 4px;
align-content: center;
}
.public-page-options .public-task-toggle {
min-height: 24px;
}
@media (max-width: 720px) {
.public-page-options {
width: 100%;
}
}
/* Keep the whole editor surface consistent in Simple and Full modes. */
.editor-shell {
background: var(--surface-inset);
}
.editor-shell textarea {
z-index: 3;
background: transparent;
}
.authorship-layer {
z-index: 2;
background: transparent;
}
.owner-labels {
z-index: 4;
}
.line-gutter {
z-index: 5;
}
/* Stable editor canvas in both authorship modes. */
.pad-page .editor-column,
.pad-page .editor-shell {
background: var(--surface-inset);
}
.pad-page .editor-shell {
isolation: isolate;
}
.pad-page .editor-shell::before {
position: absolute;
z-index: 0;
inset: 0;
background: var(--surface-inset);
content: "";
pointer-events: none;
}
.pad-page .editor-shell textarea,
.pad-page .owner-labels {
background: transparent !important;
}
/* The authorship canvas must paint the whole editable area, not only text rows. */
.pad-page .authorship-layer {
width: auto;
height: auto;
min-width: 0;
min-height: 0;
background: var(--surface-inset) !important;
}
.pad-page .line-gutter {
background: var(--surface-inset);
}
.resources-access-rules {
margin: 10px 0 0;
padding: 9px 10px;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--wash-soft);
color: var(--muted);
font-size: .78rem;
line-height: 1.45;
}
/* Full-height editor/gutter separator, independent of the number of text lines. */
.pad-page .editor-shell::after {
position: absolute;
z-index: 6;
top: 0;
bottom: 0;
left: 48px;
width: 1px;
background: var(--border);
content: "";
pointer-events: none;
}
.pad-page .line-gutter {
align-self: stretch;
height: 100%;
min-height: 100%;
border-right: 0;
}
.pad-page.hide-editor-line-numbers .editor-shell::after {
display: none;
}
@media (max-width: 720px) {
.pad-page .editor-shell::after {
left: 38px;
}
}
/* Fill the editor column with the actual editor shell.
The grid version could size the shell to its content in Full authorship mode,
so the gutter separator stopped after the last rendered line. */
.pad-page .editor-column {
display: flex;
flex-direction: column;
height: 100%;
min-height: 0;
}
.pad-page .editor-column>.column-label,
.pad-page .editor-column>.participant-badges {
flex: 0 0 auto;
}
.pad-page .editor-column>.editor-shell {
flex: 1 1 auto;
width: 100%;
min-height: 0;
}
/* Published page action and settings in one dropdown. */
.page-settings {
position: relative;
}
.page-settings>summary {
display: inline-flex;
align-items: center;
justify-content: space-between;
gap: 9px;
list-style: none;
cursor: pointer;
}
.page-settings>summary::-webkit-details-marker {
display: none;
}
.page-settings__label {
display: inline-flex;
align-items: center;
gap: 7px;
}
.page-settings__status {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--muted);
box-shadow: 0 0 0 2px color-mix(in srgb, var(--muted) 18%, transparent);
}
.page-settings.is-enabled .page-settings__status {
background: var(--accent);
box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 22%, transparent);
}
.page-settings__chevron {
font-size: .72em;
line-height: 1;
transition: transform .16s ease;
}
.page-settings[open] .page-settings__chevron {
transform: rotate(180deg);
}
.page-settings-menu {
position: absolute;
z-index: 30;
top: calc(100% + 6px);
right: 0;
display: grid;
gap: 4px;
min-width: 260px;
padding: 8px;
border: 1px solid var(--border);
border-radius: 9px;
background: var(--panel);
box-shadow: 0 12px 30px var(--shadow-28);
}
.page-settings-action {
display: grid;
gap: 2px;
width: 100%;
min-height: 46px;
padding: 7px 9px;
border: 1px solid color-mix(in srgb, var(--accent) 42%, var(--border));
border-radius: 7px;
background: var(--note-action-accent-bg);
color: var(--text);
text-align: left;
cursor: pointer;
}
.page-settings-action span {
font-weight: 700;
}
.page-settings-action small {
color: var(--muted);
font-size: .72rem;
font-weight: 500;
}
.page-settings-action:hover:not(:disabled) {
border-color: color-mix(in srgb, var(--accent) 68%, var(--border));
background: var(--note-action-hover);
}
.page-settings-action:disabled {
opacity: .45;
cursor: not-allowed;
}
.page-settings-divider {
height: 1px;
margin: 3px 1px;
background: var(--border);
}
.page-settings-menu .public-task-toggle,
.mobile-editor-options__panel .mobile-option-check {
min-height: 30px;
padding: 5px 7px;
border-radius: 6px;
background: var(--surface-card);
}
.page-settings-menu .public-task-toggle:hover,
.mobile-editor-options__panel .mobile-option-check:hover {
background: var(--surface-hover);
}
/* Keep the Simple/Full switch inside the editor label frame. */
.authorship-mode-control {
padding: 1px;
border-radius: 7px;
}
.authorship-mode-control button {
min-height: 20px;
height: 20px;
padding: 0 7px;
border-radius: 5px;
line-height: 20px;
}
/* Final UI fixes: opaque Page settings and per-note authorship controls. */
.page-settings-menu {
background: var(--surface-card);
opacity: 1;
backdrop-filter: none;
}
.authorship-controls {
display: inline-flex;
align-items: center;
gap: 7px;
}
.authorship-color-toggle {
display: inline-flex;
align-items: center;
gap: 5px;
min-height: 22px;
color: var(--muted);
font-size: 11px;
cursor: pointer;
}
.authorship-color-toggle input {
width: 28px;
height: 16px;
margin: 0;
accent-color: var(--accent);
}
.authorship-layer {
overflow: hidden;
padding: 0;
}
.authorship-canvas {
position: absolute;
top: 0;
left: 0;
box-sizing: border-box;
color: transparent;
white-space: pre;
tab-size: 4;
will-change: transform;
}
.share-link-row .share-link-info {
justify-self: end;
width: min(100%, 520px);
text-align: right;
}
.share-link-row .share-link-inline {
width: 100%;
text-align: left;
}
@media (max-width: 800px) {
.share-link-row .share-link-info {
justify-self: stretch;
width: 100%;
text-align: left;
}
.authorship-controls {
max-width: 100%;
gap: 5px;
}
}
/* Shared editor display settings */
.authorship-controls {
display: flex;
align-items: center;
gap: 7px;
flex-wrap: wrap;
}
.authorship-controls button:disabled,
.authorship-controls input:disabled+.switch-control__track {
cursor: not-allowed;
opacity: .55;
}
.switch-control {
display: inline-flex;
align-items: center;
gap: 6px;
cursor: pointer;
font-size: 11px;
color: var(--muted);
user-select: none;
}
.switch-control input {
position: absolute;
opacity: 0;
pointer-events: none;
}
.switch-control__track {
position: relative;
width: 30px;
height: 16px;
border: 1px solid var(--border);
border-radius: 999px;
background: var(--surface-strong, var(--surface-strong-2));
transition: .15s ease;
}
.switch-control__track::after {
content: "";
position: absolute;
width: 10px;
height: 10px;
left: 2px;
top: 2px;
border-radius: 50%;
background: var(--muted);
transition: .15s ease;
}
.switch-control input:checked+.switch-control__track {
border-color: var(--accent);
background: color-mix(in srgb, var(--accent) 28%, var(--surface-strong, var(--surface-strong-2)));
}
.switch-control input:checked+.switch-control__track::after {
transform: translateX(14px);
background: var(--accent);
}
.share-link-row .share-link-info {
margin-top: 8px;
justify-self: start;
text-align: left;
}
.preview-editable--source {
font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);
white-space: pre-wrap;
}
/* Keep generated individual links below the new-link form. */
.share-link-list-wrap {
display: grid;
gap: 8px;
margin-top: 12px;
padding-top: 12px;
border-top: 1px solid var(--border);
}
.share-link-list-wrap h5 {
margin: 0;
font-size: .86rem;
}
.share-link-list {
width: 100%;
}
.share-link-row {
grid-template-columns: minmax(130px, auto) 100px auto auto;
align-items: end;
}
.share-link-row .share-link-info {
grid-column: 1 / -1;
width: 100%;
justify-self: stretch;
text-align: left;
margin-top: 0;
}
.share-link-row .share-link-inline {
width: 100%;
}
.share-link-label-edit {
display: grid;
gap: 5px;
margin-bottom: 6px;
}
.share-link-label-edit>span {
color: var(--muted);
font-size: .78rem;
}
.share-link-label-edit input {
width: min(100%, 520px);
}
@media (max-width: 800px) {
.share-link-row {
grid-template-columns: 1fr;
}
.share-link-row .share-link-info {
grid-column: 1;
}
}
/* Upload progress toast --------------------------------------------------- */
.toast--interactive {
width: min(420px, calc(100vw - 40px));
box-sizing: border-box;
}
.toast--interactive.visible {
pointer-events: auto;
}
.toast--upload {
display: grid;
gap: 9px;
padding: 13px 14px;
}
.upload-toast__header,
.upload-toast__heading {
min-width: 0;
}
.upload-toast__heading {
display: grid;
gap: 2px;
}
.upload-toast__title {
font-size: .82rem;
line-height: 1.25;
}
.upload-toast__filename {
overflow: hidden;
color: var(--muted);
font-size: .73rem;
line-height: 1.3;
text-overflow: ellipsis;
white-space: nowrap;
}
.upload-toast__progress {
position: relative;
height: 7px;
overflow: hidden;
border-radius: 999px;
background: var(--code-bg);
}
.upload-toast__progress>span {
display: block;
width: 0;
height: 100%;
border-radius: inherit;
background: var(--accent);
transition: width .14s linear;
}
.upload-toast__progress.is-complete>span {
background: var(--success, var(--success-fallback));
}
.upload-toast__progress.is-error>span {
background: var(--danger);
}
.upload-toast__progress.is-indeterminate>span {
animation: upload-toast-indeterminate 1.2s ease-in-out infinite;
}
@keyframes upload-toast-indeterminate {
0% {
transform: translateX(-120%);
}
50% {
transform: translateX(180%);
}
100% {
transform: translateX(420%);
}
}
.upload-toast__meta {
display: flex;
min-width: 0;
align-items: center;
justify-content: space-between;
gap: 12px;
color: var(--muted-2);
font-size: .7rem;
font-variant-numeric: tabular-nums;
}
.upload-toast__meta span:first-child {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.upload-toast__meta span:last-child {
flex: 0 0 auto;
}
.upload-toast__error {
margin: 0;
color: var(--danger-soft);
font-size: .73rem;
line-height: 1.4;
}
.upload-toast__actions {
display: flex;
justify-content: flex-end;
gap: 7px;
}
.upload-toast__actions[hidden] {
display: none;
}
.upload-toast__actions button {
min-height: 30px;
padding: 0 10px;
border: 1px solid var(--border-strong);
border-radius: 7px;
background: var(--surface-2);
color: var(--text);
font-size: .72rem;
cursor: pointer;
}
.upload-toast__actions button:hover {
background: var(--surface-3);
}
.upload-toast__retry {
border-color: color-mix(in srgb, var(--accent) 55%, var(--border-strong)) !important;
}
@media (max-width: 520px) {
.pad-page .toast--interactive {
right: 10px;
left: 10px;
width: auto;
}
}
/* Optional links to exact editor lines. */
.line-number-button {
display: block;
width: 100%;
height: 100%;
padding: 0;
border: 0;
border-radius: 4px;
background: transparent;
color: inherit;
font: inherit;
text-align: right;
pointer-events: none;
}
.line-links-enabled .line-number-button {
cursor: copy;
pointer-events: auto;
}
.line-links-enabled .line-number-button:hover,
.line-links-enabled .line-number-button:focus-visible {
background: color-mix(in srgb, var(--accent) 14%, transparent);
color: var(--text);
outline: none;
}
.line-number-button.is-linked {
background: color-mix(in srgb, var(--accent) 20%, transparent);
color: var(--text);
font-weight: 700;
}
.line-number-button.is-copied {
background: color-mix(in srgb, var(--success) 18%, transparent);
color: var(--text);
}
/* Personal editor preferences in the compact mobile action bar. */
@media (max-width: 1499px) {
.mobile-editor-options {
position: relative;
flex: 0 0 auto;
}
.mobile-editor-options>summary {
display: inline-grid;
width: 34px;
height: 34px;
padding: 0;
place-items: center;
border: 0;
border-radius: 50%;
background: var(--wash-hover);
color: var(--text);
cursor: pointer;
list-style: none;
}
.mobile-editor-options>summary::-webkit-details-marker {
display: none;
}
.mobile-editor-options[open]>summary {
background: color-mix(in srgb, var(--accent) 24%, var(--wash-hover));
}
.mobile-editor-options__panel {
position: fixed;
right: 12px;
bottom: calc(64px + env(safe-area-inset-bottom, 0px));
left: auto;
display: grid;
width: min(360px, calc(100vw - 24px));
max-height: calc(100dvh - 88px);
gap: 5px;
padding: 12px;
overflow-y: auto;
border: 1px solid var(--border-strong);
border-radius: 10px;
background: var(--surface-strong, var(--surface-strong));
box-shadow: 0 16px 40px var(--shadow-45);
}
.mobile-editor-options__panel>label:not(.mobile-option-check) {
display: grid;
grid-template-columns: 70px minmax(0, 1fr);
align-items: center;
gap: 10px;
color: var(--muted);
font-size: .78rem;
}
.mobile-editor-options__panel select {
width: 100%;
min-height: 34px;
}
}
/* Note editor polish: clearer actions, lighter canvas, and aligned split columns. */
.pad-page .header-actions>.secondary-button:not(.danger-button),
.pad-page .page-settings>summary.secondary-button {
border-color: var(--note-action-border);
background: var(--note-action-bg);
color: var(--note-action-text);
box-shadow: 0 1px 2px var(--shadow-28), inset 0 1px 0 var(--wash-medium);
}
.pad-page .header-actions>.secondary-button:not(.danger-button):hover,
.pad-page .page-settings>summary.secondary-button:hover,
.pad-page .page-settings[open]>summary.secondary-button {
border-color: color-mix(in srgb, var(--accent) 52%, var(--note-action-border));
background: var(--note-action-hover);
color: var(--text);
box-shadow: 0 4px 12px var(--shadow-28), inset 0 1px 0 var(--wash-medium);
transform: translateY(-1px);
}
.pad-page .header-actions>.secondary-button:not(.danger-button):active,
.pad-page .page-settings>summary.secondary-button:active {
box-shadow: inset 0 1px 2px var(--shadow-28);
transform: translateY(0);
}
.pad-page .page-settings-action:not(:disabled) {
border-color: color-mix(in srgb, var(--accent) 55%, var(--note-action-border));
background: var(--note-action-accent-bg);
color: var(--accent-text-strong);
}
.pad-page .header-actions>.secondary-button:focus-visible,
.pad-page .page-settings>summary.secondary-button:focus-visible,
.pad-page .page-settings-action:focus-visible,
.pad-page .editor-toolbar :is(button, summary, select):focus-visible {
outline: 2px solid var(--focus);
outline-offset: 2px;
}
.pad-page .editor-toolbar .toolbar-group>button,
.pad-page .editor-toolbar .toolbar-group>.emoji-picker>summary,
.pad-page .editor-toolbar .toolbar-group>.markdown-more>summary,
.pad-page .editor-toolbar .toolbar-action {
border-color: var(--toolbar-action-border);
background: var(--toolbar-action-bg);
color: var(--toolbar-action-text);
box-shadow: inset 0 1px 0 var(--wash-medium);
}
.pad-page .editor-toolbar .toolbar-group>button:hover,
.pad-page .editor-toolbar .toolbar-group>.emoji-picker>summary:hover,
.pad-page .editor-toolbar .toolbar-group>.markdown-more>summary:hover,
.pad-page .editor-toolbar .toolbar-group>.emoji-picker[open]>summary,
.pad-page .editor-toolbar .toolbar-group>.markdown-more[open]>summary,
.pad-page .editor-toolbar .toolbar-action:hover {
border-color: color-mix(in srgb, var(--accent) 48%, var(--toolbar-action-border));
background: var(--toolbar-action-hover);
color: var(--text);
filter: none;
}
.pad-page .editor-toolbar .toolbar-group>button:active,
.pad-page .editor-toolbar .toolbar-group>.emoji-picker>summary:active,
.pad-page .editor-toolbar .toolbar-group>.markdown-more>summary:active,
.pad-page .editor-toolbar .toolbar-action:active {
box-shadow: inset 0 1px 3px var(--shadow-28);
transform: translateY(1px);
}
.pad-page .editor-column,
.pad-page .editor-shell,
.pad-page .editor-shell::before,
.pad-page .authorship-layer,
.pad-page .line-gutter {
background: var(--editor-canvas) !important;
}
.pad-page .preview-column,
.pad-page .preview {
background: var(--preview-canvas);
}
.pad-page .editor-column,
.pad-page .preview-column {
--editor-column-label-height: 30px;
}
.pad-page .preview-column {
grid-template-rows: var(--editor-column-label-height) minmax(0, 1fr);
}
.pad-page .column-label {
height: var(--editor-column-label-height);
min-height: var(--editor-column-label-height);
}
.pad-page .participant-badges:empty {
display: none;
}
/* Unified RustPad resource identity used by notes and workspaces. */
.resource-brand {
display: grid;
flex: 0 0 auto;
gap: 2px;
min-width: 82px;
line-height: 1;
}
.resource-brand__logo {
display: inline-block;
width: fit-content;
font-size: .78rem;
font-weight: 800;
letter-spacing: -.02em;
text-decoration: none;
}
.resource-brand__kind {
width: fit-content;
padding-left: 0;
color: var(--text-heading);
font-size: .72rem;
font-weight: 650;
letter-spacing: .01em;
text-decoration: none;
}
.resource-brand__trail {
display: flex;
align-items: center;
gap: 5px;
min-height: .8rem;
white-space: nowrap;
}
.resource-brand__separator {
color: var(--text-muted);
font-size: .68rem;
line-height: 1;
user-select: none;
}
.resource-brand__kind--current {
color: var(--text-heading);
}
.resource-brand__kind:hover,
.resource-brand__kind:focus-visible,
.resource-brand__logo:hover,
.resource-brand__logo:focus-visible {
color: var(--link-hover);
}
@media (max-width: 520px) {
.resource-brand {
min-width: 70px;
}
.resource-brand__logo {
font-size: .72rem;
}
.resource-brand__kind {
padding-left: 0;
font-size: .68rem;
}
}
/* Search, pagination and theme-aware scrollbars. */
* {
scrollbar-width: thin;
scrollbar-color: var(--border-strong) var(--surface-inset);
}
*::-webkit-scrollbar {
width: 10px;
height: 10px;
}
*::-webkit-scrollbar-track {
background: var(--surface-inset);
}
*::-webkit-scrollbar-thumb {
border: 2px solid var(--surface-inset);
border-radius: 999px;
background: var(--border-strong);
}
*::-webkit-scrollbar-thumb:hover {
background: var(--muted-2);
}
.list-controls,
.notes-toolbar {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
}
.resources-controls {
margin-top: 18px;
}
.list-search {
flex: 1 1 240px;
}
.list-search input {
width: 100%;
min-height: 40px;
}
.page-size-label {
display: inline-flex;
align-items: center;
gap: 8px;
color: var(--muted);
font-size: .82rem;
font-weight: 600;
white-space: nowrap;
}
.page-size-label select {
min-width: 78px;
min-height: 40px;
padding: 0 34px 0 12px;
border: 1px solid var(--border-strong);
border-radius: 10px;
background-color: var(--surface-toolbar);
background-image: linear-gradient(45deg, transparent 50%, var(--select-arrow) 50%),
linear-gradient(135deg, var(--select-arrow) 50%, transparent 50%);
background-position: calc(100% - 16px) 16px, calc(100% - 11px) 16px;
background-repeat: no-repeat;
background-size: 5px 5px, 5px 5px;
box-shadow: inset 0 1px 0 var(--wash-soft);
color: var(--text);
font-weight: 700;
appearance: none;
-webkit-appearance: none;
cursor: pointer;
transition: border-color .15s ease, background-color .15s ease, box-shadow .15s ease;
}
.page-size-label select:hover {
border-color: var(--select-border);
background-color: var(--surface-hover);
}
.page-size-label select:focus-visible {
border-color: var(--focus);
outline: none;
box-shadow: 0 0 0 3px var(--focus-ring), inset 0 1px 0 var(--wash-soft);
}
.page-size-label:focus-within {
color: var(--text-secondary);
}
.pagination {
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
margin-top: 16px;
color: var(--muted);
font-size: .88rem;
}
.pagination button {
min-height: 36px;
padding: 0 12px;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--surface-2);
color: var(--text);
cursor: pointer;
}
.pagination button:disabled {
opacity: .45;
cursor: not-allowed;
}
@media (max-width: 620px) {
.pagination {
justify-content: space-between;
}
.pagination span {
text-align: center;
}
}
/* Share links: keep one-time URLs readable without storing plaintext tokens. */
.share-link-id {
color: var(--muted);
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
font-size: .78rem;
font-weight: 600;
}
.share-link-once {
color: var(--muted-2) !important;
}
.form-message.warning {
color: var(--warning);
}
/* Keep editor mode/view controls inside the viewport at browser zoom. */
.control-label-short {
display: none;
}
.pad-page .editor-toolbar,
.pad-page .toolbar-group,
.pad-page .view-switch {
min-width: 0;
max-width: 100%;
}
.pad-page #mode-toggle,
.pad-page .view-switch {
flex: 0 0 auto;
}
@media (max-width: 1699px) {
.pad-page :is(#mode-toggle, .view-switch) .control-label-full {
display: none;
}
.pad-page :is(#mode-toggle, .view-switch) .control-label-short {
display: inline;
}
.pad-page #mode-toggle {
width: 36px;
min-width: 36px;
padding-inline: 6px;
}
.pad-page .view-switch button {
width: 36px;
min-width: 36px;
padding-inline: 6px;
}
}
@media (max-width: 760px) {
.pad-page .editor-toolbar {
grid-template-columns: minmax(0, 1fr) auto auto;
width: 100%;
max-width: 100vw;
}
.pad-page #mode-toggle {
display: inline-flex;
}
.pad-page .view-switch button,
.pad-page .view-switch button[data-view="split"] {
display: inline-flex;
width: 34px;
min-width: 34px;
align-items: center;
justify-content: center;
padding-inline: 5px;
}
.pad-page .workspace.view-split {
grid-template-columns: minmax(0, 1fr);
grid-template-rows: minmax(0, 1fr) minmax(0, 1fr);
}
.pad-page .workspace.view-split .preview-column {
display: grid;
opacity: 1;
transform: translateX(0);
border-top: 1px solid var(--border);
}
}
/* History content wraps vertically and never creates a horizontal scrollbar. */
.history-panel {
max-width: 100vw;
min-width: 0;
}
.history-list {
min-width: 0;
overflow-x: hidden;
overflow-y: auto;
}
.revision {
min-width: 0;
grid-template-columns: 12px minmax(0, 1fr);
}
.revision > div,
.revision__meta,
.revision__meta strong,
.revision time,
.revision__snippet,
.revision__preview {
min-width: 0;
max-width: 100%;
}
.revision__meta {
flex-wrap: wrap;
}
.revision__meta strong,
.revision time,
.revision__snippet,
.revision__preview {
overflow-wrap: anywhere;
word-break: break-word;
}
.revision__snippet {
white-space: normal;
}
.revision__preview {
overflow-x: hidden;
overflow-y: auto;
white-space: pre-wrap;
}
.history-header > div,
.history-header h2,
.history-header p,
.history-help,
.history-list .empty,
.history-list .error {
min-width: 0;
max-width: 100%;
overflow-wrap: anywhere;
word-break: break-word;
}