9120ad3b2d
Убран отдельный столбец-маркер .definitionMarker (order:-1, min-width:1.5em), дававший висячий отступ. Номер сноски теперь рисуется инлайн в начале первого параграфа через .definitionContent > :first-child::before из CSS-переменной --footnote-number (в модель документа не попадает, экспорт не затрагивает). Кегль сносок уменьшен до var(--mantine-font-size-sm). Инвариант #146 (contentDOM первый в DOM) и логика мульти-бэклинков #168 сохранены. closes #420 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
146 lines
3.8 KiB
CSS
146 lines
3.8 KiB
CSS
/* Superscript reference marker. The visible number comes from the numbering
|
|
plugin decoration which sets the --footnote-number CSS variable. */
|
|
.reference {
|
|
cursor: pointer;
|
|
color: var(--mantine-color-blue-6);
|
|
font-weight: 500;
|
|
vertical-align: super;
|
|
font-size: 0.75em;
|
|
line-height: 0;
|
|
user-select: none;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.reference::after {
|
|
content: var(--footnote-number, "");
|
|
}
|
|
|
|
.reference:hover {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.reference.selected {
|
|
background-color: var(--mantine-color-blue-1);
|
|
border-radius: 2px;
|
|
}
|
|
|
|
/* Read-only popover shown on hover/click of a reference. */
|
|
.popover {
|
|
position: absolute;
|
|
z-index: 1000;
|
|
max-width: 360px;
|
|
padding: var(--mantine-spacing-sm);
|
|
background: var(--mantine-color-body);
|
|
color: var(--mantine-color-default-color);
|
|
border: 1px solid var(--mantine-color-default-border);
|
|
border-radius: var(--mantine-radius-md);
|
|
box-shadow: var(--mantine-shadow-md);
|
|
font-size: var(--mantine-font-size-sm);
|
|
line-height: 1.4;
|
|
}
|
|
|
|
.popoverHeader {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: var(--mantine-spacing-xs);
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
.popoverNumber {
|
|
font-weight: 600;
|
|
color: var(--mantine-color-dimmed);
|
|
}
|
|
|
|
.popoverBody {
|
|
white-space: pre-wrap;
|
|
word-break: break-word;
|
|
}
|
|
|
|
/* Bottom footnotes container. Flex column so the heading (rendered AFTER the
|
|
editable NodeViewContent in the DOM for #146) is lifted back above the list
|
|
visually via `order`, instead of sitting in-flow before the contentDOM. */
|
|
.list {
|
|
display: flex;
|
|
flex-direction: column;
|
|
margin-top: var(--mantine-spacing-lg);
|
|
padding-top: var(--mantine-spacing-md);
|
|
border-top: 1px solid var(--mantine-color-default-border);
|
|
}
|
|
|
|
.listHeading {
|
|
order: -1; /* visually above the list, though it follows it in the DOM (#146) */
|
|
font-weight: 600;
|
|
font-size: var(--mantine-font-size-sm);
|
|
color: var(--mantine-color-dimmed);
|
|
margin-bottom: var(--mantine-spacing-xs);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.03em;
|
|
}
|
|
|
|
.definition {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
/* Tight spacing between the content and the trailing ↩ back-link. */
|
|
gap: 0.3em;
|
|
padding: 2px 0;
|
|
/* Footnotes read smaller than body text (16px). Matches .listHeading. */
|
|
font-size: var(--mantine-font-size-sm);
|
|
}
|
|
|
|
/* The "N." number is decorative (from the --footnote-number CSS var on the
|
|
wrapper, never in the document model) and is rendered inline at the start of
|
|
the first content line via ::before. This keeps text and wrapped lines flush
|
|
to the left margin — no hanging indent — while the editable contentDOM stays
|
|
the FIRST DOM child (#146). */
|
|
.definitionContent {
|
|
flex: 1 1 auto;
|
|
min-width: 0;
|
|
}
|
|
|
|
.definitionContent > :first-child::before {
|
|
content: var(--footnote-number, "?") ". ";
|
|
color: var(--mantine-color-dimmed);
|
|
font-variant-numeric: tabular-nums;
|
|
user-select: none;
|
|
}
|
|
|
|
/* The inner editable paragraph inherits `.ProseMirror p { margin: 0.5em 0 }`.
|
|
Drop the outer margins so the definition sits tight to the heading above and
|
|
the ::before number aligns with the top of the row — same approach used for
|
|
callouts in core.css. */
|
|
.definitionContent > :first-child {
|
|
margin-top: 0;
|
|
}
|
|
|
|
.definitionContent > :last-child {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.backLink {
|
|
flex: 0 0 auto;
|
|
cursor: pointer;
|
|
color: var(--mantine-color-blue-6);
|
|
user-select: none;
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
.backLink:hover {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
/* Multi-backlink row (#168): ↩ a b c — one lettered link per reference
|
|
occurrence. Sits on the right, after the content, like the single ↩. */
|
|
.backLinks {
|
|
flex: 0 0 auto;
|
|
display: inline-flex;
|
|
align-items: baseline;
|
|
gap: 0.3em;
|
|
user-select: none;
|
|
}
|
|
|
|
.backLinkArrow {
|
|
color: var(--mantine-color-dimmed);
|
|
font-size: 0.9em;
|
|
}
|