Corp/backend/static/css/components/feed-cards.css

267 lines
6.6 KiB
CSS
Raw 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.

/**
* Feed Cards Component
*
* Переиспользуемые стили для карточек в ленте новостей, документов и других списков
* Использует CSS переменные из variables.css
*
* Использование:
* <link rel="stylesheet" href="{% static 'css/components/feed-cards.css' %}">
*/
/* ===== Заголовок секции ленты ===== */
.feed-header {
display: flex;
align-items: center;
gap: var(--gap-component); /* 16px - унифицировано */
margin-bottom: var(--space-3); /* 24px - между секциями */
}
.feed-header .title {
font-weight: 800;
letter-spacing: 0.2px;
margin: 0;
}
/* ===== Контейнер потока карточек ===== */
.feed-stream {
display: flex;
flex-direction: column;
gap: 0;
}
/* ===== Базовая карточка ===== */
.feed-card {
border: 1px solid color-mix(in srgb, var(--bs-border-color), transparent 10%);
border-radius: var(--feed-radius, 18px);
background: var(--bs-body-bg);
box-shadow: var(--feed-shadow, 0 2px 8px rgba(0, 0, 0, 0.08));
transition: box-shadow 0.18s ease, transform 0.18s ease, border-color 0.18s ease;
overflow: hidden;
}
.feed-card:hover {
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
transform: translateY(-1px);
}
/* ===== Шапка карточки (аватар + мета-информация) ===== */
.feed-hd {
display: flex;
align-items: center;
gap: var(--gap-component); /* 16px - унифицировано */
padding: var(--card-padding); /* 16px со всех сторон */
padding-bottom: var(--space-1); /* 8px снизу для компактности */
}
/* Аватар */
.feed-ava {
width: 42px;
height: 42px;
border-radius: 9999px;
overflow: hidden;
border: 1px solid color-mix(in srgb, var(--bs-border-color), transparent 20%);
background: var(--bs-tertiary-bg);
display: grid;
place-items: center;
flex: 0 0 auto;
}
.feed-ava img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
/* Мета-информация (имя автора, дата и т.д.) */
.feed-meta {
line-height: 1.2;
flex: 1;
min-width: 0; /* для корректного text-overflow */
}
.feed-author {
font-weight: 700;
color: var(--bs-body-color);
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.feed-sub {
font-size: 0.82rem;
color: var(--bs-secondary-color);
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* Значок закрепления */
.feed-pin {
margin-left: auto;
font-size: 0.75rem;
padding: var(--space-1);
border-radius: 999px;
background: #fff3cd;
color: #664d03;
border: 1px solid #ffe69c;
flex-shrink: 0;
}
[data-bs-theme="dark"] .feed-pin {
background: #3b2e04;
color: #ffda6a;
border-color: #4f3f0a;
}
/* ===== Тело карточки ===== */
.feed-body {
padding: var(--space-1) var(--card-padding); /* 8px верх/низ, 16px лево/право */
padding-bottom: var(--space-1); /* 8px снизу */
position: relative;
}
.feed-title {
font: 700 1.3rem/1.5 var(--bs-body-font-family);
margin: var(--space-1) 0; /* 8px сверху/снизу */
color: #4b4b4b;
}
[data-bs-theme="dark"] .feed-title {
color: var(--bs-body-color);
}
.feed-text {
font-size: 0.95rem;
line-height: 1.6;
color: var(--bs-body-color);
margin: 0;
}
/* ===== Изображение в карточке ===== */
.feed-img {
position: relative;
border-top: 1px solid var(--bs-border-color);
background: var(--bs-tertiary-bg);
}
.feed-img img {
display: block;
width: 100%;
height: auto;
aspect-ratio: 16/9;
object-fit: cover;
}
/* ===== Действия (лайки, комментарии и т.д.) ===== */
.feed-actions {
display: flex;
align-items: center;
gap: var(--space-1); /* 8px между кнопками */
padding: var(--card-padding); /* 16px со всех сторон */
padding-top: var(--space-2); /* 16px сверху */
border-top: 1px solid var(--bs-border-color);
position: relative;
z-index: 2;
}
.feed-action {
display: inline-flex;
align-items: center;
gap: var(--space-1); /* 8px между иконкой и текстом */
padding: var(--space-1); /* 8px внутри кнопки */
border-radius: var(--radius-md, 10px);
background: transparent;
border: none;
color: var(--bs-secondary-color);
font-size: 0.875rem;
cursor: pointer;
transition: background 0.2s ease, color 0.2s ease;
}
.feed-action:hover {
background: var(--bs-tertiary-bg);
color: var(--bs-body-color);
}
.feed-action.active {
color: var(--bs-primary);
font-weight: 600;
}
.feed-action i {
font-size: 1rem;
}
/* ===== Футер карточки ===== */
.feed-footer {
padding: var(--space-2) var(--card-padding); /* 16px сверху/снизу, 16px лево/право */
border-top: 1px solid var(--bs-border-color);
font-size: 0.875rem;
color: var(--bs-secondary-color);
}
/* ===== Вариации карточек ===== */
/* Компактная карточка */
.feed-card.compact .feed-hd {
padding: var(--space-1) var(--card-padding-sm); /* 8px сверху/снизу, 8px лево/право */
}
.feed-card.compact .feed-body {
padding: var(--space-1) var(--card-padding-sm); /* 8px со всех сторон */
}
.feed-card.compact .feed-ava {
width: 32px;
height: 32px;
}
/* Карточка без границ (для списков) */
.feed-card.borderless {
border: none;
box-shadow: none;
border-radius: 0;
border-bottom: 1px solid var(--bs-border-color);
}
.feed-card.borderless:hover {
transform: none;
box-shadow: none;
background: var(--bs-tertiary-bg);
}
/* Карточка с выделением (например, непрочитанное) */
.feed-card.highlighted {
border-left: 3px solid var(--bs-primary);
background: color-mix(in srgb, var(--bs-primary), transparent 95%);
}
/* ===== Адаптивность ===== */
@media (max-width: 576px) {
.feed-header {
gap: var(--space-2); /* 16px остается */
flex-wrap: wrap;
}
.feed-hd {
padding: var(--space-2); /* 16px со всех сторон */
padding-bottom: var(--space-1); /* 8px снизу */
}
.feed-ava {
width: 36px;
height: 36px;
}
.feed-title {
font-size: 1.1rem;
}
.feed-actions {
padding: var(--space-2); /* 16px со всех сторон */
}
}