ci / api / api (push) Successful in 56s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 1m23s
ci / db / db (push) Successful in 1m8s
ci / recommender / recommender (push) Failing after 40s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m25s
ci / ts / ts (packages + web) (push) Successful in 7m20s
374 lines
6.1 KiB
CSS
374 lines
6.1 KiB
CSS
.list {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 14px;
|
|
}
|
|
|
|
.card {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
gap: 14px 20px;
|
|
padding: 20px 22px;
|
|
border-radius: var(--radius-lg);
|
|
background: var(--surface-a);
|
|
border: 1px solid var(--line);
|
|
}
|
|
|
|
.cardHead {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 4px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.cardTitle {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
flex-wrap: wrap;
|
|
font-size: 17px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.location {
|
|
font-family: var(--font-mono);
|
|
font-size: 13px;
|
|
color: var(--text2);
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.message {
|
|
font-size: 13px;
|
|
color: var(--danger);
|
|
}
|
|
|
|
.cardActions {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
gap: 8px;
|
|
flex-wrap: wrap;
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
.cardFoot {
|
|
grid-column: 1 / -1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
}
|
|
|
|
.typeBadge {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
height: 22px;
|
|
padding: 0 9px;
|
|
border-radius: var(--radius-pill);
|
|
background: var(--surface3);
|
|
color: var(--text2);
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.status {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 7px;
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.status::before {
|
|
content: '';
|
|
width: 7px;
|
|
height: 7px;
|
|
border-radius: 50%;
|
|
background: currentColor;
|
|
}
|
|
|
|
.st_mounted {
|
|
color: var(--ok);
|
|
}
|
|
|
|
.st_error {
|
|
color: var(--danger);
|
|
}
|
|
|
|
.st_pending {
|
|
color: var(--warn);
|
|
}
|
|
|
|
.st_disabled {
|
|
color: var(--text3);
|
|
}
|
|
|
|
.scan {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
}
|
|
|
|
.scanText,
|
|
.scanSummary {
|
|
font-size: 13px;
|
|
color: var(--text2);
|
|
}
|
|
|
|
.scanError {
|
|
font-size: 13px;
|
|
color: var(--danger);
|
|
}
|
|
|
|
.retryRow {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 16px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.analysisActions { display: flex; flex-wrap: wrap; gap: 8px; }
|
|
.analysisErrors { display: grid; gap: 16px; list-style: none; margin: 16px 0; padding: 0; }
|
|
.analysisErrors li { display: grid; gap: 6px; padding-bottom: 16px; border-bottom: 1px solid var(--line); overflow-wrap: anywhere; }
|
|
.analysisPath { font-size: 12px; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
|
|
.errorDetail {
|
|
display: block;
|
|
margin-top: 4px;
|
|
color: var(--text3);
|
|
word-break: break-word;
|
|
}
|
|
|
|
.bar {
|
|
height: 6px;
|
|
border-radius: 3px;
|
|
background: var(--surface3);
|
|
overflow: hidden;
|
|
}
|
|
|
|
.bar span {
|
|
display: block;
|
|
height: 100%;
|
|
background: linear-gradient(90deg, var(--accent), var(--violet));
|
|
transition: width 0.4s;
|
|
}
|
|
|
|
.scanPath {
|
|
font-size: 12px;
|
|
color: var(--text3);
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.indeterminate span {
|
|
width: 35%;
|
|
animation: scanActivity 1.5s ease-in-out infinite alternate;
|
|
}
|
|
|
|
@keyframes scanActivity {
|
|
from { transform: translateX(0); }
|
|
to { transform: translateX(185%); }
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.indeterminate span { animation: none; }
|
|
}
|
|
|
|
.test {
|
|
font-size: 13px;
|
|
}
|
|
|
|
.testOk {
|
|
color: var(--ok);
|
|
}
|
|
|
|
.testFail {
|
|
color: var(--danger);
|
|
}
|
|
|
|
.picker {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
max-height: 240px;
|
|
overflow-y: auto;
|
|
padding: 6px;
|
|
border-radius: var(--radius-md);
|
|
background: var(--surface2);
|
|
border: 1px solid var(--line2);
|
|
}
|
|
|
|
.crumbs {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
flex-wrap: wrap;
|
|
padding: 4px 6px;
|
|
font-family: var(--font-mono);
|
|
font-size: 13px;
|
|
color: var(--text2);
|
|
}
|
|
|
|
.dir {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
height: 34px;
|
|
padding: 0 8px;
|
|
border-radius: 8px;
|
|
text-align: left;
|
|
font-size: 14px;
|
|
}
|
|
|
|
.dir:hover {
|
|
background: var(--hover);
|
|
}
|
|
|
|
.dirIcon {
|
|
color: var(--accent2);
|
|
}
|
|
|
|
.label {
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: var(--text2);
|
|
}
|
|
|
|
.field {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
}
|
|
|
|
.excludedDirs {
|
|
width: 100%;
|
|
box-sizing: border-box;
|
|
resize: vertical;
|
|
border: 1px solid var(--line2);
|
|
border-radius: var(--radius-md);
|
|
padding: 10px 12px;
|
|
background: var(--surface2);
|
|
color: var(--text);
|
|
font: 13px var(--font-mono);
|
|
}
|
|
.excludedDirs:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
.excludedDirs:disabled { opacity: 0.6; }
|
|
|
|
.tiles {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
|
|
gap: 12px;
|
|
}
|
|
|
|
.tile {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 4px;
|
|
padding: 16px 18px;
|
|
border-radius: var(--radius-lg);
|
|
background: var(--surface-a);
|
|
border: 1px solid var(--line);
|
|
}
|
|
|
|
.tileValue {
|
|
font-family: var(--font-display);
|
|
font-size: 26px;
|
|
font-weight: 600;
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
|
|
.tileLabel {
|
|
font-size: 13px;
|
|
color: var(--text2);
|
|
}
|
|
|
|
.patternRow {
|
|
display: grid;
|
|
grid-template-columns: 28px minmax(0, 1fr) auto;
|
|
align-items: start;
|
|
gap: 10px;
|
|
}
|
|
|
|
.patternNum {
|
|
height: 48px;
|
|
margin-top: 22px;
|
|
display: grid;
|
|
place-items: center;
|
|
color: var(--text3);
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
|
|
.patternTools {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 2px;
|
|
height: 48px;
|
|
}
|
|
|
|
.check {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
margin-right: 6px;
|
|
font-size: 13px;
|
|
color: var(--text2);
|
|
}
|
|
|
|
.groups {
|
|
font-family: var(--font-mono);
|
|
font-size: 12px;
|
|
color: var(--text3);
|
|
}
|
|
|
|
.match {
|
|
font-family: var(--font-mono);
|
|
font-size: 12px;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.noMatch {
|
|
color: var(--warn);
|
|
}
|
|
|
|
.result {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 2px;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.result b {
|
|
font-weight: 600;
|
|
}
|
|
|
|
.fromTags {
|
|
color: var(--text3);
|
|
font-size: 12px;
|
|
}
|
|
|
|
@media (max-width: 767px) {
|
|
.card {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.cardActions {
|
|
justify-content: flex-start;
|
|
}
|
|
}
|
|
|
|
.checkRow {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
@media (max-width: 767px) {
|
|
.card { padding: 16px; }
|
|
.cardActions > button { flex: 1 1 auto; }
|
|
.retryRow { flex-wrap: wrap; gap: 10px; }
|
|
.patternRow { grid-template-columns: 20px minmax(0, 1fr); }
|
|
.patternTools { grid-column: 2; margin-top: 0 !important; height: auto; flex-wrap: wrap; }
|
|
.patternTools .check { flex-basis: 100%; min-height: 44px; }
|
|
.patternTools > button { width: 44px; min-width: 44px; padding: 0; }
|
|
.dir { min-height: 44px; height: auto; padding: 8px; overflow-wrap: anywhere; }
|
|
}
|