6358 lines
116 KiB
CSS
6358 lines
116 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);
|
|
}
|
|
|
|
: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: 64px;
|
|
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: 70px;
|
|
padding: 0 20px;
|
|
border-bottom: 1px solid var(--border);
|
|
background: var(--surface-inset);
|
|
}
|
|
|
|
.app-header__main,
|
|
.header-actions {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 14px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.header-divider {
|
|
width: 1px;
|
|
height: 30px;
|
|
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: 12px 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;
|
|
}
|
|
|
|
}
|
|
|
|
@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%;
|
|
}
|
|
}
|
|
|
|
.markdown-toggle {
|
|
border: 1px solid var(--border) !important;
|
|
}
|
|
|
|
.markdown-toggle.active {
|
|
background: var(--surface-3) !important;
|
|
color: var(--text) !important;
|
|
}
|
|
|
|
.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: 64px;
|
|
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(430px, 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 {
|
|
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;
|
|
}
|
|
|
|
.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(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;
|
|
}
|
|
}
|
|
|
|
/* 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: 10px 12px;
|
|
}
|
|
|
|
.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: 42px;
|
|
min-width: 42px;
|
|
height: 42px;
|
|
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;
|
|
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,
|
|
.pad-page #mode-toggle {
|
|
display: none;
|
|
}
|
|
|
|
.pad-page .view-switch {
|
|
position: sticky;
|
|
right: 0;
|
|
z-index: 2;
|
|
align-self: center;
|
|
background: var(--surface-inset);
|
|
}
|
|
|
|
.pad-page textarea,
|
|
.pad-page .preview,
|
|
.pad-page .authorship-layer {
|
|
padding: 16px;
|
|
}
|
|
|
|
.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);
|
|
}
|
|
|
|
.pad-page .view-switch {
|
|
position: static;
|
|
display: grid;
|
|
width: 100%;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.pad-page .view-switch button {
|
|
width: 100%;
|
|
}
|
|
|
|
.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: 1500px) {
|
|
.pad-page .workspace.view-split {
|
|
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
}
|
|
}
|
|
|
|
/* 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(430px, 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;
|
|
}
|
|
|
|
/* Make secondary editor actions read clearly as buttons. */
|
|
.markdown-more>summary,
|
|
.pad-page .toolbar-action {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
min-height: 30px;
|
|
padding: 5px 10px;
|
|
border: 1px solid var(--border);
|
|
border-radius: 7px;
|
|
background: var(--surface-strong, var(--surface-strong-2));
|
|
color: var(--text);
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
box-shadow: inset 0 1px 0 var(--wash-medium);
|
|
}
|
|
|
|
.markdown-more>summary:hover,
|
|
.pad-page .toolbar-action:hover {
|
|
border-color: color-mix(in srgb, var(--accent) 55%, var(--border));
|
|
filter: brightness(1.08);
|
|
}
|
|
|
|
.markdown-more>summary {
|
|
list-style: none;
|
|
}
|
|
|
|
.markdown-more>summary::-webkit-details-marker {
|
|
display: none;
|
|
}
|
|
|
|
|
|
/* 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%;
|
|
}
|
|
|
|
@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;
|
|
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;
|
|
}
|
|
} |