evgene-kopylov_fsrs_plugin/styles.css
2026-05-22 12:33:03 +02:00

880 lines
20 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* Дефолтный стиль — как у обычного code block Obsidian */
.markdown-rendered .block-language-fsrs-table,
.cm-preview-code-block.block-language-fsrs-table,
.cm-embed-block.block-language-fsrs-table {
background: var(--background-secondary);
padding: 10px 16px;
}
/* После загрузки таблицы — убираем фон, рамку, отступы */
.markdown-rendered .block-language-fsrs-table.fsrs-table-loaded,
.cm-preview-code-block.block-language-fsrs-table.fsrs-table-loaded,
.cm-embed-block.block-language-fsrs-table.fsrs-table-loaded {
border: none;
background: transparent;
padding: 0;
margin: 0;
box-shadow: none;
}
.fsrs-table-container {
width: 100%;
font-family: var(--font-text);
overflow-x: auto;
}
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table {
width: 100%;
border-collapse: collapse;
table-layout: auto;
font-size: 0.85em;
line-height: 1.4;
margin: 0;
}
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table th,
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table td {
border: 1px solid var(--background-modifier-border);
padding: 6px 10px;
vertical-align: middle;
box-sizing: border-box;
}
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table .fsrs-sortable-header {
padding: 0;
}
.fsrs-sort-header {
display: flex;
align-items: center;
gap: 4px;
width: 100%;
height: 100%;
padding: 6px 10px;
font: inherit;
font-weight: 600;
color: inherit;
cursor: pointer;
transition: background-color 0.2s ease;
text-align: inherit;
position: relative;
}
.fsrs-sort-header:hover {
background-color: var(--background-modifier-hover);
}
/* Выравнивание кнопок сортировки для разных колонок */
.fsrs-table th.fsrs-col-file .fsrs-sort-header {
justify-content: flex-start;
}
.fsrs-table th:not(.fsrs-col-file) .fsrs-sort-header {
justify-content: center;
}
.fsrs-sort-indicator {
font-size: 0.8em;
opacity: 0.6;
position: absolute;
right: 2px;
top: 50%;
transform: translateY(-50%);
}
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table td.fsrs-col-file {
text-align: left;
width: auto;
white-space: nowrap;
max-width: 300px;
overflow: hidden;
text-overflow: ellipsis;
}
.block-language-fsrs-table.fsrs-table-loaded
.fsrs-table
td.fsrs-col-file
a.internal-link {
display: inline-block;
margin: 0;
padding: 0;
color: var(--text-accent);
vertical-align: top;
text-decoration: none;
}
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table .fsrs-col-reps,
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table .fsrs-col-stability,
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table .fsrs-col-difficulty,
.block-language-fsrs-table.fsrs-table-loaded
.fsrs-table
.fsrs-col-retrievability,
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table .fsrs-col-elapsed,
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table .fsrs-col-scheduled,
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table .fsrs-col-due,
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table .fsrs-col-state,
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table .fsrs-col-next,
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table .fsrs-col-in,
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table .fsrs-col-interval {
width: 1%;
white-space: nowrap;
text-align: center;
padding: 4px 12px;
}
.fsrs-table th {
background-color: var(--background-secondary);
font-weight: 600;
}
.block-language-fsrs-table.fsrs-table-loaded
.fsrs-table
th:not(.fsrs-col-file) {
text-align: center;
}
.block-language-fsrs-table.fsrs-table-loaded .fsrs-table th.fsrs-col-file {
text-align: left;
}
.fsrs-table tr:hover {
background-color: var(--background-modifier-hover);
}
/* Анимация строк через FLIP: инверсия через setCssProps, возврат через transition */
.fsrs-table-row {
transition:
transform 0.3s ease,
opacity 0.3s ease;
}
.fsrs-buttons-container {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
margin: 1em 0;
}
.fsrs-review-button {
padding: 6px 16px;
background: var(--interactive-accent);
color: var(--text-on-accent);
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 13px;
font-weight: 500;
min-width: 140px;
transition: background 0.2s ease;
}
.fsrs-review-button:hover {
background: var(--interactive-accent-hover);
}
.fsrs-header-text {
font-size: 0.9em;
font-weight: 600;
color: var(--text-muted);
}
/* Стили для модального окна справки */
.fsrs-help-title {
font-size: 1.5em;
font-weight: 600;
margin-bottom: 0.5em;
color: var(--text-normal);
}
.fsrs-help-content-container {
font-size: 1.3em;
line-height: 1.7;
overflow-y: auto;
max-height: 60vh;
padding-right: 10px;
overflow-wrap: break-word;
}
.fsrs-help-content-container p {
margin-bottom: 1em;
}
.fsrs-help-content-container code {
font-size: 1.1em;
background-color: var(--background-secondary);
padding: 6px 10px;
border-radius: 4px;
}
.fsrs-help-content-container pre {
background-color: var(--background-secondary);
padding: 20px;
border-radius: 6px;
overflow-x: auto;
font-size: 1.1em;
line-height: 1.7;
}
.fsrs-help-content-container h1,
.fsrs-help-content-container h2,
.fsrs-help-content-container h3 {
margin-top: 1.5em;
margin-bottom: 0.5em;
font-weight: 600;
}
.fsrs-help-content-container h1 {
font-size: 1.6em;
}
.fsrs-help-content-container h2 {
font-size: 1.4em;
}
.fsrs-help-content-container h3 {
font-size: 1.3em;
}
.fsrs-help-content-container ul,
.fsrs-help-content-container ol {
margin-left: 1.5em;
margin-bottom: 1em;
}
.fsrs-help-content-container li {
margin-bottom: 0.5em;
}
/* Стили для кнопки истории повторений */
.fsrs-history-button {
display: flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
background: var(--background-secondary);
color: var(--text-muted);
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
cursor: pointer;
font-size: 14px;
transition: all 0.2s ease;
}
.fsrs-history-button:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
border-color: var(--interactive-accent);
}
/* Стили для модального окна истории повторений */
.fsrs-history-title {
font-size: 1.5em;
font-weight: 600;
margin-bottom: 0.5em;
color: var(--text-normal);
}
/* Стили для таблицы истории повторений */
.fsrs-history-empty {
text-align: center;
color: var(--text-muted);
font-style: italic;
padding: 2em 0;
}
.fsrs-history-table-container {
max-height: 300px;
overflow-y: auto;
border: 1px solid var(--background-modifier-border);
border-radius: 6px;
margin-bottom: 1.5em;
}
/* Стили для контейнера кнопок рейтинга (review-modal) */
.fsrs-rating-container {
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: center;
}
/* Стили для состояния загрузки таблицы */
.fsrs-table-loading {
opacity: 0.7;
transition: opacity 0.3s ease;
}
/* Стили для кнопок рейтинга */
.fsrs-rating-button {
flex: 1;
min-width: 120px;
padding: 10px 15px;
color: var(--fsrs-button-text);
border: none;
border-radius: 4px;
cursor: pointer;
font-weight: bold;
transition: opacity 0.2s;
}
.fsrs-rating-button:hover {
opacity: 0.8;
}
/* Плиточки повторений в модальном окне */
.fsrs-review-pills {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-bottom: 12px;
}
.fsrs-review-pill {
width: 14px;
height: 14px;
border-radius: 3px;
position: relative;
cursor: default;
}
.fsrs-review-pill-tip {
display: none;
position: absolute;
bottom: calc(100% + 4px);
left: 50%;
transform: translateX(-50%);
background: var(--background-modifier-hover);
color: var(--text-normal);
padding: 2px 6px;
border-radius: 3px;
font-size: 0.75em;
white-space: nowrap;
z-index: 10;
}
.fsrs-review-pill:hover .fsrs-review-pill-tip {
display: block;
}
/* Список интервалов */
.fsrs-interval-list {
margin-bottom: 12px;
}
.fsrs-interval-row {
display: flex;
align-items: baseline;
padding: 4px 8px 4px 0;
font-size: 1rem;
}
.fsrs-interval-label {
min-width: 8em;
}
.fsrs-interval-row .fsrs-interval-marker {
display: inline;
visibility: hidden;
margin-right: 0.5em;
}
.fsrs-interval-row-active .fsrs-interval-marker {
visibility: visible;
}
/* Стили для модального окна справки */
.fsrs-help-modal {
width: 80%;
max-width: 900px;
max-height: 85vh;
user-select: text;
}
.fsrs-help-modal .fsrs-help-content-container {
user-select: text;
}
/* Стили для модального окна истории повторений */
.fsrs-history-modal {
width: 70%;
max-width: 800px;
max-height: 80vh;
user-select: text;
}
.fsrs-history-table {
width: 100%;
border-collapse: collapse;
font-size: 0.9em;
}
.fsrs-history-table th {
background-color: var(--background-secondary);
font-weight: 600;
padding: 8px 12px;
text-align: left;
border-bottom: 2px solid var(--background-modifier-border);
position: sticky;
top: 0;
z-index: 1;
}
.fsrs-history-table td {
padding: 8px 12px;
border-bottom: 1px solid var(--background-modifier-border);
}
.fsrs-history-table tr:last-child td {
border-bottom: none;
}
.fsrs-history-table tr:nth-child(even) {
background-color: var(--background-secondary);
}
.fsrs-history-table tr:hover {
background-color: var(--background-modifier-hover);
}
/* Выравнивание для разных колонок */
.fsrs-history-table th:nth-child(1),
.fsrs-history-table td:nth-child(1) {
width: 40px;
text-align: center;
}
.fsrs-history-table th:nth-child(2),
.fsrs-history-table td:nth-child(2) {
min-width: 160px;
}
.fsrs-history-table th:nth-child(3),
.fsrs-history-table td:nth-child(3) {
min-width: 100px;
}
.fsrs-history-table th:nth-child(4),
.fsrs-history-table th:nth-child(5),
.fsrs-history-table th:nth-child(6),
.fsrs-history-table td:nth-child(4),
.fsrs-history-table td:nth-child(5),
.fsrs-history-table td:nth-child(6) {
width: 100px;
text-align: center;
}
.fsrs-history-statistics {
margin-top: 1.5em;
padding-top: 1.5em;
border-top: 1px solid var(--background-modifier-border);
}
.fsrs-history-statistics h3 {
font-size: 1.2em;
font-weight: 600;
margin-bottom: 0.8em;
color: var(--text-normal);
}
.fsrs-history-stats-list {
list-style: none;
padding: 0;
margin: 0;
}
.fsrs-history-stats-list li {
padding: 6px 0;
border-bottom: 1px solid var(--background-modifier-border);
}
.fsrs-history-stats-list li:last-child {
border-bottom: none;
}
/* Кнопка удаления последнего повторения */
.fsrs-history-delete-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
background: transparent;
color: var(--text-error);
border: 1px solid transparent;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
line-height: 1;
padding: 0;
transition: all 0.15s ease;
}
.fsrs-history-delete-btn:hover {
background: var(--background-modifier-error-rgb);
color: var(--text-on-accent);
border-color: var(--background-modifier-error);
}
.fsrs-history-delete-btn:disabled {
opacity: 0.35;
cursor: not-allowed;
color: var(--text-muted);
background: transparent;
border-color: transparent;
}
.fsrs-history-delete-btn:disabled:hover {
opacity: 0.35;
cursor: not-allowed;
color: var(--text-muted);
background: transparent;
border-color: transparent;
}
/* Кнопка сброса в настройках — бледная, проявляется при наведении */
.setting-item .clickable-icon svg.lucide-rotate-ccw {
opacity: 0.6;
transition: opacity 0.2s ease;
}
.setting-item .clickable-icon:hover svg.lucide-rotate-ccw {
opacity: 0.85;
}
/* Контейнер для кастомных меток кнопок в настройках */
.fsrs-labels-container {
display: flex;
flex-direction: column;
gap: 8px;
margin-top: 8px;
}
/* Цвета кнопок повторения — пастель на светлой теме, сочнее на тёмной */
/* Границы для визуального разделения месяцев */
:root {
--fsrs-color-again: #ffcdd2;
--fsrs-color-hard: #ffe0b2;
--fsrs-color-good: #c8e6c9;
--fsrs-color-easy: #bbdefb;
--fsrs-button-text: #333333;
--fsrs-heatmap-border: rgba(140, 170, 200, 0.5);
}
.theme-dark {
--fsrs-color-again: #b07171;
--fsrs-color-hard: #b8945e;
--fsrs-color-good: #6e9670;
--fsrs-color-easy: #638bab;
--fsrs-button-text: #000000;
--fsrs-heatmap-border: rgba(220, 220, 220, 0.5);
}
/* ========================================================================
Тепловая карта (fsrs-heatmap)
======================================================================== */
/* Контейнер как у code block до загрузки */
.markdown-rendered .block-language-fsrs-heatmap,
.cm-preview-code-block.block-language-fsrs-heatmap,
.cm-embed-block.block-language-fsrs-heatmap {
background: var(--background-secondary);
padding: 10px 16px;
overflow-x: auto;
}
.fsrs-heatmap-wrapper {
display: inline-block;
min-width: max-content;
font-family: var(--font-text);
font-size: 0.8em;
}
/* Слайдеры в настройках */
.setting-item-control input[type="range"] {
width: 210px;
}
.fsrs-heatmap-header {
font-weight: 600;
margin-bottom: 4px;
color: var(--text-normal);
}
.fsrs-heatmap-grid {
display: flex;
flex-direction: column;
gap: 0;
}
/* Строка месяцев */
.fsrs-heatmap-months {
display: flex;
flex-direction: row;
margin-bottom: 2px;
}
.fsrs-heatmap-month-spacer {
width: 28px;
flex-shrink: 0;
}
.fsrs-heatmap-month-label {
width: 12px;
margin-right: 3px;
font-size: 0.7em;
color: var(--text-muted);
line-height: 1;
text-align: center;
overflow: visible;
white-space: nowrap;
}
.fsrs-heatmap-month-label:last-child {
margin-right: 0;
}
/* Тело: дни + ячейки */
.fsrs-heatmap-body {
display: flex;
flex-direction: row;
}
/* Колонка дней недели */
.fsrs-heatmap-days {
display: flex;
flex-direction: column;
gap: 3px;
margin-right: 4px;
flex-shrink: 0;
}
.fsrs-heatmap-day-label {
width: 24px;
height: 12px;
font-size: 0.7em;
color: var(--text-muted);
line-height: 12px;
text-align: right;
padding-right: 4px;
}
/* Контейнер ячеек */
.fsrs-heatmap-cells {
display: flex;
flex-direction: row;
gap: 3px;
}
.fsrs-heatmap-week {
display: flex;
flex-direction: column;
gap: 3px;
}
/* Ячейка */
.fsrs-heatmap-cell {
width: 12px;
height: 12px;
border-radius: 2px;
cursor: pointer;
transition: outline 0.1s;
outline: 1px solid transparent;
outline-offset: -1px;
}
.fsrs-heatmap-cell:hover {
outline-color: var(--text-muted);
}
.fsrs-heatmap-bt {
border-top: 1px solid var(--fsrs-heatmap-border);
}
.fsrs-heatmap-bb {
border-bottom: 1px solid var(--fsrs-heatmap-border);
}
.fsrs-heatmap-bl {
border-left: 1px solid var(--fsrs-heatmap-border);
}
.fsrs-heatmap-br {
border-right: 1px solid var(--fsrs-heatmap-border);
}
.fsrs-heatmap-future {
opacity: 0.3;
}
/* Попап по клику */
.fsrs-heatmap-popup {
position: fixed;
z-index: 10;
background: var(--background-primary);
color: var(--text-normal);
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
padding: 4px 8px;
font-size: 0.8em;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
max-width: 320px;
}
.fsrs-heatmap-tip-header {
font-weight: 600;
margin-bottom: 2px;
padding-bottom: 2px;
border-bottom: 1px solid var(--background-modifier-border);
}
.fsrs-heatmap-tip-row {
display: flex;
justify-content: space-between;
gap: 12px;
line-height: 1.4;
}
.fsrs-heatmap-tip-file {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-decoration: none;
}
.fsrs-heatmap-tip-file:hover {
text-decoration: none;
}
.fsrs-heatmap-tip-rating {
flex-shrink: 0;
font-weight: 600;
padding: 0 4px;
border-radius: 2px;
}
.fsrs-heatmap-tip-r0 {
background: var(--fsrs-color-again);
color: var(--fsrs-button-text);
}
.fsrs-heatmap-tip-r1 {
background: var(--fsrs-color-hard);
color: var(--fsrs-button-text);
}
.fsrs-heatmap-tip-r2 {
background: var(--fsrs-color-good);
color: var(--fsrs-button-text);
}
.fsrs-heatmap-tip-r3 {
background: var(--fsrs-color-easy);
color: var(--fsrs-button-text);
}
/* Загрузка и ошибки */
.fsrs-heatmap-loading {
padding: 8px 0;
color: var(--text-muted);
}
.fsrs-heatmap-error {
padding: 8px 0;
color: var(--text-error);
}
.fsrs-heatmap-error-text {
margin: 0;
font-size: 0.8em;
white-space: pre-wrap;
}
.fsrs-review-info {
user-select: text;
}
/* Скрыть фронтматтер в попапе предпросмотра FSRS-карточек */
body.fsrs-hide-frontmatter .hover-popover.fsrs-review-popup .mod-header.mod-ui {
display: none;
}
body.fsrs-hide-frontmatter
.hover-popover.fsrs-review-popup
.el-pre.mod-frontmatter {
display: none;
}
body.fsrs-hide-frontmatter
.hover-popover.fsrs-review-popup
.metadata-container {
display: none;
}
/* Стилизация поля reviews во фронтматтере */
.metadata-property[data-property-key="reviews"] .metadata-property-value {
display: none;
}
.metadata-property[data-property-key="reviews"].fsrs-reviews-styled,
.metadata-container.fsrs-reviews-active {
overflow: visible;
}
.fsrs-reviews-pills {
display: inline-flex;
flex-wrap: wrap;
gap: 2px;
align-items: center;
align-self: center;
}
.fsrs-reviews-pill {
width: 10px;
height: 10px;
border-radius: 2px;
position: relative;
cursor: default;
transition: outline 0.1s;
outline: 1px solid transparent;
outline-offset: -1px;
}
.fsrs-reviews-pill:hover {
outline-color: var(--text-muted);
}
.fsrs-reviews-pill-tip {
display: none;
position: absolute;
bottom: calc(100% + 4px);
left: 50%;
transform: translateX(-50%);
z-index: 10;
background: var(--background-primary);
color: var(--text-normal);
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
padding: 4px 8px;
font-size: 0.8em;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
white-space: nowrap;
pointer-events: none;
}
.fsrs-reviews-pill:hover .fsrs-reviews-pill-tip {
display: block;
}
/* Квадратик оценки в истории (без текста) */
.fsrs-history-rating-square {
display: inline-block;
width: 1em;
height: 1em;
border-radius: 2px;
vertical-align: middle;
}
/* Подсветка строки таблицы при наведении на плиточку */
.fsrs-history-table tbody tr.fsrs-history-row-highlight {
background: var(--background-modifier-hover);
}
/* Подсветка плиточки при наведении на строку таблицы */
.fsrs-review-pill-highlight {
outline: 2px solid var(--interactive-accent);
outline-offset: 2px;
}