Override design system tokens in app root CSS: --text-muted raised to 4.5:1 contrast in both light (#766A5E) and dark (#9A9088) modes; --text-faint dark mode raised from catastrophic 1.4:1 to 3:1 (#6A6058). Migrate --text-faint usages on readable text (empty states, italic notes, buttons) to --text-muted. Raise all 10px and 11px font-size declarations to 12px floor. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
416 lines
6.0 KiB
CSS
416 lines
6.0 KiB
CSS
.container {
|
|
padding: 20px 24px 40px;
|
|
overflow-y: auto;
|
|
flex: 1;
|
|
}
|
|
|
|
.toolbar {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
margin-bottom: 12px;
|
|
}
|
|
|
|
/* Create modal */
|
|
.createModal {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 14px;
|
|
}
|
|
|
|
.createField {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 4px;
|
|
}
|
|
|
|
.createLabel {
|
|
font-size: 12px;
|
|
font-weight: 500;
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.createLabelHint {
|
|
font-weight: 400;
|
|
font-style: italic;
|
|
margin-left: 6px;
|
|
}
|
|
|
|
.fileRow {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
}
|
|
|
|
.fileName {
|
|
font-size: 12px;
|
|
color: var(--text-primary);
|
|
font-family: var(--font-mono);
|
|
}
|
|
|
|
.deployToggle {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
font-size: 12px;
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.stepIndicator {
|
|
font-size: 12px;
|
|
color: var(--amber);
|
|
font-style: italic;
|
|
}
|
|
|
|
.createActions {
|
|
display: flex;
|
|
gap: 8px;
|
|
justify-content: flex-end;
|
|
padding-top: 8px;
|
|
border-top: 1px solid var(--border-subtle);
|
|
}
|
|
|
|
.nativeSelect {
|
|
padding: 6px 8px;
|
|
border: 1px solid var(--border-subtle);
|
|
border-radius: 4px;
|
|
background: var(--bg-surface);
|
|
color: var(--text-primary);
|
|
font-size: 12px;
|
|
font-family: var(--font-body);
|
|
}
|
|
|
|
.cellName {
|
|
font-size: 13px;
|
|
font-weight: 500;
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.cellMeta {
|
|
font-size: 12px;
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
/* Detail header */
|
|
.detailHeader {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: flex-start;
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.detailTitle {
|
|
font-size: 18px;
|
|
font-weight: 600;
|
|
color: var(--text-primary);
|
|
margin: 0;
|
|
}
|
|
|
|
.detailMeta {
|
|
font-size: 13px;
|
|
color: var(--text-muted);
|
|
margin-top: 4px;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
}
|
|
|
|
.detailActions {
|
|
display: flex;
|
|
gap: 8px;
|
|
}
|
|
|
|
|
|
.mutedMono {
|
|
font-family: var(--font-mono);
|
|
font-size: 12px;
|
|
color: var(--text-muted);
|
|
opacity: 0.5;
|
|
}
|
|
|
|
.envHint {
|
|
font-size: 12px;
|
|
color: var(--text-muted);
|
|
font-style: italic;
|
|
}
|
|
|
|
/* Version rows */
|
|
.row {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 8px 0;
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
font-size: 12px;
|
|
font-family: var(--font-body);
|
|
}
|
|
|
|
.rowText {
|
|
flex: 1;
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.emptyNote {
|
|
font-size: 12px;
|
|
color: var(--text-muted);
|
|
font-style: italic;
|
|
margin: 4px 0 12px;
|
|
}
|
|
|
|
/* Edit mode banner */
|
|
.editBanner {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 10px 16px;
|
|
background: var(--bg-raised);
|
|
border: 1px solid var(--border-subtle);
|
|
border-radius: 6px;
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.editBannerActive {
|
|
border-color: var(--warning);
|
|
background: color-mix(in srgb, var(--amber) 6%, transparent);
|
|
}
|
|
|
|
.editBannerText {
|
|
font-size: 12px;
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.editBannerTextWarn {
|
|
font-size: 12px;
|
|
color: var(--warning);
|
|
}
|
|
|
|
.editBannerActions {
|
|
display: flex;
|
|
gap: 8px;
|
|
}
|
|
|
|
/* Config grid */
|
|
.configGrid {
|
|
display: grid;
|
|
grid-template-columns: 160px 1fr;
|
|
gap: 8px 16px;
|
|
align-items: center;
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.configLabel {
|
|
font-size: 12px;
|
|
color: var(--text-muted);
|
|
font-weight: 500;
|
|
}
|
|
|
|
.configInline {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
}
|
|
|
|
.configHint {
|
|
font-size: 12px;
|
|
color: var(--text-muted);
|
|
font-style: italic;
|
|
margin-top: 2px;
|
|
}
|
|
|
|
.toggleEnabled {
|
|
font-size: 12px;
|
|
color: var(--success);
|
|
}
|
|
|
|
.toggleDisabled {
|
|
font-size: 12px;
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
/* Port pills */
|
|
.portPills {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 6px;
|
|
align-items: center;
|
|
}
|
|
|
|
.portPill {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: 3px 8px;
|
|
border-radius: 12px;
|
|
font-size: 12px;
|
|
font-family: var(--font-mono);
|
|
background: var(--bg-raised);
|
|
color: var(--text-primary);
|
|
border: 1px solid var(--border-subtle);
|
|
}
|
|
|
|
.portPillDelete {
|
|
background: none;
|
|
border: none;
|
|
color: var(--text-muted);
|
|
cursor: pointer;
|
|
font-size: 13px;
|
|
line-height: 1;
|
|
padding: 0;
|
|
}
|
|
|
|
.portPillDelete:hover {
|
|
color: var(--error);
|
|
}
|
|
|
|
.portPillDelete:disabled {
|
|
opacity: 0.3;
|
|
cursor: default;
|
|
}
|
|
|
|
.portAddInput {
|
|
width: 70px;
|
|
padding: 3px 6px;
|
|
border: 1px dashed var(--border-subtle);
|
|
border-radius: 12px;
|
|
background: transparent;
|
|
color: var(--text-primary);
|
|
font-size: 12px;
|
|
font-family: var(--font-mono);
|
|
text-align: center;
|
|
}
|
|
|
|
.portAddInput::placeholder {
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.portAddInput:disabled {
|
|
opacity: 0.3;
|
|
cursor: default;
|
|
}
|
|
|
|
/* Env var editor */
|
|
.envVarRow {
|
|
display: flex;
|
|
gap: 8px;
|
|
align-items: center;
|
|
margin-bottom: 6px;
|
|
}
|
|
|
|
.envVarKey {
|
|
width: 180px;
|
|
}
|
|
|
|
.envVarValue {
|
|
flex: 1;
|
|
}
|
|
|
|
.envVarDelete {
|
|
background: none;
|
|
border: none;
|
|
color: var(--text-muted);
|
|
cursor: pointer;
|
|
font-size: 16px;
|
|
padding: 4px;
|
|
}
|
|
|
|
.envVarDelete:hover {
|
|
color: var(--error);
|
|
}
|
|
|
|
.envVarDelete:disabled {
|
|
opacity: 0.3;
|
|
cursor: default;
|
|
}
|
|
|
|
/* Traces & Taps */
|
|
.sectionSummary {
|
|
font-size: 12px;
|
|
color: var(--text-muted);
|
|
margin-bottom: 8px;
|
|
display: block;
|
|
}
|
|
|
|
.hint {
|
|
color: var(--text-muted);
|
|
font-size: 12px;
|
|
font-style: italic;
|
|
}
|
|
|
|
.routeLabel {
|
|
font-size: 12px;
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.tapBadges {
|
|
display: flex;
|
|
gap: 4px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.tapBadgeLink {
|
|
background: none;
|
|
border: none;
|
|
padding: 0;
|
|
cursor: pointer;
|
|
border-radius: 4px;
|
|
transition: opacity 0.15s;
|
|
}
|
|
|
|
.tapBadgeLink:hover {
|
|
opacity: 0.75;
|
|
}
|
|
|
|
.removeBtn {
|
|
background: none;
|
|
border: none;
|
|
color: var(--text-muted);
|
|
cursor: pointer;
|
|
font-size: 16px;
|
|
padding: 0 4px;
|
|
line-height: 1;
|
|
}
|
|
|
|
.removeBtn:hover {
|
|
color: var(--error);
|
|
}
|
|
|
|
/* Visually hidden file inputs */
|
|
.visuallyHidden {
|
|
position: absolute;
|
|
width: 1px;
|
|
height: 1px;
|
|
padding: 0;
|
|
margin: -1px;
|
|
overflow: hidden;
|
|
clip: rect(0, 0, 0, 0);
|
|
white-space: nowrap;
|
|
border: 0;
|
|
}
|
|
|
|
/* Fixed-width inputs */
|
|
.inputXs {
|
|
width: 50px;
|
|
}
|
|
|
|
.inputSm {
|
|
width: 60px;
|
|
}
|
|
|
|
.inputMd {
|
|
width: 70px;
|
|
}
|
|
|
|
.inputLg {
|
|
width: 80px;
|
|
}
|
|
|
|
.inputXl {
|
|
width: 90px;
|
|
}
|
|
|
|
/* Table cell flex layout */
|
|
.cellFlex {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
}
|