/* ── Shell ── */ .sp-shell { display: flex; flex: 1; width: 100%; min-width: 0; background: var(--bg); color: var(--text); height: 100vh; overflow: hidden; } /* ── Left Navigation ── */ .sp-nav { width: 220px; min-width: 220px; background: var(--manus-surface); border-right: 1px solid var(--manus-elevated); display: flex; flex-direction: column; height: 100vh; overflow: hidden; } .sp-nav-header { padding: 24px 16px 16px; border-bottom: 1px solid var(--border); flex-shrink: 0; } .sp-nav-brand { font-size: 11px; font-weight: 600; color: var(--text3); letter-spacing: 0.02em; margin-bottom: 2px; } .sp-nav-title { font-size: 20px; font-weight: 600; color: var(--text); letter-spacing: -0.02em; } .sp-nav-items { flex: 1; overflow-y: auto; padding: 8px; } .sp-nav-item { display: flex; align-items: center; gap: 10px; padding: 8px 12px; font-size: 13px; font-weight: 500; color: var(--text2); background: none; border: none; cursor: pointer; border-radius: 8px; width: 100%; transition: background 0.12s, color 0.12s; } .sp-nav-item:hover { background: var(--manus-elevated); color: var(--manus-tx); } .sp-nav-item--active { background: var(--manus-elevated); color: var(--manus-tx); font-weight: 500; } /* Runtime dot in nav */ .sp-nav-status { display: flex; align-items: center; gap: 8px; padding: 10px 16px; border-top: 1px solid var(--border); flex-shrink: 0; } .sp-nav-status-label { color: var(--text3); } .sp-nav-footer { padding: 12px 16px; border-top: 1px solid var(--border); flex-shrink: 0; } .sp-back-btn { background: none; border: none; color: var(--text3); font-size: 13px; font-family: inherit; cursor: pointer; padding: 0; transition: color 0.12s; } .sp-back-btn:hover { color: var(--text); } /* ── Status dot ── */ .sp-dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; } .sp-dot--inline { width: 6px; height: 6px; background-color: currentColor; box-shadow: 0 0 6px currentColor; } .sp-dot--success { background: var(--success); box-shadow: 0 0 6px rgba(48,209,88,0.55); } .sp-dot--warn { background: var(--warning); animation: sp-pulse 1.2s ease-in-out infinite; } .sp-dot--danger { background: var(--danger); } .sp-dot--idle { background: var(--text3); } @keyframes sp-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } } /* ── Main area (right side of sidebar) ── */ .settings-main-area { flex: 1; display: flex; flex-direction: column; position: relative; height: 100vh; background: var(--bg-main, #0B0E14); overflow: hidden; } .settings-scroll-container { flex: 1; overflow-y: auto; width: 100%; } .settings-content { width: 100%; max-width: 800px; margin: 0 auto; padding: 48px 32px 120px 32px; } .page-header { margin-bottom: 28px; } .settings-cards { display: flex; flex-direction: column; gap: 24px; } .sp-section-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 4px; } .sp-section-title { font-size: 24px; font-weight: 600; color: var(--manus-tx); letter-spacing: -0.02em; margin-bottom: 4px; } .sp-section-desc { font-size: 14px; color: var(--manus-tx2); line-height: 1.5; } /* ── Status pill ── */ .sp-status-pill { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; border-radius: 9999px; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; background: var(--bg3); color: var(--text2); border: 1px solid var(--border); flex-shrink: 0; } .sp-status-pill--success { background: rgba(48,209,88,0.08); color: var(--success); border-color: rgba(48,209,88,0.2); } .sp-status-pill--warn { background: rgba(255,214,10,0.08); color: var(--warning); border-color: rgba(255,214,10,0.2); } .sp-status-pill--danger { background: rgba(255,69,58,0.08); color: var(--danger); border-color: rgba(255,69,58,0.2); } /* ── Card (continuous, macOS/Linear style) ── */ .sp-card { background: var(--manus-elevated); border: 1px solid var(--manus-hover); border-radius: 12px; overflow: hidden; } .sp-card-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; padding: 16px 20px; } .sp-card-row--full { flex-direction: column; align-items: stretch; width: 100%; gap: 12px; } .sp-card-row-label { min-width: 0; flex-shrink: 0; width: 180px; padding-top: 2px; } .sp-card-row-title { font-size: 14px; font-weight: 500; color: var(--text); margin-bottom: 2px; } .sp-card-row-desc { font-size: 12px; color: var(--text3); line-height: 1.4; } .sp-card-row-control { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 8px; align-items: flex-end; } .sp-card-row-control--wide { align-items: stretch; } .sp-card-divider { height: 1px; background: var(--border); margin: 0 20px; } /* ── Active model ── */ .sp-model-name { font-size: 14px; font-weight: 600; color: var(--text); margin-bottom: 2px; } .sp-model-path { font-size: 11px; color: var(--text3); font-family: "Cascadia Code", "JetBrains Mono", monospace; word-break: break-all; line-height: 1.4; } .sp-pending { font-size: 12px; color: var(--accent); background: rgba(72,166,255,0.07); border: 1px solid rgba(72,166,255,0.18); border-radius: 6px; padding: 6px 10px; } .sp-empty { font-size: 13px; color: var(--text3); font-style: italic; } /* ── Folder path ── */ .sp-folder-actions { display: flex; gap: 8px; align-items: center; } .sp-folder-path { font-size: 12px; color: var(--text2); font-family: "Cascadia Code", "JetBrains Mono", monospace; background: var(--bg3); padding: 6px 10px; border-radius: 6px; border: 1px solid var(--border); word-break: break-all; margin-top: 6px; } /* ── Model list ── */ .sp-model-list { border: 1px solid var(--border); border-radius: 8px; overflow: hidden; width: 100%; } .sp-model-row { display: flex; align-items: center; gap: 10px; width: 100%; padding: 10px 14px; background: var(--bg3); border: none; border-bottom: 1px solid var(--border); cursor: pointer; transition: background 0.1s; text-align: left; color: var(--text); font-family: inherit; font-size: 13px; } .sp-model-row:last-child { border-bottom: none; } .sp-model-row:hover:not(:disabled) { background: var(--bg4); } .sp-model-row--selected { background: rgba(72,166,255,0.07); } .sp-model-row--disabled { opacity: 0.45; pointer-events: none; } .sp-model-row-select { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; background: none; border: none; cursor: pointer; padding: 0; font-family: inherit; color: inherit; text-align: left; } .sp-model-row-select:disabled { cursor: not-allowed; } .sp-model-row-name { font-size: 13px; color: var(--text); } .sp-remove-btn { background: none; border: none; color: var(--text3); cursor: pointer; padding: 4px; border-radius: 4px; flex-shrink: 0; font-family: inherit; transition: background 0.12s, color 0.12s; display: flex; align-items: center; justify-content: center; } .sp-remove-btn:hover { background: rgba(240,64,64,0.15); color: var(--danger); } .sp-scanning-row { padding: 12px 14px; color: var(--text3); font-size: 13px; background: var(--bg3); animation: sp-pulse 1.2s ease-in-out infinite; } /* ── Radio controls ── */ .sp-radio { display: inline-block; width: 14px; height: 14px; border-radius: 50%; border: 2px solid var(--border2); flex-shrink: 0; transition: border-color 0.12s, background 0.12s, box-shadow 0.12s; } .sp-radio--on { border-color: var(--accent); background: var(--accent); box-shadow: 0 0 0 3px rgba(72,166,255,0.18); } /* ── Segmented control (macOS style) ── */ .sp-segmented { display: inline-flex; background: var(--bg3); border: 1px solid var(--border); border-radius: 8px; padding: 3px; gap: 2px; } .sp-segmented-btn { padding: 6px 14px; border-radius: 6px; font-size: 12px; font-weight: 500; cursor: pointer; background: transparent; border: none; color: var(--text3); font-family: inherit; transition: background 0.12s, color 0.12s; white-space: nowrap; } .sp-segmented-btn:hover:not(:disabled) { color: var(--text); background: var(--bg4); } .sp-segmented-btn--active { background: var(--bg4); color: var(--text); font-weight: 500; box-shadow: 0 1px 3px rgba(0,0,0,0.2); } .sp-segmented-btn:disabled { opacity: 0.45; cursor: not-allowed; } /* ── Context custom input ── */ .sp-ctx-custom { display: flex; align-items: center; gap: 10px; margin-top: 4px; } /* ── Toggle switches (iOS style) ── */ .sp-toggles { display: flex; gap: 16px; } .sp-toggle { display: flex; align-items: center; gap: 8px; cursor: pointer; font-size: 13px; color: var(--text2); transition: color 0.15s; } .sp-toggle input[type="checkbox"] { display: none; } .sp-toggle-track { width: 36px; height: 20px; background: var(--bg4); border: 1px solid var(--border); border-radius: 10px; position: relative; transition: background 0.2s, border-color 0.2s; flex-shrink: 0; } .sp-toggle-track::after { content: ""; position: absolute; top: 2px; left: 2px; width: 14px; height: 14px; background: var(--text3); border-radius: 50%; transition: transform 0.2s, background 0.2s; } .sp-toggle--active .sp-toggle-track { background: var(--accent); border-color: var(--accent); } .sp-toggle--active .sp-toggle-track::after { transform: translateX(16px); background: #fff; } .sp-toggle--active { color: var(--text); } .sp-toggle-label { font-weight: 500; } .sp-toggle-desc { font-size: 12px; color: var(--text3); margin-top: 4px; line-height: 1.4; } /* ── GPU ── */ .sp-gpu-info-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 12px; background: var(--bg3); border-radius: 8px; border: 1px solid var(--border); } .sp-gpu-name { font-size: 13px; font-weight: 600; color: var(--text); } .sp-gpu-vram { font-size: 12px; color: var(--text3); font-family: monospace; } /* ── Slider ── */ .sp-slider { -webkit-appearance: none; appearance: none; height: 4px; background: var(--bg5); border-radius: 2px; outline: none; cursor: pointer; display: block; } .sp-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 16px; height: 16px; border-radius: 50%; background: var(--accent); cursor: pointer; box-shadow: 0 0 5px rgba(72,166,255,0.4); transition: box-shadow 0.15s; } .sp-slider::-webkit-slider-thumb:hover { box-shadow: 0 0 0 4px rgba(72,166,255,0.2); } .sp-slider-presets { display: flex; gap: 12px; margin-top: 4px; } /* ── Field label ── */ .sp-field-header { display: flex; align-items: center; justify-content: space-between; } .sp-field-label { font-size: 12px; color: var(--text3); font-weight: 600; } .sp-field-value { font-size: 12px; font-weight: 600; color: var(--text2); font-family: "Cascadia Code", "JetBrains Mono", monospace; } /* ── Inputs ── */ .sp-input { background: var(--manus-surface); border: 1px solid var(--manus-elevated); border-radius: 8px; color: var(--manus-tx); font-size: 13px; padding: 8px 12px; outline: none; font-family: inherit; transition: border-color 0.15s, background 0.15s; } .sp-input:hover { border-color: var(--manus-hover); } .sp-input:focus { border-color: var(--manus-blue); background: var(--manus-elevated); box-shadow: 0 0 0 1px var(--manus-blue); } .sp-input:disabled { opacity: 0.45; cursor: not-allowed; } .sp-input--sm { width: 120px; padding: 6px 10px; font-size: 12px; } /* ── Hint text ── */ .sp-hint { font-size: 12px; color: var(--text3); line-height: 1.5; } .sp-hint code { font-family: "Cascadia Code", "JetBrains Mono", monospace; font-size: 11px; color: var(--text2); background: var(--bg4); padding: 1px 5px; border-radius: 3px; } /* ── Buttons ── */ .sp-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 8px 16px; border-radius: 8px; font-size: 13px; font-weight: 500; font-family: inherit; cursor: pointer; border: 1px solid transparent; transition: background 0.12s, color 0.12s, border-color 0.12s, opacity 0.12s; white-space: nowrap; line-height: 1; } .sp-btn:disabled { opacity: 0.4; cursor: not-allowed; } .sp-btn--primary { background: var(--text); color: var(--bg); border-color: var(--text); } .sp-btn--primary:hover:not(:disabled) { opacity: 0.85; } .sp-btn--secondary { background: var(--bg3); color: var(--text2); border-color: var(--border); } .sp-btn--secondary:hover:not(:disabled) { background: var(--bg4); color: var(--text); } .sp-btn--ghost { background: transparent; color: var(--text3); border-color: transparent; } .sp-btn--ghost:hover:not(:disabled) { background: var(--bg3); color: var(--text); } .sp-btn--danger { background: transparent; color: var(--danger); border-color: rgba(240,64,64,0.3); } .sp-btn--danger:hover:not(:disabled) { background: rgba(240,64,64,0.1); } .sp-btn-xs { font-size: 11px; color: var(--text3); background: none; border: none; cursor: pointer; padding: 2px 6px; font-family: inherit; transition: color 0.12s; border-radius: 4px; } .sp-btn-xs:hover { color: var(--accent); } /* ── Floating action bar ── */ .settings-action-bar { position: absolute; bottom: 0; left: 0; width: 100%; background: rgba(11, 14, 20, 0.85); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border-top: 1px solid rgba(255, 255, 255, 0.05); z-index: 50; } .action-bar-inner { width: 100%; max-width: 800px; margin: 0 auto; padding: 16px 32px; display: flex; justify-content: flex-end; align-items: center; gap: 12px; } .sp-error-inline { font-size: 12px; color: var(--danger); background: rgba(240,64,64,0.08); border: 1px solid rgba(240,64,64,0.2); border-radius: 6px; padding: 6px 12px; line-height: 1.4; } /* ── Diagnostics ── */ .sp-diag-list { display: flex; flex-direction: column; gap: 12px; width: 100%; } .sp-diag-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; font-size: 13px; } .sp-diag-key { color: var(--text3); flex-shrink: 0; } .sp-diag-val { color: var(--text2); text-align: right; word-break: break-all; } .sp-mono { font-family: "Cascadia Code", "JetBrains Mono", monospace; font-size: 11px; } .sp-accent { color: var(--accent); } .sp-danger { color: var(--danger); } /* ── Utilities ── */ .mt-2 { margin-top: 8px; } .mt-3 { margin-top: 12px; } .w-full { width: 100%; } .w-32 { width: 8rem; } .flex { display: flex; } .flex-1 { flex: 1; } .items-center { align-items: center; } .gap-2 { gap: 8px; } .gap-3 { gap: 12px; } .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }