project_python_v6/static/css/style.css
2026-04-21 09:26:47 +05:00

440 lines
12 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.

/* ============================================================
СтройСклад — Вариант №6
Стиль: Индустриальный, боковая навигация
Цвета варианта: #FAEBD7, #DEB887, #A0522D
Шрифт: Verdana
============================================================ */
@import url('https://fonts.googleapis.com/css2?family=Rubik:wght@400;500;600;700&display=swap');
:root {
--cream: #FAEBD7;
--sand: #DEB887;
--brown: #A0522D;
--dark: #1C1008;
--white: #FFFFFF;
--light-bg: #F9F4EE;
--border: #E8D5BC;
--text: #1C1008;
--text-mid: #6B4C30;
--text-light: #A0826A;
--shadow: rgba(160, 82, 45, 0.10);
--success: #3D7A35;
--error: #B83030;
--sidebar-w: 220px;
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { font-size: 14px; }
body {
font-family: Verdana, Geneva, sans-serif;
background: var(--light-bg);
color: var(--text);
line-height: 1.6;
min-height: 100vh;
display: flex;
}
/* ─── БОКОВАЯ НАВИГАЦИЯ ─────────────────────────────────────── */
.sidebar {
width: var(--sidebar-w);
min-height: 100vh;
background: var(--dark);
display: flex;
flex-direction: column;
position: fixed;
left: 0;
top: 0;
bottom: 0;
z-index: 200;
border-right: 3px solid var(--brown);
}
.sidebar-logo {
padding: 1.5rem 1.2rem 1.2rem;
border-bottom: 1px solid rgba(222,184,135,0.15);
}
.sidebar-logo .logo-icon {
width: 36px;
height: 36px;
margin-bottom: 0.6rem;
display: block;
}
.sidebar-logo .logo-text {
font-size: 1.1rem;
font-weight: 700;
color: var(--cream);
text-transform: uppercase;
letter-spacing: 0.12em;
display: block;
line-height: 1.2;
}
.sidebar-logo .logo-sub {
font-size: 0.65rem;
color: var(--sand);
opacity: 0.7;
letter-spacing: 0.04em;
display: block;
margin-top: 0.2rem;
}
.sidebar-nav {
flex: 1;
padding: 1rem 0;
}
.nav-section-title {
font-size: 0.6rem;
font-weight: 700;
color: rgba(222,184,135,0.45);
text-transform: uppercase;
letter-spacing: 0.12em;
padding: 0.8rem 1.2rem 0.3rem;
}
.nav-link {
display: flex;
align-items: center;
gap: 0.65rem;
padding: 0.65rem 1.2rem;
color: rgba(250,235,215,0.65);
text-decoration: none;
font-size: 0.85rem;
font-weight: 500;
border-left: 3px solid transparent;
transition: all 0.15s;
}
.nav-link:hover {
background: rgba(222,184,135,0.08);
color: var(--cream);
border-left-color: rgba(222,184,135,0.4);
}
.nav-link.active {
background: rgba(160,82,45,0.25);
color: var(--sand);
border-left-color: var(--brown);
font-weight: 700;
}
.nav-icon { font-size: 1rem; width: 18px; text-align: center; }
.sidebar-footer {
padding: 1rem 1.2rem;
border-top: 1px solid rgba(222,184,135,0.15);
font-size: 0.65rem;
color: rgba(222,184,135,0.35);
line-height: 1.5;
}
/* ─── ОСНОВНОЙ КОНТЕНТ ──────────────────────────────────────── */
.main-wrapper {
margin-left: var(--sidebar-w);
flex: 1;
display: flex;
flex-direction: column;
min-height: 100vh;
}
.topbar {
background: var(--white);
border-bottom: 1px solid var(--border);
padding: 0.9rem 2rem;
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
position: sticky;
top: 0;
z-index: 100;
}
.topbar-title {
font-size: 1.2rem;
font-weight: 700;
color: var(--text);
letter-spacing: -0.01em;
}
.topbar-title span {
display: inline-block;
width: 4px;
height: 1.1em;
background: var(--brown);
border-radius: 2px;
margin-right: 0.6rem;
vertical-align: middle;
}
.topbar-actions { display: flex; gap: 0.5rem; }
.page-body {
flex: 1;
padding: 1.8rem 2rem;
}
/* ─── FLASH ─────────────────────────────────────────────────── */
.flash-container { margin-bottom: 1.2rem; }
.flash {
padding: 0.7rem 1rem 0.7rem 1.2rem;
border-radius: 6px;
margin-bottom: 0.4rem;
font-size: 0.85rem;
font-weight: 600;
border-left: 4px solid;
}
.flash-success { background: #F0FAF0; border-color: var(--success); color: #2A5C25; }
.flash-error { background: #FDF2F2; border-color: var(--error); color: var(--error); }
/* ─── СТАТИСТИКА ────────────────────────────────────────────── */
.stats-bar {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 1rem;
margin-bottom: 1.5rem;
}
.stat-card {
background: var(--white);
border: 1px solid var(--border);
border-radius: 8px;
padding: 1rem 1.3rem;
position: relative;
overflow: hidden;
}
.stat-card::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 3px;
background: var(--brown);
}
.stat-label {
font-size: 0.65rem;
font-weight: 700;
color: var(--text-light);
text-transform: uppercase;
letter-spacing: 0.08em;
margin-bottom: 0.4rem;
}
.stat-value {
font-size: 1.8rem;
font-weight: 700;
color: var(--brown);
line-height: 1;
}
/* ─── ФИЛЬТРЫ ───────────────────────────────────────────────── */
.filter-bar {
background: var(--white);
border: 1px solid var(--border);
border-radius: 8px;
padding: 1rem 1.3rem;
display: flex;
flex-wrap: wrap;
gap: 1rem;
align-items: flex-end;
margin-bottom: 1.2rem;
}
.filter-group { display: flex; flex-direction: column; gap: 0.3rem; }
.filter-group label {
font-size: 0.65rem;
font-weight: 700;
color: var(--text-light);
text-transform: uppercase;
letter-spacing: 0.08em;
}
.filter-btns { flex-direction: row; align-items: flex-end; }
/* ─── ИНПУТЫ ────────────────────────────────────────────────── */
.form-input {
font-family: Verdana, sans-serif;
font-size: 0.85rem;
border: 1.5px solid var(--border);
border-radius: 6px;
padding: 0.48rem 0.8rem;
background: var(--white);
color: var(--text);
outline: none;
transition: border-color 0.18s, box-shadow 0.18s;
min-width: 130px;
}
.form-input:focus {
border-color: var(--brown);
box-shadow: 0 0 0 3px rgba(160,82,45,0.1);
}
.form-textarea { resize: vertical; min-height: 80px; width: 100%; }
/* ─── КНОПКИ ────────────────────────────────────────────────── */
.btn {
display: inline-flex;
align-items: center;
gap: 0.3rem;
padding: 0.48rem 1rem;
border-radius: 6px;
font-family: Verdana, sans-serif;
font-size: 0.82rem;
font-weight: 700;
cursor: pointer;
border: 1.5px solid transparent;
text-decoration: none;
transition: all 0.15s;
letter-spacing: 0.01em;
}
.btn:hover { transform: translateY(-1px); }
.btn:active { transform: none; }
.btn-primary { background: var(--brown); color: var(--white); border-color: var(--brown); }
.btn-primary:hover { background: #8B4520; border-color: #8B4520; }
.btn-secondary { background: var(--white); color: var(--text-mid); border-color: var(--border); }
.btn-secondary:hover { border-color: var(--brown); color: var(--brown); }
.btn-edit { background: var(--white); color: #3A6A18; border-color: #B0D080; font-size: 0.78rem; }
.btn-edit:hover { background: #F0FAE8; }
.btn-danger { background: var(--white); color: var(--error); border-color: #DDAAAA; font-size: 0.78rem; }
.btn-danger:hover { background: #FDF2F2; }
.btn-sm { padding: 0.3rem 0.65rem; font-size: 0.76rem; }
/* ─── ТАБЛИЦА ───────────────────────────────────────────────── */
.table-wrapper {
background: var(--white);
border: 1px solid var(--border);
border-radius: 8px;
overflow: hidden;
box-shadow: 0 1px 6px var(--shadow);
}
.data-table {
width: 100%;
border-collapse: collapse;
font-size: 0.83rem;
}
.data-table thead tr {
background: var(--cream);
border-bottom: 2px solid var(--sand);
}
.data-table th {
padding: 0.7rem 1rem;
text-align: left;
font-weight: 700;
font-size: 0.67rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--text-mid);
white-space: nowrap;
}
.data-table td {
padding: 0.62rem 1rem;
border-bottom: 1px solid var(--border);
vertical-align: middle;
color: var(--text);
}
.data-table tbody tr:last-child td { border-bottom: none; }
.data-table tbody tr:hover { background: #FBF6F0; }
.calc-col { color: var(--text-mid); }
.highlight-col strong { color: var(--brown); font-size: 0.92rem; }
.low-stock { color: var(--error); font-weight: 700; }
.table-meta {
padding: 0.6rem 0.2rem;
font-size: 0.75rem;
color: var(--text-light);
}
/* ─── БЕЙДЖ ─────────────────────────────────────────────────── */
.badge {
display: inline-block;
background: var(--cream);
color: var(--brown);
border-radius: 4px;
padding: 0.12rem 0.5rem;
font-size: 0.7rem;
font-weight: 700;
border: 1px solid var(--sand);
white-space: nowrap;
letter-spacing: 0.02em;
}
code {
background: var(--cream);
color: var(--brown);
padding: 0.1rem 0.35rem;
border-radius: 3px;
font-size: 0.76rem;
border: 1px solid var(--sand);
}
/* ─── ФОРМА ─────────────────────────────────────────────────── */
.form-card {
background: var(--white);
border: 1px solid var(--border);
border-radius: 8px;
padding: 2rem;
max-width: 860px;
}
.form-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1.2rem;
}
.form-group { display: flex; flex-direction: column; gap: 0.3rem; }
.form-group.full-width { grid-column: 1 / -1; }
.form-label {
font-size: 0.68rem;
font-weight: 700;
color: var(--text-mid);
text-transform: uppercase;
letter-spacing: 0.08em;
}
.required { color: var(--error); }
.form-actions {
display: flex;
gap: 0.75rem;
margin-top: 1.6rem;
padding-top: 1.2rem;
border-top: 1px solid var(--border);
}
/* ─── РАСЧЁТ ────────────────────────────────────────────────── */
.calc-preview {
background: var(--cream);
border: 1px solid var(--sand);
border-radius: 8px;
padding: 1.2rem 1.5rem;
margin-top: 1.3rem;
}
.calc-title {
font-weight: 700;
color: var(--brown);
margin-bottom: 0.8rem;
font-size: 0.82rem;
text-transform: uppercase;
letter-spacing: 0.06em;
}
.calc-row {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.38rem 0;
border-bottom: 1px solid rgba(160,82,45,0.12);
font-size: 0.85rem;
color: var(--text-mid);
}
.calc-row:last-child { border-bottom: none; }
.total-row {
font-weight: 700;
color: var(--brown);
font-size: 1rem;
padding-top: 0.6rem;
color: var(--text);
}
.preview-qty-input { width: 80px; text-align: center; }
/* ─── RESPONSIVE ────────────────────────────────────────────── */
@media (max-width: 900px) {
.sidebar { display: none; }
.main-wrapper { margin-left: 0; }
.stats-bar { grid-template-columns: 1fr 1fr; }
.form-grid { grid-template-columns: 1fr; }
.form-group.full-width { grid-column: 1; }
}
/* ─── СОРТИРОВКА ────────────────────────────────────────────── */
.sort-bar {
display: flex;
align-items: center;
gap: 0.5rem;
margin-bottom: 1rem;
font-size: 0.8rem;
color: var(--text-light);
flex-wrap: wrap;
}