mirror of
https://github.com/basecamp/once-campfire.git
synced 2026-08-28 17:42:50 +09:00
215 lines
5.9 KiB
CSS
215 lines
5.9 KiB
CSS
/* Resolve Lexxy's palette to Campfire's, in the editor and in rendered messages,
|
|
so everything follows Campfire's light/dark color scheme */
|
|
.lexxy-content {
|
|
--lexxy-color-canvas: transparent;
|
|
--lexxy-color-text: var(--color-text);
|
|
--lexxy-color-text-subtle: var(--color-text);
|
|
--lexxy-color-link: var(--color-link);
|
|
--lexxy-color-ink: var(--color-text);
|
|
--lexxy-color-ink-inverted: var(--color-text-reversed);
|
|
--lexxy-color-ink-medium: var(--color-text);
|
|
--lexxy-color-ink-lighter: var(--color-border-darker);
|
|
--lexxy-color-ink-lightest: var(--color-bg);
|
|
--lexxy-color-selected: var(--color-selected, var(--color-bg));
|
|
--lexxy-color-code-bg: var(--color-bg);
|
|
|
|
/* Campfire's message lines stack without extra block margins */
|
|
--lexxy-content-margin: 0;
|
|
}
|
|
|
|
lexxy-editor {
|
|
&.input {
|
|
--lexxy-editor-padding: 0;
|
|
|
|
/* One line high when empty. Lexxy derives this from attr(rows lh, 8lh),
|
|
whose resolution differs between Chrome versions — pin it instead of
|
|
risking the 8-line fallback */
|
|
--lexxy-editor-rows: 1lh;
|
|
|
|
background: transparent;
|
|
border: 0;
|
|
border-radius: 0;
|
|
min-height: 24px;
|
|
}
|
|
|
|
.attachment--content {
|
|
margin: 0;
|
|
display: inline-flex;
|
|
}
|
|
}
|
|
|
|
/* The mentions menu needs a solid surface — the editor's transparent canvas
|
|
would let messages show through it */
|
|
.lexxy-prompt-menu {
|
|
--lexxy-color-canvas: var(--color-bg);
|
|
|
|
border: 1px solid var(--color-border-dark);
|
|
}
|
|
|
|
/* Same for the code block language picker: with a transparent canvas the
|
|
native dropdown renders white-on-white in dark mode */
|
|
lexxy-editor lexxy-code-language-picker select {
|
|
background-color: var(--color-bg);
|
|
color: var(--color-text);
|
|
|
|
option {
|
|
background-color: var(--color-bg);
|
|
color: var(--color-text);
|
|
}
|
|
}
|
|
|
|
/* The toolbar only shows when rich text mode is toggled on (see composer.css) */
|
|
lexxy-toolbar {
|
|
/* Wide, airy button spacing like the Trix toolbar */
|
|
--lexxy-toolbar-gap: 1.3em;
|
|
|
|
/* Match the compact size of the Trix toolbar buttons */
|
|
--lexxy-toolbar-button-size: 1.7em;
|
|
--lexxy-toolbar-icon-size: 1.125em;
|
|
|
|
display: none;
|
|
border-block-end: 0;
|
|
min-width: 0;
|
|
z-index: 3;
|
|
|
|
/* Tools Campfire doesn't offer, matching the Trix toolbar: underline,
|
|
color highlights, tables, dividers and undo/redo (history tools were
|
|
hidden under Trix as well) */
|
|
button[name="underline"],
|
|
button[name="table"],
|
|
button[name="divider"],
|
|
button[name="undo"],
|
|
button[name="redo"],
|
|
lexxy-highlight-dropdown {
|
|
display: none !important;
|
|
}
|
|
|
|
/* No group separator pipes, like the Trix toolbar */
|
|
.lexxy-editor__toolbar-button.lexxy-editor__toolbar-group-end::after {
|
|
display: none;
|
|
}
|
|
|
|
/* Dropdown panels: a solid surface with a uniform radius. Lexxy derives
|
|
the panel's radius and gap from --lexxy-toolbar-gap, which Campfire
|
|
repurposes for button spacing */
|
|
.lexxy-editor__toolbar-dropdown [data-dropdown-panel] {
|
|
--lexxy-color-canvas: var(--color-bg);
|
|
--lexxy-color-ink-lightest: var(--color-message-bg);
|
|
--lexxy-color-selected: var(--color-selected);
|
|
--lexxy-color-selected-hover: var(--color-message-bg);
|
|
|
|
border: 1px solid var(--color-border-dark);
|
|
border-radius: 0.5em;
|
|
gap: 0.25em;
|
|
padding: 0.25em;
|
|
}
|
|
|
|
.lexxy-editor__toolbar-dropdown > .lexxy-editor__toolbar-button[aria-expanded="true"] {
|
|
border-radius: var(--lexxy-radius);
|
|
}
|
|
}
|
|
|
|
/* Attachment markup contains formatting whitespace that must not turn into
|
|
line breaks under the editor's white-space: pre-wrap */
|
|
lexxy-editor action-text-attachment {
|
|
white-space: normal;
|
|
}
|
|
|
|
action-text-attachment[content-type~="application/vnd.campfire.mention"] {
|
|
display: inline-flex;
|
|
margin: 0;
|
|
padding: 0;
|
|
position: relative;
|
|
}
|
|
|
|
action-text-attachment[content-type~="application/vnd.actiontext.opengraph-embed"] {
|
|
lexxy-editor & {
|
|
display: block;
|
|
inline-size: fit-content;
|
|
max-inline-size: 100%;
|
|
}
|
|
|
|
/* No selection background — it peeks through the card's rounded corners.
|
|
The lexxy-editor prefix out-specifies Lexxy's own selection rule. */
|
|
lexxy-editor &.node--selected {
|
|
--lexxy-attachment-bg-color: transparent;
|
|
}
|
|
|
|
/* A prominent remove button on the card's top edge, horizontally
|
|
centered, like the Trix one. The lexxy-editor prefix out-specifies
|
|
Lexxy's own placement rules. */
|
|
lexxy-editor & lexxy-node-delete-button {
|
|
inset-block-start: 0;
|
|
inset-inline-start: 50%;
|
|
inset-inline-end: auto;
|
|
transform: translate(-50%, -50%);
|
|
|
|
.lexxy-floating-controls__group {
|
|
--button-size: 2.2em;
|
|
|
|
background-color: var(--color-negative);
|
|
border-radius: 50%;
|
|
color: white;
|
|
}
|
|
}
|
|
}
|
|
|
|
.lexxy-content {
|
|
pre {
|
|
background-color: var(--color-bg) !important;
|
|
border-radius: 0.5em;
|
|
border: 1px solid var(--color-border);
|
|
font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monaco, monospace;
|
|
font-size: 0.8rem !important;
|
|
margin: 0 !important;
|
|
padding: 1em !important;
|
|
white-space: pre-wrap !important;
|
|
word-wrap: break-word;
|
|
}
|
|
|
|
--blockquote-border: var(--inline-space-half);
|
|
--blockquote-padding: 1.5ch;
|
|
--blockquote-margin: var(--inline-space);
|
|
|
|
blockquote {
|
|
border: 0 solid var(--color-border-darker) !important;
|
|
border-inline-start-width: var(--blockquote-border) !important;
|
|
font-style: normal;
|
|
margin: 0 var(--blockquote-margin) !important;
|
|
padding-inline-start: var(--blockquote-padding) !important;
|
|
}
|
|
|
|
cite {
|
|
display: block;
|
|
margin-inline-start: calc(var(--blockquote-padding));
|
|
font-style: normal;
|
|
font-size: 0.8rem;
|
|
font-weight: 600;
|
|
|
|
&::before {
|
|
content: "— ";
|
|
color: var(--color-border-darker);
|
|
}
|
|
}
|
|
|
|
a {
|
|
color: var(--color-link);
|
|
}
|
|
|
|
ul,
|
|
ol {
|
|
margin: 0 !important;
|
|
padding: 0 !important;
|
|
}
|
|
|
|
li {
|
|
margin: 0 0 0 var(--inline-space-double) !important;
|
|
padding: 0 !important;
|
|
}
|
|
|
|
h1 {
|
|
font-size: 1.4rem !important;
|
|
margin: 0;
|
|
}
|
|
}
|