open-design/apps/web/src/styles/home/tasks.css
YOMXXX 9305bd1cff
fix(web): truncate long project names in the automation project picker (#3274) (#3317)
Long project names in the "Existing projects" section of the
automation project picker rendered verbatim with no truncate styling,
so a single name like "A very long project name that would otherwise
wrap onto several lines" blew up the row height and made the dropdown
messy to scan. The expected behavior is a single-line label with
ellipsis, with the full name still discoverable on hover.

Add the standard truncate triad (`white-space: nowrap`,
`overflow: hidden`, `text-overflow: ellipsis`) to
`.automation-popover__label`. The parent
`.automation-popover__body` already sets `min-width: 0`, so the
ellipsis renders cleanly. Thread an optional `title` prop through
`PopoverItem` and pass each project's full name from the picker
call site, so the native hover tooltip carries the unclipped name.

Other PopoverItems with fixed in-product copy (e.g. "New project
each run") deliberately omit the title — they never exceed the row
width and the redundant tooltip would be noise.

Regression test covers the DOM contract (every project row has
`title=<full name>`, fixed rows do not); the CSS half is verified by
code review since jsdom does not apply stylesheets.
2026-05-30 04:42:21 +00:00

1700 lines
36 KiB
CSS

/* ============================================================
Automations tab
============================================================ */
.automations-view {
display: flex;
flex-direction: column;
gap: 28px;
width: min(1080px, 100%);
margin: 0 auto;
padding: 16px 4px 96px;
}
.automations-hero {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 24px;
align-items: end;
padding: 4px 0 4px;
}
.automations-hero__copy {
min-width: 0;
}
.automations-hero__eyebrow {
display: inline-flex;
align-items: center;
height: 22px;
margin-bottom: 12px;
padding: 0 9px;
border-radius: 999px;
background: color-mix(in srgb, var(--accent, #79a8ff) 12%, transparent);
color: color-mix(in srgb, var(--accent, #79a8ff) 78%, var(--text));
font-size: 10.5px;
font-weight: 750;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.automations-hero__title {
margin: 0;
font-size: 36px;
line-height: 1.04;
font-weight: 700;
letter-spacing: -0.012em;
color: var(--text-strong);
}
.automations-hero__lede {
margin: 10px 0 0;
max-width: 620px;
font-size: 14px;
line-height: 1.55;
color: var(--text-muted);
}
.automations-hero__actions {
display: flex;
align-items: stretch;
gap: 8px;
height: 34px;
}
.automations-metrics {
display: grid;
grid-template-columns: repeat(3, minmax(58px, auto));
gap: 1px;
overflow: hidden;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--border);
box-shadow: var(--shadow-xs);
height: 100%;
}
.automations-metric {
display: flex;
align-items: center;
gap: 5px;
min-width: 58px;
padding: 0 10px;
background: var(--bg-panel);
line-height: 1;
}
.automations-metric__value {
color: var(--text-strong);
font-size: 13px;
font-weight: 720;
line-height: 1;
letter-spacing: -0.01em;
font-variant-numeric: tabular-nums;
}
.automations-metric__label {
color: var(--text-muted);
font-size: 10px;
font-weight: 700;
line-height: 1;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.automations-view__new {
appearance: none;
display: inline-flex;
align-items: center;
gap: 6px;
height: 34px;
padding: 0 13px;
border: 1px solid color-mix(in srgb, var(--accent, #79a8ff) 48%, var(--border));
border-radius: 8px;
background: color-mix(in srgb, var(--accent, #79a8ff) 16%, var(--bg-panel));
color: var(--text-strong);
font-size: 12.5px;
font-weight: 680;
letter-spacing: -0.005em;
cursor: pointer;
box-shadow:
0 1px 0 color-mix(in srgb, #fff 70%, transparent) inset,
var(--shadow-xs);
transition:
background-color 140ms cubic-bezier(0.23, 1, 0.32, 1),
border-color 140ms cubic-bezier(0.23, 1, 0.32, 1),
transform 140ms cubic-bezier(0.23, 1, 0.32, 1),
box-shadow 140ms cubic-bezier(0.23, 1, 0.32, 1);
white-space: nowrap;
}
.automations-view__new:hover {
background: color-mix(in srgb, var(--accent, #79a8ff) 22%, var(--bg-panel));
border-color: color-mix(in srgb, var(--accent, #79a8ff) 60%, var(--border));
box-shadow:
0 1px 0 color-mix(in srgb, #fff 70%, transparent) inset,
0 6px 16px color-mix(in srgb, var(--accent, #79a8ff) 18%, transparent);
}
.automations-view__new:active {
transform: scale(0.98);
}
.automations-view__new:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 2px;
}
.automations-view__error {
padding: 10px 12px;
border: 1px solid color-mix(in srgb, var(--red, #d94c4c) 34%, var(--border));
border-radius: 8px;
background: color-mix(in srgb, var(--red, #d94c4c) 12%, var(--bg-panel));
color: var(--text);
font-size: 12px;
}
.automations-section-head {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: 16px;
}
.automations-section__label {
margin: 0;
font-size: 15px;
font-weight: 700;
letter-spacing: -0.005em;
color: var(--text-strong);
}
.automations-section__sub {
margin: 4px 0 0;
font-size: 12.5px;
line-height: 1.5;
color: var(--text-muted);
}
.automations-section__meta {
color: var(--text-muted);
font-size: 11.5px;
font-weight: 600;
letter-spacing: 0.02em;
font-variant-numeric: tabular-nums;
}
/* ---------- Saved automations ---------- */
.automations-saved {
display: flex;
flex-direction: column;
gap: 10px;
}
.automations-saved__list {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: 8px;
}
.automation-empty {
appearance: none;
display: grid;
grid-template-columns: 40px minmax(0, 1fr);
gap: 14px;
align-items: center;
width: 100%;
min-height: 84px;
padding: 18px 20px;
border: 1px dashed color-mix(in srgb, var(--border-strong, var(--border)) 72%, transparent);
border-radius: 12px;
background: color-mix(in srgb, var(--bg-panel) 70%, transparent);
color: var(--text);
text-align: left;
cursor: pointer;
transition:
background-color 140ms cubic-bezier(0.23, 1, 0.32, 1),
border-color 140ms cubic-bezier(0.23, 1, 0.32, 1),
box-shadow 140ms cubic-bezier(0.23, 1, 0.32, 1);
}
.automation-empty:hover {
border-style: solid;
border-color: color-mix(in srgb, var(--accent, #79a8ff) 38%, var(--border-strong, var(--border)));
background: var(--bg-panel);
box-shadow: var(--shadow-xs);
}
.automation-empty__icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 38px;
height: 38px;
border-radius: 10px;
background: color-mix(in srgb, var(--accent, #79a8ff) 16%, var(--bg-subtle));
color: color-mix(in srgb, var(--accent, #79a8ff) 76%, var(--text-strong));
}
.automation-empty__body {
display: flex;
flex-direction: column;
gap: 4px;
min-width: 0;
}
.automation-empty__body strong {
color: var(--text-strong);
font-size: 13.5px;
font-weight: 680;
}
.automation-empty__body span {
color: var(--text-muted);
font-size: 12.5px;
line-height: 1.45;
}
.automation-row {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 14px;
align-items: center;
padding: 14px 16px;
border: 1px solid var(--border);
border-radius: 10px;
background: var(--bg-panel);
box-shadow: var(--shadow-xs);
transition:
background-color 140ms cubic-bezier(0.23, 1, 0.32, 1),
border-color 140ms cubic-bezier(0.23, 1, 0.32, 1),
box-shadow 140ms cubic-bezier(0.23, 1, 0.32, 1);
}
.automation-row:hover {
background: color-mix(in srgb, var(--bg-panel) 88%, var(--bg-subtle));
border-color: var(--border-strong);
box-shadow:
0 1px 2px color-mix(in srgb, #000 3%, transparent),
0 6px 18px color-mix(in srgb, #000 4%, transparent);
}
.automation-row.is-paused {
opacity: 0.74;
}
.automation-row.is-focused {
border-color: color-mix(in srgb, var(--accent) 42%, var(--border));
box-shadow:
0 0 0 3px color-mix(in srgb, var(--accent) 14%, transparent),
var(--shadow-xs);
}
.automation-row__main {
display: grid;
grid-template-columns: 34px minmax(0, 1fr);
gap: 10px;
align-items: start;
min-width: 0;
padding: 0;
border: 0;
background: transparent;
text-align: left;
color: var(--text);
}
.automation-row__icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
border-radius: 8px;
background: var(--bg-subtle);
color: color-mix(in srgb, var(--accent, #79a8ff) 74%, var(--text-muted));
}
.automation-row__content {
display: flex;
flex-direction: column;
gap: 4px;
min-width: 0;
}
.automation-row__title {
font-size: 13.5px;
font-weight: 680;
color: var(--text-strong);
}
.automation-row__meta {
display: inline-flex;
flex-wrap: wrap;
gap: 6px;
font-size: 12px;
color: var(--text-muted);
}
.automation-row__prompt {
max-width: 100%;
font-size: 12.5px;
line-height: 1.5;
color: var(--text-muted);
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.automation-row__last-run {
display: inline-flex;
flex-wrap: wrap;
align-items: center;
gap: 6px;
color: var(--text-muted);
font-size: 12px;
}
.automation-status {
display: inline-flex;
align-items: center;
height: 20px;
padding: 0 7px;
border: 1px solid var(--border);
border-radius: 999px;
background: var(--bg-subtle);
color: var(--text-muted);
font-size: 10.5px;
font-weight: 750;
letter-spacing: 0;
text-transform: uppercase;
}
.automation-status.is-running,
.automation-status.is-queued {
border-color: color-mix(in srgb, #c49a3b 28%, var(--border));
background: color-mix(in srgb, #c49a3b 12%, var(--bg-subtle));
color: color-mix(in srgb, #c49a3b 70%, var(--text));
}
.automation-status.is-succeeded {
border-color: color-mix(in srgb, #43a66d 28%, var(--border));
background: color-mix(in srgb, #43a66d 12%, var(--bg-subtle));
color: color-mix(in srgb, #43a66d 68%, var(--text));
}
.automation-status.is-failed {
border-color: color-mix(in srgb, var(--red, #d94c4c) 34%, var(--border));
background: color-mix(in srgb, var(--red, #d94c4c) 12%, var(--bg-subtle));
color: color-mix(in srgb, var(--red, #d94c4c) 76%, var(--text));
}
.automation-inline-link {
appearance: none;
border: 0;
background: transparent;
color: color-mix(in srgb, var(--accent, #79a8ff) 78%, var(--text));
font: inherit;
font-weight: 700;
cursor: pointer;
}
.automation-inline-link:hover {
color: var(--text-strong);
}
.automation-row__actions {
display: inline-flex;
flex-wrap: wrap;
justify-content: flex-end;
align-items: center;
gap: 6px;
}
.automation-row__btn {
appearance: none;
display: inline-flex;
align-items: center;
gap: 5px;
height: 30px;
padding: 0 10px;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--bg-subtle);
color: var(--text);
font-size: 12px;
font-weight: 650;
cursor: pointer;
transition:
background-color 120ms cubic-bezier(0.23, 1, 0.32, 1),
border-color 120ms cubic-bezier(0.23, 1, 0.32, 1);
}
.automation-row__btn:hover {
background: var(--bg-elevated, var(--bg-panel));
border-color: var(--border-strong);
}
.automation-row__btn:disabled {
opacity: 0.55;
cursor: progress;
}
.automation-row__btn--danger {
width: 30px;
padding: 0;
justify-content: center;
color: var(--text-muted);
}
.automation-row__btn--danger:hover {
color: var(--red, #d94c4c);
border-color: color-mix(in srgb, var(--red, #d94c4c) 40%, var(--border));
}
.automation-history {
grid-column: 1 / -1;
margin-top: 2px;
padding: 10px;
border: 1px solid var(--border);
border-radius: 8px;
background: color-mix(in srgb, var(--bg-subtle) 68%, transparent);
}
.automation-history--empty {
color: var(--text-muted);
font-size: 12px;
}
.automation-history__head {
display: flex;
justify-content: space-between;
gap: 12px;
margin-bottom: 8px;
color: var(--text-muted);
font-size: 11px;
font-weight: 750;
letter-spacing: 0;
text-transform: uppercase;
}
.automation-history__list {
display: flex;
flex-direction: column;
gap: 6px;
margin: 0;
padding: 0;
list-style: none;
}
.automation-history__row {
display: grid;
grid-template-columns: minmax(132px, auto) minmax(0, 1fr) auto;
gap: 8px 10px;
align-items: center;
padding: 8px 9px;
border: 1px solid var(--border-soft);
border-radius: 8px;
background: var(--bg-panel);
}
.automation-history__status,
.automation-history__meta {
display: inline-flex;
align-items: center;
min-width: 0;
gap: 6px;
}
.automation-history__status {
color: var(--text-muted);
font-size: 11.5px;
text-transform: capitalize;
}
.automation-history__meta {
overflow: hidden;
color: var(--text-muted);
font-size: 12px;
}
.automation-history__meta span {
min-width: 0;
}
.automation-history__message {
grid-column: 1 / 3;
overflow: hidden;
color: var(--text-muted);
font-size: 12px;
line-height: 1.35;
text-overflow: ellipsis;
white-space: nowrap;
}
.automation-history__message.is-error {
color: color-mix(in srgb, var(--red, #d94c4c) 78%, var(--text));
}
.automation-history__actions {
display: inline-flex;
flex-wrap: wrap;
justify-content: flex-end;
gap: 6px;
}
.automation-history__open {
appearance: none;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 5px;
height: 28px;
padding: 0 9px;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--bg-subtle);
color: var(--text);
font-size: 12px;
font-weight: 700;
cursor: pointer;
}
.automation-history__open:hover {
border-color: var(--border-strong);
background: var(--bg-elevated, var(--bg-panel));
}
.automation-history__open:disabled {
opacity: 0.55;
cursor: progress;
}
/* ---------- Template gallery ---------- */
.automations-templates {
display: flex;
flex-direction: column;
gap: 14px;
}
.automations-templates__head {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: 16px;
}
.automations-templates__head-copy {
display: flex;
flex-direction: column;
gap: 4px;
min-width: 0;
}
.automations-template-tabs {
display: flex;
flex-wrap: wrap;
gap: 4px 18px;
padding: 4px 0 6px;
border-bottom: 1px solid var(--border-soft, var(--border));
}
.automations-template-tab {
appearance: none;
display: inline-flex;
align-items: center;
gap: 8px;
height: 32px;
padding: 0 2px;
border: 0;
border-radius: 0;
background: transparent;
color: var(--text-muted);
font-size: 13px;
font-weight: 600;
letter-spacing: -0.005em;
cursor: pointer;
transition:
color 140ms cubic-bezier(0.23, 1, 0.32, 1);
}
.automations-template-tab:hover {
color: var(--text);
}
.automations-template-tab.is-active {
color: var(--text-strong);
font-weight: 700;
}
.automations-template-tab__label {
white-space: nowrap;
}
.automations-template-tab__count {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 20px;
height: 18px;
padding: 0 6px;
border-radius: 999px;
background: color-mix(in srgb, var(--bg-subtle) 90%, transparent);
color: var(--text-muted);
font-size: 10.5px;
font-weight: 700;
line-height: 1;
font-variant-numeric: tabular-nums;
}
.automations-template-tab.is-active .automations-template-tab__count {
background: color-mix(in srgb, var(--accent, #d77757) 18%, var(--bg-subtle));
color: color-mix(in srgb, var(--accent, #d77757) 70%, var(--text-strong));
}
.automations-templates__empty {
display: grid;
grid-template-columns: 34px minmax(0, 1fr);
gap: 12px;
align-items: center;
padding: 14px 16px;
border: 1px dashed color-mix(in srgb, var(--border-strong, var(--border)) 70%, transparent);
border-radius: 10px;
background: color-mix(in srgb, var(--bg-panel) 76%, transparent);
}
.automations-templates__empty-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 34px;
height: 34px;
border-radius: 8px;
background: color-mix(in srgb, var(--accent, #79a8ff) 14%, var(--bg-subtle));
color: color-mix(in srgb, var(--accent, #79a8ff) 70%, var(--text-strong));
}
.automations-templates__empty strong {
display: block;
color: var(--text-strong);
font-size: 13px;
font-weight: 680;
}
.automations-templates__empty p {
margin: 2px 0 0;
color: var(--text-muted);
font-size: 12px;
}
.automations-templates__grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
}
.automation-template-card {
appearance: none;
display: grid;
grid-template-columns: 40px minmax(0, 1fr);
gap: 14px;
align-items: start;
min-height: 168px;
width: 100%;
padding: 16px;
border: 1px solid var(--border);
border-radius: 12px;
background: var(--bg-panel);
color: var(--text);
text-align: left;
cursor: pointer;
box-shadow: var(--shadow-xs);
transition:
background-color 160ms cubic-bezier(0.23, 1, 0.32, 1),
border-color 160ms cubic-bezier(0.23, 1, 0.32, 1),
transform 160ms cubic-bezier(0.23, 1, 0.32, 1),
box-shadow 160ms cubic-bezier(0.23, 1, 0.32, 1);
}
.automation-template-card:hover {
background: color-mix(in srgb, var(--bg-panel) 86%, var(--bg-subtle));
border-color: var(--border-strong);
transform: translateY(-2px);
box-shadow:
0 1px 2px color-mix(in srgb, #000 3%, transparent),
0 10px 24px color-mix(in srgb, #000 5%, transparent);
}
.automation-template-card:active {
transform: translateY(0) scale(0.995);
}
.automation-template-card:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 2px;
}
.automation-template-card__icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border-radius: 8px;
background: var(--bg-subtle);
color: var(--text-muted);
}
.automation-template-card.is-orbit .automation-template-card__icon {
background: color-mix(in srgb, #d77757 20%, var(--bg-subtle));
color: color-mix(in srgb, #f2a282 82%, var(--text-strong));
}
.automation-template-card.is-live-artifact .automation-template-card__icon {
background: color-mix(in srgb, #54ba78 18%, var(--bg-subtle));
color: color-mix(in srgb, #79dfa0 82%, var(--text-strong));
}
.automation-template-card__body {
display: flex;
flex-direction: column;
gap: 7px;
min-width: 0;
}
.automation-template-card__kicker {
display: inline-flex;
align-items: center;
gap: 5px;
width: fit-content;
color: var(--text-muted);
font-size: 11px;
font-weight: 700;
}
.automation-template-card__title {
color: var(--text-strong);
font-size: 13.5px;
font-weight: 680;
line-height: 1.35;
}
.automation-template-card__desc {
color: var(--text-muted);
font-size: 12px;
line-height: 1.45;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
.automation-template-card__cta {
display: inline-flex;
align-items: center;
gap: 4px;
margin-top: auto;
color: color-mix(in srgb, var(--accent, #79a8ff) 78%, var(--text));
font-size: 12px;
font-weight: 700;
}
/* ============================================================
New Automation modal
============================================================ */
.automation-modal-backdrop {
position: fixed;
inset: 0;
z-index: 80;
display: flex;
align-items: center;
justify-content: center;
padding: 24px;
background: color-mix(in srgb, var(--scrim, rgba(0, 0, 0, 0.45)) 92%, transparent);
backdrop-filter: blur(3px);
animation: automation-modal-fade-in 160ms cubic-bezier(0.23, 1, 0.32, 1);
}
@keyframes automation-modal-fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
.automation-modal {
position: relative;
display: grid;
grid-template-rows: auto minmax(0, 1fr) auto;
width: min(880px, calc(100vw - 64px));
max-height: min(680px, calc(100vh - 48px));
border: 1px solid var(--border);
border-radius: 8px;
background: var(--bg-elevated, var(--bg-panel));
box-shadow:
0 24px 60px color-mix(in srgb, #000 30%, transparent),
0 1px 0 color-mix(in srgb, #fff 5%, transparent) inset;
overflow: hidden;
animation: automation-modal-pop-in 200ms cubic-bezier(0.23, 1, 0.32, 1);
}
@keyframes automation-modal-pop-in {
from {
opacity: 0;
transform: translateY(8px) scale(0.98);
}
to {
opacity: 1;
transform: translateY(0) scale(1);
}
}
.automation-modal__head {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 12px;
align-items: center;
padding: 14px 16px;
border-bottom: 1px solid var(--border-soft);
}
.automation-modal__title-input {
min-width: 0;
appearance: none;
border: 0;
background: transparent;
font-size: 16px;
font-weight: 680;
color: var(--text-strong);
padding: 6px 0;
}
.automation-modal__title-input::placeholder {
color: var(--text-faint);
font-weight: 560;
}
.automation-modal__title-input:focus {
outline: none;
}
.automation-modal__head-actions {
display: inline-flex;
align-items: center;
gap: 8px;
}
.automation-template-trigger,
.automation-modal__close {
appearance: none;
display: inline-flex;
align-items: center;
justify-content: center;
border: 1px solid var(--border);
background: var(--bg-panel);
color: var(--text);
cursor: pointer;
transition:
background-color 120ms cubic-bezier(0.23, 1, 0.32, 1),
border-color 120ms cubic-bezier(0.23, 1, 0.32, 1);
}
.automation-template-trigger {
gap: 7px;
max-width: 260px;
height: 32px;
padding: 0 11px;
border-radius: 8px;
font-size: 12.5px;
font-weight: 700;
}
.automation-template-trigger span {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.automation-template-trigger:hover,
.automation-template-trigger.is-active,
.automation-modal__close:hover {
background: var(--bg-subtle);
border-color: var(--border-strong);
}
.automation-modal__close {
width: 32px;
height: 32px;
border-radius: 8px;
color: var(--text-muted);
}
.automation-modal__body {
position: relative;
display: flex;
flex-direction: column;
gap: 10px;
min-height: 0;
padding: 14px 16px 12px;
overflow: auto;
}
.automation-modal__prompt-wrap {
position: relative;
min-height: 0;
}
.automation-modal__prompt {
display: block;
width: 100%;
min-height: 300px;
padding: 14px 16px;
border: 1px solid transparent;
border-radius: 8px;
background: color-mix(in srgb, var(--bg-panel) 72%, transparent);
resize: none;
color: var(--text);
font: 13.5px/1.55 var(--font, system-ui);
}
.automation-modal__prompt::placeholder {
color: var(--text-faint);
}
.automation-modal__prompt:focus {
outline: none;
border-color: color-mix(in srgb, var(--accent, #79a8ff) 44%, var(--border));
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #79a8ff) 14%, transparent);
}
.automation-modal__prompt-wrap.is-mentioning .automation-modal__prompt {
border-color: color-mix(in srgb, var(--accent, #79a8ff) 48%, var(--border));
box-shadow:
0 0 0 3px color-mix(in srgb, var(--accent, #79a8ff) 15%, transparent),
0 16px 34px color-mix(in srgb, var(--accent, #79a8ff) 7%, transparent);
}
.automation-modal__error {
margin: 0;
padding: 8px 10px;
border: 1px solid color-mix(in srgb, var(--red, #d94c4c) 32%, var(--border));
border-radius: 8px;
background: color-mix(in srgb, var(--red, #d94c4c) 14%, var(--bg-panel));
font-size: 12px;
color: var(--text);
}
.automation-mention-popover {
position: relative;
z-index: 4;
display: grid;
grid-template-rows: auto minmax(0, 1fr);
width: 100%;
height: clamp(160px, 30vh, 250px);
min-height: 0;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--bg-elevated, var(--bg-panel));
box-shadow: 0 18px 44px color-mix(in srgb, #000 32%, transparent);
overflow: hidden;
animation: automation-popover-in 140ms cubic-bezier(0.23, 1, 0.32, 1);
}
.automation-mention-tabs {
display: flex;
gap: 4px;
padding: 8px;
border-bottom: 1px solid var(--border-soft);
background: color-mix(in srgb, var(--bg-panel) 72%, transparent);
}
.automation-mention-tab {
appearance: none;
height: 26px;
padding: 0 10px;
border: 0;
border-radius: 6px;
background: transparent;
color: var(--text-muted);
font-size: 11.5px;
font-weight: 700;
cursor: pointer;
}
.automation-mention-tab.is-active {
background: var(--bg-subtle);
color: var(--text-strong);
}
.automation-mention-results {
min-height: 0;
overflow: auto;
padding: 8px;
}
.automation-mention-section {
display: flex;
flex-direction: column;
gap: 5px;
}
.automation-mention-section + .automation-mention-section {
margin-top: 10px;
}
.automation-mention-section__label,
.automation-popover__section-label {
color: var(--text-muted);
font-size: 11px;
font-weight: 750;
letter-spacing: 0;
text-transform: uppercase;
}
.automation-mention-section__items {
display: grid;
grid-template-columns: 1fr;
gap: 4px;
}
.automation-mention-empty {
padding: 22px 10px;
color: var(--text-muted);
font-size: 12px;
text-align: center;
}
.automation-mention-item {
appearance: none;
display: grid;
grid-template-columns: 24px minmax(0, 1fr);
gap: 8px;
align-items: center;
width: 100%;
min-height: 40px;
padding: 7px 8px;
border: 0;
border-radius: 7px;
background: transparent;
color: var(--text);
text-align: left;
cursor: pointer;
}
.automation-mention-item:hover {
background: var(--bg-subtle);
}
.automation-mention-item.is-selected {
background: color-mix(in srgb, var(--accent, #79a8ff) 12%, var(--bg-panel));
}
.automation-mention-item__icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 22px;
height: 22px;
border: 1px solid var(--border);
border-radius: 999px;
color: var(--text-muted);
}
.automation-mention-item.is-selected .automation-mention-item__icon {
border-color: var(--accent, #79a8ff);
background: var(--accent, #79a8ff);
color: #fff;
}
.automation-mention-item__body {
display: flex;
flex-direction: column;
gap: 2px;
min-width: 0;
}
.automation-mention-item__title,
.automation-template-option__title {
overflow: hidden;
color: var(--text-strong);
font-size: 12.5px;
font-weight: 680;
text-overflow: ellipsis;
white-space: nowrap;
}
.automation-mention-item__meta,
.automation-template-option__meta {
overflow: hidden;
color: var(--text-muted);
font-size: 11.5px;
line-height: 1.3;
text-overflow: ellipsis;
white-space: nowrap;
}
.automation-selected-context {
display: flex;
flex-wrap: wrap;
gap: 6px;
min-height: 28px;
}
.automation-selected-context__chip {
appearance: none;
display: inline-flex;
align-items: center;
gap: 6px;
max-width: 220px;
height: 28px;
padding: 0 9px;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--bg-panel);
color: var(--text);
font-size: 12px;
font-weight: 650;
cursor: pointer;
}
.automation-selected-context__chip:hover {
border-color: var(--border-strong);
background: var(--bg-subtle);
}
.automation-selected-context__chip > span {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.automation-modal__foot {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 12px 14px;
border-top: 1px solid var(--border-soft);
background: var(--bg-subtle);
}
.automation-modal__pills {
display: inline-flex;
flex-wrap: wrap;
gap: 6px;
min-width: 0;
}
.automation-pill__wrap {
position: relative;
display: inline-flex;
}
.automation-pill {
appearance: none;
display: inline-flex;
align-items: center;
gap: 6px;
height: 30px;
padding: 0 10px;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--bg-elevated, var(--bg-panel));
color: var(--text);
font-size: 12px;
font-weight: 680;
cursor: pointer;
transition:
background-color 120ms cubic-bezier(0.23, 1, 0.32, 1),
border-color 120ms cubic-bezier(0.23, 1, 0.32, 1);
max-width: 320px;
}
.automation-pill > span:not(:first-child):not(:last-child) {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
min-width: 0;
}
.automation-pill__segments {
display: inline-flex;
align-items: center;
gap: 5px;
min-width: 0;
}
/* Schedule summary segments inside the pill */
.automation-pill__freq {
font-weight: 700;
color: var(--text-strong);
flex-shrink: 0;
}
.automation-pill__sep {
color: var(--text-muted);
opacity: 0.5;
flex-shrink: 0;
}
.automation-pill__time {
color: var(--text);
flex-shrink: 0;
}
.automation-pill__tz {
color: var(--text-muted);
font-weight: 500;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
min-width: 0;
}
.automation-pill:hover {
background: var(--bg-panel);
border-color: var(--border-strong);
}
.automation-pill.is-active {
border-color: color-mix(in srgb, var(--accent, #79a8ff) 58%, var(--border));
box-shadow: 0 0 0 3px
color-mix(in srgb, var(--accent, #79a8ff) 18%, transparent);
}
.automation-modal__actions {
display: inline-flex;
gap: 8px;
align-items: center;
}
.automation-modal__cancel,
.automation-modal__submit {
appearance: none;
display: inline-flex;
align-items: center;
justify-content: center;
height: 32px;
padding: 0 14px;
border-radius: 8px;
font-size: 12.5px;
font-weight: 700;
cursor: pointer;
transition:
background-color 120ms cubic-bezier(0.23, 1, 0.32, 1),
border-color 120ms cubic-bezier(0.23, 1, 0.32, 1),
transform 140ms cubic-bezier(0.23, 1, 0.32, 1);
}
.automation-modal__cancel {
border: 1px solid transparent;
background: transparent;
color: var(--text-muted);
}
.automation-modal__cancel:hover {
color: var(--text-strong);
background: color-mix(in srgb, var(--bg-panel) 70%, transparent);
}
.automation-modal__submit {
border: 1px solid color-mix(in srgb, var(--text-strong) 28%, var(--border));
background: var(--text-strong);
color: var(--bg-panel);
}
.automation-modal__submit:hover:not(:disabled) {
background: var(--accent-strong, var(--accent));
border-color: var(--accent-strong, var(--accent));
}
.automation-modal__submit:disabled {
opacity: 0.6;
cursor: progress;
}
/* ---------- Popovers ---------- */
.automation-popover {
position: absolute;
bottom: calc(100% + 7px);
left: 0;
z-index: 5;
min-width: 250px;
max-width: 340px;
max-height: 360px;
overflow: auto;
padding: 6px;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--bg-elevated, var(--bg-panel));
box-shadow: 0 14px 34px color-mix(in srgb, #000 28%, transparent);
display: flex;
flex-direction: column;
gap: 3px;
animation: automation-popover-in 140ms cubic-bezier(0.23, 1, 0.32, 1);
}
.automation-modal__head-actions .automation-popover {
left: auto;
right: 0;
top: calc(100% + 7px);
bottom: auto;
}
@keyframes automation-popover-in {
from {
opacity: 0;
transform: translateY(4px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.automation-popover--schedule {
width: min(380px, calc(100vw - 48px));
min-width: 320px;
padding: 12px;
gap: 10px;
}
.automation-popover--templates {
min-width: 320px;
}
.automation-popover__item,
.automation-template-option {
appearance: none;
display: grid;
align-items: center;
width: 100%;
padding: 8px 10px;
border: 0;
border-radius: 6px;
background: transparent;
color: var(--text);
text-align: left;
cursor: pointer;
}
.automation-popover__item {
grid-template-columns: 20px minmax(0, 1fr);
gap: 8px;
}
.automation-template-option {
grid-template-columns: 30px minmax(0, 1fr) 16px;
gap: 9px;
}
.automation-popover__item:hover,
.automation-template-option:hover {
background: var(--bg-subtle);
}
.automation-popover__item.is-selected,
.automation-template-option.is-selected {
background: color-mix(in srgb, var(--accent, #79a8ff) 14%, transparent);
}
.automation-template-option__icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
border-radius: 8px;
background: var(--bg-subtle);
color: var(--text-muted);
}
.automation-template-option__icon.is-orbit {
background: color-mix(in srgb, #d77757 18%, var(--bg-subtle));
color: #f2a282;
}
.automation-template-option__icon.is-live-artifact {
background: color-mix(in srgb, #54ba78 18%, var(--bg-subtle));
color: #79dfa0;
}
.automation-template-option__body,
.automation-popover__body {
display: flex;
flex-direction: column;
gap: 2px;
min-width: 0;
}
.automation-popover__check {
display: inline-flex;
align-items: center;
justify-content: center;
height: 18px;
color: var(--accent-strong, var(--accent));
}
.automation-popover__label {
font-size: 12.5px;
font-weight: 680;
color: var(--text-strong);
/*
* Single-line truncate with ellipsis (#3274). Long project names in the
* "Existing projects" section of the automation project picker used to
* wrap across multiple lines, blowing up each row's height and making
* the dropdown hard to scan. The parent `.automation-popover__body`
* already sets `min-width: 0` so the flex child can shrink below its
* intrinsic content width — these three properties complete the
* standard truncate triad. The full name is preserved via the row's
* `title` attribute (set by the picker call site) so it remains
* discoverable via the native hover tooltip.
*/
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.automation-popover__hint {
font-size: 11.5px;
color: var(--text-muted);
line-height: 1.4;
}
.automation-popover__section-label {
padding: 7px 10px 4px;
}
.automation-popover__kinds {
display: inline-flex;
flex-wrap: wrap;
gap: 4px;
padding: 3px;
border-radius: 8px;
background: var(--bg-subtle);
}
.automation-popover__kind {
appearance: none;
border: 0;
background: transparent;
color: var(--text-muted);
height: 26px;
padding: 0 10px;
border-radius: 6px;
font-size: 12px;
font-weight: 680;
cursor: pointer;
}
.automation-popover__kind.is-active {
background: var(--bg-elevated, var(--bg-panel));
color: var(--text-strong);
box-shadow: var(--shadow-xs);
}
.automation-popover__weekdays {
display: grid;
grid-template-columns: repeat(7, minmax(0, 1fr));
gap: 4px;
width: 100%;
min-width: 0;
}
.automation-popover__weekday {
appearance: none;
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 0;
width: 100%;
height: 30px;
padding: 0;
border: 1px solid var(--border);
background: var(--bg-panel);
color: var(--text-muted);
font-size: 11px;
font-weight: 680;
border-radius: 8px;
cursor: pointer;
}
.automation-popover__weekday.is-active {
background: var(--accent, #79a8ff);
border-color: var(--accent, #79a8ff);
color: #fff;
}
.automation-popover__row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
}
.automation-popover__field {
display: flex;
flex-direction: column;
gap: 4px;
}
.automation-popover__field > span {
font-size: 11px;
font-weight: 700;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0;
}
.automation-popover__field > input,
.automation-popover__field > select {
appearance: none;
-webkit-appearance: none;
width: 100%;
min-width: 0;
height: 36px;
padding: 0 10px;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--bg-panel);
color: var(--text);
font-size: 12.5px;
}
/* Hide the browser-native clock icon so it doesn't crowd the time field */
.automation-popover__field
> input[type="time"]::-webkit-calendar-picker-indicator {
display: none;
}
.automation-popover__field > input[type="time"]::-webkit-inner-spin-button {
display: none;
}
.automation-popover__field > select {
background-image:
linear-gradient(45deg, transparent 50%, currentColor 50%),
linear-gradient(135deg, currentColor 50%, transparent 50%);
background-position:
calc(100% - 15px) 50%,
calc(100% - 10px) 50%;
background-repeat: no-repeat;
background-size:
5px 5px,
5px 5px;
}
.automation-popover__done {
display: flex;
justify-content: flex-end;
}
.automation-popover__done-btn {
appearance: none;
border: 1px solid var(--border);
background: var(--text-strong);
color: var(--bg-panel);
font-size: 12px;
font-weight: 700;
height: 28px;
padding: 0 12px;
border-radius: 8px;
cursor: pointer;
}
.automation-popover__done-btn:hover {
background: var(--accent-strong, var(--accent));
border-color: var(--accent-strong, var(--accent));
}
@media (max-width: 960px) {
.automations-templates__grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.automation-modal__prompt {
min-height: 240px;
}
}
@media (max-width: 760px) {
.automations-hero {
grid-template-columns: 1fr;
align-items: stretch;
}
.automations-hero__actions,
.automations-section-head {
flex-direction: column;
align-items: stretch;
}
.automations-metrics {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.automations-templates__grid {
grid-template-columns: 1fr;
}
.automation-row {
grid-template-columns: 1fr;
}
.automation-row__actions {
justify-self: flex-start;
}
.automation-history__row {
grid-template-columns: 1fr;
}
.automation-history__message,
.automation-history__actions {
grid-column: auto;
}
.automation-history__actions {
justify-self: flex-start;
}
.automation-modal-backdrop {
padding: 12px;
}
.automation-modal {
width: calc(100vw - 24px);
max-height: calc(100vh - 24px);
}
.automation-modal__foot {
grid-template-columns: 1fr;
}
.automation-modal__head {
grid-template-columns: minmax(0, 1fr) auto;
gap: 8px;
}
.automation-modal__head-actions,
.automation-modal__actions {
justify-content: flex-end;
}
.automation-template-trigger {
max-width: min(220px, 42vw);
}
.automation-modal__foot {
flex-direction: column;
align-items: stretch;
}
.automation-mention-popover {
height: clamp(150px, 28vh, 220px);
}
}