/* --------------------------------------------------------- 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 ) --------------------------------------------------------- */ .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; } }