- Introduce a new "project-setup" onboarding step between GitHub and first-task actions - Gate first-task navigation on project selection and add contextual setup-wizard guidance - Centralize ordered onboarding step definitions in shared state and reuse them for navigation/progress labels - Extract ModelOnboardingModal styles into a dedicated component CSS file and update tests/mocks for the new step order
478 lines
10 KiB
CSS
478 lines
10 KiB
CSS
/* === Wizard Shared Styles (used by SetupWizardModal) === */
|
|
.wizard-option-recommended {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
width: fit-content;
|
|
padding: calc(var(--space-xs) / 2) var(--space-sm);
|
|
background: color-mix(in srgb, var(--color-success) 10%, transparent);
|
|
color: var(--color-success) !important;
|
|
border-radius: var(--radius-sm);
|
|
font-size: calc(var(--space-md) - (var(--space-xs) / 4)) !important;
|
|
font-weight: 600;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
}
|
|
|
|
.wizard-error {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-sm);
|
|
padding: var(--space-md);
|
|
background: color-mix(in srgb, var(--color-error) 10%, transparent);
|
|
border: 1px solid color-mix(in srgb, var(--color-error) 35%, transparent);
|
|
border-radius: var(--radius-md);
|
|
color: var(--color-error);
|
|
font-size: calc(var(--space-md) + (var(--space-xs) / 4));
|
|
}
|
|
|
|
/* === Setup Wizard Modal (Onboarding) === */
|
|
.setup-wizard-modal {
|
|
display: flex;
|
|
flex-direction: column;
|
|
max-width: 880px;
|
|
width: 90vw;
|
|
max-height: min(720px, calc(100dvh - var(--overlay-padding-top, 10vh) - var(--space-lg)));
|
|
animation: slideUp var(--transition-normal) ease-out;
|
|
overflow: hidden;
|
|
}
|
|
|
|
@keyframes slideUp {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(16px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
.setup-wizard-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: var(--space-xl) var(--space-xl) 0;
|
|
gap: var(--space-md);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.setup-wizard-heading {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-xs);
|
|
flex: 1 1 auto;
|
|
min-width: 0;
|
|
}
|
|
|
|
.setup-wizard-brand {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: var(--space-sm);
|
|
color: var(--logo-accent);
|
|
}
|
|
|
|
.setup-wizard-brand-logo {
|
|
width: 28px;
|
|
height: 28px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.setup-wizard-brand-name {
|
|
font-size: 22px;
|
|
font-weight: 800;
|
|
letter-spacing: -0.02em;
|
|
line-height: 1;
|
|
}
|
|
|
|
.setup-wizard-title {
|
|
font-size: 24px;
|
|
font-weight: 800;
|
|
color: var(--text);
|
|
margin: 0;
|
|
line-height: 1.1;
|
|
}
|
|
|
|
.setup-wizard-content {
|
|
padding: var(--space-md) var(--space-xl);
|
|
flex: 1 1 auto;
|
|
min-height: 0;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.setup-wizard-manual {
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.setup-wizard-manual .welcome-icon {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 64px;
|
|
height: 64px;
|
|
background: color-mix(in srgb, var(--todo) 10%, transparent);
|
|
border-radius: var(--radius-lg);
|
|
color: var(--todo);
|
|
margin-bottom: var(--space-lg);
|
|
}
|
|
|
|
.setup-wizard-manual .welcome-text {
|
|
font-size: 14px;
|
|
color: var(--text-muted);
|
|
line-height: 1.6;
|
|
margin: 0 0 var(--space-xl);
|
|
}
|
|
|
|
.setup-wizard-mode-switch {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
gap: var(--space-sm);
|
|
margin: 0 0 var(--space-lg);
|
|
padding: 0;
|
|
border: 0;
|
|
}
|
|
|
|
.setup-wizard-mode-switch legend {
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: var(--text);
|
|
margin-bottom: var(--space-xs);
|
|
}
|
|
|
|
.setup-wizard-mode-option {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-sm);
|
|
padding: var(--space-sm) var(--space-md);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-md);
|
|
background: var(--surface);
|
|
color: var(--text);
|
|
cursor: pointer;
|
|
transition:
|
|
border-color var(--transition-fast),
|
|
background-color var(--transition-fast),
|
|
box-shadow var(--transition-fast);
|
|
}
|
|
|
|
.setup-wizard-mode-option input {
|
|
accent-color: var(--todo);
|
|
}
|
|
|
|
.setup-wizard-mode-option:hover {
|
|
border-color: var(--text-dim);
|
|
}
|
|
|
|
.setup-wizard-mode-option.selected {
|
|
border-color: var(--todo);
|
|
background: color-mix(in srgb, var(--todo) 10%, transparent);
|
|
box-shadow: 0 0 0 1px color-mix(in srgb, var(--todo) 25%, transparent);
|
|
}
|
|
|
|
.setup-wizard-manual .form-group {
|
|
margin-bottom: var(--space-lg);
|
|
}
|
|
|
|
.setup-wizard-manual .form-group label {
|
|
display: block;
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: var(--text);
|
|
margin-bottom: var(--space-xs);
|
|
}
|
|
|
|
.setup-wizard-manual .form-group input,
|
|
.setup-wizard-manual .form-group select {
|
|
width: 100%;
|
|
padding: 10px 12px;
|
|
background: var(--surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-md);
|
|
color: var(--text);
|
|
font-size: 14px;
|
|
transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
|
|
}
|
|
|
|
.setup-wizard-manual .form-group input:focus,
|
|
.setup-wizard-manual .form-group select:focus {
|
|
outline: none;
|
|
border-color: var(--todo);
|
|
box-shadow: var(--focus-ring);
|
|
}
|
|
|
|
.setup-wizard-manual .form-hint {
|
|
margin: 4px 0 0;
|
|
font-size: 12px;
|
|
color: var(--text-dim);
|
|
}
|
|
|
|
.setup-wizard-isolation-options {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-sm);
|
|
}
|
|
|
|
.setup-wizard-advanced {
|
|
margin-top: var(--space-sm);
|
|
border-top: 1px solid var(--border);
|
|
padding-top: var(--space-lg);
|
|
}
|
|
|
|
.setup-wizard-advanced-toggle {
|
|
width: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-sm);
|
|
padding: var(--space-sm) 0;
|
|
background: transparent;
|
|
border: none;
|
|
color: var(--text);
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
text-align: left;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.setup-wizard-advanced-toggle:hover {
|
|
color: var(--logo-accent);
|
|
}
|
|
|
|
.setup-wizard-advanced-toggle:focus-visible {
|
|
outline: none;
|
|
box-shadow: var(--focus-ring-strong);
|
|
border-radius: var(--radius-sm);
|
|
}
|
|
|
|
.setup-wizard-advanced-toggle[aria-expanded="true"] .setup-wizard-advanced-chevron {
|
|
transform: rotate(90deg);
|
|
}
|
|
|
|
.setup-wizard-advanced-chevron {
|
|
flex-shrink: 0;
|
|
transition: transform var(--transition-fast);
|
|
}
|
|
|
|
.setup-wizard-advanced-panel {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-sm);
|
|
margin-top: var(--space-sm);
|
|
padding: var(--space-md);
|
|
background: var(--card);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-lg);
|
|
}
|
|
|
|
.setup-wizard-advanced-panel .form-group:last-child {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.setup-wizard-auth-token {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-sm);
|
|
}
|
|
|
|
.setup-wizard-auth-token-actions {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: var(--space-sm);
|
|
}
|
|
|
|
.setup-wizard-auth-token-actions .btn {
|
|
min-height: 36px;
|
|
}
|
|
|
|
.setup-wizard-isolation-option {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
gap: var(--space-md);
|
|
padding: var(--space-md) var(--space-lg);
|
|
background: var(--card);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-lg);
|
|
cursor: pointer;
|
|
transition:
|
|
background-color var(--transition-fast),
|
|
border-color var(--transition-fast);
|
|
}
|
|
|
|
.setup-wizard-isolation-option:hover {
|
|
background: var(--card-hover);
|
|
border-color: var(--text-dim);
|
|
}
|
|
|
|
.setup-wizard-isolation-option.selected {
|
|
background: color-mix(in srgb, var(--todo) 5%, transparent);
|
|
border-color: var(--todo);
|
|
box-shadow: 0 0 0 1px var(--todo);
|
|
}
|
|
|
|
.setup-wizard-isolation-option input[type="radio"] {
|
|
margin-top: 2px;
|
|
accent-color: var(--todo);
|
|
}
|
|
|
|
.setup-wizard-isolation-option-content {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 2px;
|
|
}
|
|
|
|
.setup-wizard-isolation-option-content strong {
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
color: var(--text);
|
|
}
|
|
|
|
.setup-wizard-isolation-option-content span {
|
|
font-size: 12px;
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.setup-wizard-isolation-option .wizard-option-recommended {
|
|
margin-top: 2px;
|
|
}
|
|
|
|
.setup-wizard-complete {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
text-align: center;
|
|
gap: var(--space-sm);
|
|
padding: var(--space-lg) 0;
|
|
}
|
|
|
|
.setup-wizard-complete .success-icon {
|
|
color: var(--color-success);
|
|
}
|
|
|
|
.setup-wizard-complete h3 {
|
|
font-size: 20px;
|
|
font-weight: 700;
|
|
color: var(--text);
|
|
margin: 0;
|
|
}
|
|
|
|
.setup-wizard-complete p {
|
|
font-size: 14px;
|
|
color: var(--text-muted);
|
|
margin: 0;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
.setup-wizard-footer {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--space-sm);
|
|
justify-content: flex-end;
|
|
padding: var(--space-md) var(--space-xl) var(--space-lg);
|
|
flex-shrink: 0;
|
|
border-top: 1px solid var(--border);
|
|
background: var(--surface);
|
|
}
|
|
|
|
.setup-wizard-footer .btn-primary {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: var(--space-sm);
|
|
padding: 10px 24px;
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.setup-wizard-help-link {
|
|
margin-right: auto;
|
|
text-decoration: none;
|
|
}
|
|
|
|
.setup-wizard-footer .btn-primary:disabled {
|
|
opacity: 0.5;
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
@media (max-width: 768px) {
|
|
.setup-wizard-overlay {
|
|
padding:
|
|
max(var(--space-md), env(safe-area-inset-top, 0px))
|
|
max(var(--space-md), env(safe-area-inset-right, 0px))
|
|
max(var(--space-md), env(safe-area-inset-bottom, 0px))
|
|
max(var(--space-md), env(safe-area-inset-left, 0px));
|
|
}
|
|
|
|
.setup-wizard-modal {
|
|
display: flex;
|
|
flex-direction: column;
|
|
max-width: 100%;
|
|
width: 100%;
|
|
max-height: calc(100dvh - max(var(--space-2xl), env(safe-area-inset-top, 0px)) - max(var(--space-2xl), env(safe-area-inset-bottom, 0px)));
|
|
border-radius: var(--radius-lg);
|
|
}
|
|
|
|
.setup-wizard-header {
|
|
padding: var(--space-md) var(--space-md) 0;
|
|
}
|
|
|
|
.setup-wizard-brand-name {
|
|
font-size: 20px;
|
|
}
|
|
|
|
.setup-wizard-title {
|
|
font-size: 21px;
|
|
}
|
|
|
|
.setup-wizard-content {
|
|
padding: var(--space-md);
|
|
}
|
|
|
|
.setup-wizard-mode-switch {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.setup-wizard-isolation-options {
|
|
gap: var(--space-xs);
|
|
}
|
|
|
|
.setup-wizard-isolation-option {
|
|
padding: var(--space-sm) var(--space-md);
|
|
}
|
|
|
|
.setup-wizard-advanced-panel {
|
|
padding: var(--space-sm);
|
|
}
|
|
|
|
.setup-wizard-auth-token-actions .btn {
|
|
width: 100%;
|
|
justify-content: center;
|
|
}
|
|
|
|
.setup-wizard-footer {
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
padding:
|
|
var(--space-sm)
|
|
var(--space-md)
|
|
max(var(--space-md), env(safe-area-inset-bottom, 0px));
|
|
}
|
|
|
|
.setup-wizard-footer .btn-primary {
|
|
width: 100%;
|
|
justify-content: center;
|
|
}
|
|
|
|
.setup-wizard-help-link {
|
|
margin-right: 0;
|
|
width: 100%;
|
|
justify-content: center;
|
|
}
|
|
|
|
.setup-wizard-complete {
|
|
padding: var(--space-lg) 0;
|
|
}
|
|
}
|
|
|
|
/* =========================================================================
|
|
Agent Manager UI — Global CSS Classes
|
|
========================================================================= */
|
|
|