- Add ScenarioDetailPage with DescriptionList, steps table, run/delete actions - Add /scenarios/:id route - Add i18n keys for scenario detail fields, steps columns, and 404 error - Add 'comfortable' and 'inline' layout variants to DescriptionList (with compact as default stacked) - Apply layout="comfortable" to session, environment, and scenario detail pages - Apply layout="compact" to EnvironmentsPage card DescriptionList - Refactor EnvironmentsPage card to use ContextMenu (view/edit/delete) with icons - Add ScenariosPage clickable rows, Play icon (primary) and Trash2 icon (danger) action buttons - Add Page.module.css sectionHeading and stepsSection utility classes - Fix Notification.tsx and Table.tsx formatting (prettier)
255 lines
5.0 KiB
CSS
255 lines
5.0 KiB
CSS
.heading {
|
|
margin: 0 0 var(--space-4);
|
|
font-size: var(--font-size-lg);
|
|
font-weight: 700;
|
|
color: var(--color-text);
|
|
}
|
|
|
|
.sectionHeading {
|
|
margin: var(--space-6) 0 var(--space-3);
|
|
font-size: var(--font-size-md);
|
|
font-weight: 600;
|
|
color: var(--color-text);
|
|
}
|
|
|
|
.stepsSection {
|
|
margin-top: var(--space-2);
|
|
}
|
|
|
|
.breadcrumbs {
|
|
margin-bottom: var(--space-4);
|
|
}
|
|
|
|
.pageToolbar {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-bottom: var(--space-4);
|
|
}
|
|
|
|
.toolbarActions {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-2);
|
|
}
|
|
|
|
.error {
|
|
margin-bottom: var(--space-4);
|
|
padding: var(--space-3) var(--space-4);
|
|
background: var(--color-error-bg);
|
|
color: var(--color-error-fg);
|
|
border-radius: var(--radius-md);
|
|
font-size: var(--font-size-sm);
|
|
}
|
|
|
|
.muted {
|
|
color: var(--color-text-muted);
|
|
font-size: var(--font-size-sm);
|
|
}
|
|
|
|
.codeInline {
|
|
font-family: var(--font-mono, ui-monospace, monospace);
|
|
font-size: 0.85em;
|
|
padding: 0.15em 0.45em;
|
|
background: var(--color-code-bg, color-mix(in srgb, var(--color-bg-raised) 60%, var(--color-secondary) 40%));
|
|
border: 1px solid var(--color-border);
|
|
border-radius: var(--radius-sm);
|
|
color: var(--color-secondary-fg);
|
|
word-break: break-all;
|
|
}
|
|
|
|
/* ── Environment cards ──────────────────────────────────────── */
|
|
|
|
.envGrid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
|
gap: var(--space-4);
|
|
}
|
|
|
|
.envCard {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-3);
|
|
}
|
|
|
|
.envCardAdd {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
min-height: 120px;
|
|
border: 2px dashed var(--color-border);
|
|
border-radius: var(--radius-lg);
|
|
transition: border-color var(--transition), background var(--transition);
|
|
}
|
|
|
|
.envCardAdd:hover {
|
|
border-color: var(--color-primary);
|
|
background: color-mix(in srgb, var(--color-primary) 6%, transparent);
|
|
}
|
|
|
|
.envCardHeader {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-2);
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.envCardId {
|
|
font-size: var(--font-size-xs);
|
|
font-weight: 700;
|
|
color: var(--color-text-muted);
|
|
flex-shrink: 0;
|
|
border: var(--border-width) solid var(--color-border);
|
|
border-radius: 9999px;
|
|
padding: 1px var(--space-2);
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.envCardFooter {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
width: 100%;
|
|
}
|
|
|
|
.envCardHeader button {
|
|
color: inherit;
|
|
padding: var(--space-1);
|
|
aspect-ratio: 1;
|
|
margin-right: calc(-1 * var(--space-1));
|
|
}
|
|
|
|
.envCardHeader button:hover {
|
|
background: color-mix(in srgb, currentColor 15%, transparent) !important;
|
|
}
|
|
|
|
.envCardName {
|
|
font-weight: 700;
|
|
font-size: var(--font-size-sm);
|
|
flex: 1;
|
|
}
|
|
|
|
.envCardUrls {
|
|
margin: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-1);
|
|
}
|
|
|
|
.envCardUrlRow {
|
|
display: flex;
|
|
gap: var(--space-2);
|
|
align-items: baseline;
|
|
font-size: var(--font-size-xs);
|
|
}
|
|
|
|
.envCardUrlKey {
|
|
color: var(--color-text-muted);
|
|
white-space: nowrap;
|
|
flex-shrink: 0;
|
|
font-weight: 600;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.04em;
|
|
}
|
|
|
|
.envCardUrlVal {
|
|
margin: 0;
|
|
color: var(--color-text);
|
|
word-break: break-all;
|
|
}
|
|
|
|
.envCardEmpty {
|
|
margin: 0;
|
|
font-size: var(--font-size-xs);
|
|
color: var(--color-text-muted);
|
|
}
|
|
|
|
/* ── Environment form ───────────────────────────────────────────────────── */
|
|
|
|
.formCard {
|
|
max-width: 540px;
|
|
}
|
|
|
|
.formFields {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-4);
|
|
margin-bottom: var(--space-6);
|
|
}
|
|
|
|
.formActions {
|
|
display: flex;
|
|
gap: var(--space-3);
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
/* ── Environment detail page ────────────────────────────────────────────── */
|
|
|
|
.detailToolbar {
|
|
margin-bottom: var(--space-4);
|
|
}
|
|
|
|
.detailHeader {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-4);
|
|
margin-bottom: var(--space-4);
|
|
}
|
|
|
|
.detailHeader .heading {
|
|
margin: 0;
|
|
flex: 1;
|
|
}
|
|
|
|
.detailMeta {
|
|
display: grid;
|
|
grid-template-columns: max-content 1fr;
|
|
gap: var(--space-1) var(--space-4);
|
|
margin-bottom: var(--space-6);
|
|
font-size: var(--font-size-sm);
|
|
}
|
|
|
|
.metaLabel {
|
|
color: var(--color-text-muted);
|
|
font-weight: 600;
|
|
text-transform: uppercase;
|
|
font-size: var(--font-size-xs);
|
|
letter-spacing: 0.04em;
|
|
align-self: center;
|
|
}
|
|
|
|
.sectionHeading {
|
|
margin: 0 0 var(--space-3);
|
|
font-size: var(--font-size-md);
|
|
font-weight: 700;
|
|
}
|
|
|
|
.envDetailUrls {
|
|
margin: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-2);
|
|
}
|
|
|
|
.envDetailUrlRow {
|
|
display: grid;
|
|
grid-template-columns: 140px 1fr;
|
|
gap: var(--space-2);
|
|
align-items: baseline;
|
|
font-size: var(--font-size-sm);
|
|
}
|
|
|
|
.envDetailUrlVal {
|
|
margin: 0;
|
|
word-break: break-all;
|
|
}
|
|
|
|
.envDetailUrlVal a {
|
|
color: var(--color-text-muted);
|
|
text-decoration: none;
|
|
}
|
|
|
|
.envDetailUrlVal a:hover {
|
|
text-decoration: underline;
|
|
}
|