Files
Cognitive_Agent/apps/web-console/self-repair.css

1391 lines
38 KiB
CSS

/* Seat self-repair workspace --------------------------------------------- */
.console-v2[data-module="self-repair"] {
--repair-deep-blue: var(--v2-accent-strong);
--repair-active-blue: color-mix(in srgb, var(--v2-accent) 58%, white);
--repair-pending: #a7b0b4;
--repair-warn: #d69738;
--repair-danger: #c45656;
--repair-heading: color-mix(in srgb, var(--v2-accent-strong) 78%, #1f2c33);
--repair-ink: color-mix(in srgb, var(--v2-accent-strong) 24%, #34434b);
--repair-muted: color-mix(in srgb, var(--v2-accent) 18%, #748185);
--repair-soft: color-mix(in srgb, var(--v2-accent-soft) 42%, white);
--repair-soft-strong: color-mix(in srgb, var(--v2-accent-soft) 72%, white);
--repair-surface: rgba(255, 255, 255, 0.9);
--repair-line: color-mix(in srgb, var(--v2-accent) 15%, transparent);
}
.console-v2[data-module="self-repair"] .section-kicker {
color: var(--v2-accent);
}
.console-v2 .v2-repair-sidebar,
.console-v2 .v2-repair-footer,
.console-v2 .v2-self-repair {
display: none;
}
.console-v2[data-module="self-repair"] .v2-control-section,
.console-v2[data-module="self-repair"] .v2-config-section,
.console-v2[data-module="self-repair"] .v2-sidebar > .v2-sidebar-footer:not(.v2-repair-footer),
.console-v2[data-module="self-repair"] .v2-operation-shell,
.console-v2[data-module="self-repair"] .v2-output-shell {
display: none;
}
.console-v2[data-module="self-repair"] .v2-role-select .v2-dropdown-trigger {
pointer-events: none;
}
.console-v2[data-module="self-repair"] .v2-role-select .v2-dropdown-caret {
display: none;
}
.console-v2[data-module="self-repair"] .v2-repair-sidebar {
min-height: 0;
display: flex;
flex: 1;
flex-direction: column;
margin-top: clamp(22px, 3.5vh, 42px);
overflow: hidden;
}
.console-v2[data-module="self-repair"] .v2-repair-footer {
display: grid;
}
.console-v2.v2-sidebar-collapsed[data-module="self-repair"] .v2-repair-sidebar,
.console-v2.v2-sidebar-collapsed[data-module="self-repair"] .v2-repair-footer {
display: none;
}
.console-v2[data-module="self-repair"] .main-panel {
grid-template-rows: 36px minmax(0, 1fr);
}
.console-v2[data-module="self-repair"] .v2-self-repair {
min-width: 0;
min-height: 0;
display: grid;
grid-row: 2;
grid-template-rows: auto minmax(0, 1fr);
gap: 11px;
padding: var(--v2-module-title-block) 0 0;
overflow: hidden;
}
.v2-repair-sidebar > .v2-field-caption {
display: block;
margin: 0 0 8px;
color: var(--repair-muted);
font-size: 13px;
font-weight: 750;
}
.v2-repair-view-switch {
display: grid;
gap: 7px;
}
.v2-repair-view-switch button {
min-height: var(--v2-sidebar-item-height);
display: grid;
grid-template-columns: 30px minmax(0, 1fr);
align-items: center;
gap: 10px;
padding: 6px 15px;
color: color-mix(in srgb, var(--v2-accent-strong) 56%, #65787a);
background: transparent;
border: 1px solid transparent;
border-radius: 13px;
text-align: left;
cursor: pointer;
transition: 160ms ease;
}
.v2-repair-view-switch button:hover {
color: var(--v2-accent-strong);
background: color-mix(in srgb, var(--v2-accent-soft) 34%, white);
border-color: color-mix(in srgb, var(--v2-accent) 10%, white);
}
.v2-repair-view-switch button.active {
color: #111f20;
background: rgba(255, 255, 255, 0.94);
border-color: color-mix(in srgb, var(--v2-accent) 18%, white);
box-shadow: 0 10px 28px color-mix(in srgb, var(--v2-accent) 10%, transparent);
}
.v2-repair-view-switch button > svg {
width: 19px;
height: 19px;
justify-self: center;
color: color-mix(in srgb, var(--v2-accent) 76%, #718486);
}
.v2-repair-view-switch button.active > svg {
color: var(--v2-accent);
}
.v2-repair-view-switch button > span {
min-width: 0;
display: grid;
gap: 2px;
}
.v2-repair-view-switch strong,
.v2-repair-view-switch small {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.v2-repair-view-switch strong {
font-size: 15px;
line-height: 1.2;
}
.v2-repair-view-switch small {
color: color-mix(in srgb, var(--v2-accent) 34%, #829092);
font-size: 9px;
font-weight: 600;
}
.v2-repair-view-switch button.active small {
color: color-mix(in srgb, var(--v2-accent-strong) 62%, #829092);
}
.v2-repair-config-stack {
display: grid;
gap: 8px;
padding-left: 9px;
border-left: 1px solid color-mix(in srgb, var(--v2-accent) 14%, transparent);
}
.v2-repair-config-card {
min-width: 0;
min-height: var(--v2-sidebar-card-height);
display: grid;
grid-template-columns: 28px minmax(0, 1fr) auto;
align-items: center;
gap: 8px;
padding: 6px 8px;
color: var(--repair-ink);
background: rgba(255, 255, 255, 0.72);
border: 1px solid rgba(255, 255, 255, 0.78);
border-radius: var(--v2-sidebar-card-radius);
}
.v2-repair-config-card > svg {
width: 17px;
height: 17px;
color: var(--v2-accent);
}
.v2-repair-config-card > div {
min-width: 0;
display: grid;
gap: 1px;
}
.v2-repair-config-card small {
color: var(--repair-muted);
font-size: 8px;
font-weight: 650;
}
.v2-repair-config-card strong {
overflow: hidden;
color: var(--repair-heading);
margin-top: 2px;
font-size: 11px;
text-overflow: ellipsis;
white-space: nowrap;
}
.v2-repair-config-card > span {
padding: 3px 5px;
color: var(--v2-accent-strong);
background: color-mix(in srgb, var(--v2-accent-soft) 68%, white);
border-radius: 5px;
font: 800 7px/1.1 "IBM Plex Mono", Consolas, monospace;
}
.repair-execution-card .v2-config-card-select,
.repair-execution-card .v2-custom-select {
min-width: 0;
}
.repair-execution-card .v2-dropdown-trigger {
min-height: 18px;
padding: 0;
color: var(--repair-heading);
background: transparent;
border: 0;
font-size: 11px;
font-weight: 800;
box-shadow: none;
}
.v2-repair-config-note {
margin: 8px 2px 0;
color: var(--repair-muted);
font-size: 10px;
line-height: 1.45;
}
.v2-repair-heading {
min-width: 0;
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
align-items: start;
gap: 16px;
margin-inline: var(--v2-module-title-inline);
padding: 0;
}
.v2-repair-heading h1 {
margin: 2px 0 2px;
color: var(--v2-accent-strong);
font-size: clamp(21px, 2vw, 30px);
line-height: 1;
letter-spacing: -0.045em;
}
.v2-repair-heading p {
margin: 0;
color: var(--repair-muted);
font-size: 11px;
}
.v2-repair-status-grid {
display: grid;
grid-template-columns: repeat(3, minmax(105px, 1fr));
gap: 7px;
}
.v2-repair-status-grid > div {
min-width: 0;
min-height: 43px;
display: grid;
grid-template-columns: 8px minmax(0, 1fr);
align-items: center;
gap: 7px;
padding: 7px 10px;
background: rgba(255, 255, 255, 0.7);
border: 1px solid var(--repair-line);
border-radius: 12px;
}
.v2-repair-status-grid i {
width: 7px;
height: 7px;
border-radius: 50%;
background: #a8b3b3;
box-shadow: 0 0 0 3px rgba(132, 150, 150, 0.09);
}
.v2-repair-status-grid i[data-state="online"] {
background: #2aa694;
box-shadow: 0 0 0 3px rgba(42, 166, 148, 0.12);
}
.v2-repair-status-grid i[data-state="working"] {
background: var(--repair-active-blue);
box-shadow: 0 0 0 3px rgba(115, 166, 232, 0.15);
}
.v2-repair-status-grid span {
min-width: 0;
display: grid;
}
.v2-repair-status-grid small {
color: var(--repair-muted);
font-size: 8px;
}
.v2-repair-status-grid strong {
overflow: hidden;
color: var(--repair-ink);
font-size: 11px;
text-overflow: ellipsis;
white-space: nowrap;
}
.v2-repair-view {
min-width: 0;
min-height: 0;
display: grid;
grid-template-rows: auto minmax(0, 1fr);
gap: 9px;
overflow: hidden;
}
.v2-repair-view[hidden] {
display: none;
}
.v2-repair-toolbar {
min-width: 0;
min-height: 52px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 8px 11px;
background: rgba(255, 255, 255, 0.66);
border: 1px solid var(--repair-line);
border-radius: 14px;
}
.v2-repair-toolbar > div:first-child {
min-width: 0;
display: flex;
align-items: center;
gap: 10px;
}
.v2-repair-toolbar > div:first-child > span {
color: var(--v2-accent);
font: 800 11px "IBM Plex Mono", Consolas, monospace;
}
.v2-repair-toolbar h2,
.v2-repair-toolbar p {
margin: 0;
}
.v2-repair-toolbar h2 {
color: var(--repair-heading);
font-size: 16px;
}
.v2-repair-toolbar p {
overflow: hidden;
color: var(--repair-muted);
font-size: 9px;
text-overflow: ellipsis;
white-space: nowrap;
}
.v2-repair-toolbar > div:last-child {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 6px;
}
.v2-repair-toolbar button {
min-height: 32px;
display: inline-flex;
align-items: center;
gap: 5px;
padding: 0 10px;
color: var(--repair-ink);
background: rgba(255, 255, 255, 0.86);
border: 1px solid var(--repair-line);
border-radius: 10px;
font-size: 10px;
font-weight: 750;
cursor: pointer;
transition: color 160ms ease, background 160ms ease, border-color 160ms ease, box-shadow 160ms ease, transform 160ms ease;
}
.v2-repair-toolbar button svg {
width: 13px;
height: 13px;
}
.v2-repair-toolbar button:hover:not(:disabled) {
color: var(--v2-accent-strong);
border-color: color-mix(in srgb, var(--v2-accent) 30%, white);
transform: translateY(-1px);
}
.v2-repair-toolbar button.primary {
color: #fff;
background: linear-gradient(145deg, var(--v2-accent), var(--v2-accent-strong));
border-color: color-mix(in srgb, var(--v2-accent-strong) 74%, transparent);
box-shadow: 0 7px 16px color-mix(in srgb, var(--v2-accent) 21%, transparent);
}
.v2-repair-toolbar button.primary:hover:not(:disabled) {
color: #fff;
background: linear-gradient(145deg, color-mix(in srgb, var(--v2-accent) 86%, white), var(--v2-accent-strong));
border-color: var(--v2-accent-strong);
box-shadow: 0 10px 22px color-mix(in srgb, var(--v2-accent) 30%, transparent);
}
.v2-repair-toolbar button.primary:active:not(:disabled) {
color: #fff;
background: var(--v2-accent-strong);
box-shadow: 0 3px 9px color-mix(in srgb, var(--v2-accent) 24%, transparent);
transform: translateY(0);
}
.v2-repair-toolbar button.danger {
color: #a63f47;
background: #fff0f1;
border-color: #efc4c7;
box-shadow: none;
}
.v2-repair-toolbar button:focus-visible {
outline: 2px solid color-mix(in srgb, var(--v2-accent) 42%, white);
outline-offset: 2px;
}
.v2-repair-toolbar button:disabled {
cursor: not-allowed;
opacity: 0.48;
}
.v2-repair-toolbar button.primary:disabled {
color: color-mix(in srgb, var(--v2-accent-strong) 42%, white);
background: var(--v2-accent-soft);
border-color: color-mix(in srgb, var(--v2-accent) 16%, white);
box-shadow: none;
opacity: 1;
}
.v2-repair-software-grid {
min-width: 0;
min-height: 0;
display: grid;
grid-template-areas: "twin cases logs";
grid-template-columns: minmax(280px, 1.18fr) minmax(210px, 0.72fr) minmax(360px, 1.4fr);
gap: 9px;
overflow: hidden;
}
.v2-repair-panel {
min-width: 0;
min-height: 0;
overflow: hidden;
background: var(--repair-surface);
border: 1px solid var(--repair-line);
border-radius: 16px;
box-shadow: 0 12px 32px color-mix(in srgb, var(--v2-accent) 7%, transparent);
}
.v2-repair-panel > header {
min-height: 49px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
padding: 9px 12px;
border-bottom: 1px solid var(--repair-line);
}
.v2-repair-panel > header h2,
.v2-repair-panel > header p {
margin: 0;
}
.v2-repair-panel > header h2 {
color: var(--repair-heading);
font-size: 14px;
}
.v2-repair-panel > header b {
color: var(--v2-accent-strong);
font: 800 10px "IBM Plex Mono", Consolas, monospace;
}
.v2-repair-cases-panel {
grid-area: cases;
display: grid;
grid-template-rows: auto auto minmax(0, 1fr) auto;
}
.v2-repair-injection-note {
margin: 9px 10px 6px;
padding: 8px 9px;
color: var(--repair-muted);
background: color-mix(in srgb, var(--v2-accent-soft) 66%, white);
border-radius: 9px;
font-size: 8px;
line-height: 1.5;
}
.v2-repair-case-list {
min-height: 0;
display: grid;
align-content: start;
gap: 6px;
padding: 0 10px 8px;
overflow: auto;
}
.v2-repair-case-list button {
min-width: 0;
min-height: 51px;
display: grid;
grid-template-columns: 29px minmax(0, 1fr) 7px;
align-items: center;
gap: 8px;
padding: 7px 9px;
color: var(--repair-ink);
background: var(--repair-soft);
border: 1px solid transparent;
border-radius: 12px;
text-align: left;
cursor: pointer;
}
.v2-repair-case-list button.selected {
background: color-mix(in srgb, var(--v2-accent-soft) 76%, white);
border-color: color-mix(in srgb, var(--v2-accent) 72%, white);
box-shadow: none;
}
.v2-repair-case-list button > span {
color: var(--v2-accent-strong);
font: 800 12px "IBM Plex Mono", Consolas, monospace;
}
.v2-repair-case-list button > div {
min-width: 0;
display: grid;
gap: 2px;
}
.v2-repair-case-list strong,
.v2-repair-case-list small {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.v2-repair-case-list strong {
font-size: 11px;
}
.v2-repair-case-list small {
color: var(--repair-muted);
font-size: 8px;
}
.v2-repair-case-list button > i {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--repair-pending);
}
.v2-repair-case-list button[data-state="active"] > i { background: var(--repair-active-blue); }
.v2-repair-case-list button[data-state="complete"] > i { background: var(--repair-deep-blue); }
.v2-repair-case-list button[data-state="failed"] > i { background: var(--repair-danger); }
.v2-repair-injection-footer {
display: grid;
gap: 6px;
padding: 9px 10px 10px;
border-top: 1px solid var(--repair-line);
}
.v2-repair-injection-footer small,
.v2-repair-injection-footer > span {
overflow: hidden;
color: var(--repair-muted);
font-size: 8px;
text-overflow: ellipsis;
white-space: nowrap;
}
.v2-repair-injection-footer > span {
padding: 6px 7px;
color: #9a6428;
background: #fff4e7;
border-radius: 7px;
text-align: center;
}
.v2-repair-injection-footer button {
min-height: 34px;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
color: #fff;
background: linear-gradient(145deg, var(--v2-accent), var(--v2-accent-strong));
border: 1px solid var(--v2-accent-strong);
border-radius: 9px;
font-size: 10px;
font-weight: 750;
cursor: pointer;
}
.v2-repair-injection-footer button svg { width: 13px; height: 13px; }
.v2-repair-injection-footer button:disabled { color: var(--repair-muted); background: var(--repair-soft); border-color: var(--repair-line); cursor: not-allowed; }
.v2-repair-twin-panel,
.v2-repair-log-panel {
display: grid;
grid-template-rows: auto minmax(0, 1fr);
}
.v2-repair-twin-panel { grid-area: twin; }
.v2-repair-log-panel {
grid-area: logs;
grid-template-rows: auto auto auto minmax(0, 1fr);
}
.v2-repair-seat-viewer {
min-height: 0;
position: relative;
overflow: hidden;
cursor: grab;
touch-action: none;
user-select: none;
background:
radial-gradient(circle at 52% 38%, rgba(255, 255, 255, 0.95), transparent 34%),
linear-gradient(150deg, color-mix(in srgb, var(--v2-accent-soft) 42%, white), color-mix(in srgb, var(--v2-accent-soft) 76%, #dfe7ef));
}
.v2-repair-seat-viewer.dragging {
cursor: grabbing;
}
#repairSeatCanvas {
width: 100%;
height: 100%;
display: block;
pointer-events: none;
}
.v2-repair-orbit-hint,
.v2-repair-twin-live {
pointer-events: none;
}
.v2-repair-seat-viewer.fallback #repairSeatCanvas { visibility: hidden; }
.v2-repair-seat-fallback {
--repair-slide: 2px;
--repair-lift: -1px;
--repair-back: -20deg;
--repair-leg: 7deg;
position: absolute;
inset: 5px 8px 72px;
display: grid;
place-items: center;
perspective: 680px;
}
.repair-css-seat {
width: 164px;
height: 250px;
position: relative;
filter: drop-shadow(20px 24px 18px color-mix(in srgb, var(--v2-accent-strong) 22%, transparent));
transform: translate3d(0, var(--repair-lift), 0) rotateX(4deg) rotateY(-23deg);
transform-style: preserve-3d;
transition: transform 360ms ease;
}
.repair-css-seat > div {
position: absolute;
border: 1px solid color-mix(in srgb, var(--v2-accent-strong) 22%, transparent);
box-shadow: inset -9px -8px 14px color-mix(in srgb, var(--v2-accent-strong) 16%, transparent), inset 8px 6px 15px rgba(255, 255, 255, 0.55);
transform-style: preserve-3d;
}
.repair-css-back {
width: 104px;
height: 128px;
top: 38px;
left: 31px;
z-index: 3;
overflow: hidden;
background: linear-gradient(145deg, color-mix(in srgb, var(--v2-accent-soft) 76%, white), color-mix(in srgb, var(--v2-accent) 58%, white));
border-radius: 34px 34px 23px 23px;
transform: rotateX(var(--repair-back));
transform-origin: 50% 100%;
transition: transform 360ms ease;
}
.repair-css-back::before,
.repair-css-cushion::before {
position: absolute;
inset: 13px 19px;
content: "";
background: repeating-linear-gradient(105deg, color-mix(in srgb, var(--v2-accent) 22%, transparent) 0 2px, transparent 2px 10px);
border: 1px solid rgba(255, 255, 255, 0.25);
border-radius: 24px;
}
.repair-css-back i,
.repair-css-cushion i {
position: absolute;
inset: 0;
background: radial-gradient(circle at 48% 44%, color-mix(in srgb, var(--v2-accent) 34%, transparent), transparent 43%);
opacity: 0;
transition: opacity 260ms ease;
}
.repair-css-headrest {
width: 68px;
height: 45px;
top: 0;
left: 49px;
z-index: 4;
background: linear-gradient(145deg, color-mix(in srgb, var(--v2-accent-soft) 72%, white), color-mix(in srgb, var(--v2-accent) 54%, white));
border-radius: 25px 25px 18px 18px;
}
.repair-css-headrest::before,
.repair-css-headrest::after {
width: 4px;
height: 20px;
position: absolute;
bottom: -16px;
content: "";
background: color-mix(in srgb, var(--v2-accent-strong) 64%, #83909b);
}
.repair-css-headrest::before { left: 20px; }
.repair-css-headrest::after { right: 20px; }
.repair-css-cushion {
width: 126px;
height: 75px;
top: 152px;
left: 20px;
z-index: 4;
overflow: hidden;
background: linear-gradient(150deg, color-mix(in srgb, var(--v2-accent-soft) 74%, white), color-mix(in srgb, var(--v2-accent) 56%, white));
border-radius: 25px 25px 31px 31px;
transform: translateZ(23px) translateY(var(--repair-lift)) rotateX(65deg) translateZ(10px);
transition: transform 360ms ease;
}
.repair-css-cushion::before { inset: 10px 20px; }
.repair-css-legrest {
width: 85px;
height: 63px;
top: 202px;
left: 40px;
z-index: 2;
background: linear-gradient(160deg, color-mix(in srgb, var(--v2-accent-soft) 68%, white), color-mix(in srgb, var(--v2-accent-strong) 58%, white));
border-radius: 17px 17px 25px 25px;
transform: rotateX(var(--repair-leg)) translateZ(8px);
transform-origin: 50% 0;
transition: transform 360ms ease;
}
.repair-css-base {
width: 103px;
height: 30px;
top: 207px;
left: 31px;
z-index: 1;
background: var(--v2-accent-strong);
border-radius: 8px 8px 17px 17px;
transform: translate3d(0, 17px, -28px);
}
.repair-css-rails {
width: 130px;
height: 38px;
top: 233px;
left: 17px;
border: 0 !important;
box-shadow: none !important;
transform: translateX(var(--repair-slide));
transition: transform 360ms ease;
}
.repair-css-rails i {
width: 9px;
height: 78px;
position: absolute;
top: -25px;
background: linear-gradient(color-mix(in srgb, var(--v2-accent) 36%, #a6afb7), var(--v2-accent-strong));
border-radius: 5px;
transform: rotateX(70deg);
}
.repair-css-rails i:first-child { left: 26px; }
.repair-css-rails i:last-child { right: 26px; }
.repair-css-halo {
width: 225px;
height: 75px;
position: absolute;
bottom: 2px;
border: 2px solid color-mix(in srgb, var(--v2-accent) 30%, transparent);
border-radius: 50%;
box-shadow: 0 0 25px color-mix(in srgb, var(--v2-accent) 16%, transparent);
}
.v2-repair-seat-fallback.active .repair-css-halo { animation: repair-halo 1.4s ease-in-out infinite; }
.v2-repair-seat-fallback.failed .repair-css-halo { border-color: rgba(201, 77, 81, 0.7); }
.v2-repair-seat-fallback.heating .repair-css-back i,
.v2-repair-seat-fallback.heating .repair-css-cushion i { background: radial-gradient(circle, rgba(241, 131, 69, 0.52), transparent 55%); opacity: 1; }
.v2-repair-seat-fallback.ventilating .repair-css-back i,
.v2-repair-seat-fallback.ventilating .repair-css-cushion i { opacity: 1; }
@keyframes repair-halo {
50% { opacity: 0.46; transform: scale(1.08); }
}
.v2-repair-model-loading {
position: absolute;
inset: 0;
z-index: 2;
display: grid;
place-content: center;
place-items: center;
gap: 5px;
color: var(--repair-heading);
background: color-mix(in srgb, var(--v2-accent-soft) 76%, rgba(255, 255, 255, 0.9));
transition: opacity 240ms ease, visibility 240ms ease;
}
.v2-repair-seat-viewer.ready .v2-repair-model-loading {
visibility: hidden;
opacity: 0;
}
.v2-repair-model-loading > span {
width: 24px;
height: 24px;
border: 2px solid color-mix(in srgb, var(--v2-accent) 20%, transparent);
border-top-color: var(--v2-accent);
border-radius: 50%;
animation: repair-spin 800ms linear infinite;
}
.v2-repair-model-loading strong { font-size: 12px; }
.v2-repair-model-loading small { color: var(--repair-muted); font-size: 8px; }
@keyframes repair-spin { to { transform: rotate(360deg); } }
.v2-repair-orbit-hint {
position: absolute;
top: 9px;
left: 50%;
padding: 5px 8px;
color: #fff;
background: color-mix(in srgb, var(--v2-accent-strong) 76%, transparent);
border-radius: 7px;
font-size: 8px;
transform: translateX(-50%);
white-space: nowrap;
}
.v2-repair-twin-live {
position: absolute;
right: 8px;
bottom: 8px;
left: 8px;
padding: 8px;
color: #f2f6ff;
background: color-mix(in srgb, var(--v2-accent-strong) 88%, rgba(13, 28, 49, 0.9));
border: 1px solid rgba(255, 255, 255, 0.14);
border-radius: 12px;
backdrop-filter: blur(8px);
}
.v2-repair-twin-live > div:first-child {
min-width: 0;
display: grid;
grid-template-columns: auto minmax(0, 1fr) auto;
align-items: center;
gap: 7px;
}
.v2-repair-twin-live small,
.v2-repair-twin-live b {
padding: 3px 5px;
border-radius: 6px;
font-size: 7px;
white-space: nowrap;
}
.v2-repair-twin-live small { background: color-mix(in srgb, var(--v2-accent) 32%, transparent); }
.v2-repair-twin-live strong { overflow: hidden; font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
.v2-repair-twin-live b { color: #ffe4a9; background: rgba(196, 137, 45, 0.22); }
#repairAxisStrip {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 5px;
margin-top: 7px;
}
#repairAxisStrip > span {
min-width: 0;
display: grid;
grid-template-columns: auto minmax(10px, 1fr) auto;
align-items: center;
gap: 3px;
font-size: 7px;
}
#repairAxisStrip i {
height: 3px;
position: relative;
overflow: hidden;
background: rgba(255, 255, 255, 0.18);
border-radius: 999px;
}
#repairAxisStrip i::after {
width: var(--position);
height: 100%;
display: block;
content: "";
background: var(--repair-active-blue);
}
#repairAxisStrip > span.active i::after { background: #a9c8ff; }
#repairAxisStrip em { font-style: normal; }
#repairTwinReaction {
margin: 6px 0 0;
overflow: hidden;
color: #c9d8ef;
font-size: 7px;
text-overflow: ellipsis;
white-space: nowrap;
}
.v2-repair-log-panel > header > b {
padding: 6px 10px;
border-radius: 999px;
font-size: 11px;
}
.v2-repair-log-panel > header h2 { font-size: 16px; }
.v2-repair-log-panel > header > b[data-state="healthy"] { color: #19805e; background: #e6f6ef; }
.v2-repair-log-panel > header > b[data-state="repairing"] { color: #a86a1f; background: #fff2de; }
.v2-repair-log-panel > header > b[data-state="fault"] { color: #ad4248; background: #fdebed; }
.v2-repair-log-panel > header > b[data-state="idle"] { color: var(--repair-muted); background: var(--repair-soft); }
.v2-repair-log-summary {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 6px;
padding: 9px 10px;
border-bottom: 1px solid var(--repair-line);
}
.v2-repair-log-summary > div {
min-width: 0;
padding: 9px 10px;
background: var(--repair-soft);
border-radius: 9px;
}
.v2-repair-log-summary small { display: block; overflow: hidden; color: var(--repair-muted); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
.v2-repair-log-summary strong { display: block; margin-top: 5px; color: var(--repair-heading); font: 800 15px "IBM Plex Mono", Consolas, monospace; }
.v2-repair-log-toolbar {
min-height: 44px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
padding: 5px 10px;
border-bottom: 1px solid var(--repair-line);
}
.v2-repair-log-toolbar > div { display: flex; gap: 3px; }
.v2-repair-log-toolbar button { padding: 6px 9px; color: var(--repair-muted); background: transparent; border: 0; border-radius: 7px; font-size: 10px; font-weight: 750; cursor: pointer; }
.v2-repair-log-toolbar button.active { color: var(--v2-accent-strong); background: var(--v2-accent-soft); }
.v2-repair-log-toolbar > span { display: inline-flex; align-items: center; gap: 6px; color: var(--repair-muted); font-size: 9px; white-space: nowrap; }
.v2-repair-log-toolbar > span i { width: 7px; height: 7px; background: #26916d; border-radius: 50%; }
.v2-repair-event-stream {
min-height: 0;
padding: 4px 10px 10px;
overflow: auto;
}
.v2-repair-event-stream article {
min-height: 88px;
position: relative;
display: grid;
grid-template-columns: 78px 14px minmax(0, 1fr);
gap: 8px;
padding: 11px 0;
border-bottom: 1px solid var(--repair-line);
}
.v2-repair-event-stream article > time { padding-top: 3px; color: var(--repair-muted); font: 9px "IBM Plex Mono", Consolas, monospace; }
.v2-repair-event-stream article > i { width: 11px; height: 11px; z-index: 1; margin-top: 3px; background: var(--v2-accent); border: 2px solid #fff; border-radius: 50%; box-shadow: 0 0 0 1px var(--repair-line); }
.v2-repair-event-stream article:not(:last-child)::after { width: 1px; position: absolute; top: 27px; bottom: -2px; left: 91px; content: ""; background: var(--repair-line); }
.v2-repair-event-stream article[data-kind="fault"] > i { background: var(--repair-danger); }
.v2-repair-event-stream article[data-kind="diagnosis"] > i,
.v2-repair-event-stream article[data-kind="repair"] > i { background: var(--repair-warn); }
.v2-repair-event-stream article[data-kind="success"] > i,
.v2-repair-event-stream article[data-kind="heartbeat"] > i { background: #248b67; }
.v2-repair-event-stream article > div { min-width: 0; }
.v2-repair-event-stream article header { min-height: 21px; display: flex; align-items: center; gap: 8px; padding: 0; border: 0; }
.v2-repair-event-stream article header span { padding: 3px 5px; color: var(--repair-muted); background: var(--repair-soft); border-radius: 5px; font-size: 9px; font-weight: 750; }
.v2-repair-event-stream article header strong { overflow: hidden; color: var(--repair-ink); font-size: 13px; text-overflow: ellipsis; white-space: nowrap; }
.v2-repair-event-stream article[data-kind="fault"] header strong { color: var(--repair-danger); }
.v2-repair-event-stream article[data-kind="diagnosis"] header strong,
.v2-repair-event-stream article[data-kind="repair"] header strong { color: #a7681d; }
.v2-repair-event-stream article[data-kind="success"] header strong,
.v2-repair-event-stream article[data-kind="heartbeat"] header strong { color: #197c5c; }
.v2-repair-event-stream article p { margin: 5px 0 0; color: var(--repair-muted); font-size: 10px; line-height: 1.55; }
.v2-repair-event-stream article footer { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
.v2-repair-event-stream article footer span { padding: 3px 6px; color: var(--repair-muted); background: var(--repair-soft); border-radius: 5px; font-size: 9px; }
.v2-repair-log-empty { height: 100%; display: grid; place-content: center; justify-items: center; gap: 6px; padding: 24px; color: var(--repair-muted); text-align: center; }
.v2-repair-log-empty svg { width: 24px; height: 24px; color: var(--v2-accent); }
.v2-repair-log-empty strong { color: var(--repair-ink); font-size: 14px; }
.v2-repair-log-empty span { max-width: 280px; font-size: 10px; line-height: 1.6; }
.v2-repair-view[data-repair-page="hardware"] {
overflow: auto;
grid-template-rows: auto minmax(120px, auto) minmax(360px, 1fr);
}
.v2-repair-link-panel > header p {
max-width: 45%;
overflow: hidden;
color: var(--repair-muted);
font-size: 9px;
text-overflow: ellipsis;
white-space: nowrap;
}
.v2-repair-link-layers {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 1px;
padding: 8px 10px 4px;
}
.v2-repair-link-layers > div {
min-width: 0;
position: relative;
display: grid;
gap: 3px;
padding: 7px 10px;
background: var(--repair-soft);
}
.v2-repair-link-layers > div:not(:last-child)::after {
position: absolute;
top: 50%;
right: -4px;
z-index: 1;
content: "→";
color: #879495;
transform: translateY(-50%);
}
.v2-repair-link-layers small { color: var(--repair-muted); font-size: 8px; }
.v2-repair-link-layers strong { overflow: hidden; color: var(--repair-ink); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
.v2-repair-link-layers [data-state="OK"] strong { color: #238879; }
.v2-repair-link-layers [data-state="WARN"] strong { color: #b1782d; }
#repairLinkDetail {
margin: 1px 11px 8px;
color: var(--repair-muted);
font-size: 8px;
}
.v2-repair-hardware-grid {
min-width: 0;
min-height: 0;
display: grid;
grid-template-columns: minmax(190px, 0.66fr) minmax(500px, 1.58fr) minmax(210px, 0.72fr);
gap: 9px;
}
.v2-repair-groups-panel,
.v2-repair-connectors-panel,
.v2-repair-pin-panel {
display: grid;
grid-template-rows: auto minmax(0, 1fr);
}
#repairHardwareGroups {
min-height: 0;
display: grid;
align-content: start;
gap: 6px;
padding: 9px;
overflow: auto;
}
#repairHardwareGroups button {
min-width: 0;
display: grid;
grid-template-columns: 3px minmax(0, 1fr) auto;
align-items: center;
gap: 8px;
padding: 8px;
color: var(--repair-ink);
background: var(--repair-soft);
border: 0;
border-radius: 10px;
text-align: left;
}
#repairHardwareGroups button > i {
width: 3px;
height: 100%;
min-height: 28px;
background: #a7b2b2;
border-radius: 999px;
}
#repairHardwareGroups button[data-state="OK"] > i { background: #2b9e8d; }
#repairHardwareGroups button[data-state="WARN"] > i { background: var(--repair-warn); }
#repairHardwareGroups button[data-state="FAULT"] > i { background: var(--repair-danger); }
#repairHardwareGroups button > div { min-width: 0; display: grid; gap: 2px; }
#repairHardwareGroups strong,
#repairHardwareGroups small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#repairHardwareGroups strong { font-size: 9px; }
#repairHardwareGroups small { color: var(--repair-muted); font-size: 7px; }
#repairHardwareGroups span { color: var(--repair-muted); font-size: 7px; }
.v2-repair-connectors-panel > header {
min-height: 58px;
}
.v2-repair-pin-legend {
display: flex;
flex-wrap: wrap;
justify-content: flex-end;
gap: 3px 5px;
color: var(--repair-muted);
font-size: 7px;
}
.v2-repair-pin-legend span {
width: 7px;
height: 7px;
display: inline-block;
border-radius: 2px;
background: #aeb8b9;
}
.v2-repair-pin-legend span[data-state="OK"] { background: #2b9e8d; }
.v2-repair-pin-legend span[data-state="IDLE"] { background: var(--repair-active-blue); }
.v2-repair-pin-legend span[data-state="WARN"] { background: var(--repair-warn); }
.v2-repair-pin-legend span[data-state="FAULT"] { background: var(--repair-danger); }
#repairConnectors {
min-height: 0;
display: grid;
grid-template-columns: 0.82fr 0.88fr 1.15fr;
gap: 8px;
padding: 9px;
overflow: auto;
}
.v2-repair-connector {
min-width: 0;
min-height: 0;
display: grid;
grid-template-rows: auto minmax(0, 1fr);
padding: 7px;
background: var(--repair-soft);
border: 1px solid var(--repair-line);
border-radius: 11px;
}
.v2-repair-connector > header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 5px;
margin-bottom: 5px;
}
.v2-repair-connector > header strong { color: var(--repair-heading); font-size: 10px; }
.v2-repair-connector > header span { color: var(--repair-muted); font-size: 6px; }
.v2-repair-connector-body {
min-height: 0;
position: relative;
padding: 4px;
border: 1px solid color-mix(in srgb, var(--v2-accent) 18%, #aeb9ba);
border-radius: 3px;
}
.v2-repair-connector-body > div {
height: 100%;
display: grid;
align-content: space-between;
gap: 2px;
}
.v2-repair-connector-body > div > span {
min-width: 0;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 3px;
}
.v2-repair-connector-body button {
min-width: 0;
min-height: 18px;
display: grid;
grid-template-columns: 20px minmax(0, 1fr);
align-items: center;
gap: 2px;
padding: 1px 3px;
overflow: hidden;
color: var(--repair-ink);
background: var(--repair-soft-strong);
border: 1px solid transparent;
border-radius: 4px;
cursor: pointer;
}
.v2-repair-connector-body button b {
font: 800 7px "IBM Plex Mono", Consolas, monospace;
}
.v2-repair-connector-body button small {
overflow: hidden;
font-size: 5.5px;
text-overflow: ellipsis;
white-space: nowrap;
}
.v2-repair-connector-body button[data-state="OK"] { color: #176f64; background: #ddf2ee; }
.v2-repair-connector-body button[data-state="IDLE"] { color: #315e94; background: #dfebfa; }
.v2-repair-connector-body button[data-state="WARN"] { color: #8d5d20; background: #fbedd6; }
.v2-repair-connector-body button[data-state="FAULT"] { color: #963f3f; background: #f8dddd; }
.v2-repair-connector-body button[data-state="NOT_USED"] { color: #abb3b4; background: #f2f4f4; }
.v2-repair-connector-body button.selected { border-color: var(--v2-accent); box-shadow: 0 0 0 1px color-mix(in srgb, var(--v2-accent) 16%, transparent); }
.v2-repair-connector-body .keying {
width: 5px;
height: 18px;
position: absolute;
left: -6px;
background: #f8faf9;
border: 1px solid #9da9aa;
}
.v2-repair-connector-body .k1 { top: 9%; }
.v2-repair-connector-body .k2 { top: 27%; }
.v2-repair-connector-body .k3 { top: 50%; }
.v2-repair-connector-body .k4 { top: 72%; }
#repairPinDetail {
min-height: 0;
padding: 9px 10px;
overflow: auto;
}
#repairPinDetail dl { margin: 0; }
#repairPinDetail dl > div { padding: 7px 0; border-bottom: 1px solid var(--repair-line); }
#repairPinDetail dt { color: var(--repair-muted); font-size: 7px; }
#repairPinDetail dd { margin: 2px 0 0; color: var(--repair-ink); font-size: 9px; font-weight: 750; line-height: 1.35; }
#repairPinDetail section { margin-top: 11px; }
#repairPinDetail h3 { margin: 0 0 5px; color: var(--repair-heading); font-size: 10px; }
#repairPinDetail ul,
#repairPinDetail ol { display: grid; gap: 4px; margin: 0; padding-left: 15px; color: #6f8183; font-size: 8px; line-height: 1.4; }
.v2-repair-pin-panel > header b[data-state="OK"] { color: #258a7b; }
.v2-repair-pin-panel > header b[data-state="WARN"] { color: var(--repair-warn); }
.v2-repair-pin-panel > header b[data-state="FAULT"] { color: var(--repair-danger); }
.v2-repair-dialog {
width: min(820px, calc(100vw - 40px));
max-height: min(680px, calc(100vh - 50px));
padding: 0;
overflow: hidden;
color: var(--repair-ink);
background: color-mix(in srgb, var(--v2-accent-soft) 24%, white);
border: 1px solid var(--repair-line);
border-radius: 17px;
box-shadow: 0 28px 80px rgba(16, 45, 48, 0.24);
}
.v2-repair-dialog::backdrop { background: rgba(15, 38, 41, 0.42); backdrop-filter: blur(4px); }
.v2-repair-dialog > header { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px; border-bottom: 1px solid var(--repair-line); }
.v2-repair-dialog > header > div { display: grid; gap: 2px; }
.v2-repair-dialog > header strong { font-size: 15px; }
.v2-repair-dialog > header small { color: #819092; font-size: 9px; }
.v2-repair-dialog > header button { width: 29px; height: 29px; padding: 0; color: var(--repair-ink); background: var(--repair-soft-strong); border: 0; border-radius: 9px; font-size: 18px; cursor: pointer; }
.v2-repair-dialog > div { max-height: 570px; padding: 13px 16px 18px; overflow: auto; }
.v2-repair-dialog table { width: 100%; border-collapse: collapse; font-size: 9px; }
.v2-repair-dialog th,
.v2-repair-dialog td { padding: 7px; border-bottom: 1px solid var(--repair-line); text-align: left; }
.v2-repair-dialog th { color: var(--repair-muted); background: var(--repair-soft-strong); }
.v2-repair-confirm-dialog { width: min(460px, calc(100vw - 32px)); }
.v2-repair-confirm-dialog #repairConfirmMessage { margin: 0; color: var(--repair-ink); font-size: 13px; line-height: 1.7; }
.v2-repair-confirm-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 18px; }
.v2-repair-confirm-actions button { min-width: 104px; }
.v2-repair-report-path { padding: 7px 9px; overflow-wrap: anywhere; color: var(--repair-muted); background: var(--repair-soft-strong); border-radius: 8px; font: 8px "IBM Plex Mono", Consolas, monospace; }
.v2-repair-event-list { display: grid; gap: 5px; margin-top: 10px; }
.v2-repair-event-list article { display: grid; gap: 2px; padding: 7px 9px; background: var(--repair-soft); border-radius: 8px; }
.v2-repair-event-list strong { font-size: 9px; }
.v2-repair-event-list span { color: #758587; font-size: 8px; }
@media (max-height: 820px) {
.console-v2[data-module="self-repair"] .v2-repair-sidebar {
margin-top: 14px;
}
.v2-repair-sidebar .v2-section-heading h2 {
margin-bottom: 10px;
}
.v2-repair-sidebar > .v2-field-caption {
margin-bottom: 5px;
font-size: 11px;
}
.v2-repair-view-switch button {
min-height: 48px;
grid-template-columns: 21px minmax(0, 1fr);
padding: 4px 9px;
}
.v2-repair-view-switch button > svg {
width: 17px;
height: 17px;
}
.v2-repair-view-switch strong {
font-size: 10px;
}
.v2-repair-view-switch small {
font-size: 8px;
}
.v2-repair-config-card {
min-height: 38px;
}
}
@media (max-width: 1220px) {
.v2-repair-heading { grid-template-columns: minmax(0, 1fr); }
.v2-repair-status-grid { display: none; }
.v2-repair-software-grid { grid-template-columns: minmax(260px, 1fr) minmax(190px, 0.68fr) minmax(330px, 1.25fr); }
.v2-repair-toolbar button { padding-inline: 8px; }
.v2-repair-toolbar button svg { display: none; }
.v2-repair-hardware-grid { grid-template-columns: minmax(180px, 0.62fr) minmax(450px, 1.5fr) minmax(190px, 0.68fr); }
}
@media (max-width: 960px) {
.console-v2[data-module="self-repair"] .v2-self-repair { overflow: auto; }
.v2-repair-view { min-height: 900px; overflow: visible; }
.v2-repair-software-grid {
grid-template-areas: "twin cases" "logs logs";
grid-template-columns: minmax(330px, 1fr) 210px;
grid-template-rows: 410px 390px;
}
.v2-repair-hardware-grid { min-width: 920px; }
.v2-repair-toolbar { align-items: flex-start; flex-direction: column; }
.v2-repair-toolbar > div:last-child { width: 100%; justify-content: flex-start; flex-wrap: wrap; }
}