/* === SettingsModal: all settings-related layout, panel, and component styles === Extracted from styles.css as part of the Sweep-3 CSS extraction effort. Imported by SettingsModal.tsx (and MemoryView.tsx for shared classes). */ /* === Settings Modal header action buttons (Star on GitHub, Help) === */ .settings-header-actions { display: flex; align-items: stretch; gap: var(--space-xs); margin-left: auto; margin-right: var(--space-sm); } /* Keep the GitHub Star and Help buttons at matching heights regardless of their differing icon sizes (provider icon 16px vs. HelpCircle 13px). */ .settings-header-actions > .settings-github-star-btn, .settings-header-actions > .btn { height: calc(var(--space-md) * 2 + var(--space-xs) / 2); box-sizing: border-box; } @media (max-width: 768px) { /* Preserve mobile touch targets while keeping visuals compact via icon sizing/padding. */ .settings-header-actions > .btn-icon { min-height: calc(var(--space-md) * 3); min-width: calc(var(--space-md) * 3); } } /* GitHub star button — split-pill layout: [Star half | Count half] */ .settings-github-star-btn { display: inline-flex; align-items: stretch; border: var(--btn-border-width) solid var(--border); border-radius: var(--radius-pill); background: var(--card); color: var(--text); font-size: 12px; font-weight: 500; text-decoration: none; overflow: hidden; transition: border-color var(--transition-fast), background var(--transition-fast); } .settings-github-star-btn:hover { border-color: var(--text-muted); background: var(--card-hover); } .settings-github-star-btn:focus-visible { outline: none; box-shadow: var(--focus-ring-strong); border-color: var(--todo); } .settings-github-star-btn__action { display: inline-flex; align-items: center; gap: var(--space-xs); padding: var(--space-xs) calc(var(--space-sm) + var(--space-xs) / 2); } .settings-github-star-btn__count { display: inline-flex; align-items: center; padding: var(--space-xs) calc(var(--space-sm) + var(--space-xs) / 4); border-left: var(--btn-border-width) solid var(--border); background: color-mix(in srgb, var(--surface) 60%, var(--card)); color: var(--text-muted); font-variant-numeric: tabular-nums; } /* === Settings Modal: sizing + resizability === */ .settings-modal { width: min(95vw, 1100px); max-width: 95vw; min-width: 520px; height: 80vh; min-height: 480px; max-height: calc(100dvh - var(--overlay-padding-top, 10vh) - 16px); overflow: hidden; resize: both; } /* Mobile: full-screen sheet. The desktop `min-width: 520px` was forcing the modal wider than narrow viewports, pushing it off-screen; the desktop `height: 80vh` left awkward strips of overlay above and below. Drop the overlay's default top padding so the modal actually fills the viewport, and disable resize (touchscreen users can't drag the grip anyway). */ @media (max-width: 768px) { .modal-overlay.settings-modal-overlay, .modal-overlay:has(.settings-modal) { padding-top: 0; align-items: stretch; justify-content: stretch; } .modal.settings-modal { width: 100vw; min-width: 0; max-width: 100vw; height: 100dvh; min-height: 0; max-height: 100dvh; margin: 0; border: none; border-radius: 0; resize: none; } .modal.settings-modal[style*="--keyboard-overlap"] { height: var(--vv-height, 100dvh); max-height: var(--vv-height, 100dvh); transform: translateY(var(--vv-offset-top, 0px)); will-change: transform; } } /* === Settings Layout === */ .settings-modal-heading { display: flex; flex-direction: column; gap: var(--space-xs); } .settings-modal-heading h3 { margin: 0; } .settings-modal-version { margin: 0; font-size: 0.85rem; color: var(--text-muted); font-weight: 500; } .settings-update-check { display: flex; align-items: center; gap: var(--space-sm); } .settings-version-check-btn { --settings-inline-touch-target: calc(var(--space-lg) + var(--space-lg) + var(--space-xs)); display: inline-flex; align-items: center; gap: var(--space-xs); margin: 0; min-height: var(--settings-inline-touch-target); padding: var(--space-xs) var(--space-sm); border: none; background: transparent; color: var(--text-muted); cursor: pointer; transition: opacity var(--transition-fast), box-shadow var(--transition-fast); } .settings-version-check-btn:hover:not(:disabled) { opacity: 0.85; } .settings-version-check-btn:focus-visible { outline: none; box-shadow: var(--focus-ring-strong); border-radius: var(--radius-sm); } .settings-version-check-btn:disabled { cursor: default; opacity: 0.7; } .settings-version-check-btn svg { color: var(--text-muted); } .settings-version-check-btn svg.spinning { animation: settings-update-spin 1s linear infinite; } .settings-update-result { font-size: 0.85rem; font-weight: 500; } .settings-update-result--up-to-date { color: var(--color-success); } .settings-update-result--available { color: var(--color-info); } .settings-update-result--error { color: var(--text-muted); } .settings-update-result-link { color: var(--color-info); text-decoration: underline; transition: color var(--transition-fast), box-shadow var(--transition-fast); } .settings-update-result-link:hover { color: color-mix(in srgb, var(--color-info) 80%, var(--text)); } .settings-update-result-link:focus-visible { outline: none; box-shadow: var(--focus-ring-strong); border-radius: var(--radius-sm); } @keyframes settings-update-spin { to { transform: rotate(360deg); } } .settings-layout { display: flex; flex: 1; flex-direction: row; min-height: 0; overflow: hidden; } .settings-mobile-section-picker { display: none; } .settings-sidebar { width: 170px; min-width: 170px; border-right: 1px solid var(--border); display: flex; flex-direction: column; overflow-y: auto; padding: 10px 8px; gap: 2px; background: color-mix(in srgb, var(--text) 10%, transparent); scrollbar-color: var(--border) transparent; scrollbar-width: thin; } .settings-sidebar::-webkit-scrollbar { width: 6px; } .settings-sidebar::-webkit-scrollbar-track { background: transparent; } .settings-sidebar::-webkit-scrollbar-thumb { background: var(--border); border-radius: var(--radius-sm); } .settings-sidebar::-webkit-scrollbar-thumb:hover { background: var(--text-muted); } .settings-research-source-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-sm); } @media (max-width: 768px) { .settings-research-source-grid { grid-template-columns: 1fr; } } .settings-nav-item { display: block; width: 100%; padding: var(--space-sm) var(--space-md); font-size: 13px; font-weight: 500; color: var(--text-muted); background: none; border: none; border-left: 3px solid transparent; border-radius: 0 var(--radius) var(--radius) 0; cursor: pointer; text-align: left; transition: background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast); } .settings-nav-item:hover { background: var(--bg); color: var(--text); border-left-color: var(--border); } .settings-nav-item:focus-visible { box-shadow: var(--focus-ring-strong); outline: none; } .settings-nav-item.active { background: var(--bg); color: var(--todo); font-weight: 600; border-left-color: var(--todo); } /* Settings group headers - visual separators between global and project sections */ .settings-group-header { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-muted); padding: var(--space-md) var(--space-md) var(--space-xs); margin-top: var(--space-sm); user-select: none; } .settings-group-header:first-child { margin-top: 0; } .settings-content { flex: 1; overflow-x: hidden; overflow-y: auto; padding: 4px 0 12px; scrollbar-color: var(--border) transparent; scrollbar-width: thin; } .settings-content::-webkit-scrollbar { width: 6px; } .settings-content::-webkit-scrollbar-track { background: transparent; } .settings-content::-webkit-scrollbar-thumb { background: var(--border); border-radius: var(--radius-sm); } .settings-content::-webkit-scrollbar-thumb:hover { background: var(--text-muted); } .settings-content > * { animation: settingsFadeIn var(--transition-normal); } @keyframes settingsFadeIn { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } } .settings-section-heading { font-size: 14px; font-weight: 600; padding: var(--space-lg) 0 var(--space-md); margin: 0; color: var(--text); border-bottom: 1px solid var(--border); margin-bottom: var(--space-xs); } /* Spacing modifier for settings-section-heading that need extra top margin */ .settings-section-heading--spaced { margin-top: var(--space-xl); } .settings-section-description { margin: 0; padding: 0 var(--space-xl); margin-bottom: var(--space-sm); color: var(--text-muted); font-size: 13px; line-height: 1.5; } .settings-plugins-subsection-toggle { display: inline-flex; gap: var(--space-xs); padding: 0 var(--space-xl); margin: var(--space-md) 0; } .settings-plugins-subsection-btn { display: inline-flex; align-items: center; justify-content: center; border: var(--btn-border-width) solid var(--border); border-radius: var(--radius-pill); background: var(--surface); color: var(--text-muted); font-size: 0.85rem; font-weight: 600; padding: var(--space-xs) var(--space-md); cursor: pointer; transition: background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast), box-shadow var(--transition-fast); } .settings-plugins-subsection-btn:hover { background: var(--surface-hover, color-mix(in srgb, var(--text) 6%, transparent)); color: var(--text); } .settings-plugins-subsection-btn:focus-visible { outline: none; box-shadow: var(--focus-ring-strong); } .settings-plugins-subsection-btn.active { background: color-mix(in srgb, var(--todo) 14%, transparent); border-color: color-mix(in srgb, var(--todo) 45%, var(--border)); color: var(--todo); } .settings-plugins-subsection-panel { padding-bottom: var(--space-md); } /* Scope indicators in sidebar nav items */ .settings-scope-icon { margin-right: 6px; display: inline-flex; vertical-align: middle; color: var(--text-muted); } /* Scope banner above section content */ .settings-scope-banner { display: flex; align-items: center; gap: var(--space-sm); padding: var(--space-sm) var(--space-xl); margin: 0 var(--space-xl) var(--space-xs); font-size: 12px; border-radius: var(--radius); color: var(--text-muted); } .settings-scope-global { background: color-mix(in srgb, var(--color-info) 8%, transparent); border-left: 3px solid color-mix(in srgb, var(--color-info) 40%, transparent); } .settings-scope-project { background: color-mix(in srgb, var(--color-success) 8%, transparent); border-left: 3px solid color-mix(in srgb, var(--color-success) 40%, transparent); } .settings-scope-mixed { background: color-mix(in srgb, var(--triage) 8%, transparent); border-left: 3px solid color-mix(in srgb, var(--triage) 40%, transparent); } /* Helper note styling for Settings sections — aligns with form-group horizontal gutters */ .settings-note { display: block; padding: 0 var(--space-xl); margin-top: var(--space-xs); font-size: 12px; color: var(--text-muted); } .settings-overlap-ignore-group code { font-family: var(--font-mono); font-size: 0.9em; } .settings-button-row { display: flex; flex-wrap: wrap; gap: var(--space-sm); margin-top: var(--space-sm); } .settings-raw-output { margin: var(--space-sm) 0 0; padding: var(--space-sm); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--text-muted); max-height: calc(var(--space-2xl) * 7); overflow: auto; font-family: var(--font-mono); font-size: calc(var(--space-sm) + var(--space-xs)); } .settings-url-output { display: block; margin-top: var(--space-xs); padding: var(--space-sm); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); color: var(--text-muted); font-family: var(--font-mono); font-size: calc(var(--space-sm) + var(--space-xs)); overflow-wrap: anywhere; word-break: break-word; overflow-x: auto; max-width: 100%; } .settings-qr-preview { margin-top: var(--space-sm); display: flex; flex-direction: column; gap: var(--space-sm); } .settings-qr-preview-label { margin: 0; font-size: calc(var(--space-sm) + var(--space-xs)); color: var(--text-muted); } .settings-qr-preview-image-wrap { width: fit-content; max-width: 100%; padding: var(--space-sm); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--card); } .settings-qr-preview-image { display: block; width: min(calc(var(--space-2xl) * 6), 100%); height: auto; aspect-ratio: 1 / 1; } .remote-provider-selector { display: flex; gap: var(--space-xs); border: var(--btn-border-width) solid var(--border); border-radius: var(--radius-md); padding: var(--space-xs); background: var(--surface); } .remote-provider-option { position: relative; flex: 1; cursor: pointer; } .remote-provider-option input { position: absolute; opacity: 0; width: 0; height: 0; } .remote-provider-option span { display: block; padding: var(--space-sm) var(--space-md); text-align: center; border-radius: var(--radius-sm); border: var(--btn-border-width) solid transparent; color: var(--text-muted); transition: background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast); } .remote-provider-option input:checked + span { background: var(--card); color: var(--text); border-color: var(--border); } .remote-provider-option input:focus-visible + span { box-shadow: var(--focus-ring-strong); } .remote-status-bar { --status-color: var(--text-muted); display: flex; align-items: center; gap: var(--space-sm); padding: var(--space-sm) var(--space-md); border-radius: var(--radius-md); margin: 0 var(--space-xl) var(--space-md); background: color-mix(in srgb, var(--status-color) 10%, transparent); } .remote-status-bar--running { --status-color: var(--color-success); } .remote-status-bar--starting { --status-color: var(--color-warning); } .remote-status-bar--error { --status-color: var(--color-error); } .remote-status-bar--stopped { --status-color: var(--text-muted); } .remote-share-block { display: flex; flex-direction: column; gap: var(--space-sm); margin: 0 var(--space-xl) var(--space-md); padding: var(--space-sm) var(--space-md); border: 1px solid var(--border); border-radius: var(--radius-md); background: color-mix(in srgb, var(--text-muted) 5%, transparent); } .remote-share-row { display: flex; flex-direction: column; gap: var(--space-xs); } .remote-share-row .settings-qr-preview-image { margin-top: var(--space-xs); } .remote-status-dot { width: var(--space-sm); height: var(--space-sm); border-radius: 50%; display: inline-block; flex-shrink: 0; } .remote-status-dot--running { background: var(--color-success); } .remote-status-dot--starting { background: var(--color-warning); } .remote-status-dot--error { background: var(--color-error); } .remote-status-dot--stopped { background: var(--text-muted); } .remote-status-url { margin-left: auto; font-family: var(--font-mono); overflow-wrap: anywhere; word-break: break-word; user-select: all; } .remote-provider-settings { display: flex; flex-direction: column; gap: var(--space-sm); } .remote-cli-detection { display: flex; align-items: flex-start; gap: var(--space-sm); margin: 0 var(--space-xl) var(--space-md); padding: var(--space-sm) var(--space-md); border-radius: var(--radius-sm); } .remote-cli-detection--available { background: color-mix(in srgb, var(--color-success) 10%, transparent); color: var(--color-success); } .remote-cli-detection--missing { background: color-mix(in srgb, var(--color-warning) 10%, transparent); color: var(--color-warning); } .remote-cli-detection-content { display: flex; flex-direction: column; gap: var(--space-xs); color: var(--text); } .remote-cli-detection .btn { align-self: flex-start; } .remote-cli-install-error { color: var(--color-error); } .remote-cli-manual { color: var(--text-dim); } .remote-external-tunnel-panel { display: flex; flex-direction: column; gap: var(--space-sm); margin: 0 var(--space-xl) var(--space-md); padding: var(--space-sm) var(--space-md); border: 1px solid var(--border); border-radius: var(--radius-md); background: color-mix(in srgb, var(--color-info) 10%, transparent); } .remote-external-tunnel-header { display: flex; align-items: center; gap: var(--space-sm); color: var(--color-info); } .remote-external-tunnel-qr { display: flex; flex-direction: column; gap: var(--space-xs); } .remote-external-tunnel-actions { display: flex; flex-direction: column; gap: var(--space-sm); } .remote-advanced-details { margin: var(--space-lg) var(--space-xl) 0; border: var(--btn-border-width) solid var(--border); border-radius: var(--radius-md); padding: var(--space-md); background: var(--surface); } .remote-advanced-details > summary { cursor: pointer; color: var(--text-muted); font-size: calc(var(--space-sm) + var(--space-xs)); list-style: none; } .remote-advanced-details > summary::-webkit-details-marker { display: none; } .remote-advanced-details > summary::before { content: "▸"; margin-right: var(--space-xs); } .remote-advanced-details[open] > summary::before { content: "▾"; } .settings-option-details { margin-top: var(--space-xs); } .settings-option-details > summary { cursor: pointer; color: var(--text-muted); font-size: calc(var(--space-sm) + var(--space-xs)); list-style: none; } .settings-option-details > summary::-webkit-details-marker { display: none; } .settings-option-details > summary::before { content: "▸"; margin-right: var(--space-xs); } .settings-option-details[open] > summary::before { content: "▾"; } .remote-cf-advanced-details { margin-top: var(--space-xs); } .remote-cf-advanced-details > summary { cursor: pointer; color: var(--text-muted); font-size: calc(var(--space-sm) + var(--space-xs)); list-style: none; } .remote-cf-advanced-details > summary::-webkit-details-marker { display: none; } .remote-cf-advanced-details > summary::before { content: "▸"; margin-right: var(--space-xs); } .remote-cf-advanced-details[open] > summary::before { content: "▾"; } .remote-cf-advanced-fields { display: flex; flex-direction: column; gap: var(--space-sm); margin-top: var(--space-sm); } .remote-tunnel-actions { margin-top: var(--space-md); } .remote-tunnel-actions .btn { width: 100%; } .settings-overlap-ignore-list { display: flex; flex-direction: column; gap: var(--space-sm); margin: var(--space-sm) 0; } .settings-overlap-ignore-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--space-sm); align-items: center; } .settings-overlap-ignore-path-controls { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--space-sm); align-items: center; } .settings-overlap-path-picker-modal { max-width: min(960px, calc(100vw - var(--space-2xl))); } .settings-overlap-path-picker-body { display: flex; flex-direction: column; gap: var(--space-sm); max-height: min(70vh, 720px); } .settings-overlap-path-picker-note { margin: 0; font-size: 12px; color: var(--text-muted); } .settings-section-divider { border-top: 1px solid var(--border); margin: var(--space-lg) var(--space-xl); } @media (max-width: 768px) { .settings-note { padding: 0 var(--space-lg); } .settings-overlap-ignore-row { grid-template-columns: minmax(0, 1fr); } .settings-overlap-ignore-path-controls { grid-template-columns: minmax(0, 1fr); } .settings-overlap-ignore-row > .btn { justify-self: start; } .settings-overlap-path-picker-modal { max-width: calc(100vw - var(--space-md)); } .remote-provider-selector { flex-direction: column; } .remote-status-bar { flex-wrap: wrap; margin: 0 var(--space-lg) var(--space-md); } .remote-share-block { margin: 0 var(--space-lg) var(--space-md); } .remote-status-url { width: 100%; margin-left: 0; font-size: 0.8em; } .remote-provider-option { min-height: 36px; } .remote-tunnel-actions .btn { min-height: 36px; } .remote-cli-detection { margin: 0 var(--space-lg) var(--space-md); } .remote-external-tunnel-panel { margin: 0 var(--space-lg) var(--space-md); } } /* === Notifications Settings === */ .ntfy-advanced-disclosure { margin-top: var(--space-md); border: var(--btn-border-width) solid var(--border); border-radius: var(--radius-md); background: var(--surface); } .ntfy-advanced-disclosure > summary { cursor: pointer; list-style: none; padding: var(--space-sm) var(--space-md); font-size: 12px; font-weight: 600; color: var(--text); } .ntfy-advanced-disclosure > summary::-webkit-details-marker { display: none; } .ntfy-advanced-content { padding: 0 var(--space-md) var(--space-md); display: flex; flex-direction: column; gap: var(--space-sm); } .settings-inline-link { color: var(--todo); text-decoration: none; transition: text-decoration var(--transition-fast); } .settings-inline-link:hover { text-decoration: underline; } .settings-inline-link:focus-visible { outline: none; box-shadow: var(--focus-ring-strong); border-radius: var(--radius-sm); } /** * Notification provider cards: * reusable container pattern for per-provider notification configuration * (ntfy, webhook, and future providers). */ .notification-provider-card { border: var(--btn-border-width) solid var(--border); border-radius: var(--radius-lg); background: var(--surface); margin: 0 var(--space-xl) var(--space-lg); overflow: hidden; } .notification-provider-header { display: flex; align-items: center; justify-content: space-between; padding: var(--space-md) var(--space-lg); border-bottom: var(--btn-border-width) solid var(--border); } .notification-provider-body { padding: var(--space-lg); display: flex; flex-direction: column; gap: var(--space-lg); } .notification-provider-actions { display: flex; gap: var(--space-sm); padding-top: var(--space-md); border-top: var(--btn-border-width) solid var(--border); margin-top: var(--space-md); } /* === Memory Settings === */ .memory-status-message { display: flex; gap: var(--space-md); align-items: center; justify-content: space-between; margin-bottom: var(--space-md); } .memory-status-message span { min-width: 0; } .memory-retrieval-test { margin-top: var(--space-lg); } .memory-test-result { margin: 0 var(--space-xl) var(--space-lg); padding: var(--space-md); border: var(--btn-border-width) solid var(--border); border-radius: var(--radius-md); background: var(--card); } .memory-test-result strong, .memory-test-result span { color: var(--text); font-size: 12px; } .memory-test-result small { display: block; margin-top: var(--space-xs); color: var(--text-muted); font-size: 12px; } .memory-test-result ul { margin: var(--space-md) 0 0; padding: 0; list-style: none; } .memory-test-result li { padding-top: var(--space-sm); border-top: var(--btn-border-width) solid var(--border); } .memory-test-result li + li { margin-top: var(--space-sm); } .memory-test-result p { margin: var(--space-xs) 0 0; color: var(--text-muted); font-size: 12px; line-height: 1.5; overflow-wrap: anywhere; } .memory-editor-section { margin-top: var(--space-lg); } .memory-file-summary { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--space-xs) var(--space-md); align-items: center; margin: 0 var(--space-xl) var(--space-md); padding: var(--space-md); border: var(--btn-border-width) solid var(--border); border-radius: var(--radius-md); background: var(--card); } .memory-file-summary span { display: inline-flex; align-items: center; justify-content: center; padding: var(--space-xs) var(--space-sm); border-radius: var(--radius-pill); color: var(--color-info); background: color-mix(in srgb, var(--color-info) 12%, transparent); font-size: 11px; font-weight: 600; } .memory-file-summary strong { min-width: 0; overflow-wrap: anywhere; color: var(--text); font-family: var(--font-mono); font-size: 12px; } .memory-file-summary small { grid-column: 2; color: var(--text-muted); font-size: 12px; } .memory-editor-frame { min-height: 50vh; border: var(--btn-border-width) solid var(--border); border-radius: var(--radius-md); overflow: hidden; display: flex; flex-direction: column; } /* === Auth Provider Cards === */ /* Horizontal gutter wrapper for the auth section body. Tighter than the default form-group gutter so each provider card gets more horizontal room — the cards are dense enough that the wider --space-xl gutter wasted visible width without any visual benefit. */ .auth-panel-body { padding-inline: var(--space-md); } .auth-section-hint { padding: 12px 16px; margin-bottom: 12px; background: var(--bg-tertiary); border-radius: var(--radius); font-size: 13px; color: var(--text-muted); border-left: 3px solid var(--text-muted); } .auth-provider-group { margin-bottom: 10px; } .auth-group-label { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-muted); margin-bottom: 4px; padding: 0 4px; } .auth-provider-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-md); margin-bottom: 4px; overflow: hidden; transition: border-color var(--transition-fast), box-shadow var(--transition-fast); } .auth-provider-card:hover { border-color: var(--text-dim); } .auth-provider-card--authenticated { border-color: color-mix(in srgb, var(--color-success) 40%, var(--border)); background: color-mix(in srgb, var(--color-success) 5%, var(--surface)); } .auth-provider-card--authenticated:hover { border-color: color-mix(in srgb, var(--color-success) 60%, var(--border)); } .auth-provider-header { display: flex; align-items: center; justify-content: space-between; padding: 8px 12px; gap: 12px; } .auth-provider-info { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; flex: 1; min-width: 0; } .auth-provider-info strong { font-weight: 500; color: var(--text); } .auth-provider-icon-slot { display: inline-flex; align-items: center; justify-content: center; inline-size: calc(var(--space-md) + var(--space-xs) * 2); block-size: calc(var(--space-md) + var(--space-xs) * 2); flex-shrink: 0; } .auth-provider-icon-slot .provider-icon { display: inline-flex; } .auth-hint { display: block; padding: 12px 4px 0; font-size: 12px; color: var(--text-muted); border-top: 1px solid var(--border); margin-top: 8px; } .auth-apikey-section { display: flex; flex-direction: column; gap: 4px; align-items: flex-end; flex-shrink: 0; } .auth-apikey-input-row { display: flex; gap: 6px; align-items: center; } .auth-apikey-input { background: var(--bg-input); border: 1px solid var(--border); border-radius: 6px; color: var(--text); padding: 6px 10px; font-size: 13px; width: 180px; font-family: monospace; } .auth-apikey-input:focus { outline: none; border-color: var(--todo); box-shadow: var(--focus-ring); } .auth-apikey-input:disabled { opacity: 0.6; } .auth-apikey-progress { font-size: calc(var(--space-sm) + var(--space-xs) * 0.75); color: var(--text-muted); padding-right: 4px; } .auth-apikey-error { font-size: 11px; color: var(--color-error); padding-right: 4px; } .auth-provider-actions-row { display: inline-flex; align-items: center; gap: var(--space-sm); } /* === Key Hint === */ .auth-key-hint { font-family: var(--font-mono); font-size: 12px; color: var(--text-muted); display: inline-block; margin-top: var(--space-xs); user-select: none; } /* === Model Lane Status Badges === */ .settings-lane-badge { display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 10px; font-size: 11px; font-weight: 500; white-space: nowrap; } .settings-lane-badge--override { background-color: color-mix(in srgb, var(--color-accent) 20%, transparent); color: var(--color-accent); } .settings-lane-badge--inherited { background-color: color-mix(in srgb, var(--color-text-muted) 15%, transparent); color: var(--text-muted); } .settings-description { font-size: 13px; color: var(--text-secondary); padding-inline: var(--space-xl); margin-block: 0 var(--space-md); line-height: 1.5; } /* === Settings: Model Presets === */ .settings-model-presets { display: flex; flex-direction: column; gap: var(--space-md); } .settings-preset-list { display: flex; flex-direction: column; gap: var(--space-sm); } .settings-preset-item { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-md); padding: var(--space-md); border: var(--btn-border-width) solid var(--border); border-radius: var(--radius-md); background: var(--card); } .settings-preset-item-meta { display: flex; flex-direction: column; gap: var(--space-xs); min-width: 0; } .settings-preset-item-meta strong { color: var(--text); overflow-wrap: anywhere; } .settings-preset-summary { font-size: 12px; overflow-wrap: anywhere; } .settings-preset-item-actions { display: flex; gap: var(--space-xs); flex-wrap: wrap; justify-content: flex-end; } .settings-preset-actions { display: flex; justify-content: flex-start; } .settings-preset-editor { display: flex; flex-direction: column; gap: var(--space-md); padding: var(--space-md); border: var(--btn-border-width) solid var(--border); border-radius: var(--radius-md); background: color-mix(in srgb, var(--surface) 85%, var(--card)); } .settings-preset-editor-fields { display: flex; flex-direction: column; gap: var(--space-sm); } .settings-preset-editor .form-group { padding: 0; } .settings-preset-editor-actions { justify-content: flex-start; margin-top: 0; padding: 0; } .settings-preset-auto-select { margin-top: var(--space-sm); } .settings-preset-size-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-sm); } .settings-preset-size-row { padding: 0; } @media (max-width: 768px) { /* Settings modal: use the section picker as the only mobile navigation */ .settings-layout { flex-direction: column; min-height: 0; } .settings-mobile-section-picker { display: flex; flex-direction: column; gap: var(--space-xs); padding: var(--space-md) var(--space-lg); border-bottom: var(--btn-border-width) solid var(--border); background: var(--surface); } .settings-mobile-section-picker label { color: var(--text-muted); font-weight: 600; text-transform: uppercase; } .settings-mobile-section-picker select { width: 100%; } .settings-mobile-section-picker select:focus-visible { outline: none; border-color: var(--todo); box-shadow: var(--focus-ring-strong); } .settings-sidebar { display: none; } .settings-nav-item { display: flex; align-items: center; justify-content: center; gap: 4px; border-left: none; border-bottom: 2px solid transparent; border-radius: var(--radius) var(--radius) 0 0; padding: 6px 12px; white-space: nowrap; } .settings-nav-item:hover { border-left-color: transparent; border-bottom-color: var(--border); } .settings-nav-item.active { border-left-color: transparent; border-bottom-color: var(--todo); } /* Hide group headers on mobile - they don't fit well in horizontal scroll row */ .settings-group-header { display: none; } .notification-provider-card { margin: 0 var(--space-lg) var(--space-md); } .notification-provider-header { padding: var(--space-sm) var(--space-md); } .notification-provider-body { padding: var(--space-md); } .settings-scope-icon { margin-right: 0; } .settings-content { flex: 1; min-height: 0; overflow-x: hidden; overflow-y: auto; } .settings-content .form-group small { overflow-wrap: break-word; word-break: break-all; } .settings-content input, .settings-content select, .settings-content textarea { font-size: 16px; } .settings-section-heading { padding: var(--space-lg) 0 var(--space-md); margin: 0; } .settings-plugins-subsection-toggle { display: flex; width: 100%; padding: 0 var(--space-lg); } .settings-plugins-subsection-btn { flex: 1; min-height: 36px; } .settings-plugins-subsection-panel { padding-left: var(--space-lg); padding-right: var(--space-lg); } .form-group { padding: 0 14px; } .settings-scope-banner { padding: var(--space-sm) var(--space-lg); } .memory-editor-frame { min-height: 45vh; } .memory-file-summary { grid-template-columns: 1fr; margin: 0 var(--space-lg) var(--space-md); } .memory-status-message { align-items: stretch; flex-direction: column; } .memory-file-summary span { justify-content: flex-start; } .memory-file-summary small { grid-column: auto; } .settings-description { padding: 0 var(--space-lg); } .settings-content .btn, .settings-preset-item-actions .btn { min-height: 36px; } .auth-provider-row { flex-wrap: wrap; padding: 12px 14px; gap: var(--space-sm); } .auth-section-hint { margin: 0 14px 12px; padding: 10px 14px; } .auth-provider-group { margin-bottom: 12px; } .auth-group-label { padding: 0 14px; } .auth-provider-card { margin: 0 14px 8px; } .auth-provider-header { flex-wrap: wrap; padding: 10px 14px; gap: 10px; } .auth-provider-header > div:not(.auth-provider-info):not(.auth-apikey-section) { margin-left: auto; } .auth-provider-actions-row { width: 100%; justify-content: flex-end; } .auth-provider-info { width: 100%; flex-basis: 100%; } .auth-apikey-section { width: 100%; flex-basis: 100%; align-items: flex-end; } .auth-apikey-input-row { width: 100%; flex-wrap: wrap; justify-content: flex-end; } .auth-apikey-input { flex: 1; min-width: 120px; width: auto; } .auth-apikey-input-row .btn { flex-shrink: 0; margin-left: auto; } .auth-hint { padding: 12px 14px 0; } /* Settings modal: model preset controls stack cleanly on narrow screens */ .settings-model-presets { gap: var(--space-sm); } .settings-preset-item { flex-direction: column; align-items: stretch; padding: var(--space-sm) var(--space-md); } .settings-preset-item-actions { justify-content: flex-start; } .settings-preset-editor { padding: var(--space-sm) var(--space-md); } .settings-preset-editor-actions { flex-wrap: wrap; } .settings-preset-size-grid { grid-template-columns: 1fr; gap: var(--space-xs); } .settings-node-routing-note { padding: var(--space-sm) var(--space-md); font-size: 12px; } } /* Node Routing section */ .settings-node-routing-note { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-md); padding: var(--space-md) var(--space-lg); margin-top: var(--space-sm); color: var(--text-muted); font-size: 13px; line-height: 1.5; } .settings-node-status { display: inline-flex; align-items: center; gap: var(--space-xs); margin-top: var(--space-sm); font-size: 12px; color: var(--text-muted); } .auth-advanced-disclosure { margin-top: var(--space-md); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); } .auth-advanced-disclosure > summary { cursor: pointer; padding: var(--space-sm) var(--space-md); } .auth-advanced-content { display: flex; flex-direction: column; gap: var(--space-sm); padding: 0 var(--space-md) var(--space-md); } .auth-custom-provider-item { display: flex; justify-content: space-between; align-items: center; gap: var(--space-sm); } .auth-custom-provider-actions { display: flex; gap: var(--space-sm); } @media (max-width: 768px) { .auth-custom-provider-item { flex-direction: column; align-items: flex-start; } }