533 lines
12 KiB
CSS
533 lines
12 KiB
CSS
/* ---------------------------------------------------------
|
||
FLUENT UI 2 — BASE VARIABLES
|
||
--------------------------------------------------------- */
|
||
:root {
|
||
--color-primary: #0f6cbd;
|
||
--color-primary-hover: #115ea3;
|
||
--color-primary-light: #d0e7ff;
|
||
--color-bg: #ffffff;
|
||
--color-bg-alt: #f5f5f5;
|
||
--color-bg-neutral: #f3f2f1;
|
||
--color-border: #d1d1d1;
|
||
--color-border-strong: #b5b5b5;
|
||
--color-text: #1a1a1a;
|
||
--color-text-secondary: #5e5e5e;
|
||
--color-text-tertiary: #8a8a8a;
|
||
--color-critical: #d13438;
|
||
--color-critical-bg: #f8d7da;
|
||
--color-warning: #ffaa44;
|
||
--color-warning-bg: #fff4ce;
|
||
--color-info: #0f6cbd;
|
||
--color-info-bg: #d0e7ff;
|
||
--radius-s: 4px;
|
||
--radius-m: 6px;
|
||
--radius-l: 8px;
|
||
--space-xs: 4px;
|
||
--space-s: 8px;
|
||
--space-m: 12px;
|
||
--space-l: 16px;
|
||
--space-xl: 20px;
|
||
--space-xxl: 28px;
|
||
--font-s: 12px;
|
||
--font-m: 14px;
|
||
--font-l: 16px;
|
||
--font-xl: 18px;
|
||
--z-tabs: 1000;
|
||
--z-header: 900;
|
||
}
|
||
|
||
/* ---------------------------------------------------------
|
||
RESET
|
||
--------------------------------------------------------- */
|
||
* {
|
||
margin: 0;
|
||
padding: 0;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
body {
|
||
font-family: "Segoe UI", sans-serif;
|
||
background: var(--color-bg-neutral);
|
||
color: var(--color-text);
|
||
line-height: 1.5;
|
||
}
|
||
|
||
/* ---------------------------------------------------------
|
||
FILE REPORT WRAPPER
|
||
--------------------------------------------------------- */
|
||
.file-report {
|
||
display: none;
|
||
padding-bottom: 120px;
|
||
}
|
||
|
||
.file-report.active {
|
||
display: block;
|
||
}
|
||
|
||
/* ---------------------------------------------------------
|
||
FILE TITLE (STICKY)
|
||
--------------------------------------------------------- */
|
||
.file-title-container {
|
||
position: sticky;
|
||
top: 0;
|
||
z-index: var(--z-header);
|
||
background: var(--color-bg);
|
||
border-bottom: 1px solid var(--color-border);
|
||
padding: var(--space-l) var(--space-xl);
|
||
}
|
||
|
||
.file-title {
|
||
font-size: var(--font-xl);
|
||
font-weight: 600;
|
||
color: var(--color-text);
|
||
}
|
||
|
||
/* ---------------------------------------------------------
|
||
SEVERITY SECTIONS (FLUENT UI 2 STYLE)
|
||
--------------------------------------------------------- */
|
||
.severity-section {
|
||
background: var(--color-bg);
|
||
border: 1px solid var(--color-border);
|
||
border-radius: var(--radius-l);
|
||
padding: var(--space-xl);
|
||
margin: var(--space-xl) var(--space-xl);
|
||
}
|
||
|
||
.severity-section.critical {
|
||
border-left: 4px solid var(--color-critical);
|
||
}
|
||
|
||
.severity-section.warning {
|
||
border-left: 4px solid var(--color-warning);
|
||
}
|
||
|
||
.severity-section.info {
|
||
border-left: 4px solid var(--color-info);
|
||
}
|
||
|
||
.severity-header {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
margin-bottom: var(--space-l);
|
||
padding-bottom: var(--space-s);
|
||
border-bottom: 1px solid var(--color-border);
|
||
}
|
||
|
||
.severity-title h2 {
|
||
font-size: var(--font-l);
|
||
font-weight: 600;
|
||
}
|
||
|
||
.severity-count {
|
||
background: var(--color-bg-alt);
|
||
padding: var(--space-xs) var(--space-s);
|
||
border-radius: var(--radius-s);
|
||
font-size: var(--font-s);
|
||
color: var(--color-text-secondary);
|
||
}
|
||
|
||
/* ---------------------------------------------------------
|
||
GRID TABLE (REPLACES <table>)
|
||
--------------------------------------------------------- */
|
||
.grid-table {
|
||
display: grid;
|
||
gap: var(--space-xs);
|
||
}
|
||
|
||
.grid-header,
|
||
.grid-row {
|
||
display: grid;
|
||
grid-template-columns: 40px 60px 60px 250px 1fr;
|
||
gap: var(--space-xs);
|
||
padding: var(--space-s);
|
||
border-radius: var(--radius-s);
|
||
}
|
||
|
||
.grid-header {
|
||
background: var(--color-bg-alt);
|
||
font-weight: 600;
|
||
color: var(--color-text-secondary);
|
||
font-size: var(--font-s);
|
||
}
|
||
|
||
.grid-row {
|
||
background: var(--color-bg);
|
||
border: 1px solid var(--color-border);
|
||
font-size: var(--font-m);
|
||
}
|
||
|
||
.grid-row:hover {
|
||
background: var(--color-bg-alt);
|
||
}
|
||
|
||
/* ---------------------------------------------------------
|
||
SUMMARY SECTION
|
||
--------------------------------------------------------- */
|
||
.summary-section {
|
||
background: var(--color-bg);
|
||
border: 1px solid var(--color-border);
|
||
border-radius: var(--radius-l);
|
||
padding: var(--space-xl);
|
||
margin: var(--space-xl);
|
||
}
|
||
|
||
.summary-header h2 {
|
||
font-size: var(--font-l);
|
||
margin-bottom: var(--space-m);
|
||
}
|
||
|
||
.summary-stats-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
|
||
gap: var(--space-m);
|
||
margin-bottom: var(--space-l);
|
||
}
|
||
|
||
.stat-card {
|
||
background: var(--color-bg-alt);
|
||
border-radius: var(--radius-m);
|
||
padding: var(--space-m);
|
||
text-align: center;
|
||
}
|
||
|
||
.stat-value {
|
||
font-size: var(--font-xl);
|
||
font-weight: 600;
|
||
}
|
||
|
||
.stat-label {
|
||
font-size: var(--font-s);
|
||
color: var(--color-text-secondary);
|
||
}
|
||
|
||
/* Progress bar */
|
||
.progress-bar {
|
||
display: flex;
|
||
height: 8px;
|
||
border-radius: var(--radius-s);
|
||
overflow: hidden;
|
||
background: var(--color-border);
|
||
}
|
||
|
||
.progress-fill.critical {
|
||
background: var(--color-critical);
|
||
}
|
||
|
||
.progress-fill.warning {
|
||
background: var(--color-warning);
|
||
}
|
||
|
||
.progress-fill.info {
|
||
background: var(--color-info);
|
||
}
|
||
|
||
/* ---------------------------------------------------------
|
||
FILE CARDS IN SUMMARY
|
||
--------------------------------------------------------- */
|
||
.files-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
|
||
gap: var(--space-m);
|
||
}
|
||
|
||
.file-card {
|
||
background: var(--color-bg-alt);
|
||
border-radius: var(--radius-m);
|
||
padding: var(--space-m);
|
||
}
|
||
|
||
.file-name-small {
|
||
font-weight: 600;
|
||
font-size: var(--font-m);
|
||
}
|
||
|
||
.file-card-bottom {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
margin-top: var(--space-s);
|
||
}
|
||
|
||
.file-violations {
|
||
display: flex;
|
||
gap: var(--space-xs);
|
||
}
|
||
|
||
.violation-badge {
|
||
padding: var(--space-xs) var(--space-s);
|
||
border-radius: var(--radius-s);
|
||
font-size: var(--font-s);
|
||
color: var(--color-text);
|
||
}
|
||
|
||
.violation-badge.critical {
|
||
background: var(--color-critical-bg);
|
||
color: var(--color-critical);
|
||
}
|
||
|
||
.violation-badge.warning {
|
||
background: var(--color-warning-bg);
|
||
color: var(--color-warning);
|
||
}
|
||
|
||
.violation-badge.info {
|
||
background: var(--color-info-bg);
|
||
color: var(--color-info);
|
||
}
|
||
|
||
/* ---------------------------------------------------------
|
||
TABS (STICKY BOTTOM)
|
||
--------------------------------------------------------- */
|
||
.tabs-container {
|
||
position: fixed;
|
||
bottom: 0;
|
||
left: 0;
|
||
right: 0;
|
||
background: var(--color-bg);
|
||
border-top: 1px solid var(--color-border);
|
||
padding: var(--space-s) var(--space-l);
|
||
z-index: var(--z-tabs);
|
||
}
|
||
|
||
.tabs {
|
||
display: flex;
|
||
gap: var(--space-s);
|
||
overflow-x: auto;
|
||
padding-bottom: var(--space-xs);
|
||
}
|
||
|
||
.tab {
|
||
background: var(--color-bg-alt);
|
||
border: 1px solid var(--color-border);
|
||
border-radius: var(--radius-m);
|
||
padding: var(--space-s) var(--space-m);
|
||
cursor: pointer;
|
||
font-size: var(--font-m);
|
||
font-weight: 500;
|
||
color: var(--color-text-secondary);
|
||
min-width: 140px;
|
||
text-align: left;
|
||
}
|
||
|
||
.tab:hover {
|
||
background: var(--color-bg-neutral);
|
||
}
|
||
|
||
.tab.active {
|
||
background: var(--color-primary-light);
|
||
border-color: var(--color-primary);
|
||
color: var(--color-primary);
|
||
}
|
||
|
||
.tab-inner {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
gap: var(--space-s);
|
||
}
|
||
|
||
.tab-counters {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 2px;
|
||
}
|
||
|
||
.tab-counter {
|
||
font-size: var(--font-s);
|
||
padding: 2px 4px;
|
||
border-radius: var(--radius-s);
|
||
text-align: center;
|
||
}
|
||
|
||
.tab-counter.critical {
|
||
background: var(--color-critical-bg);
|
||
color: var(--color-critical);
|
||
}
|
||
|
||
.tab-counter.warning {
|
||
background: var(--color-warning-bg);
|
||
color: var(--color-warning);
|
||
}
|
||
|
||
.tab-counter.info {
|
||
background: var(--color-info-bg);
|
||
color: var(--color-info);
|
||
}
|
||
|
||
.tab-counter.empty {
|
||
opacity: 0.3;
|
||
}
|
||
|
||
|
||
/* ---------------------------------------------------------
|
||
FLUENT UI 2 — DARK THEME
|
||
--------------------------------------------------------- */
|
||
@media (prefers-color-scheme: dark) {
|
||
:root {
|
||
--color-bg: #1f1f1f;
|
||
--color-bg-alt: #2a2a2a;
|
||
--color-bg-neutral: #2d2d2d;
|
||
--color-text: #f3f3f3;
|
||
--color-text-secondary: #c8c8c8;
|
||
--color-text-tertiary: #9a9a9a;
|
||
--color-border: #3a3a3a;
|
||
--color-border-strong: #4a4a4a;
|
||
--color-primary: #3aa0f3;
|
||
--color-primary-hover: #2899f5;
|
||
--color-primary-light: #0f2b4d;
|
||
--color-critical-bg: #4c191b;
|
||
--color-warning-bg: #4c3b1a;
|
||
--color-info-bg: #0f2b4d;
|
||
}
|
||
|
||
.file-title-container {
|
||
background: var(--color-bg);
|
||
}
|
||
|
||
.severity-section {
|
||
background: var(--color-bg);
|
||
border-color: var(--color-border);
|
||
}
|
||
|
||
.grid-row {
|
||
background: var(--color-bg-alt);
|
||
border-color: var(--color-border);
|
||
}
|
||
|
||
.grid-row:hover {
|
||
background: var(--color-bg-neutral);
|
||
}
|
||
|
||
.summary-section {
|
||
background: var(--color-bg);
|
||
border-color: var(--color-border);
|
||
}
|
||
|
||
.file-card {
|
||
background: var(--color-bg-alt);
|
||
}
|
||
|
||
.tabs-container {
|
||
background: var(--color-bg);
|
||
border-color: var(--color-border);
|
||
}
|
||
|
||
.tab {
|
||
background: var(--color-bg-alt);
|
||
border-color: var(--color-border);
|
||
color: var(--color-text-secondary);
|
||
}
|
||
|
||
.tab.active {
|
||
background: var(--color-primary-light);
|
||
border-color: var(--color-primary);
|
||
color: var(--color-primary);
|
||
}
|
||
}
|
||
|
||
/* ---------------------------------------------------------
|
||
TAB TRANSITIONS
|
||
--------------------------------------------------------- */
|
||
.file-report {
|
||
opacity: 0;
|
||
transform: translateY(6px);
|
||
transition: opacity 0.25s ease, transform 0.25s ease;
|
||
}
|
||
|
||
.file-report.active {
|
||
opacity: 1;
|
||
transform: translateY(0);
|
||
}
|
||
|
||
/* ---------------------------------------------------------
|
||
TAB HOVER & ACTIVE ANIMATION
|
||
--------------------------------------------------------- */
|
||
.tab {
|
||
transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.15s ease;
|
||
}
|
||
|
||
.tab:hover {
|
||
transform: translateY(-1px);
|
||
}
|
||
|
||
.tab.active {
|
||
transform: translateY(-2px);
|
||
}
|
||
|
||
.grid-row {
|
||
transition: background-color 0.15s ease;
|
||
}
|
||
|
||
.file-card {
|
||
transition: background-color 0.2s ease, transform 0.2s ease;
|
||
}
|
||
|
||
.file-card:hover {
|
||
transform: translateY(-2px);
|
||
background: var(--color-bg-neutral);
|
||
}
|
||
|
||
|
||
/* ---------------------------------------------------------
|
||
FIX TAB HEIGHT — MAX 2 LINES
|
||
--------------------------------------------------------- */
|
||
|
||
/* Уменьшаем вертикальные отступы */
|
||
.tab {
|
||
padding: 6px 10px;
|
||
min-height: unset;
|
||
height: auto;
|
||
line-height: 1.25;
|
||
}
|
||
|
||
/* Контейнер таба — выравниваем по верхнему краю */
|
||
.tab-inner {
|
||
align-items: flex-start;
|
||
gap: 6px;
|
||
}
|
||
|
||
/* Текст таба — максимум 2 строки */
|
||
.tab-text {
|
||
font-size: 13px;
|
||
line-height: 1.25;
|
||
display: -webkit-box;
|
||
-webkit-line-clamp: 2; /* максимум 2 строки */
|
||
-webkit-box-orient: vertical;
|
||
overflow: hidden;
|
||
max-height: calc(1.25em * 2); /* ровно 2 строки */
|
||
white-space: normal;
|
||
}
|
||
|
||
/* Счётчики — компактнее */
|
||
.tab-counters {
|
||
gap: 2px;
|
||
min-height: auto;
|
||
}
|
||
|
||
/* Сами счётчики — меньше высота */
|
||
.tab-counter {
|
||
min-width: 14px;
|
||
height: 14px;
|
||
font-size: 10px;
|
||
padding: 0 3px;
|
||
line-height: 14px;
|
||
}
|
||
|
||
/* На мобильных — ещё компактнее */
|
||
@media (max-width: 480px) {
|
||
.tab {
|
||
padding: 4px 8px;
|
||
}
|
||
|
||
.tab-text {
|
||
font-size: 12px;
|
||
max-height: calc(1.2em * 2);
|
||
-webkit-line-clamp: 2;
|
||
}
|
||
|
||
.tab-counter {
|
||
min-width: 12px;
|
||
height: 12px;
|
||
font-size: 9px;
|
||
padding: 0 2px;
|
||
}
|
||
} |