/
Sturon
/
Diplom
Обзор
Документация
Войти
/
Sturon
/
Diplom
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
frontend/src/styles.css
930 строк
16 KB
Sturon
Initial
03 июн 2026, 15:01
03 июн 2026, 15:01
17b44a2
Код
Авторство
О чём код?
:root { color-scheme: light; --bg: #f3f3ef; --bg-strong: #e9e4cf; --panel: rgba(255, 255, 255, 0.88); --panel-strong: rgba(255, 255, 255, 0.98); --text: #111111; --muted: #5b574b; --line: rgba(17, 17, 17, 0.14); --accent: #f4c400; --accent-strong: #d8ab00; --success: #16a34a; --success-strong: #166534; --danger: #dc2626; --warning: #c38c00; --shadow: 0 24px 60px rgba(17, 17, 17, 0.14); --radius-xl: 30px; --radius-lg: 22px; --radius-md: 16px; } * { box-sizing: border-box; } html, body, #root { min-height: 100%; } body { margin: 0; font-family: "Segoe UI Variable", "Bahnschrift", system-ui, sans-serif; color: var(--text); background: radial-gradient(circle at top left, rgba(244, 196, 0, 0.22), transparent 28%), radial-gradient(circle at top right, rgba(17, 17, 17, 0.1), transparent 22%), linear-gradient(180deg, #fffef9 0%, #f3f1e6 44%, #ebe6d5 100%); } body::before { content: ""; position: fixed; inset: 0; background-image: linear-gradient(rgba(17, 17, 17, 0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(17, 17, 17, 0.04) 1px, transparent 1px); background-size: 52px 52px; mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.5), transparent 88%); pointer-events: none; } a { color: inherit; text-decoration: none; } button, input, textarea, select { font: inherit; } button { cursor: pointer; border: none; } img { display: block; max-width: 100%; } .app-shell { display: grid; grid-template-columns: 320px minmax(0, 1fr); min-height: 100vh; } .sidebar { position: sticky; top: 0; display: flex; flex-direction: column; gap: 28px; height: 100vh; padding: 28px; background: linear-gradient(180deg, rgba(10, 10, 10, 0.98), rgba(28, 28, 28, 0.96)), linear-gradient(135deg, rgba(244, 196, 0, 0.12), transparent 40%); color: #f8fafc; backdrop-filter: blur(24px); } .brand-block { display: block; } .brand-block h1, .topbar h2, .hero-panel h3, .panel h3, .profile-card h3 { margin: 0; font-family: "Trebuchet MS", "Segoe UI Variable", sans-serif; letter-spacing: -0.03em; } .logo-placeholder { display: grid; place-items: center; min-height: 108px; padding: 18px; border-radius: 22px; border: 1px dashed rgba(244, 196, 0, 0.42); background: linear-gradient(135deg, rgba(244, 196, 0, 0.18), rgba(255, 255, 255, 0.04)), rgba(255, 255, 255, 0.03); color: #fff0a8; font-weight: 800; letter-spacing: 0.12em; text-align: center; } .eyebrow { margin: 0 0 6px; font-size: 0.76rem; font-weight: 700; letter-spacing: 0.18em; text-transform: uppercase; color: rgba(255, 255, 255, 0.62); } .app-main .eyebrow, .panel .eyebrow, .hero-panel .eyebrow, .profile-card .eyebrow { color: var(--muted); } .nav-stack { display: grid; gap: 10px; } .nav-link { padding: 14px 18px; border-radius: 16px; color: rgba(255, 255, 255, 0.75); transition: 160ms ease; } .nav-link:hover, .nav-link-active { background: linear-gradient(135deg, rgba(244, 196, 0, 0.22), rgba(244, 196, 0, 0.12)); color: #fff2b0; } .sidebar-card { margin-top: auto; display: grid; gap: 10px; padding: 20px; border: 1px solid rgba(244, 196, 0, 0.18); border-radius: 22px; background: linear-gradient(180deg, rgba(244, 196, 0, 0.2), rgba(255, 255, 255, 0.04)), rgba(255, 255, 255, 0.04); } .sidebar-card span { color: rgba(255, 255, 255, 0.7); line-height: 1.55; } .sidebar-status-card { gap: 14px; } .sidebar-status-success { border-color: rgba(34, 197, 94, 0.28); background: linear-gradient(180deg, rgba(34, 197, 94, 0.16), rgba(255, 255, 255, 0.04)), rgba(255, 255, 255, 0.04); } .sidebar-status-error { border-color: rgba(239, 68, 68, 0.3); background: linear-gradient(180deg, rgba(239, 68, 68, 0.16), rgba(255, 255, 255, 0.04)), rgba(255, 255, 255, 0.04); } .sidebar-status-pending { border-color: rgba(255, 255, 255, 0.14); } .status-card-header { display: flex; gap: 14px; align-items: start; } .status-square { width: 14px; height: 14px; margin-top: 5px; border-radius: 4px; flex: 0 0 auto; } .status-square-success { background: #22c55e; box-shadow: 0 0 0 4px rgba(34, 197, 94, 0.16); } .status-square-error { background: #ef4444; box-shadow: 0 0 0 4px rgba(239, 68, 68, 0.16); } .status-square-pending { background: #9ca3af; box-shadow: 0 0 0 4px rgba(156, 163, 175, 0.14); } .sidebar-status-meta { display: grid; gap: 6px; color: rgba(255, 255, 255, 0.78); font-size: 0.92rem; } .app-main { padding: 28px 30px 40px; } .topbar { display: flex; align-items: flex-end; margin-bottom: 28px; } .topbar h2 { font-size: clamp(2rem, 2.6vw, 2.7rem); line-height: 1.05; } .topbar-actions, .hero-actions, .card-actions, .form-actions { display: flex; flex-wrap: wrap; gap: 12px; } .page-container, .stack-lg, .stack-md, .stack-sm { display: grid; } .page-container, .stack-lg { gap: 24px; } .stack-md { gap: 16px; } .stack-sm { gap: 12px; } .content-grid { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(320px, 0.95fr); gap: 24px; } .panel, .hero-panel, .profile-card, .create-card { position: relative; overflow: hidden; border: 1px solid var(--line); border-radius: var(--radius-xl); background: var(--panel); box-shadow: var(--shadow); backdrop-filter: blur(18px); } .hero-panel { display: flex; justify-content: space-between; gap: 24px; padding: 28px 30px; background: radial-gradient(circle at right top, rgba(244, 196, 0, 0.22), transparent 30%), linear-gradient(135deg, rgba(255, 255, 255, 0.98), rgba(247, 243, 224, 0.92)); } .hero-profile { display: flex; gap: 20px; align-items: center; } .hero-preview { width: 180px; height: 120px; object-fit: cover; border-radius: 20px; border: 1px solid var(--line); } .panel { padding: 24px; } .section-heading { display: flex; justify-content: space-between; align-items: start; gap: 16px; margin-bottom: 20px; } .muted-text { color: var(--muted); line-height: 1.6; } .card-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(310px, 1fr)); gap: 22px; } .profile-card { display: grid; min-height: 100%; } .profile-card-link { transition: transform 160ms ease, box-shadow 160ms ease, border-color 160ms ease; } .profile-card-link:hover { transform: translateY(-3px); border-color: rgba(244, 196, 0, 0.28); box-shadow: 0 28px 64px rgba(17, 17, 17, 0.18); } .profile-card-link:focus-visible { outline: 3px solid rgba(244, 196, 0, 0.28); outline-offset: 3px; } .profile-card-media { position: relative; min-height: 214px; } .profile-card-media img, .reference-card img, .gallery-card img, .inspection-row img { width: 100%; height: 100%; object-fit: cover; } .profile-card-body { display: grid; gap: 18px; padding: 22px; } .stat-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .stat-grid.expanded { grid-template-columns: repeat(4, minmax(0, 1fr)); } .stat-chip { display: grid; gap: 6px; padding: 16px 18px; border-radius: 18px; background: rgba(255, 255, 255, 0.92); border: 1px solid rgba(17, 17, 17, 0.08); } .stat-chip span { color: var(--muted); font-size: 0.9rem; } .stat-chip strong { font-size: 1.25rem; } .stat-chip.danger { background: rgba(254, 226, 226, 0.7); } .stat-chip.success { background: rgba(220, 252, 231, 0.86); } .inline-meta { display: flex; flex-wrap: wrap; gap: 10px 16px; color: var(--muted); font-size: 0.92rem; } .status-badge { display: inline-flex; align-items: center; padding: 8px 12px; border-radius: 999px; font-size: 0.78rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; } .status-badge.ok { background: rgba(22, 163, 74, 0.16); color: var(--success-strong); } .status-badge.muted { background: rgba(17, 17, 17, 0.1); color: #383838; } .status-badge.warning { background: rgba(244, 196, 0, 0.18); color: #7d5b00; } .status-badge.danger { background: rgba(239, 68, 68, 0.16); color: #b91c1c; } .profile-card .status-badge { position: absolute; top: 16px; right: 16px; } .primary-button, .ghost-button, .danger-button { display: inline-flex; align-items: center; justify-content: center; min-height: 46px; padding: 0 18px; border-radius: 14px; font-weight: 700; transition: transform 140ms ease, opacity 140ms ease, background 140ms ease; } .primary-button:hover, .ghost-button:hover, .danger-button:hover { transform: translateY(-1px); } .primary-button { background: linear-gradient(135deg, #ffe15b, var(--accent), var(--accent-strong)); color: #111111; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.38); } .ghost-button { border: 1px solid rgba(17, 17, 17, 0.14); background: rgba(255, 255, 255, 0.82); color: var(--text); } .danger-button { background: rgba(220, 38, 38, 0.1); color: var(--danger); } .create-card { display: grid; place-items: center; justify-items: center; align-content: center; gap: 10px; min-height: 320px; padding: 30px; text-align: center; background: radial-gradient(circle at center, rgba(244, 196, 0, 0.18), transparent 46%), linear-gradient(180deg, rgba(255, 255, 255, 0.86), rgba(247, 243, 224, 0.82)); } .create-card strong { max-width: 240px; } .create-card-plus { display: grid; place-items: center; width: 84px; height: 84px; border-radius: 26px; background: rgba(244, 196, 0, 0.18); color: #7d5b00; font-size: 3rem; line-height: 1; } .list-stack { display: grid; gap: 14px; } .list-card, .inspection-row, .reference-card, .defect-card { display: grid; gap: 16px; padding: 16px; border-radius: 18px; background: rgba(255, 255, 255, 0.88); border: 1px solid rgba(17, 17, 17, 0.08); } .list-card { grid-template-columns: minmax(0, 1fr) auto; align-items: center; } .list-card-title { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; margin-bottom: 6px; } .reference-card { grid-template-columns: 220px minmax(0, 1fr); padding: 0; overflow: hidden; } .reference-card img { min-height: 200px; } .reference-card-body { display: grid; gap: 14px; padding: 18px; } .form-grid { display: grid; gap: 18px; } .form-grid label { display: grid; gap: 10px; } .form-grid span { font-weight: 700; } input, textarea, select { width: 100%; padding: 14px 16px; border: 1px solid rgba(17, 17, 17, 0.16); border-radius: 14px; background: rgba(255, 255, 255, 0.94); color: var(--text); } input:focus, textarea:focus, select:focus { outline: 2px solid rgba(244, 196, 0, 0.26); border-color: rgba(216, 171, 0, 0.58); } .checkbox-row { grid-template-columns: auto 1fr; align-items: center; } .checkbox-row input { width: 18px; height: 18px; margin: 0; } .preview-stack { display: grid; gap: 14px; } .preview-row { display: flex; justify-content: space-between; gap: 18px; padding-bottom: 12px; border-bottom: 1px dashed rgba(19, 32, 50, 0.12); } .preview-row span { color: var(--muted); } .inline-error, .error-panel { color: #991b1b; background: rgba(254, 226, 226, 0.85); border: 1px solid rgba(220, 38, 38, 0.18); } .inline-error { padding: 14px 16px; border-radius: 14px; } .gallery-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 14px; } .gallery-card { padding: 0; border-radius: 18px; overflow: hidden; background: rgba(255, 255, 255, 0.94); border: 1px solid rgba(17, 17, 17, 0.08); text-align: left; } .gallery-card img { height: 150px; } .gallery-card-body { display: grid; gap: 4px; padding: 14px; } .inspection-row { grid-template-columns: 140px minmax(0, 1fr) auto; align-items: center; } .inspection-row img { height: 110px; border-radius: 14px; } .inspection-placeholder { min-height: 110px; display: grid; place-items: center; border-radius: 14px; background: rgba(244, 196, 0, 0.14); color: #7d5b00; font-weight: 800; text-align: center; } .modal-backdrop { position: fixed; inset: 0; display: grid; place-items: center; padding: 24px; background: rgba(17, 17, 17, 0.58); backdrop-filter: blur(8px); z-index: 30; } .modal-card { width: min(1180px, 100%); max-height: 90vh; overflow: auto; padding: 24px; border-radius: var(--radius-xl); background: var(--panel-strong); box-shadow: 0 30px 90px rgba(17, 17, 17, 0.32); } .modal-layout { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(300px, 0.75fr); gap: 24px; } .modal-main-image { width: 100%; max-height: 70vh; object-fit: contain; border-radius: 22px; background: #fffdf5; } .defect-card { grid-template-columns: 120px minmax(0, 1fr); align-items: center; } .defect-card img { width: 120px; height: 96px; object-fit: cover; border-radius: 14px; } .roi-editor { display: grid; gap: 14px; } .roi-frame { position: relative; overflow: hidden; border-radius: 24px; border: 1px solid rgba(17, 17, 17, 0.14); background: #fffdf5; } .roi-frame img { width: 100%; user-select: none; } .roi-rectangle { position: absolute; border: 3px solid rgba(244, 196, 0, 0.96); border-radius: 18px; background: rgba(244, 196, 0, 0.16); } .roi-rectangle-active { border-color: rgba(17, 17, 17, 0.95); background: rgba(244, 196, 0, 0.22); box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.28); } .roi-rectangle-secondary { border-color: rgba(244, 196, 0, 0.9); background: rgba(244, 196, 0, 0.14); } .roi-rectangle-draft { border-style: dashed; border-color: rgba(22, 163, 74, 0.92); background: rgba(22, 163, 74, 0.14); } .roi-rectangle span { position: absolute; top: 8px; left: 8px; padding: 6px 10px; border-radius: 999px; background: rgba(17, 17, 17, 0.88); color: #fff6cf; font-size: 0.82rem; } .roi-editor-actions { display: flex; justify-content: space-between; gap: 16px; align-items: center; color: var(--muted); } .roi-zone-list { display: grid; gap: 14px; } .roi-zone-card { display: grid; gap: 14px; padding: 18px; border-radius: 20px; border: 1px solid rgba(17, 17, 17, 0.1); background: linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(247, 243, 224, 0.78)); transition: border-color 140ms ease, box-shadow 140ms ease, transform 140ms ease; } .roi-zone-card:hover { transform: translateY(-1px); border-color: rgba(244, 196, 0, 0.28); box-shadow: 0 20px 40px rgba(17, 17, 17, 0.08); } .roi-zone-card-active { border-color: rgba(216, 171, 0, 0.52); box-shadow: 0 22px 44px rgba(17, 17, 17, 0.1); } .roi-zone-select { display: grid; gap: 6px; justify-items: start; padding: 0; background: transparent; color: var(--text); text-align: left; } .roi-zone-select strong { font-size: 1rem; } .roi-zone-select span { color: var(--muted); font-size: 0.92rem; } .inset-panel { padding: 16px; } .clamp-two-lines { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } code { display: inline-block; padding: 6px 10px; border-radius: 10px; background: rgba(244, 196, 0, 0.12); font-size: 0.88rem; } @media (max-width: 1180px) { .app-shell { grid-template-columns: 1fr; } .sidebar { position: static; height: auto; } .content-grid, .modal-layout { grid-template-columns: 1fr; } .stat-grid.expanded { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 820px) { .app-main { padding: 20px; } .topbar, .hero-panel, .hero-profile, .preview-row, .inspection-row, .reference-card, .list-card { grid-template-columns: 1fr; display: grid; } .topbar, .hero-panel, .hero-profile { align-items: start; } .stat-grid, .stat-grid.expanded { grid-template-columns: 1fr; } .roi-editor-actions, .card-actions, .form-actions, .topbar-actions, .hero-actions { flex-direction: column; align-items: stretch; } .inspection-row img, .reference-card img { min-height: 180px; } }