1642 lines
30 KiB
CSS
1642 lines
30 KiB
CSS
:root {
|
|
color: #1d1d1f;
|
|
background: #f5f5f7;
|
|
font-family: Inter, "SF Pro Text", "PingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
font-synthesis: none;
|
|
text-rendering: optimizeLegibility;
|
|
--lab-canvas: #f5f5f7;
|
|
--lab-surface: #ffffff;
|
|
--lab-text: #1d1d1f;
|
|
--lab-secondary: #6e6e73;
|
|
--lab-tertiary: #8e8e93;
|
|
--lab-line: #d9d9de;
|
|
--lab-line-soft: #e9e9ed;
|
|
--lab-blue: #007aff;
|
|
--lab-blue-soft: #eef6ff;
|
|
--lab-green: #248a3d;
|
|
--lab-green-soft: #eaf7ed;
|
|
--lab-sidebar: 224px;
|
|
--lab-topbar: 72px;
|
|
--lab-mobile-nav: 74px;
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
html,
|
|
body,
|
|
#vehicle-design-lab-root {
|
|
min-height: 100%;
|
|
margin: 0;
|
|
}
|
|
|
|
body {
|
|
min-width: 320px;
|
|
background: var(--lab-canvas);
|
|
}
|
|
|
|
button,
|
|
input,
|
|
select {
|
|
font: inherit;
|
|
}
|
|
|
|
button {
|
|
color: inherit;
|
|
}
|
|
|
|
button,
|
|
select {
|
|
-webkit-tap-highlight-color: transparent;
|
|
}
|
|
|
|
button:focus-visible,
|
|
input:focus-visible,
|
|
select:focus-visible,
|
|
[tabindex]:focus-visible {
|
|
outline: 3px solid rgba(0, 122, 255, 0.28);
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
.vehicle-design-lab {
|
|
display: grid;
|
|
min-height: 100dvh;
|
|
grid-template-columns: var(--lab-sidebar) minmax(0, 1fr);
|
|
background: var(--lab-canvas);
|
|
}
|
|
|
|
.lab-sidebar {
|
|
position: sticky;
|
|
z-index: 20;
|
|
top: 0;
|
|
display: flex;
|
|
height: 100dvh;
|
|
flex-direction: column;
|
|
border-right: 1px solid var(--lab-line);
|
|
background: rgba(255, 255, 255, 0.96);
|
|
}
|
|
|
|
.lab-brand {
|
|
display: flex;
|
|
height: var(--lab-topbar);
|
|
align-items: center;
|
|
border-bottom: 1px solid var(--lab-line);
|
|
padding: 0 22px;
|
|
}
|
|
|
|
.lab-brand img {
|
|
width: 148px;
|
|
height: auto;
|
|
}
|
|
|
|
.lab-sidebar nav {
|
|
flex: 1;
|
|
padding: 25px 12px 14px;
|
|
}
|
|
|
|
.lab-sidebar nav p {
|
|
margin: 0 10px 9px;
|
|
color: var(--lab-tertiary);
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
letter-spacing: 0.02em;
|
|
}
|
|
|
|
.lab-sidebar nav p:not(:first-child) {
|
|
margin-top: 27px;
|
|
}
|
|
|
|
.lab-sidebar nav button,
|
|
.lab-collapse {
|
|
position: relative;
|
|
display: flex;
|
|
width: 100%;
|
|
min-height: 44px;
|
|
align-items: center;
|
|
gap: 12px;
|
|
border: 0;
|
|
border-radius: 10px;
|
|
background: transparent;
|
|
padding: 0 12px;
|
|
color: #4f5969;
|
|
cursor: pointer;
|
|
font-size: 14px;
|
|
font-weight: 550;
|
|
text-align: left;
|
|
transition: color 160ms ease, background 160ms ease;
|
|
}
|
|
|
|
.lab-sidebar nav button svg,
|
|
.lab-collapse svg {
|
|
width: 18px;
|
|
height: 18px;
|
|
flex: 0 0 auto;
|
|
color: #667286;
|
|
}
|
|
|
|
.lab-sidebar nav button:hover,
|
|
.lab-collapse:hover {
|
|
background: #f2f4f7;
|
|
color: var(--lab-text);
|
|
}
|
|
|
|
.lab-sidebar nav button.is-active {
|
|
background: #eef5ff;
|
|
color: #0068dc;
|
|
}
|
|
|
|
.lab-sidebar nav button.is-active::before {
|
|
position: absolute;
|
|
top: 8px;
|
|
bottom: 8px;
|
|
left: -12px;
|
|
width: 3px;
|
|
border-radius: 0 3px 3px 0;
|
|
background: var(--lab-blue);
|
|
content: "";
|
|
}
|
|
|
|
.lab-sidebar nav button.is-active svg {
|
|
color: var(--lab-blue);
|
|
}
|
|
|
|
.lab-collapse {
|
|
width: auto;
|
|
margin: 0 12px 18px;
|
|
border-radius: 8px;
|
|
}
|
|
|
|
.lab-stage {
|
|
min-width: 0;
|
|
}
|
|
|
|
.lab-topbar {
|
|
position: sticky;
|
|
z-index: 15;
|
|
top: 0;
|
|
display: flex;
|
|
height: var(--lab-topbar);
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
border-bottom: 1px solid var(--lab-line);
|
|
background: rgba(255, 255, 255, 0.92);
|
|
padding: 0 26px;
|
|
backdrop-filter: saturate(145%) blur(18px);
|
|
}
|
|
|
|
.lab-topbar-title {
|
|
display: flex;
|
|
min-width: 0;
|
|
align-items: center;
|
|
}
|
|
|
|
.lab-topbar-title > img {
|
|
display: none;
|
|
}
|
|
|
|
.lab-topbar-title span {
|
|
display: flex;
|
|
min-width: 0;
|
|
align-items: baseline;
|
|
gap: 16px;
|
|
}
|
|
|
|
.lab-topbar-title strong {
|
|
color: var(--lab-text);
|
|
font-size: 25px;
|
|
font-weight: 700;
|
|
letter-spacing: -0.025em;
|
|
}
|
|
|
|
.lab-topbar-title small {
|
|
overflow: hidden;
|
|
max-width: 460px;
|
|
color: var(--lab-secondary);
|
|
font-size: 12px;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.lab-topbar-actions {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
}
|
|
|
|
.lab-help-button,
|
|
.lab-account-button {
|
|
display: inline-flex;
|
|
min-height: 40px;
|
|
align-items: center;
|
|
gap: 8px;
|
|
border: 1px solid var(--lab-line);
|
|
border-radius: 10px;
|
|
background: var(--lab-surface);
|
|
padding: 0 13px;
|
|
cursor: pointer;
|
|
font-size: 12px;
|
|
}
|
|
|
|
.lab-help-button svg {
|
|
color: #667080;
|
|
}
|
|
|
|
.lab-account-button {
|
|
border-color: transparent;
|
|
background: transparent;
|
|
padding: 0 6px;
|
|
}
|
|
|
|
.lab-account-button:hover,
|
|
.lab-help-button:hover {
|
|
background: #f5f5f7;
|
|
}
|
|
|
|
.lab-account-button b {
|
|
max-width: 150px;
|
|
overflow: hidden;
|
|
font-size: 12px;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.lab-account-button em {
|
|
border-radius: 6px;
|
|
background: #eef5ff;
|
|
padding: 3px 6px;
|
|
color: #0068dc;
|
|
font-size: 10px;
|
|
font-style: normal;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.lab-avatar {
|
|
display: grid;
|
|
width: 28px;
|
|
height: 28px;
|
|
place-items: center;
|
|
border-radius: 50%;
|
|
background: #2d8cff;
|
|
color: white;
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.lab-stage > main {
|
|
padding: 18px 24px 24px;
|
|
}
|
|
|
|
.lab-command-surface {
|
|
overflow: hidden;
|
|
border: 1px solid var(--lab-line);
|
|
border-radius: 16px;
|
|
background: var(--lab-surface);
|
|
box-shadow: 0 8px 28px rgba(17, 24, 39, 0.035);
|
|
}
|
|
|
|
.lab-command-primary {
|
|
display: grid;
|
|
min-height: 64px;
|
|
grid-template-columns: minmax(340px, 1.35fr) minmax(440px, 1fr) auto;
|
|
align-items: stretch;
|
|
border-bottom: 1px solid var(--lab-line-soft);
|
|
}
|
|
|
|
.lab-search-form {
|
|
display: grid;
|
|
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
align-items: center;
|
|
gap: 10px;
|
|
padding: 9px 10px 9px 14px;
|
|
}
|
|
|
|
.lab-search-form > svg {
|
|
width: 20px;
|
|
height: 20px;
|
|
color: #546071;
|
|
}
|
|
|
|
.lab-search-form input,
|
|
.lab-mobile-search input {
|
|
width: 100%;
|
|
height: 44px;
|
|
border: 0;
|
|
background: transparent;
|
|
color: var(--lab-text);
|
|
outline: 0;
|
|
font-size: 14px;
|
|
}
|
|
|
|
.lab-search-form input::placeholder,
|
|
.lab-mobile-search input::placeholder {
|
|
color: #8b919c;
|
|
}
|
|
|
|
.lab-search-form button {
|
|
display: inline-flex;
|
|
height: 42px;
|
|
align-items: center;
|
|
gap: 8px;
|
|
border: 0;
|
|
border-radius: 10px;
|
|
background: var(--lab-blue);
|
|
padding: 0 16px;
|
|
color: white;
|
|
cursor: pointer;
|
|
font-size: 13px;
|
|
font-weight: 650;
|
|
transition: background 160ms ease, transform 160ms ease;
|
|
}
|
|
|
|
.lab-search-form button:hover {
|
|
background: #0068dc;
|
|
}
|
|
|
|
.lab-search-form button:active {
|
|
transform: scale(0.98);
|
|
}
|
|
|
|
.lab-view-tabs {
|
|
display: flex;
|
|
align-items: stretch;
|
|
justify-content: center;
|
|
border-left: 1px solid var(--lab-line-soft);
|
|
}
|
|
|
|
.lab-view-tabs button {
|
|
position: relative;
|
|
min-width: 92px;
|
|
border: 0;
|
|
background: transparent;
|
|
color: var(--lab-secondary);
|
|
cursor: pointer;
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.lab-view-tabs button::after {
|
|
position: absolute;
|
|
right: 18px;
|
|
bottom: 9px;
|
|
left: 18px;
|
|
height: 2px;
|
|
border-radius: 2px;
|
|
background: transparent;
|
|
content: "";
|
|
}
|
|
|
|
.lab-view-tabs button:hover {
|
|
color: var(--lab-text);
|
|
}
|
|
|
|
.lab-view-tabs button.is-active {
|
|
color: var(--lab-blue);
|
|
}
|
|
|
|
.lab-view-tabs button.is-active::after {
|
|
background: var(--lab-blue);
|
|
}
|
|
|
|
.lab-batch-button {
|
|
display: inline-flex;
|
|
min-width: 132px;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 7px;
|
|
border: 0;
|
|
border-left: 1px solid var(--lab-line-soft);
|
|
background: transparent;
|
|
color: #4f5968;
|
|
cursor: pointer;
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.lab-batch-button:hover {
|
|
background: #f7f8fa;
|
|
}
|
|
|
|
.lab-filter-row {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
gap: 10px;
|
|
padding: 13px 14px 15px;
|
|
}
|
|
|
|
.lab-filter-row label {
|
|
display: grid;
|
|
gap: 6px;
|
|
}
|
|
|
|
.lab-filter-row label > span {
|
|
color: var(--lab-secondary);
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.lab-filter-row select,
|
|
.lab-filter-sheet select {
|
|
width: 100%;
|
|
height: 40px;
|
|
border: 1px solid #d4d7dc;
|
|
border-radius: 9px;
|
|
background: #fff;
|
|
padding: 0 11px;
|
|
color: #424a57;
|
|
cursor: pointer;
|
|
font-size: 12px;
|
|
}
|
|
|
|
.lab-mobile-search,
|
|
.lab-mobile-scope {
|
|
display: none;
|
|
}
|
|
|
|
.lab-metric-rail {
|
|
display: grid;
|
|
min-height: 100px;
|
|
grid-template-columns: 190px 190px 190px minmax(360px, 1fr);
|
|
margin-top: 14px;
|
|
overflow: hidden;
|
|
border: 1px solid var(--lab-line);
|
|
border-radius: 16px 16px 0 0;
|
|
background: var(--lab-surface);
|
|
}
|
|
|
|
.lab-metric-rail > div {
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
border-right: 1px solid var(--lab-line-soft);
|
|
padding: 0 22px;
|
|
}
|
|
|
|
.lab-metric-rail > div > span {
|
|
color: #4a5260;
|
|
font-size: 12px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.lab-metric-rail > div > strong {
|
|
margin-top: 5px;
|
|
color: var(--lab-blue);
|
|
font-size: 28px;
|
|
line-height: 1;
|
|
}
|
|
|
|
.lab-metric-rail > div > strong.is-success {
|
|
color: var(--lab-green);
|
|
}
|
|
|
|
.lab-metric-rail > div > strong small {
|
|
margin-left: 4px;
|
|
color: var(--lab-secondary);
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.lab-metric-rail aside {
|
|
display: flex;
|
|
min-width: 0;
|
|
align-items: center;
|
|
justify-content: flex-end;
|
|
gap: 10px;
|
|
padding: 0 17px 0 24px;
|
|
}
|
|
|
|
.lab-metric-rail aside > span {
|
|
display: grid;
|
|
min-width: 0;
|
|
margin-right: auto;
|
|
gap: 5px;
|
|
}
|
|
|
|
.lab-metric-rail aside strong {
|
|
font-size: 14px;
|
|
}
|
|
|
|
.lab-metric-rail aside small {
|
|
overflow: hidden;
|
|
color: var(--lab-secondary);
|
|
font-size: 10px;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.lab-metric-rail aside button {
|
|
min-height: 36px;
|
|
border: 0;
|
|
border-radius: 8px;
|
|
background: #eef5ff;
|
|
padding: 0 11px;
|
|
color: #0068dc;
|
|
cursor: pointer;
|
|
font-size: 11px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.lab-metric-rail aside .lab-refresh-button {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
background: transparent;
|
|
color: #4f5968;
|
|
}
|
|
|
|
.lab-directory-layout {
|
|
display: grid;
|
|
height: calc(100dvh - 382px);
|
|
min-height: 460px;
|
|
grid-template-columns: minmax(0, 1fr);
|
|
border: 1px solid var(--lab-line);
|
|
border-top: 0;
|
|
border-radius: 0 0 16px 16px;
|
|
background: var(--lab-surface);
|
|
}
|
|
|
|
.vehicle-design-lab.has-inspector .lab-directory-layout {
|
|
grid-template-columns: minmax(0, 1fr) 310px;
|
|
}
|
|
|
|
.lab-directory-surface {
|
|
display: flex;
|
|
min-width: 0;
|
|
min-height: 0;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.lab-directory-header {
|
|
display: none;
|
|
}
|
|
|
|
.lab-vehicle-table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
table-layout: fixed;
|
|
}
|
|
|
|
.lab-vehicle-table th {
|
|
height: 46px;
|
|
border-bottom: 1px solid var(--lab-line);
|
|
padding: 0 18px;
|
|
color: #656d79;
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
text-align: left;
|
|
}
|
|
|
|
.lab-vehicle-table th:nth-child(1) { width: 21%; }
|
|
.lab-vehicle-table th:nth-child(2) { width: 18%; }
|
|
.lab-vehicle-table th:nth-child(3) { width: 13%; }
|
|
.lab-vehicle-table th:nth-child(4) { width: 22%; }
|
|
.lab-vehicle-table th:nth-child(5) { width: 16%; }
|
|
.lab-vehicle-table th:nth-child(6) { width: 110px; }
|
|
|
|
.lab-vehicle-table tbody tr {
|
|
position: relative;
|
|
height: 76px;
|
|
border-bottom: 1px solid var(--lab-line-soft);
|
|
cursor: pointer;
|
|
transition: background 150ms ease, box-shadow 150ms ease;
|
|
}
|
|
|
|
.lab-vehicle-table tbody tr:hover {
|
|
background: #fafbfd;
|
|
}
|
|
|
|
.lab-vehicle-table tbody tr.is-selected {
|
|
background: var(--lab-blue-soft);
|
|
box-shadow: inset 3px 0 var(--lab-blue);
|
|
}
|
|
|
|
.lab-vehicle-table td {
|
|
overflow: hidden;
|
|
padding: 0 18px;
|
|
color: #47505e;
|
|
font-size: 11px;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.lab-vehicle-table td > strong,
|
|
.lab-vehicle-table td > small {
|
|
display: block;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.lab-vehicle-table td > strong {
|
|
color: #2d3440;
|
|
font-size: 13px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.lab-vehicle-table td > small {
|
|
margin-top: 6px;
|
|
color: #7b8491;
|
|
font-family: "SFMono-Regular", ui-monospace, Menlo, Consolas, monospace;
|
|
font-size: 9px;
|
|
letter-spacing: 0.015em;
|
|
}
|
|
|
|
.lab-vehicle-table td:last-child button {
|
|
display: inline-flex;
|
|
height: 36px;
|
|
align-items: center;
|
|
gap: 4px;
|
|
border: 0;
|
|
background: transparent;
|
|
color: var(--lab-blue);
|
|
cursor: pointer;
|
|
font-size: 11px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.lab-protocol-list {
|
|
display: flex;
|
|
min-width: 0;
|
|
flex-wrap: wrap;
|
|
gap: 5px;
|
|
}
|
|
|
|
.lab-protocol-tag {
|
|
display: inline-flex;
|
|
min-height: 24px;
|
|
align-items: center;
|
|
border-radius: 7px;
|
|
padding: 0 8px;
|
|
color: #236177;
|
|
background: #e8f6fa;
|
|
font-size: 9px;
|
|
font-weight: 700;
|
|
letter-spacing: 0.02em;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.lab-protocol-tag.is-blue {
|
|
color: #2453a8;
|
|
background: #eaf1ff;
|
|
}
|
|
|
|
.lab-protocol-tag.is-violet {
|
|
color: #6541a2;
|
|
background: #f1ebff;
|
|
}
|
|
|
|
.lab-status-tag {
|
|
display: inline-flex;
|
|
min-height: 25px;
|
|
align-items: center;
|
|
border-radius: 8px;
|
|
padding: 0 8px;
|
|
font-size: 10px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.lab-status-tag.is-online {
|
|
background: var(--lab-green-soft);
|
|
color: var(--lab-green);
|
|
}
|
|
|
|
.lab-status-tag.is-offline {
|
|
background: #efeff1;
|
|
color: #5c5c61;
|
|
}
|
|
|
|
.lab-directory-footer {
|
|
display: flex;
|
|
min-height: 54px;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-top: auto;
|
|
border-top: 1px solid var(--lab-line-soft);
|
|
padding: 0 14px 0 18px;
|
|
color: var(--lab-secondary);
|
|
font-size: 10px;
|
|
}
|
|
|
|
.lab-directory-footer > div {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
}
|
|
|
|
.lab-directory-footer button,
|
|
.lab-directory-footer > div > span {
|
|
display: grid;
|
|
width: 36px;
|
|
height: 36px;
|
|
place-items: center;
|
|
border: 1px solid var(--lab-line);
|
|
border-radius: 9px;
|
|
background: white;
|
|
}
|
|
|
|
.lab-directory-footer button {
|
|
border-color: transparent;
|
|
color: #a5a9b0;
|
|
}
|
|
|
|
.lab-directory-footer button:disabled {
|
|
opacity: 0.55;
|
|
}
|
|
|
|
.lab-desktop-inspector {
|
|
display: flex;
|
|
min-width: 0;
|
|
min-height: 0;
|
|
flex-direction: column;
|
|
overflow-y: auto;
|
|
border-left: 1px solid var(--lab-line);
|
|
background: #fff;
|
|
}
|
|
|
|
.lab-desktop-inspector > header,
|
|
.lab-mobile-inspector > header {
|
|
display: flex;
|
|
min-height: 78px;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
border-bottom: 1px solid var(--lab-line-soft);
|
|
padding: 14px 17px;
|
|
}
|
|
|
|
.lab-desktop-inspector > header > span,
|
|
.lab-mobile-inspector > header > span {
|
|
display: grid;
|
|
gap: 7px;
|
|
}
|
|
|
|
.lab-desktop-inspector > header small,
|
|
.lab-mobile-inspector > header small {
|
|
color: var(--lab-secondary);
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.lab-desktop-inspector > header strong,
|
|
.lab-mobile-inspector > header strong {
|
|
font-size: 18px;
|
|
letter-spacing: -0.015em;
|
|
}
|
|
|
|
.lab-desktop-inspector > header button,
|
|
.lab-mobile-inspector > header button {
|
|
display: inline-flex;
|
|
min-width: 40px;
|
|
min-height: 40px;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 4px;
|
|
border: 0;
|
|
border-radius: 9px;
|
|
background: transparent;
|
|
color: var(--lab-secondary);
|
|
cursor: pointer;
|
|
}
|
|
|
|
.lab-desktop-inspector > header button:hover {
|
|
background: #f3f3f5;
|
|
}
|
|
|
|
.lab-inspector-status {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 14px 17px 4px;
|
|
}
|
|
|
|
.lab-inspector-status small {
|
|
color: var(--lab-secondary);
|
|
font-size: 9px;
|
|
}
|
|
|
|
.lab-desktop-inspector dl,
|
|
.lab-mobile-inspector dl {
|
|
margin: 0;
|
|
padding: 8px 17px 12px;
|
|
}
|
|
|
|
.lab-desktop-inspector dl > div,
|
|
.lab-mobile-inspector dl > div {
|
|
display: grid;
|
|
min-height: 53px;
|
|
align-content: center;
|
|
gap: 6px;
|
|
border-bottom: 1px solid var(--lab-line-soft);
|
|
}
|
|
|
|
.lab-desktop-inspector dt,
|
|
.lab-mobile-inspector dt {
|
|
color: var(--lab-secondary);
|
|
font-size: 9px;
|
|
}
|
|
|
|
.lab-desktop-inspector dd,
|
|
.lab-mobile-inspector dd {
|
|
display: flex;
|
|
min-width: 0;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
margin: 0;
|
|
color: #333945;
|
|
font-size: 11px;
|
|
}
|
|
|
|
.lab-desktop-inspector dd span,
|
|
.lab-mobile-inspector dd span {
|
|
overflow: hidden;
|
|
font-family: "SFMono-Regular", ui-monospace, Menlo, monospace;
|
|
font-size: 9px;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.lab-desktop-inspector dd button,
|
|
.lab-mobile-inspector dd button {
|
|
display: grid;
|
|
width: 32px;
|
|
height: 32px;
|
|
flex: 0 0 auto;
|
|
place-items: center;
|
|
border: 0;
|
|
border-radius: 8px;
|
|
background: #f1f3f6;
|
|
color: #596475;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.lab-desktop-inspector > section,
|
|
.lab-mobile-inspector > section {
|
|
display: grid;
|
|
gap: 12px;
|
|
padding: 14px 17px;
|
|
}
|
|
|
|
.lab-desktop-inspector > section > strong,
|
|
.lab-mobile-inspector > section > strong {
|
|
font-size: 11px;
|
|
}
|
|
|
|
.lab-inspector-protocol {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
gap: 9px;
|
|
}
|
|
|
|
.lab-protocol-dot {
|
|
width: 7px;
|
|
height: 7px;
|
|
flex: 0 0 auto;
|
|
margin-top: 5px;
|
|
border-radius: 50%;
|
|
background: #49bfe6;
|
|
}
|
|
|
|
.lab-inspector-protocol:nth-of-type(3) .lab-protocol-dot {
|
|
background: #6b9df5;
|
|
}
|
|
|
|
.lab-inspector-protocol > span {
|
|
display: grid;
|
|
gap: 4px;
|
|
}
|
|
|
|
.lab-inspector-protocol b {
|
|
font-size: 10px;
|
|
}
|
|
|
|
.lab-inspector-protocol small {
|
|
color: var(--lab-secondary);
|
|
font-size: 8px;
|
|
}
|
|
|
|
.lab-inspector-primary {
|
|
display: inline-flex;
|
|
min-height: 44px;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 7px;
|
|
margin: auto 17px 17px;
|
|
border: 1px solid var(--lab-line);
|
|
border-radius: 10px;
|
|
background: white;
|
|
color: var(--lab-blue);
|
|
cursor: pointer;
|
|
font-size: 11px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.lab-mobile-directory,
|
|
.lab-mobile-inspector,
|
|
.lab-bottom-nav,
|
|
.lab-sheet-backdrop {
|
|
display: none;
|
|
}
|
|
|
|
.lab-empty-state {
|
|
display: grid;
|
|
min-height: 320px;
|
|
place-items: center;
|
|
align-content: center;
|
|
gap: 9px;
|
|
color: var(--lab-secondary);
|
|
text-align: center;
|
|
}
|
|
|
|
.lab-empty-state > svg {
|
|
width: 30px;
|
|
height: 30px;
|
|
color: var(--lab-blue);
|
|
}
|
|
|
|
.lab-empty-state strong {
|
|
color: var(--lab-text);
|
|
font-size: 14px;
|
|
}
|
|
|
|
.lab-empty-state span {
|
|
font-size: 11px;
|
|
}
|
|
|
|
.lab-empty-state button {
|
|
height: 40px;
|
|
margin-top: 6px;
|
|
border: 0;
|
|
border-radius: 9px;
|
|
background: var(--lab-blue);
|
|
padding: 0 14px;
|
|
color: white;
|
|
cursor: pointer;
|
|
font-size: 11px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.lab-notice {
|
|
position: fixed;
|
|
z-index: 100;
|
|
right: 24px;
|
|
bottom: 24px;
|
|
max-width: min(360px, calc(100vw - 40px));
|
|
border: 1px solid rgba(255, 255, 255, 0.24);
|
|
border-radius: 12px;
|
|
background: rgba(29, 29, 31, 0.94);
|
|
padding: 12px 16px;
|
|
color: white;
|
|
box-shadow: 0 14px 42px rgba(0, 0, 0, 0.18);
|
|
font-size: 12px;
|
|
}
|
|
|
|
@media (max-width: 1180px) and (min-width: 761px) {
|
|
:root {
|
|
--lab-sidebar: 196px;
|
|
}
|
|
|
|
.lab-command-primary {
|
|
grid-template-columns: minmax(300px, 1fr) minmax(360px, 1fr);
|
|
}
|
|
|
|
.lab-batch-button {
|
|
display: none;
|
|
}
|
|
|
|
.lab-view-tabs button {
|
|
min-width: 80px;
|
|
}
|
|
|
|
.lab-metric-rail {
|
|
grid-template-columns: 155px 155px 155px minmax(280px, 1fr);
|
|
}
|
|
|
|
.vehicle-design-lab.has-inspector .lab-directory-layout {
|
|
grid-template-columns: minmax(0, 1fr) 280px;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 760px) {
|
|
:root {
|
|
--lab-topbar: 56px;
|
|
}
|
|
|
|
body {
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
.vehicle-design-lab {
|
|
display: block;
|
|
}
|
|
|
|
.lab-sidebar,
|
|
.lab-command-surface,
|
|
.lab-desktop-inspector,
|
|
.lab-vehicle-table,
|
|
.lab-directory-header,
|
|
.lab-directory-footer,
|
|
.lab-metric-rail aside {
|
|
display: none;
|
|
}
|
|
|
|
.lab-topbar {
|
|
height: var(--lab-topbar);
|
|
padding: 0 15px 0 16px;
|
|
backdrop-filter: saturate(145%) blur(18px);
|
|
}
|
|
|
|
.lab-topbar-title > img {
|
|
display: none;
|
|
}
|
|
|
|
.lab-topbar-title span {
|
|
display: block;
|
|
}
|
|
|
|
.lab-topbar-title strong {
|
|
font-size: 20px;
|
|
letter-spacing: -0.03em;
|
|
}
|
|
|
|
.lab-topbar-title small,
|
|
.lab-help-button span,
|
|
.lab-account-button b,
|
|
.lab-account-button em,
|
|
.lab-account-button > svg {
|
|
display: none;
|
|
}
|
|
|
|
.lab-topbar-actions {
|
|
gap: 11px;
|
|
}
|
|
|
|
.lab-help-button,
|
|
.lab-account-button {
|
|
min-width: 36px;
|
|
min-height: 36px;
|
|
justify-content: center;
|
|
border: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
.lab-help-button svg {
|
|
width: 20px;
|
|
height: 20px;
|
|
}
|
|
|
|
.lab-avatar {
|
|
width: 38px;
|
|
height: 38px;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.lab-stage > main {
|
|
padding: 0 0 calc(var(--lab-mobile-nav) + 14px);
|
|
}
|
|
|
|
.lab-mobile-search {
|
|
position: relative;
|
|
display: grid;
|
|
min-height: 82px;
|
|
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
align-items: center;
|
|
gap: 10px;
|
|
background: white;
|
|
padding: 12px 14px;
|
|
}
|
|
|
|
.lab-mobile-search > svg {
|
|
width: 20px;
|
|
height: 20px;
|
|
margin-left: 8px;
|
|
color: #4e596a;
|
|
}
|
|
|
|
.lab-mobile-search::before {
|
|
position: absolute;
|
|
right: 14px;
|
|
left: 14px;
|
|
height: 54px;
|
|
border: 1px solid #cfd2d8;
|
|
border-radius: 14px;
|
|
content: "";
|
|
pointer-events: none;
|
|
}
|
|
|
|
.lab-mobile-search input {
|
|
z-index: 1;
|
|
height: 54px;
|
|
font-size: 14px;
|
|
}
|
|
|
|
.lab-mobile-search button {
|
|
z-index: 1;
|
|
height: 36px;
|
|
border: 0;
|
|
border-left: 1px solid var(--lab-line-soft);
|
|
background: transparent;
|
|
padding: 0 9px 0 14px;
|
|
color: #0068dc;
|
|
font-size: 13px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.lab-mobile-scope {
|
|
display: grid;
|
|
min-height: 72px;
|
|
grid-template-columns: 44px minmax(0, 1fr) auto auto;
|
|
align-items: center;
|
|
gap: 10px;
|
|
border-bottom: 1px solid var(--lab-line);
|
|
background: white;
|
|
padding: 8px 14px;
|
|
}
|
|
|
|
.lab-mobile-filter,
|
|
.lab-mobile-batch,
|
|
.lab-mobile-modify {
|
|
display: inline-flex;
|
|
min-height: 44px;
|
|
align-items: center;
|
|
justify-content: center;
|
|
border: 0;
|
|
background: transparent;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.lab-mobile-filter {
|
|
position: relative;
|
|
border-radius: 12px;
|
|
background: var(--lab-blue-soft);
|
|
color: var(--lab-blue);
|
|
}
|
|
|
|
.lab-mobile-filter b {
|
|
position: absolute;
|
|
top: -3px;
|
|
right: -3px;
|
|
display: grid;
|
|
width: 17px;
|
|
height: 17px;
|
|
place-items: center;
|
|
border: 2px solid white;
|
|
border-radius: 50%;
|
|
background: var(--lab-blue);
|
|
color: white;
|
|
font-size: 8px;
|
|
}
|
|
|
|
.lab-mobile-scope > span {
|
|
display: grid;
|
|
gap: 4px;
|
|
}
|
|
|
|
.lab-mobile-scope > span strong {
|
|
font-size: 14px;
|
|
}
|
|
|
|
.lab-mobile-scope > span small {
|
|
color: var(--lab-secondary);
|
|
font-size: 10px;
|
|
}
|
|
|
|
.lab-mobile-modify {
|
|
gap: 4px;
|
|
color: var(--lab-blue);
|
|
font-size: 12px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.lab-mobile-batch {
|
|
gap: 5px;
|
|
border-radius: 10px;
|
|
background: #f4f5f7;
|
|
padding: 0 9px;
|
|
color: #4f5968;
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.lab-metric-rail {
|
|
display: grid;
|
|
min-height: 88px;
|
|
grid-template-columns: repeat(3, 1fr);
|
|
margin: 0;
|
|
border: 0;
|
|
border-bottom: 1px solid #cbdcff;
|
|
border-radius: 0;
|
|
background: #f2f7ff;
|
|
}
|
|
|
|
.lab-metric-rail > div {
|
|
align-items: center;
|
|
border-right: 1px solid #dce5f4;
|
|
padding: 0 6px;
|
|
text-align: center;
|
|
}
|
|
|
|
.lab-metric-rail > div:last-of-type {
|
|
border-right: 0;
|
|
}
|
|
|
|
.lab-metric-rail > div > span {
|
|
font-size: 10px;
|
|
}
|
|
|
|
.lab-metric-rail > div > strong {
|
|
margin-top: 8px;
|
|
font-size: 25px;
|
|
}
|
|
|
|
.lab-directory-layout,
|
|
.vehicle-design-lab.has-inspector .lab-directory-layout {
|
|
display: block;
|
|
height: auto;
|
|
min-height: 0;
|
|
border: 0;
|
|
border-radius: 0;
|
|
}
|
|
|
|
.lab-directory-surface {
|
|
display: block;
|
|
}
|
|
|
|
.lab-mobile-directory {
|
|
display: block;
|
|
margin: 0;
|
|
padding: 0 14px;
|
|
list-style: none;
|
|
}
|
|
|
|
.lab-mobile-directory li {
|
|
border-bottom: 1px solid var(--lab-line);
|
|
}
|
|
|
|
.lab-mobile-directory li:last-child {
|
|
border-bottom: 0;
|
|
}
|
|
|
|
.lab-mobile-directory li > button {
|
|
position: relative;
|
|
display: grid;
|
|
width: calc(100% + 28px);
|
|
min-height: 105px;
|
|
grid-template-columns: 10px minmax(0, 1fr) auto 18px;
|
|
align-items: center;
|
|
gap: 7px;
|
|
margin: 0 -14px;
|
|
border: 0;
|
|
background: white;
|
|
padding: 10px 14px;
|
|
cursor: pointer;
|
|
text-align: left;
|
|
transition: background 150ms ease;
|
|
}
|
|
|
|
.lab-mobile-directory li > button.is-selected {
|
|
background: var(--lab-blue-soft);
|
|
box-shadow: inset 3px 0 var(--lab-blue);
|
|
}
|
|
|
|
.lab-status-dot {
|
|
width: 7px;
|
|
height: 7px;
|
|
align-self: start;
|
|
margin-top: 8px;
|
|
border-radius: 50%;
|
|
background: #9299a4;
|
|
}
|
|
|
|
.lab-status-dot.is-online {
|
|
background: #35a253;
|
|
}
|
|
|
|
.lab-mobile-identity {
|
|
display: grid;
|
|
min-width: 0;
|
|
gap: 5px;
|
|
}
|
|
|
|
.lab-mobile-identity > strong {
|
|
overflow: hidden;
|
|
color: #2d3440;
|
|
font-size: 16px;
|
|
font-weight: 700;
|
|
letter-spacing: -0.01em;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.lab-mobile-identity > small {
|
|
overflow: hidden;
|
|
color: #76808d;
|
|
font-family: "SFMono-Regular", ui-monospace, Menlo, monospace;
|
|
font-size: 9px;
|
|
letter-spacing: 0.015em;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.lab-mobile-identity .lab-protocol-list {
|
|
margin-top: 2px;
|
|
}
|
|
|
|
.lab-protocol-tag {
|
|
min-height: 22px;
|
|
padding: 0 7px;
|
|
font-size: 8px;
|
|
}
|
|
|
|
.lab-mobile-state {
|
|
display: grid;
|
|
justify-items: end;
|
|
gap: 10px;
|
|
}
|
|
|
|
.lab-mobile-state small {
|
|
color: var(--lab-secondary);
|
|
font-size: 9px;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.lab-mobile-row-chevron {
|
|
color: #566172;
|
|
}
|
|
|
|
.lab-bottom-nav {
|
|
position: fixed;
|
|
z-index: 45;
|
|
right: 0;
|
|
bottom: 0;
|
|
left: 0;
|
|
display: grid;
|
|
height: var(--lab-mobile-nav);
|
|
grid-template-columns: repeat(5, 1fr);
|
|
border-top: 1px solid var(--lab-line);
|
|
background: rgba(255, 255, 255, 0.96);
|
|
padding-bottom: env(safe-area-inset-bottom);
|
|
backdrop-filter: saturate(150%) blur(18px);
|
|
}
|
|
|
|
.lab-bottom-nav button {
|
|
display: grid;
|
|
place-items: center;
|
|
align-content: center;
|
|
gap: 5px;
|
|
border: 0;
|
|
background: transparent;
|
|
color: #536073;
|
|
cursor: pointer;
|
|
font-size: 9px;
|
|
}
|
|
|
|
.lab-bottom-nav button svg {
|
|
width: 21px;
|
|
height: 21px;
|
|
}
|
|
|
|
.lab-bottom-nav button.is-active {
|
|
color: var(--lab-blue);
|
|
font-weight: 650;
|
|
}
|
|
|
|
.lab-bottom-nav button.is-active svg {
|
|
box-sizing: content-box;
|
|
border-radius: 10px;
|
|
background: var(--lab-blue-soft);
|
|
padding: 7px 13px;
|
|
}
|
|
|
|
.lab-mobile-inspector {
|
|
position: fixed;
|
|
z-index: 40;
|
|
right: 0;
|
|
bottom: var(--lab-mobile-nav);
|
|
left: 0;
|
|
display: flex;
|
|
max-height: min(60dvh, 520px);
|
|
flex-direction: column;
|
|
overflow: hidden auto;
|
|
border: 1px solid #c9cdd4;
|
|
border-bottom: 0;
|
|
border-radius: 24px 24px 0 0;
|
|
background: rgba(255, 255, 255, 0.98);
|
|
box-shadow: 0 -18px 55px rgba(21, 31, 46, 0.16);
|
|
transform: translateY(var(--lab-sheet-offset));
|
|
transition: transform 190ms cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
backdrop-filter: saturate(145%) blur(24px);
|
|
}
|
|
|
|
.lab-sheet-handle {
|
|
display: grid;
|
|
min-height: 26px;
|
|
flex: 0 0 auto;
|
|
place-items: center;
|
|
border: 0;
|
|
background: transparent;
|
|
touch-action: none;
|
|
cursor: grab;
|
|
}
|
|
|
|
.lab-sheet-handle span {
|
|
width: 42px;
|
|
height: 5px;
|
|
border-radius: 5px;
|
|
background: #b9bdc4;
|
|
}
|
|
|
|
.lab-mobile-inspector > header {
|
|
min-height: 62px;
|
|
padding-top: 6px;
|
|
}
|
|
|
|
.lab-mobile-inspector > header > span {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
}
|
|
|
|
.lab-mobile-inspector > header > span small {
|
|
font-size: 15px;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.lab-mobile-inspector > header > span strong {
|
|
font-size: 16px;
|
|
}
|
|
|
|
.lab-mobile-inspector > header button {
|
|
color: var(--lab-blue);
|
|
font-size: 12px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.lab-mobile-inspector > header button svg {
|
|
display: none;
|
|
}
|
|
|
|
.lab-mobile-inspector .lab-inspector-status {
|
|
padding-top: 10px;
|
|
}
|
|
|
|
.lab-mobile-inspector dl {
|
|
padding-top: 2px;
|
|
}
|
|
|
|
.lab-mobile-inspector dl > div {
|
|
min-height: 48px;
|
|
grid-template-columns: 95px minmax(0, 1fr);
|
|
align-items: center;
|
|
gap: 10px;
|
|
}
|
|
|
|
.lab-mobile-inspector dt {
|
|
font-size: 10px;
|
|
}
|
|
|
|
.lab-mobile-inspector dd {
|
|
font-size: 11px;
|
|
}
|
|
|
|
.lab-mobile-inspector > section,
|
|
.lab-mobile-inspector .lab-inspector-primary {
|
|
display: none;
|
|
}
|
|
|
|
.lab-sheet-backdrop {
|
|
position: fixed;
|
|
z-index: 80;
|
|
inset: 0;
|
|
display: flex;
|
|
align-items: flex-end;
|
|
background: rgba(17, 24, 39, 0.25);
|
|
}
|
|
|
|
.lab-filter-sheet {
|
|
width: 100%;
|
|
max-height: 82dvh;
|
|
overflow: auto;
|
|
border-radius: 24px 24px 0 0;
|
|
background: white;
|
|
padding: 8px 18px calc(18px + env(safe-area-inset-bottom));
|
|
box-shadow: 0 -18px 58px rgba(17, 24, 39, 0.18);
|
|
}
|
|
|
|
.lab-filter-sheet > header {
|
|
display: flex;
|
|
min-height: 62px;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
border-bottom: 1px solid var(--lab-line-soft);
|
|
}
|
|
|
|
.lab-filter-sheet > header > span {
|
|
display: grid;
|
|
gap: 4px;
|
|
}
|
|
|
|
.lab-filter-sheet > header strong {
|
|
font-size: 18px;
|
|
}
|
|
|
|
.lab-filter-sheet > header small {
|
|
color: var(--lab-secondary);
|
|
font-size: 10px;
|
|
}
|
|
|
|
.lab-filter-sheet > header button {
|
|
display: grid;
|
|
width: 44px;
|
|
height: 44px;
|
|
place-items: center;
|
|
border: 0;
|
|
border-radius: 12px;
|
|
background: #f3f4f6;
|
|
}
|
|
|
|
.lab-filter-sheet fieldset {
|
|
margin: 18px 0;
|
|
border: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
.lab-filter-sheet legend,
|
|
.lab-filter-sheet > label > span {
|
|
display: block;
|
|
margin-bottom: 9px;
|
|
color: #4b5563;
|
|
font-size: 11px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.lab-filter-options {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 8px;
|
|
}
|
|
|
|
.lab-filter-options button {
|
|
min-height: 44px;
|
|
border: 1px solid var(--lab-line);
|
|
border-radius: 11px;
|
|
background: white;
|
|
color: #4f5968;
|
|
}
|
|
|
|
.lab-filter-options button.is-active {
|
|
border-color: #90bfff;
|
|
background: var(--lab-blue-soft);
|
|
color: #0068dc;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.lab-filter-sheet > label {
|
|
display: block;
|
|
margin-top: 15px;
|
|
}
|
|
|
|
.lab-filter-sheet select {
|
|
height: 46px;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.lab-filter-sheet > footer {
|
|
display: grid;
|
|
grid-template-columns: 1fr 2fr;
|
|
gap: 10px;
|
|
margin-top: 22px;
|
|
}
|
|
|
|
.lab-filter-sheet > footer button {
|
|
min-height: 46px;
|
|
border: 1px solid var(--lab-line);
|
|
border-radius: 12px;
|
|
background: white;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.lab-filter-sheet > footer button.is-primary {
|
|
border-color: var(--lab-blue);
|
|
background: var(--lab-blue);
|
|
color: white;
|
|
}
|
|
|
|
.lab-notice {
|
|
right: 16px;
|
|
bottom: calc(var(--lab-mobile-nav) + 16px);
|
|
left: 16px;
|
|
max-width: none;
|
|
text-align: center;
|
|
}
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
*,
|
|
*::before,
|
|
*::after {
|
|
scroll-behavior: auto !important;
|
|
transition-duration: 0.01ms !important;
|
|
animation-duration: 0.01ms !important;
|
|
animation-iteration-count: 1 !important;
|
|
}
|
|
}
|