@import "./chat.css"; /* =========================================== Login Gate =========================================== */ .login-gate { display: flex; align-items: center; justify-content: center; min-height: 100vh; min-height: 100dvh; background: var(--bg); padding: 24px; } .login-gate__theme { position: fixed; top: 16px; right: 16px; z-index: 10; } .login-gate__card { width: min(520px, 100%); background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 32px; animation: scale-in 0.25s var(--ease-out); } .login-gate__header { text-align: center; margin-bottom: 24px; } .login-gate__logo { width: 48px; height: 48px; margin-bottom: 12px; } .login-gate__title { font-size: 22px; font-weight: 700; letter-spacing: -0.02em; } .login-gate__sub { color: var(--muted); font-size: 14px; margin-top: 4px; } .login-gate__form { display: flex; flex-direction: column; gap: 12px; } .login-gate__secret-row { display: flex; align-items: center; gap: 8px; } .login-gate__secret-row input { flex: 1; } .login-gate__secret-row .btn--icon { width: 40px; min-width: 40px; height: 40px; } .login-gate__connect { margin-top: 4px; width: 100%; justify-content: center; padding: 10px 16px; font-size: 15px; font-weight: 600; } .login-gate__help { margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--border); } .login-gate__help-title { font-weight: 600; font-size: 12px; margin-bottom: 10px; color: var(--fg); } .login-gate__steps { margin: 0; padding-left: 20px; font-size: 12px; line-height: 1.6; color: var(--muted); } .login-gate__steps li { margin-bottom: 6px; } .login-gate__steps li:last-child { margin-bottom: 0; } .login-gate__steps code { display: block; margin: 4px 0 2px; padding: 5px 10px; font-family: var(--font-mono); font-size: 11px; background: var(--bg); border: 1px solid var(--border); border-radius: var(--radius); color: var(--fg); user-select: all; } .login-gate__command { display: flex; align-items: center; gap: 8px; margin: 4px 0 2px; padding: 5px 8px 5px 10px; background: var(--bg); border: 1px solid var(--border); border-radius: var(--radius); color: var(--fg); cursor: copy; } .login-gate__command:hover { border-color: var(--accent); } .login-gate__command:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } .login-gate__command code { flex: 1; margin: 0; padding: 0; background: transparent; border: 0; } .login-gate__docs { margin-top: 10px; font-size: 11px; } /* =========================================== Update Banner =========================================== */ .update-banner { position: sticky; top: 0; z-index: 10; margin: 0 calc(-1 * var(--shell-pad)) 0; border-radius: 0; border-left: none; border-right: none; text-align: center; font-weight: 500; padding: 10px 16px; } .update-banner__btn { margin-left: 8px; border-color: var(--danger); color: var(--danger); font-size: 12px; padding: 4px 12px; } .update-banner__btn:hover:not(:disabled) { background: rgba(239, 68, 68, 0.15); } .update-banner__close { display: inline-flex; align-items: center; justify-content: center; margin-left: 8px; padding: 4px; min-width: 24px; min-height: 24px; background: none; border: none; cursor: pointer; color: var(--danger); opacity: 0.7; transition: opacity 0.15s; } .update-banner__close:hover { opacity: 1; } .update-banner__close svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; } /* =========================================== Cards - Refined with depth =========================================== */ .card { border: 1px solid var(--border); background: var(--card); border-radius: var(--radius-lg); padding: 18px; animation: rise 0.25s var(--ease-out) backwards; transition: border-color var(--duration-normal) var(--ease-out), box-shadow var(--duration-normal) var(--ease-out); } .card:hover { border-color: var(--border-strong); box-shadow: var(--shadow-sm); } .card-title { font-size: 15px; font-weight: 600; letter-spacing: -0.02em; color: var(--text-strong); } .card-sub { color: var(--muted); font-size: 13px; margin-top: 6px; line-height: 1.5; } /* =========================================== Stats - Bold values, subtle labels =========================================== */ .stat { background: var(--card); border-radius: var(--radius-md); padding: 14px 16px; border: 1px solid var(--border); transition: border-color var(--duration-normal) var(--ease-out), box-shadow var(--duration-normal) var(--ease-out); } .stat:hover { border-color: var(--border-strong); } .stat-label { color: var(--muted); font-size: 11px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.04em; } .stat-value { font-size: 24px; font-weight: 700; margin-top: 6px; letter-spacing: -0.03em; line-height: 1.1; } .stat-value.ok { color: var(--ok); } .stat-value.warn { color: var(--warn); } .stat-card { display: grid; gap: 6px; } .note-title { font-weight: 600; letter-spacing: -0.01em; } /* =========================================== Status List =========================================== */ .status-list { display: grid; gap: 8px; } .status-list div { display: flex; justify-content: space-between; gap: 12px; padding: 8px 0; border-bottom: 1px solid var(--border); } .status-list div:last-child { border-bottom: none; } .account-count { margin-top: 10px; font-size: 12px; font-weight: 500; color: var(--muted); } .account-card-list { margin-top: 16px; display: grid; gap: 12px; } .account-card { border: 1px solid var(--border); border-radius: var(--radius-md); padding: 12px; background: var(--bg-elevated); transition: border-color var(--duration-fast) ease; } .account-card:hover { border-color: var(--border-strong); } .account-card-header { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; } .account-card-title { font-weight: 500; } .account-card-id { font-family: var(--mono); font-size: 12px; color: var(--muted); } .account-card-status { margin-top: 10px; font-size: 13px; } .account-card-status div { padding: 4px 0; } .account-card-error { margin-top: 8px; color: var(--danger); font-size: 12px; } /* =========================================== Labels & Pills =========================================== */ .label { color: var(--muted); font-size: 12px; font-weight: 500; } .pill { display: inline-flex; align-items: center; gap: 5px; border: 1px solid var(--border); padding: 5px 11px; border-radius: var(--radius-full); background: var(--secondary); font-size: 12px; font-weight: 500; transition: border-color var(--duration-fast) ease; } .pill:hover { border-color: var(--border-strong); } .pill.danger { border-color: var(--danger-subtle); background: var(--danger-subtle); color: var(--danger); } /* =========================================== Theme Orb =========================================== */ .theme-orb { position: relative; display: inline-flex; align-items: center; } .theme-orb__trigger { display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: var(--radius-full); border: 1px solid var(--border); background: var(--card); cursor: pointer; font-size: 14px; line-height: 1; padding: 0; transition: border-color var(--duration-fast) var(--ease-out), box-shadow var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out); } .theme-orb__trigger:hover { border-color: var(--border-strong); transform: scale(1.08); } .theme-orb__trigger:focus-visible { outline: none; border-color: var(--ring); box-shadow: var(--focus-ring); } .theme-orb__menu { position: absolute; right: 0; top: calc(100% + 6px); display: flex; gap: 2px; padding: 4px; border-radius: var(--radius-full); background: var(--card); border: 1px solid var(--border); box-shadow: var(--shadow-md); opacity: 0; visibility: hidden; transform: scale(0.4) translateY(-8px); transform-origin: top right; pointer-events: none; transition: opacity var(--duration-normal) var(--ease-out), transform var(--duration-normal) var(--ease-out); } .theme-orb--open .theme-orb__menu { opacity: 1; visibility: visible; transform: scale(1) translateY(0); pointer-events: auto; } .theme-orb__option { display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: var(--radius-full); border: 1.5px solid transparent; background: transparent; cursor: pointer; font-size: 14px; line-height: 1; padding: 0; transition: background var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out); } .theme-orb__option:hover { background: var(--bg-hover); transform: scale(1.12); } .theme-orb__option--active { border-color: var(--accent); background: var(--accent-subtle); } .theme-orb__option:focus-visible { outline: none; box-shadow: var(--focus-ring); } .theme-icon { width: 14px; height: 14px; stroke: currentColor; fill: none; stroke-width: 1.5px; stroke-linecap: round; stroke-linejoin: round; } /* =========================================== Status Dot - With glow for emphasis =========================================== */ .statusDot { width: 8px; height: 8px; border-radius: var(--radius-full); background: var(--danger); box-shadow: 0 0 8px rgba(239, 68, 68, 0.5); animation: pulse-subtle 2s ease-in-out infinite; } .statusDot.ok { background: var(--ok); box-shadow: 0 0 8px rgba(34, 197, 94, 0.5); animation: none; } .statusDot.warn { background: var(--warn); box-shadow: 0 0 8px rgba(245, 158, 11, 0.5); animation: none; } .statusDot.muted { background: var(--muted); box-shadow: none; animation: none; opacity: 0.5; } /* =========================================== Skill Toggle Switch =========================================== */ .skill-toggle-wrap { display: inline-flex; align-items: center; cursor: pointer; } .skill-toggle { appearance: none; width: 36px; height: 20px; border-radius: var(--radius-full); background: var(--border); position: relative; cursor: pointer; border: none; outline: none; transition: background var(--duration-fast) var(--ease-out), box-shadow var(--duration-fast) var(--ease-out); flex-shrink: 0; } .skill-toggle::after { content: ""; position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: var(--radius-full); background: white; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); transition: transform var(--duration-fast) var(--ease-out); } .skill-toggle:checked { background: var(--accent); } .skill-toggle:checked::after { transform: translateX(16px); } .skill-toggle:focus-visible { box-shadow: var(--focus-ring); } .skill-toggle:disabled { opacity: 0.4; cursor: not-allowed; } /* =========================================== Buttons - Tactile with personality =========================================== */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; border: 1px solid var(--border); background: var(--bg-elevated); padding: 8px 14px; border-radius: var(--radius-md); font-size: 13px; font-weight: 500; letter-spacing: -0.01em; cursor: pointer; transition: border-color var(--duration-fast) var(--ease-out), background var(--duration-fast) var(--ease-out), box-shadow var(--duration-fast) var(--ease-out); } .btn:hover { background: var(--bg-hover); border-color: var(--border-strong); } .btn:active { background: var(--secondary); } .btn svg { width: 16px; height: 16px; stroke: currentColor; fill: none; stroke-width: 1.5px; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; } .btn.primary, .btn.cron-refresh-btn--loading { border-color: var(--accent); background: var(--accent); color: var(--primary-foreground); box-shadow: 0 1px 3px var(--accent-subtle); } .btn.primary:hover { background: var(--accent-hover); border-color: var(--accent-hover); box-shadow: 0 2px 12px var(--accent-glow); } /* Keyboard shortcut badge (shadcn style) */ .btn-kbd { display: inline-flex; align-items: center; justify-content: center; margin-left: 6px; padding: 2px 5px; font-family: var(--mono); font-size: 11px; font-weight: 500; line-height: 1; border-radius: var(--radius-sm); background: rgba(255, 255, 255, 0.15); color: inherit; opacity: 0.8; } .btn.primary .btn-kbd { background: rgba(255, 255, 255, 0.2); } :root[data-theme-mode="light"] .btn-kbd { background: rgba(0, 0, 0, 0.08); } :root[data-theme-mode="light"] .btn.primary .btn-kbd { background: rgba(255, 255, 255, 0.25); } .btn.active { border-color: var(--accent); background: var(--accent-subtle); color: var(--accent); } .btn.danger { border-color: transparent; background: var(--danger-subtle); color: var(--danger); } .btn.danger:hover { background: rgba(239, 68, 68, 0.15); } .btn--sm { padding: 6px 10px; font-size: 12px; } .btn--xs { padding: 4px 6px; font-size: 12px; line-height: 1; } .btn--icon { padding: 8px; min-width: 36px; height: 36px; border: 1px solid var(--border); background: rgba(255, 255, 255, 0.06); } .btn--icon:hover { background: rgba(255, 255, 255, 0.12); border-color: rgba(255, 255, 255, 0.2); } .btn--icon svg { display: block; width: 18px; height: 18px; stroke: currentColor; fill: none; stroke-width: 1.5px; stroke-linecap: round; stroke-linejoin: round; } .chat-controls { display: inline-flex; align-items: center; gap: 8px; position: relative; overflow: visible; } .chat-controls__separator { color: var(--muted); font-size: 12px; line-height: 1; user-select: none; } .chat-controls .btn--icon[data-tooltip] { position: relative; overflow: visible; } .chat-controls .btn--icon[data-tooltip]::before, .chat-controls .btn--icon[data-tooltip]::after { position: absolute; left: 50%; pointer-events: none; opacity: 0; transition: opacity var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out); z-index: 40; } .chat-controls .btn--icon[data-tooltip]::before { content: ""; top: calc(100% + 4px); border-width: 6px; border-style: solid; border-color: transparent transparent color-mix(in srgb, var(--card) 94%, black 6%) transparent; transform: translate(-50%, -3px); } .chat-controls .btn--icon[data-tooltip]::after { content: attr(data-tooltip); top: calc(100% + 10px); min-width: max-content; max-width: min(260px, 60vw); padding: 7px 9px; border: 1px solid color-mix(in srgb, var(--border-strong) 84%, transparent); border-radius: var(--radius-md); background: color-mix(in srgb, var(--card) 94%, black 6%); box-shadow: 0 10px 28px rgba(0, 0, 0, 0.24), 0 0 0 1px rgba(255, 255, 255, 0.04); color: var(--text); font-size: 11px; font-weight: 500; line-height: 1.35; text-align: center; white-space: normal; transform: translate(-50%, -4px); } @media (hover: hover) { .chat-controls .btn--icon[data-tooltip]:hover::before, .chat-controls .btn--icon[data-tooltip]:hover::after { opacity: 1; } .chat-controls .btn--icon[data-tooltip]:hover::before { transform: translate(-50%, 0); } .chat-controls .btn--icon[data-tooltip]:hover::after { transform: translate(-50%, 0); } } .chat-controls .btn--icon[data-tooltip]:focus-visible::before, .chat-controls .btn--icon[data-tooltip]:focus-visible::after { opacity: 1; } .chat-controls .btn--icon[data-tooltip]:focus-visible::before { transform: translate(-50%, 0); } .chat-controls .btn--icon[data-tooltip]:focus-visible::after { transform: translate(-50%, 0); } .btn--ghost { border-color: transparent; background: transparent; color: var(--muted); } .btn--ghost:hover { background: var(--bg-hover); color: var(--text); border-color: transparent; } .btn:disabled { opacity: 0.5; cursor: not-allowed; } /* =========================================== Form Fields =========================================== */ .field { display: grid; gap: 6px; } .field.full { grid-column: 1 / -1; } .field span { color: var(--muted); font-size: 13px; font-weight: 500; } .field input, .field textarea, .field select { border: 1px solid var(--input); background: var(--card); border-radius: var(--radius-md); padding: 8px 12px; outline: none; box-shadow: inset 0 1px 0 var(--card-highlight); transition: border-color var(--duration-fast) ease, box-shadow var(--duration-fast) ease; } .field input:focus, .field textarea:focus, .field select:focus { border-color: var(--ring); box-shadow: var(--focus-ring); } .field select { appearance: none; padding-right: 36px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23a1a1aa' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 10px center; cursor: pointer; } .field textarea { font-family: var(--mono); min-height: 160px; resize: vertical; white-space: pre; line-height: 1.5; } .field.checkbox { grid-template-columns: auto 1fr; align-items: center; } .config-form .field.checkbox { grid-template-columns: 18px minmax(0, 1fr); column-gap: 10px; } .config-form .field.checkbox input[type="checkbox"] { margin: 0; width: 16px; height: 16px; accent-color: var(--accent); } .form-grid { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); } /* =========================================== Cron Form =========================================== */ .cron-summary-strip { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px 18px; padding: 14px 16px; } .cron-summary-strip__left { display: grid; gap: 8px 14px; grid-template-columns: repeat(3, minmax(0, 1fr)); flex: 1 1 auto; min-width: 0; } .cron-summary-item { border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--bg-elevated); padding: 10px 12px; min-height: 62px; display: grid; gap: 6px; } .cron-summary-item--wide { grid-column: span 1; } .cron-summary-label { color: var(--muted); font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; } .cron-summary-value { color: var(--text-strong); font-size: 15px; font-weight: 600; line-height: 1.3; display: flex; align-items: center; gap: 8px; } .cron-summary-strip__actions { display: flex; align-items: center; justify-content: flex-end; gap: 10px; min-width: 0; } .cron-workspace { margin-top: 16px; display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(340px, 0.8fr); gap: 16px; align-items: start; } .cron-workspace--form-collapsed { grid-template-columns: minmax(0, 1fr) 64px; } .cron-workspace-main { display: grid; gap: 16px; min-width: 0; } .cron-workspace-form { position: sticky; top: 74px; max-height: calc(100vh - 74px - 32px); overflow-y: auto; } .cron-workspace-form--collapsed { min-height: 180px; overflow: hidden; padding: 10px; } .cron-form-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; } .cron-form-header__copy { min-width: 0; } .cron-form-collapse-toggle { flex: 0 0 auto; width: 34px; height: 34px; padding: 0; justify-content: center; } .cron-workspace-form--collapsed .cron-form-header { min-height: 160px; flex-direction: column; align-items: center; justify-content: space-between; } .cron-workspace-form--collapsed .cron-form-header__copy { display: flex; justify-content: center; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; } .cron-workspace-form--collapsed .card-title { font-size: 13px; } .cron-form { margin-top: 16px; display: grid; gap: 14px; } .cron-form[hidden], .cron-form-status[hidden], .cron-form-actions[hidden] { display: none; } .cron-form-section { border: 1px solid var(--border); border-radius: var(--radius-md); padding: 14px; background: var(--bg-elevated); display: grid; gap: 12px; } .cron-form-section__title { font-size: 13px; font-weight: 600; letter-spacing: -0.01em; color: var(--text-strong); } .cron-form-section__sub { color: var(--muted); font-size: 12px; line-height: 1.45; } .cron-form-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px 16px; } .cron-help { color: var(--muted); font-size: 12px; line-height: 1.45; margin-top: 2px; } .cron-error { color: var(--danger-color); } .cron-required-legend { color: var(--muted); font-size: 12px; line-height: 1.4; } .cron-required-marker { color: var(--danger-color); font-weight: 700; margin-left: 3px; } .cron-required-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } .field input[aria-invalid="true"], .field textarea[aria-invalid="true"], .field select[aria-invalid="true"] { border-color: var(--danger); } .cron-form-status { margin-top: 4px; border: 1px solid var(--danger-subtle); background: var(--danger-subtle); border-radius: var(--radius-md); padding: 10px 12px; } .cron-form-status__title { color: var(--text-strong); font-size: 13px; font-weight: 600; margin-bottom: 6px; } .cron-form-status__list { margin: 8px 0 0; padding: 0; list-style: none; display: grid; gap: 6px; } .cron-form-status__link { border: 0; background: transparent; color: var(--text); cursor: pointer; font-size: 12px; line-height: 1.4; padding: 0; text-align: left; text-decoration: underline; text-underline-offset: 2px; } .cron-form-status__link:hover { color: var(--text-strong); } .cron-span-2 { grid-column: 1 / -1; } .cron-checkbox { align-items: center; grid-template-columns: 16px minmax(0, 1fr); column-gap: 10px; } .cron-checkbox input[type="checkbox"] { margin: 2px 0 0; width: 16px; height: 16px; accent-color: var(--accent); } .cron-checkbox .field-checkbox__label { color: var(--text-strong); font-size: 13px; font-weight: 500; } .cron-checkbox .cron-help { grid-column: 2; } .cron-checkbox-inline { align-content: start; align-items: start; padding-top: 28px; } .cron-advanced { border: 1px solid var(--border); border-radius: var(--radius-md); padding: 12px; background: var(--bg-elevated); display: grid; gap: 10px; } .cron-advanced__summary { cursor: pointer; color: var(--muted); font-size: 13px; font-weight: 500; } .cron-stagger-group { display: grid; grid-template-columns: minmax(0, 1fr) 180px; gap: 14px 16px; align-items: start; } .cron-form-actions { margin-top: 14px; justify-content: flex-start; align-items: center; gap: 10px 14px; flex-wrap: wrap; } .cron-submit-reason { color: var(--muted); font-size: 12px; line-height: 1.4; } .cron-filter-search { flex: 1 1 320px; min-width: 280px; } .cron-workspace .filters .field { min-width: 160px; } .cron-run-filters { margin-top: 12px; display: grid; gap: 12px; } .cron-run-filters__row { display: grid; gap: 12px; } .cron-run-filters__row--primary { grid-template-columns: minmax(160px, 220px) minmax(240px, 1fr) minmax(160px, 220px); } .cron-run-filters__row--secondary { grid-template-columns: repeat(2, minmax(220px, 1fr)); } .cron-run-filter-search { min-width: 0; } .cron-filter-dropdown { min-width: 0; } .cron-filter-dropdown__details { position: relative; } .cron-filter-dropdown__details > summary { list-style: none; } .cron-filter-dropdown__details > summary::-webkit-details-marker { display: none; } .cron-filter-dropdown__trigger { width: 100%; justify-content: space-between; text-align: left; } .cron-filter-dropdown__panel { position: absolute; z-index: 30; top: calc(100% + 8px); left: 0; width: min(360px, calc(100vw - 48px)); border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--bg-elevated); padding: 10px; display: grid; gap: 10px; box-shadow: var(--shadow-card); } .cron-filter-dropdown__list { display: grid; gap: 6px; } .cron-filter-dropdown__option { display: grid; grid-template-columns: 16px minmax(0, 1fr); gap: 8px; align-items: center; color: var(--text); font-size: 13px; } .cron-filter-dropdown__option input[type="checkbox"] { width: 16px; height: 16px; margin: 0; accent-color: var(--accent); } .list-item.cron-run-entry { display: flex; flex-direction: column; padding: 0; overflow: hidden; } .cron-run-entry__header { display: flex; flex-direction: column; align-items: baseline; gap: 8px; padding: 12px; width: 100%; box-sizing: border-box; background: var(--secondary); border-radius: var(--radius-md) var(--radius-md) 0 0; border-bottom: 1px solid var(--border); } @media (min-width: 1101px) { .cron-run-entry__header { display: grid; grid-template-columns: minmax(0, 1fr) minmax(200px, 260px); gap: 16px; align-items: start; } } :root[data-theme-mode="light"] .cron-run-entry__header { background: var(--bg-muted); } .cron-run-entry__meta { text-align: right; min-width: 0; } .cron-run-entry__body { padding: 12px; line-height: 1.45; min-width: 0; width: 100%; box-sizing: border-box; } @media (max-width: 1100px) { .cron-job.list-item { display: flex; flex-direction: column; padding: 0; overflow: hidden; max-width: 100%; } .cron-job .cron-job-header { display: flex; flex-direction: column; gap: 8px; border-radius: var(--radius-md) var(--radius-md) 0 0; width: 100%; } .cron-job .list-meta { min-width: 0; } .cron-job .cron-job-header .cron-job-state { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 16px; } .cron-job .cron-job-detail, .cron-job .cron-job-footer { width: 100%; box-sizing: border-box; } .cron-summary-strip { flex-direction: column; } .cron-summary-strip__left { grid-template-columns: repeat(2, minmax(0, 1fr)); width: 100%; } .cron-summary-strip__actions { width: 100%; justify-content: flex-start; flex-wrap: wrap; } .cron-workspace { grid-template-columns: 1fr; } .cron-workspace-form { position: static; order: -1; } .cron-workspace--form-collapsed { grid-template-columns: 1fr; } .cron-workspace-form--collapsed { min-height: 0; } .cron-workspace-form--collapsed .cron-form-header { min-height: 0; flex-direction: row; align-items: center; } .cron-workspace-form--collapsed .cron-form-header__copy { writing-mode: horizontal-tb; transform: none; } .cron-form-grid { grid-template-columns: 1fr; gap: 12px; } .cron-span-2 { grid-column: auto; } .cron-checkbox-inline { padding-top: 0; } .cron-stagger-group { grid-template-columns: 1fr; gap: 12px; } .cron-filter-search { min-width: 0; flex: 1 1 100%; } .cron-run-filters__row--primary, .cron-run-filters__row--secondary { grid-template-columns: 1fr; } .cron-filter-dropdown__panel { width: 100%; max-width: none; position: static; margin-top: 8px; } .cron-run-entry__meta { min-width: 0; text-align: left; } .list-item.cron-run-entry { padding: 0; } .cron-run-entry__header { display: flex; flex-direction: column; gap: 8px; padding: 10px; } .cron-run-entry__body { padding: 10px; } .cron-run-entry__body pre, .cron-run-entry__body table { overflow-x: auto; -webkit-overflow-scrolling: touch; } } :root[data-theme-mode="light"] .field input, :root[data-theme-mode="light"] .field textarea, :root[data-theme-mode="light"] .field select { background: var(--card); border-color: var(--input); } :root[data-theme-mode="light"] .btn { background: var(--bg); border-color: var(--input); } :root[data-theme-mode="light"] .btn:hover { background: var(--bg-hover); } :root[data-theme-mode="light"] .btn.active { border-color: var(--accent); background: var(--accent-subtle); color: var(--accent); } :root[data-theme-mode="light"] .btn.primary, :root[data-theme-mode="light"] .btn.cron-refresh-btn--loading { background: var(--accent); border-color: var(--accent); } :root[data-theme-mode="light"] .btn--icon { background: #ffffff; border-color: var(--border); box-shadow: 0 1px 2px rgba(16, 24, 40, 0.05); color: var(--muted); } :root[data-theme-mode="light"] .btn--icon:hover { background: #ffffff; border-color: var(--border-strong); color: var(--text); } :root[data-theme-mode="light"] .chat-controls .btn--icon.active { border-color: var(--accent); background: var(--accent-subtle); color: var(--accent); box-shadow: 0 0 0 1px var(--accent-subtle); } :root[data-theme-mode="light"] .btn--ghost { background: transparent; } :root[data-theme-mode="light"] .btn--ghost:hover { background: var(--bg-hover); } /* =========================================== Utilities =========================================== */ .muted { color: var(--muted); } .mono { font-family: var(--mono); } /* =========================================== Callouts - Informative with subtle depth =========================================== */ .callout { padding: 14px 16px; border-radius: var(--radius-md); background: var(--secondary); border: 1px solid var(--border); font-size: 13px; line-height: 1.5; position: relative; } .callout--dismissible { display: flex; align-items: flex-start; gap: 10px; } .callout__content { min-width: 0; flex: 1; } .callout__dismiss { width: 28px; height: 28px; display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; border: 0; border-radius: var(--radius-sm); background: transparent; color: currentColor; cursor: pointer; } .callout__dismiss:hover { background: rgba(255, 255, 255, 0.08); } .callout__dismiss svg { width: 16px; height: 16px; } .callout.danger { border-color: rgba(239, 68, 68, 0.25); background: linear-gradient(135deg, rgba(239, 68, 68, 0.08) 0%, rgba(239, 68, 68, 0.04) 100%); color: var(--danger); } .callout.info { border-color: rgba(59, 130, 246, 0.25); background: linear-gradient(135deg, rgba(59, 130, 246, 0.08) 0%, rgba(59, 130, 246, 0.04) 100%); color: var(--info); } .callout.success { border-color: rgba(34, 197, 94, 0.25); background: linear-gradient(135deg, rgba(34, 197, 94, 0.08) 0%, rgba(34, 197, 94, 0.04) 100%); color: var(--ok); } /* Compaction indicator */ .compaction-indicator { align-self: center; display: inline-flex; align-items: center; gap: 6px; font-size: 13px; line-height: 1.2; padding: 6px 14px; margin-bottom: 8px; border-radius: var(--radius-full); border: 1px solid var(--border); background: var(--panel-strong); color: var(--text); white-space: nowrap; user-select: none; animation: fade-in 0.2s var(--ease-out); } .compaction-indicator svg { width: 16px; height: 16px; stroke: currentColor; fill: none; stroke-width: 1.5px; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; } .compaction-indicator--active { color: var(--info); border-color: rgba(59, 130, 246, 0.35); } .compaction-indicator--active svg { animation: compaction-spin 1s linear infinite; } .compaction-indicator--complete { color: var(--ok); border-color: rgba(34, 197, 94, 0.35); } .compaction-indicator--fallback { color: #d97706; border-color: rgba(217, 119, 6, 0.35); } .compaction-indicator--fallback-cleared { color: var(--ok); border-color: rgba(34, 197, 94, 0.35); } @keyframes compaction-spin { to { transform: rotate(360deg); } } .chat-side-result { display: flex; flex-direction: column; gap: 10px; width: min(100%, 820px); margin: 0 auto 8px; padding: 12px 14px; border-radius: var(--radius-lg); border: 1px solid rgba(59, 130, 246, 0.28); background: linear-gradient(180deg, rgba(59, 130, 246, 0.08), rgba(59, 130, 246, 0.03)); color: var(--text); animation: fade-in 0.2s var(--ease-out); } .chat-side-result--error { border-color: rgba(239, 68, 68, 0.28); background: linear-gradient(180deg, rgba(239, 68, 68, 0.08), rgba(239, 68, 68, 0.03)); } .chat-side-result__header, .chat-side-result__label-row { display: flex; align-items: center; } .chat-side-result__header { justify-content: space-between; gap: 12px; } .chat-side-result__label-row { gap: 10px; flex-wrap: wrap; } .chat-side-result__label { display: inline-flex; align-items: center; font-size: 11px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--info); } .chat-side-result--error .chat-side-result__label { color: var(--danger); } .chat-side-result__meta { font-size: 12px; color: var(--muted); } .chat-side-result__dismiss { display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; padding: 0; border-radius: var(--radius-full); color: var(--muted); } .chat-side-result__dismiss:hover { color: var(--foreground); } .chat-side-result__dismiss svg { width: 16px; height: 16px; } .chat-side-result__question { font-size: 14px; font-weight: 600; color: var(--foreground); } .chat-side-result__body { font-size: 14px; line-height: 1.55; } .chat-side-result__body > :first-child { margin-top: 0; } .chat-side-result__body > :last-child { margin-bottom: 0; } /* =========================================== Code Blocks =========================================== */ .code-block { font-family: var(--mono); font-size: 13px; line-height: 1.5; background: var(--secondary); padding: 12px; border-radius: var(--radius-md); border: 1px solid var(--border); max-height: 360px; overflow: auto; max-width: 100%; } :root[data-theme-mode="light"] .code-block, :root[data-theme-mode="light"] .list-item, :root[data-theme-mode="light"] .table-row, :root[data-theme-mode="light"] .chip { background: var(--bg); } .markdown-plain-text-fallback { display: block; white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; font: inherit; } /* Code block wrapper chrome (generated by markdown renderer) */ .code-block-wrapper { position: relative; border-radius: var(--radius-sm); overflow: hidden; margin-top: 0.75em; } .code-block-wrapper pre { margin: 0; border-radius: 0 0 var(--radius-sm) var(--radius-sm); } .code-block-header { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 4px 8px 4px 12px; background: rgba(0, 0, 0, 0.25); font-size: 12px; line-height: 1; } :root[data-theme-mode="light"] .code-block-header { background: rgba(0, 0, 0, 0.08); } .code-block-lang { color: var(--muted); font-family: var(--mono); font-size: 11px; text-transform: lowercase; user-select: none; } .code-block-copy { appearance: none; border: none; background: transparent; color: var(--muted); font-size: 11px; font-family: var(--font-body); cursor: pointer; padding: 2px 6px; border-radius: var(--radius-sm); transition: color 150ms ease, background 150ms ease; } .code-block-copy:hover { color: var(--text); background: rgba(255, 255, 255, 0.1); } :root[data-theme-mode="light"] .code-block-copy:hover { background: rgba(0, 0, 0, 0.08); } .code-block-copy__done { display: none; } .code-block-copy.copied .code-block-copy__idle { display: none; } .code-block-copy.copied .code-block-copy__done { display: inline; color: var(--success, #22c55e); } .json-collapse { margin-top: 0.75em; } .json-collapse summary { cursor: pointer; font-size: 12px; color: var(--muted); padding: 4px 8px; user-select: none; } .json-collapse summary:hover { color: var(--text); } /* =========================================== Lists =========================================== */ .list { display: grid; gap: 8px; container-type: inline-size; } .list-item { display: grid; grid-template-columns: minmax(0, 1fr) minmax(200px, 260px); gap: 16px; align-items: start; border: 1px solid var(--border); border-radius: var(--radius-md); padding: 12px; background: var(--card); transition: border-color var(--duration-fast) ease; } .list-item-clickable { cursor: pointer; } .list-item-clickable:hover { border-color: var(--border-strong); } .list-item-selected { border-color: var(--accent); box-shadow: var(--focus-ring); } .list-main { display: grid; gap: 4px; min-width: 0; } .list-title { font-weight: 500; } .list-sub { color: var(--muted); font-size: 12px; } .list-meta { text-align: right; color: var(--muted); font-size: 12px; display: grid; gap: 4px; min-width: 200px; } .list-meta .btn { padding: 6px 10px; } .list-meta .field input, .list-meta .field textarea, .list-meta .field select { width: 100%; } /* Debug event log payloads should use full width like other debug sections. */ .debug-event-log__item { grid-template-columns: minmax(0, 1fr); } .debug-event-log__meta { min-width: 0; text-align: left; } .debug-event-log__payload { margin: 0; max-width: 100%; } /* Cron jobs: allow long payload/state text and keep action buttons inside the card. */ .cron-job-payload, .cron-job-agent, .cron-job-state { overflow-wrap: anywhere; word-break: break-word; } .cron-job .list-title { font-weight: 600; font-size: 15px; letter-spacing: -0.015em; overflow-wrap: anywhere; } .cron-job { grid-template-columns: minmax(0, 1fr) minmax(240px, 300px); grid-template-areas: "header header" "payload payload" "footer footer"; row-gap: 0; padding: 0; overflow: hidden; } .cron-job .cron-job-header { grid-area: header; display: flex; flex-direction: column; align-items: baseline; gap: 8px; padding: 12px; background: var(--secondary); border-radius: var(--radius-md) var(--radius-md) 0 0; border-bottom: 1px solid var(--border); } @media (min-width: 1101px) { .cron-job .cron-job-header { display: grid; grid-template-columns: minmax(0, 1fr) minmax(240px, 300px); gap: 16px; align-items: start; } } :root[data-theme-mode="light"] .cron-job .cron-job-header { background: var(--bg-muted); } .cron-job .list-meta { min-width: 240px; gap: 8px; } .cron-job-footer { grid-area: footer; display: flex; justify-content: space-between; align-items: center; gap: 12px; border-top: none; padding: 4px 12px 12px; } .cron-job-chips { flex: 1 1 auto; } .cron-job-detail { grid-area: payload; display: grid; gap: 8px; margin-top: 2px; padding: 8px 12px 12px; overflow: hidden; } .cron-job-detail-section { display: grid; gap: 3px; min-width: 0; } .cron-job-detail-label { color: var(--muted); font-size: 11px; font-weight: 600; letter-spacing: 0.03em; text-transform: uppercase; padding: 4px 8px; background: var(--secondary); border-radius: var(--radius-sm); display: inline-block; width: fit-content; } .cron-job-detail-value { font-size: 13px; line-height: 1.35; min-width: 0; overflow-wrap: anywhere; } .cron-job-state { display: grid; gap: 4px; } .cron-job-state-row { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; } .cron-job-state-key { color: var(--muted); font-size: 10px; font-weight: 600; letter-spacing: 0.05em; text-transform: uppercase; } .cron-job-state-value { color: var(--text); font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; } .cron-job-status-pill { font-size: 11px; font-weight: 600; border: 1px solid var(--border); border-radius: var(--radius-full); padding: 2px 8px; text-transform: lowercase; } .cron-job-status-ok { color: var(--ok); border-color: rgba(34, 197, 94, 0.35); background: var(--ok-subtle); } .cron-job-status-error { color: var(--danger); border-color: rgba(239, 68, 68, 0.35); background: var(--danger-subtle); } .cron-job-status-skipped { color: var(--warn); border-color: rgba(245, 158, 11, 0.35); background: var(--warn-subtle); } .cron-job-status-na { color: var(--muted); } .cron-job-actions { flex-wrap: wrap; justify-content: flex-end; margin-top: 0; } .cron-job-actions .btn { flex: 0 0 auto; } @container (max-width: 560px) { .list-item { grid-template-columns: 1fr; } .list-meta { min-width: 0; text-align: left; } .cron-job-actions { justify-content: flex-start; } .cron-job { grid-template-columns: 1fr; grid-template-areas: "header" "payload" "footer"; } .cron-job-footer { flex-direction: column; align-items: stretch; } } /* =========================================== Chips - Compact and punchy =========================================== */ .chip-row { display: flex; flex-wrap: wrap; gap: 8px; } .chip { font-size: 12px; font-weight: 500; border: 1px solid var(--border); border-radius: var(--radius-full); padding: 5px 12px; color: var(--muted); background: var(--secondary); transition: border-color var(--duration-fast) var(--ease-out), background var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out); } .chip:hover { border-color: var(--border-strong); transform: translateY(-1px); } .chip input { margin-right: 6px; } .chip-ok { color: var(--ok); border-color: rgba(34, 197, 94, 0.3); background: var(--ok-subtle); } .chip-warn { color: var(--warn); border-color: rgba(245, 158, 11, 0.3); background: var(--warn-subtle); } .chip-danger { color: var(--danger); border-color: rgba(239, 68, 68, 0.3); background: var(--danger-subtle); } /* =========================================== Tables =========================================== */ .table { display: grid; container-type: inline-size; gap: 6px; } .table-head, .table-row { display: grid; grid-template-columns: 1.4fr 1fr 0.8fr 0.7fr 0.8fr 0.8fr 0.8fr 0.8fr 0.6fr; gap: 12px; align-items: center; } .table-head { font-size: 12px; font-weight: 500; color: var(--muted); padding: 0 12px; } .table-row { border: 1px solid var(--border); padding: 10px 12px; border-radius: var(--radius-md); background: var(--card); transition: border-color var(--duration-fast) ease; } .table-row:hover { border-color: var(--border-strong); } @media (max-width: 1100px) { .table-head, .table-row { grid-template-columns: 1fr; } } @container (max-width: 1100px) { .table-head, .table-row { grid-template-columns: 1fr; } } .session-link { text-decoration: none; color: var(--accent); font-weight: 500; } .session-link:hover { text-decoration: underline; } .session-key-cell { display: grid; gap: 4px; min-width: 0; } .session-key-cell .session-link, .session-key-display-name { overflow-wrap: anywhere; word-break: break-word; } .session-key-display-name { font-size: 11px; } /* =========================================== Data Table =========================================== */ .data-table-wrapper { border: 1px solid var(--border); border-radius: var(--radius-md); overflow: hidden; } .data-table-toolbar { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-bottom: 1px solid var(--border); background: var(--bg-elevated); } .data-table-search { flex: 1; min-width: 0; } .data-table-search input { width: 100%; padding: 6px 10px; font-size: 13px; color: var(--text); background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-sm); outline: none; transition: border-color var(--duration-fast) ease; } .data-table-search input:focus { border-color: var(--border-strong); box-shadow: var(--focus-ring); } .data-table-search input::placeholder { color: var(--muted); } .data-table-container { overflow: auto; max-height: 70vh; } .data-table { --data-table-checkbox-col-width: 36px; width: 100%; border-collapse: separate; border-spacing: 0; font-size: 13px; } .sessions-table { min-width: 1240px; } .data-table th { position: sticky; top: 0; z-index: 3; padding: 10px 12px; text-align: left; font-weight: 600; font-size: 12px; color: var(--muted); background: var(--bg-elevated); border-bottom: 1px solid var(--border); white-space: nowrap; user-select: none; text-transform: uppercase; letter-spacing: 0.04em; } .data-table th[data-sortable] { cursor: pointer; transition: color var(--duration-fast) ease; } .data-table th[data-sortable]:hover { color: var(--text); } .data-table-sort-icon { display: inline-flex; vertical-align: middle; margin-left: 4px; opacity: 0.4; transition: opacity var(--duration-fast) ease; } .data-table-sort-icon svg { width: 14px; height: 14px; stroke: currentColor; fill: none; stroke-width: 1.5px; } .data-table th[data-sortable]:hover .data-table-sort-icon { opacity: 0.7; } .data-table th[data-sort-dir="asc"] .data-table-sort-icon, .data-table th[data-sort-dir="desc"] .data-table-sort-icon { opacity: 1; color: var(--text); } .data-table th[data-sort-dir="desc"] .data-table-sort-icon svg { transform: rotate(180deg); } .data-table td { padding: 10px 12px; border-bottom: 1px solid var(--border); color: var(--text); vertical-align: middle; } .data-table tbody tr { transition: background var(--duration-fast) ease; } .data-table tbody tr:hover { background: var(--bg-hover); } .session-data-row--expandable { cursor: pointer; } .session-data-row--expandable:focus-visible { outline: 1px solid var(--border-strong); outline-offset: -2px; } .data-table tbody tr:last-child td { border-bottom: none; } /* Badges for session kind */ .data-table-badge { display: inline-block; padding: 2px 8px; font-size: 11px; font-weight: 600; border-radius: var(--radius-full); letter-spacing: 0.02em; } .data-table-badge--direct { color: var(--accent-2); background: var(--accent-2-subtle); } .data-table-badge--group { color: var(--info); background: rgba(59, 130, 246, 0.1); } .data-table-badge--cron { color: var(--success); background: rgba(34, 197, 94, 0.1); } .data-table-badge--global { color: var(--warn); background: var(--warn-subtle); } .data-table-badge--unknown { color: var(--muted); background: var(--bg-hover); } .session-token-cell { min-width: 112px; white-space: nowrap; } /* Checkbox column */ .data-table-checkbox-col { width: var(--data-table-checkbox-col-width); min-width: var(--data-table-checkbox-col-width); max-width: var(--data-table-checkbox-col-width); box-sizing: border-box; padding-left: 12px !important; padding-right: 4px !important; text-align: center; vertical-align: middle; position: sticky; left: 0; z-index: 2; } .data-table th.data-table-checkbox-col { z-index: 4; background: var(--bg-elevated); } td.data-table-checkbox-col { background: var(--card); } .data-table tbody tr:hover td.data-table-checkbox-col { background: var(--bg-hover); } .data-table-checkbox-col input[type="checkbox"] { width: 16px; height: 16px; margin: 0; accent-color: var(--accent); cursor: pointer; vertical-align: middle; } /* Sticky Key column (second column, after checkbox) */ .data-table .data-table-key-col { position: sticky; left: var(--data-table-checkbox-col-width); z-index: 2; min-width: 180px; } .data-table th.data-table-key-col { z-index: 4; background: var(--bg-elevated); } td.data-table-key-col { background: var(--card); box-shadow: 2px 0 4px rgba(0, 0, 0, 0.08); } .data-table tbody tr:hover td.data-table-key-col { background: var(--bg-hover); } /* Bulk action bar */ .data-table-bulk-bar { display: flex; align-items: center; gap: 12px; padding: 8px 12px; border-bottom: 1px solid var(--border); background: var(--accent-subtle); font-size: 13px; font-weight: 500; color: var(--text); } .data-table-bulk-bar .btn svg { width: 14px; height: 14px; } /* Pagination */ .data-table-pagination { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 12px; border-top: 1px solid var(--border); background: var(--bg-elevated); font-size: 13px; color: var(--muted); } .data-table-pagination__controls { display: flex; align-items: center; gap: 8px; } .data-table-pagination__controls button { padding: 4px 12px; font-size: 13px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--card); color: var(--text); cursor: pointer; transition: background var(--duration-fast) ease, border-color var(--duration-fast) ease; } .data-table-pagination__controls button:hover:not(:disabled) { background: var(--bg-hover); border-color: var(--border-strong); } .data-table-pagination__controls button:disabled { opacity: 0.4; cursor: not-allowed; } /* Inline form fields for filter bars */ .field-inline { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text); } .field-inline span { color: var(--muted); font-weight: 500; white-space: nowrap; } .field-inline input[type="text"], .field-inline input:not([type]) { padding: 6px 10px; font-size: 13px; color: var(--text); background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-sm); outline: none; transition: border-color var(--duration-fast) ease; } .field-inline input:focus { border-color: var(--border-strong); box-shadow: var(--focus-ring); } .field-inline.checkbox { gap: 4px; cursor: pointer; } .field-inline.checkbox input[type="checkbox"] { accent-color: var(--accent); } .sessions-filter-panel { margin-bottom: 12px; border: 1px solid color-mix(in srgb, var(--border) 82%, transparent); border-radius: var(--radius-md); background: color-mix(in srgb, var(--bg-muted) 58%, transparent); } .sessions-filter-panel__header { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 6px; } .sessions-filter-panel__title { padding-left: 4px; color: var(--muted); font-size: 12px; font-weight: 700; letter-spacing: 0.02em; text-transform: uppercase; } .sessions-filter-panel__toggle { display: inline-flex; align-items: center; gap: 5px; min-height: 28px; padding: 4px 8px; color: var(--muted); background: transparent; border: 1px solid transparent; border-radius: var(--radius-sm); font-size: 12px; font-weight: 600; cursor: pointer; transition: color var(--duration-fast) ease, background-color var(--duration-fast) ease, border-color var(--duration-fast) ease; } .sessions-filter-panel__toggle:hover { color: var(--text); background: color-mix(in srgb, var(--bg-hover) 72%, transparent); border-color: color-mix(in srgb, var(--border) 74%, transparent); } .sessions-filter-panel__toggle:focus-visible { box-shadow: var(--focus-ring); outline: none; } .sessions-filter-panel__toggle svg { width: 14px; height: 14px; } .sessions-filter-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 0 6px 6px; } .session-filter-primary-row, .session-filter-toggle-group { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; } .session-filter-field, .session-filter-check { position: relative; min-height: 34px; box-sizing: border-box; border: 1px solid color-mix(in srgb, var(--border) 76%, transparent); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--card) 88%, transparent); } .session-filter-field { display: inline-grid; grid-template-columns: auto minmax(54px, max-content); align-items: center; gap: 8px; padding: 4px 8px 4px 10px; } .session-filter-label, .session-filter-check__label { color: var(--muted); font-size: 12px; font-weight: 600; line-height: 1; white-space: nowrap; } .session-filter-input { width: 62px; box-sizing: border-box; padding: 5px 7px; color: var(--text); background: var(--bg-elevated); border: 1px solid transparent; border-radius: calc(var(--radius-sm) - 2px); font-size: 12px; line-height: 1.2; outline: none; transition: border-color var(--duration-fast) ease, box-shadow var(--duration-fast) ease, opacity var(--duration-fast) ease; } .session-filter-input--limit { width: 56px; } .session-filter-input:focus { border-color: var(--border-strong); box-shadow: var(--focus-ring); } .session-filter-input:disabled { cursor: not-allowed; opacity: 0.48; } .session-filter-check { position: relative; display: inline-flex; align-items: center; gap: 6px; padding: 6px 10px; cursor: pointer; user-select: none; transition: border-color var(--duration-fast) ease, background-color var(--duration-fast) ease, color var(--duration-fast) ease; } .session-filter-check:hover { border-color: color-mix(in srgb, var(--border-strong) 74%, transparent); background: color-mix(in srgb, var(--bg-hover) 72%, transparent); } .session-filter-check--active { border-color: color-mix(in srgb, var(--accent) 64%, var(--border)); color: var(--text); background: color-mix(in srgb, var(--accent-subtle) 72%, var(--card)); } .session-filter-field[data-tooltip]::before, .session-filter-check[data-tooltip]::before, .session-filter-field[data-tooltip]::after, .session-filter-check[data-tooltip]::after { position: absolute; z-index: 20; opacity: 0; pointer-events: none; transition: opacity var(--duration-fast) ease, transform var(--duration-fast) ease; } .session-filter-field[data-tooltip]::before, .session-filter-check[data-tooltip]::before { content: ""; bottom: calc(100% + 4px); left: 18px; width: 8px; height: 8px; background: var(--text); transform: translateY(3px) rotate(45deg); } .session-filter-field[data-tooltip]::after, .session-filter-check[data-tooltip]::after { content: attr(data-tooltip); bottom: calc(100% + 8px); left: 0; width: max-content; max-width: min(320px, calc(100vw - 32px)); padding: 7px 9px; color: var(--card); background: var(--text); border-radius: var(--radius-sm); box-shadow: var(--shadow-md); font-size: 12px; font-weight: 500; line-height: 1.35; white-space: normal; transform: translateY(3px); } @media (hover: hover) { .session-filter-field[data-tooltip]:hover::before, .session-filter-field[data-tooltip]:hover::after, .session-filter-check[data-tooltip]:hover::before, .session-filter-check[data-tooltip]:hover::after { opacity: 1; transform: translateY(0) rotate(45deg); } .session-filter-field[data-tooltip]:hover::after, .session-filter-check[data-tooltip]:hover::after { transform: translateY(0); } } .session-filter-check__input { position: absolute; width: 1px; height: 1px; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; } .session-filter-check__mark { display: inline-grid; place-items: center; width: 14px; height: 14px; flex: 0 0 auto; color: color-mix(in srgb, var(--muted) 48%, transparent); opacity: 0.42; transition: color var(--duration-fast) ease, opacity var(--duration-fast) ease; } .session-filter-check__mark svg { width: 13px; height: 13px; stroke-width: 3; } .session-filter-check__input:checked + .session-filter-check__mark { color: var(--accent); opacity: 1; } .session-filter-check__input:focus-visible + .session-filter-check__mark { box-shadow: var(--focus-ring); } .session-filter-check__input:checked ~ .session-filter-check__label { color: var(--text); } @media (max-width: 760px) { .sessions-filter-bar { flex-direction: column; align-items: stretch; } .sessions-filter-bar, .session-filter-primary-row, .session-filter-toggle-group, .session-filter-field, .session-filter-check { width: 100%; } .session-filter-field { grid-template-columns: minmax(0, 1fr) auto; } } /* =========================================== Log Stream =========================================== */ .log-stream { border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--card); max-height: 500px; overflow: auto; container-type: inline-size; } .log-row { display: grid; grid-template-columns: 90px 70px minmax(140px, 200px) minmax(0, 1fr); gap: 12px; align-items: start; padding: 8px 12px; border-bottom: 1px solid var(--border); font-size: 12px; transition: background var(--duration-fast) ease; } .log-row:hover { background: var(--bg-hover); } .log-row:last-child { border-bottom: none; } .log-time { color: var(--muted); font-family: var(--mono); } .log-level { font-size: 11px; font-weight: 500; border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 2px 6px; width: fit-content; } .log-level.trace, .log-level.debug { color: var(--muted); } .log-level.info { color: var(--info); border-color: rgba(59, 130, 246, 0.3); } .log-level.warn { color: var(--warn); border-color: var(--warn-subtle); } .log-level.error, .log-level.fatal { color: var(--danger); border-color: var(--danger-subtle); } .log-chip.trace, .log-chip.debug { color: var(--muted); } .log-chip.info { color: var(--info); border-color: rgba(59, 130, 246, 0.3); } .log-chip.warn { color: var(--warn); border-color: var(--warn-subtle); } .log-chip.error, .log-chip.fatal { color: var(--danger); border-color: var(--danger-subtle); } .log-subsystem { color: var(--muted); font-family: var(--mono); } .log-message { white-space: pre-wrap; word-break: break-word; font-family: var(--mono); } @container (max-width: 620px) { .log-row { grid-template-columns: 70px 60px minmax(0, 1fr); } .log-subsystem { display: none; } } /* =========================================== Chat =========================================== */ .shell--chat .chat { flex: 1; } .chat-header { display: flex; justify-content: space-between; align-items: flex-end; gap: 16px; flex-wrap: wrap; } .chat-header__left { display: flex; align-items: flex-end; gap: 12px; flex-wrap: wrap; min-width: 0; } .chat-header__right { display: flex; align-items: center; gap: 8px; } .chat-session { min-width: 240px; } /* Chat queue */ .chat-queue { margin-top: 12px; padding: 12px; border-radius: var(--radius-lg); border: 1px solid var(--border); background: var(--card); display: grid; gap: 8px; } .chat-queue__title { font-family: var(--mono); font-size: 12px; font-weight: 500; color: var(--muted); } .chat-queue__list { display: grid; gap: 8px; } .chat-queue__item { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: start; gap: 12px; padding: 10px 12px; border-radius: var(--radius-md); border: 1px dashed var(--border-strong); background: var(--secondary); } .chat-queue__text { color: var(--chat-text); font-size: 13px; line-height: 1.45; white-space: pre-wrap; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; } .chat-queue__remove { align-self: start; padding: 4px 10px; font-size: 12px; line-height: 1; } /* New messages indicator */ .chat-new-messages { align-self: center; margin: 8px auto 0; border-radius: var(--radius-full); padding: 6px 12px; font-size: 12px; line-height: 1; } /* Chat lines */ .chat-line { display: flex; } .chat-line.user { justify-content: flex-end; } .chat-line.assistant, .chat-line.other { justify-content: flex-start; } .chat-msg { display: grid; gap: 6px; max-width: min(700px, 82%); } .chat-line.user .chat-msg { justify-items: end; } /* Chat bubbles */ .chat-bubble { border: 1px solid transparent; background: var(--card); border-radius: var(--radius-lg); padding: 10px 14px; min-width: 0; } :root[data-theme-mode="light"] .chat-bubble { border-color: var(--border); background: var(--bg); } .chat-line.user .chat-bubble { border-color: transparent; background: var(--accent-subtle); } :root[data-theme-mode="light"] .chat-line.user .chat-bubble { border-color: color-mix(in srgb, var(--accent) 20%, transparent); background: var(--accent-subtle); } .chat-line.assistant .chat-bubble { border-color: transparent; background: var(--secondary); } :root[data-theme-mode="light"] .chat-line.assistant .chat-bubble { border-color: var(--border); background: var(--bg-muted); } @keyframes chatStreamPulse { 0%, 100% { border-color: var(--border); } 50% { border-color: var(--accent); } } .chat-bubble.streaming { animation: chatStreamPulse 1.5s ease-in-out infinite; } @media (prefers-reduced-motion: reduce) { .chat-bubble.streaming { animation: none; border-color: var(--accent); } } /* Reading indicator */ .chat-bubble.chat-reading-indicator { width: fit-content; padding: 10px 16px; } .chat-reading-indicator__dots { display: inline-flex; align-items: center; gap: 4px; height: 12px; } .chat-reading-indicator__dots > span { display: inline-block; width: 6px; height: 6px; border-radius: var(--radius-full); background: var(--muted); opacity: 0.6; transform: translateY(0); animation: chatReadingDot 1.2s ease-in-out infinite; will-change: transform, opacity; } .chat-reading-indicator__dots > span:nth-child(2) { animation-delay: 0.15s; } .chat-reading-indicator__dots > span:nth-child(3) { animation-delay: 0.3s; } @keyframes chatReadingDot { 0%, 80%, 100% { opacity: 0.4; transform: translateY(0); } 40% { opacity: 1; transform: translateY(-3px); } } @media (prefers-reduced-motion: reduce) { .chat-reading-indicator__dots > span { animation: none; opacity: 0.6; } } /* Chat text */ .chat-text { overflow-wrap: anywhere; word-break: break-word; color: var(--chat-text); line-height: 1.5; } .chat-text :where(p, ul, ol, pre, blockquote, table) { margin: 0; } .chat-text :where(p + p, p + ul, p + ol, p + pre, p + blockquote, p + table) { margin-top: 0.75em; } .chat-text :where(ul, ol) { padding-left: 1.2em; } .chat-text :where(li + li) { margin-top: 0.25em; } .chat-text :where(a) { color: var(--accent); } .chat-text :where(a:hover) { text-decoration: underline; } .chat-text :where(blockquote) { border-left: 2px solid var(--border-strong); padding-left: 12px; color: var(--muted); } .chat-text :where(hr) { border: 0; border-top: 1px solid var(--border); margin: 1em 0; } .chat-text :where(code) { font-family: var(--mono); font-size: 0.9em; } .chat-text :where(:not(pre) > code) { padding: 0.15em 0.35em; border-radius: var(--radius-sm); border: 1px solid var(--border); background: var(--secondary); } :root[data-theme-mode="light"] .chat-text :where(:not(pre) > code) { background: var(--bg-muted); } .chat-text :where(pre) { margin-top: 0.75em; padding: 10px 12px; border-radius: var(--radius-md); border: 1px solid var(--border); background: var(--secondary); overflow: auto; } :root[data-theme-mode="light"] .chat-text :where(pre) { background: var(--bg-muted); } .chat-text :where(pre code) { font-size: 12px; white-space: pre; } .chat-text :where(table) { margin-top: 0.75em; border-collapse: collapse; width: 100%; max-width: 100%; font-size: 13px; display: block; overflow-x: auto; } .chat-text :where(th, td) { border: 1px solid var(--border); padding: 6px 10px; vertical-align: top; } .chat-text :where(th) { font-family: var(--mono); font-weight: 500; color: var(--muted); background: var(--secondary); } /* Cron markdown overrides must come after .chat-text rules to win cascade. */ .cron-run-entry__body.chat-text table, .cron-job-detail-value.chat-text table { display: table; width: 100%; } .cron-run-entry__body.chat-text pre, .cron-run-entry__body.chat-text blockquote, .cron-job-detail-value.chat-text pre, .cron-job-detail-value.chat-text blockquote { width: 100%; max-width: 100%; box-sizing: border-box; } .cron-run-entry__body.chat-text pre + p, .cron-run-entry__body.chat-text blockquote + p, .cron-run-entry__body.chat-text table + p, .cron-run-entry__body.chat-text p + pre, .cron-run-entry__body.chat-text p + blockquote, .cron-run-entry__body.chat-text p + table, .cron-job-detail-value.chat-text pre + p, .cron-job-detail-value.chat-text blockquote + p, .cron-job-detail-value.chat-text table + p, .cron-job-detail-value.chat-text p + pre, .cron-job-detail-value.chat-text p + blockquote, .cron-job-detail-value.chat-text p + table { margin-top: 0.75em; } .cron-run-entry__body.chat-text pre, .cron-run-entry__body.chat-text blockquote, .cron-run-entry__body.chat-text table, .cron-job-detail-value.chat-text pre, .cron-job-detail-value.chat-text blockquote, .cron-job-detail-value.chat-text table { margin-bottom: 0.75em; } .cron-run-entry__body.chat-text > :last-child, .cron-job-detail-value.chat-text > :last-child { margin-bottom: 0; } @media (max-width: 600px) { .cron-job .cron-job-header { padding: 10px; gap: 6px; } .cron-job .cron-job-header .cron-job-state { gap: 4px 12px; } .cron-job .cron-job-detail { padding: 10px; } .cron-job .cron-job-detail-value { font-size: 13px; overflow-x: auto; } .cron-job .cron-job-detail-value table, .cron-run-entry__body table { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; } .cron-job .cron-job-detail-value pre { overflow-x: auto; -webkit-overflow-scrolling: touch; } .cron-job .cron-job-footer { padding: 8px 10px 10px; overflow-x: auto; -webkit-overflow-scrolling: touch; flex-wrap: nowrap; gap: 8px; } .cron-job .cron-job-footer .chip-row, .cron-job .cron-job-footer .cron-job-actions { flex-wrap: nowrap; flex-shrink: 0; } .cron-job .cron-job-footer .cron-job-actions { gap: 6px; } } /* Tool cards */ .chat-tool-card { margin-top: 8px; padding: 10px 12px; border-radius: var(--radius-md); border: 1px solid var(--border); background: var(--secondary); display: grid; gap: 4px; } :root[data-theme-mode="light"] .chat-tool-card { background: var(--bg-muted); } .chat-tool-card__title { font-family: var(--mono); font-size: 12px; font-weight: 500; color: var(--text); } .chat-tool-card__detail { font-family: var(--mono); font-size: 11px; color: var(--muted); } .chat-tool-card__details { margin-top: 6px; } .chat-tool-card__summary { font-family: var(--mono); font-size: 11px; color: var(--muted); cursor: pointer; list-style: none; display: inline-flex; align-items: center; gap: 6px; } .chat-tool-card__summary::-webkit-details-marker { display: none; } .chat-tool-card__summary-meta { color: var(--muted); opacity: 0.7; } .chat-tool-card__details[open] .chat-tool-card__summary { color: var(--text); } .chat-tool-card__output { margin-top: 8px; font-family: var(--mono); font-size: 11px; line-height: 1.5; white-space: pre-wrap; color: var(--chat-text); padding: 8px 10px; border-radius: var(--radius-md); border: 1px solid var(--border); background: var(--card); } :root[data-theme-mode="light"] .chat-tool-card__output { background: var(--bg); } .chat-stamp { font-size: 11px; color: var(--muted); } .chat-line.user .chat-stamp { text-align: right; } /* Chat compose */ .chat-compose { margin-top: 12px; display: flex; flex-direction: column; gap: 10px; } .shell--chat .chat-compose { position: sticky; bottom: 0; z-index: 5; margin-top: 0; padding-top: 12px; background: linear-gradient(180deg, transparent 0%, var(--bg) 40%); } .shell--chat-focus .chat-compose { bottom: calc(var(--shell-pad) + 8px); padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px)); border-bottom-left-radius: var(--radius-lg); border-bottom-right-radius: var(--radius-lg); } .chat-compose__field { gap: 4px; } .chat-compose__field textarea { min-height: 72px; padding: 10px 14px; border-radius: var(--radius-lg); resize: vertical; white-space: pre-wrap; font-family: var(--font-body); line-height: 1.5; border: 1px solid var(--input); background: var(--card); box-shadow: inset 0 1px 0 var(--card-highlight); transition: border-color var(--duration-fast) ease, box-shadow var(--duration-fast) ease; } .chat-compose__field textarea:focus { border-color: var(--border-strong); box-shadow: 0 0 0 2px color-mix(in srgb, var(--border-strong) 24%, transparent); } .chat-compose__field textarea:disabled { opacity: 0.5; cursor: not-allowed; } .chat-compose__actions { justify-content: flex-end; align-self: end; } @media (max-width: 900px) { .chat-session { min-width: 180px; } .chat-compose { grid-template-columns: 1fr; } } /* =========================================== QR Code =========================================== */ .qr-wrap { margin-top: 16px; border-radius: var(--radius-md); background: var(--card); border: 1px dashed var(--border-strong); padding: 16px; display: inline-flex; } .qr-wrap img { width: 160px; height: 160px; border-radius: var(--radius-sm); image-rendering: pixelated; } /* =========================================== Exec Approval Modal =========================================== */ .exec-approval-card { width: 100%; max-height: inherit; display: flex; flex-direction: column; background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 20px; animation: scale-in 0.2s var(--ease-out); } .exec-approval-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; } .exec-approval-title { font-size: 14px; font-weight: 600; } .exec-approval-sub { color: var(--muted); font-size: 13px; margin-top: 4px; } .exec-approval-queue { font-size: 11px; font-weight: 500; color: var(--muted); border: 1px solid var(--border); border-radius: var(--radius-full); padding: 4px 10px; } .exec-approval-command { margin-top: 12px; max-height: min(40dvh, 320px); padding: 10px 12px; background: var(--secondary); border: 1px solid var(--border); border-radius: var(--radius-md); overflow-y: auto; word-break: break-word; white-space: pre-wrap; font-family: var(--mono); font-size: 13px; } .exec-approval-meta { margin-top: 12px; display: grid; gap: 6px; font-size: 13px; color: var(--muted); } .exec-approval-meta-row { display: flex; justify-content: space-between; gap: 12px; } .exec-approval-meta-row span:last-child { color: var(--text); font-family: var(--mono); } .exec-approval-error { margin-top: 10px; font-size: 13px; color: var(--danger); } .exec-approval-actions { margin-top: 16px; display: flex; flex-wrap: wrap; gap: 8px; } /* =========================================== Agents =========================================== */ .agents-layout { display: grid; grid-template-columns: 1fr; gap: 14px; } .agents-sidebar { display: grid; gap: 12px; align-self: start; } .agents-toolbar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; } .agents-toolbar-row { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; } .agents-control-select { flex: 1; min-width: 0; max-width: 280px; } .agents-select { width: 100%; padding: 7px 32px 7px 10px; border: 1px solid var(--border-strong); border-radius: var(--radius-md); background-color: var(--bg-accent); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 8px center; font-size: 13px; font-weight: 500; cursor: pointer; outline: none; appearance: none; transition: border-color var(--duration-fast) ease, box-shadow var(--duration-fast) ease; } :root[data-theme-mode="light"] .agents-select { background-color: white; } .agents-select:focus { border-color: var(--accent); box-shadow: var(--focus-ring); } .agents-toolbar-actions { display: flex; align-items: center; gap: 6px; flex-shrink: 0; margin-left: auto; } .agents-refresh-btn { white-space: nowrap; } .btn--ghost { background: transparent; border-color: transparent; color: var(--muted); } .btn--ghost:hover:not(:disabled) { background: var(--bg-hover); color: var(--text); } .btn--ghost:disabled { opacity: 0.5; cursor: not-allowed; } .agents-main { display: grid; gap: 14px; } .agent-list { display: grid; gap: 8px; } .agent-row { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 10px; width: 100%; text-align: left; border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--card); padding: 8px 12px; cursor: pointer; transition: border-color var(--duration-fast) ease; } .agent-row:hover { border-color: var(--border-strong); } .agent-row.active { border-color: var(--accent); box-shadow: var(--focus-ring); } .agent-avatar { width: 32px; height: 32px; border-radius: 50%; background: var(--secondary); display: grid; place-items: center; font-weight: 600; } .agent-avatar--lg { width: 48px; height: 48px; font-size: 20px; } .agent-info { display: grid; gap: 2px; min-width: 0; } .agent-title { font-weight: 600; } .agent-sub { color: var(--muted); font-size: 12px; } .agent-pill { border: 1px solid var(--border); border-radius: var(--radius-full); padding: 4px 10px; font-size: 11px; color: var(--muted); background: var(--secondary); text-transform: uppercase; letter-spacing: 0.04em; } .agent-pill.warn { color: var(--warn); border-color: var(--warn); } .agent-header { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; align-items: center; } .agent-header-main { display: flex; gap: 12px; align-items: center; } .agent-header-meta { display: grid; justify-items: end; gap: 6px; color: var(--muted); } .agent-tabs { display: flex; gap: 6px; flex-wrap: wrap; padding-bottom: 2px; border-bottom: 1px solid var(--border); } .agent-tab { border: 1px solid transparent; border-radius: var(--radius-sm); padding: 6px 12px; font-size: 12px; font-weight: 600; color: var(--muted); background: transparent; cursor: pointer; transition: border-color var(--duration-fast) ease, background var(--duration-fast) ease, color var(--duration-fast) ease; } .agent-tab:hover { color: var(--text); background: var(--bg-hover); } .agent-tab.active { background: var(--accent-subtle); border-color: color-mix(in srgb, var(--accent) 25%, transparent); color: var(--accent); } .agent-tab-count { margin-left: 4px; font-size: 10px; font-weight: 700; opacity: 0.7; } .agent-tab--missing { opacity: 0.5; } .agent-tab-badge { margin-left: 4px; font-size: 9px; font-weight: 700; text-transform: uppercase; color: var(--warn); opacity: 0.8; } .agents-overview-grid { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); } .agent-kv { display: grid; gap: 6px; min-width: 0; } .agent-kv > div { min-width: 0; overflow-wrap: anywhere; word-break: break-word; } .agent-kv-sub { font-size: 12px; } .agent-model-select { display: grid; gap: 10px; } .agent-model-fields { display: grid; gap: 10px; } .workspace-link { display: inline-flex; align-items: center; gap: 4px; border: none; background: transparent; color: var(--accent); font-family: var(--mono); font-size: 12px; padding: 2px 0; cursor: pointer; word-break: break-all; text-align: left; transition: opacity var(--duration-fast) ease; } .workspace-link:hover { opacity: 0.75; text-decoration: underline; } .agent-model-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } .agent-chip-input { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding: 6px 10px; border: 1px solid var(--border-strong); border-radius: var(--radius-md); background: var(--bg-accent); min-height: 38px; cursor: text; transition: border-color var(--duration-fast) ease; } .agent-chip-input:focus-within { border-color: var(--accent); } .agent-chip-input input, .agent-chip-input input:focus { flex: 1; min-width: 120px; border: none; background: transparent; outline: none; box-shadow: none; font-size: 13px; padding: 0; } .agent-chip-input .chip { display: inline-flex; align-items: center; gap: 6px; max-width: 100%; } .agent-chip-input .chip-remove { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 18px; height: 18px; padding: 0; margin: 0; border: none; border-radius: var(--radius-full); background: transparent; color: var(--muted); line-height: 1; cursor: pointer; transition: background var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out), opacity var(--duration-fast) var(--ease-out); } .agent-chip-input .chip-remove:hover:not(:disabled) { background: rgba(255, 255, 255, 0.08); color: var(--text); } .agent-chip-input .chip-remove:focus-visible:not(:disabled) { background: rgba(255, 255, 255, 0.08); color: var(--text); outline: 2px solid var(--accent); outline-offset: 2px; } .agent-chip-input .chip-remove:disabled { opacity: 0.45; cursor: default; } .agent-model-meta { display: grid; gap: 6px; min-width: 200px; } .agent-file-field { min-height: clamp(320px, 56vh, 720px); } .field textarea.agent-file-textarea { min-height: clamp(320px, 56vh, 720px); transition: filter var(--duration-fast) ease; } .field textarea.agent-file-textarea:not(:focus) { filter: blur(6px); } .agent-file-header { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; } .agent-file-sub { color: var(--muted); font-size: 12px; margin-top: 4px; } .agent-file-actions { display: flex; gap: 8px; } .md-preview-dialog { border: none; background: transparent; color: inherit; padding: 0; width: 100vw; max-width: none; height: 100vh; max-height: none; overflow: hidden; } .md-preview-dialog::backdrop { background: radial-gradient(circle at top, rgba(255, 92, 92, 0.12), transparent 32%), rgba(5, 8, 15, 0.76); backdrop-filter: blur(14px); } .md-preview-dialog__panel { position: relative; width: min(1040px, calc(100vw - 32px)); min-height: min(76vh, 820px); max-height: calc(100vh - 32px); margin: 16px auto; display: flex; flex-direction: column; border: 1px solid color-mix(in srgb, var(--border-strong) 84%, white 8%); border-radius: calc(var(--radius-xl) + 6px); background: linear-gradient(180deg, color-mix(in srgb, var(--panel) 94%, black 6%), var(--panel)); box-shadow: 0 32px 96px rgba(0, 0, 0, 0.48), 0 1px 0 rgba(255, 255, 255, 0.04) inset; overflow: hidden; animation: scale-in 0.22s var(--ease-out); transition: width var(--duration-normal) var(--ease-out), max-height var(--duration-normal) var(--ease-out), margin var(--duration-normal) var(--ease-out); } .md-preview-dialog__header { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; padding: 20px 22px 16px; border-bottom: 1px solid var(--border); background: linear-gradient( 180deg, color-mix(in srgb, var(--panel) 90%, black 10%), color-mix(in srgb, var(--panel) 96%, transparent 4%) ); } .md-preview-dialog__header-main { min-width: 0; display: grid; gap: 10px; } .md-preview-dialog__eyebrow { display: inline-flex; align-items: center; gap: 8px; min-width: 0; font-size: 11px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); } .md-preview-dialog__eyebrow svg { width: 14px; height: 14px; } .md-preview-dialog__title-wrap { min-width: 0; display: grid; gap: 6px; } .md-preview-dialog__title { min-width: 0; font-size: clamp(1.2rem, 1rem + 0.6vw, 1.75rem); line-height: 1.08; font-weight: 650; letter-spacing: -0.03em; color: var(--text-strong); text-wrap: balance; overflow-wrap: anywhere; } .md-preview-dialog__path { min-width: 0; font-size: 12px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .md-preview-dialog__actions { display: flex; align-items: center; gap: 7px; flex-shrink: 0; } .md-preview-icon-btn { width: 36px; height: 36px; padding: 0; border-radius: 12px; border-color: color-mix(in srgb, var(--border) 78%, white 10%); background: linear-gradient( 180deg, color-mix(in srgb, var(--bg-elevated) 92%, white 8%), color-mix(in srgb, var(--bg-elevated) 88%, black 12%) ); color: color-mix(in srgb, var(--text) 86%, var(--muted)); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.045), 0 8px 20px rgba(0, 0, 0, 0.18); } .md-preview-icon-btn:hover:not(:disabled) { border-color: color-mix(in srgb, var(--border-strong) 78%, white 14%); background: linear-gradient( 180deg, color-mix(in srgb, var(--bg-hover) 88%, white 10%), color-mix(in srgb, var(--bg-elevated) 84%, black 16%) ); color: var(--text-strong); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06), 0 10px 24px rgba(0, 0, 0, 0.24); } .md-preview-icon-btn[aria-pressed="true"] { border-color: color-mix(in srgb, var(--accent) 52%, var(--border)); color: var(--text-strong); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.07), 0 0 0 1px color-mix(in srgb, var(--accent) 18%, transparent), 0 12px 28px rgba(0, 0, 0, 0.28); } .md-preview-icon-btn > span { display: inline-flex; align-items: center; justify-content: center; } .md-preview-icon-btn svg { width: 16px; height: 16px; } .md-preview-dialog__body { flex: 1; overflow: auto; overscroll-behavior: contain; padding: clamp(18px, 3vw, 28px); background: radial-gradient(circle at top right, rgba(255, 92, 92, 0.055), transparent 32%), radial-gradient(circle at bottom left, rgba(20, 184, 166, 0.045), transparent 28%), linear-gradient( 180deg, color-mix(in srgb, var(--panel) 84%, black 16%), color-mix(in srgb, var(--bg) 88%, black 12%) ); } .md-preview-dialog__meta { display: flex; flex-wrap: wrap; gap: 8px; padding: 0 22px 16px; border-bottom: 1px solid color-mix(in srgb, var(--border) 88%, white 6%); background: linear-gradient( 180deg, color-mix(in srgb, var(--panel) 96%, transparent 4%), color-mix(in srgb, var(--panel) 92%, black 8%) ); } .md-preview-dialog__chip { display: inline-flex; align-items: center; gap: 8px; max-width: 100%; min-height: 32px; padding: 6px 12px; border-radius: var(--radius-full); border: 1px solid color-mix(in srgb, var(--border) 78%, white 10%); background: color-mix(in srgb, var(--secondary) 72%, transparent); color: var(--muted); font-size: 12px; line-height: 1; font-variant-numeric: tabular-nums; } .md-preview-dialog__chip strong { font-weight: 600; color: var(--text-strong); } .md-preview-dialog__chip.is-dirty { border-color: color-mix(in srgb, var(--accent) 42%, var(--border)); background: color-mix(in srgb, var(--accent-subtle) 72%, var(--secondary)); } .md-preview-dialog__chip.is-missing { border-color: color-mix(in srgb, var(--warn) 42%, var(--border)); background: color-mix(in srgb, var(--warn-subtle) 78%, var(--secondary)); } .md-preview-dialog__chip.is-synced { border-color: color-mix(in srgb, var(--accent-2) 36%, var(--border)); background: color-mix(in srgb, var(--accent-2-subtle) 72%, var(--secondary)); } .md-preview-dialog__reader { --md-preview-serif: "Iowan Old Style", "Palatino Linotype", "Book Antiqua", Georgia, serif; --md-preview-document-bg: color-mix(in srgb, var(--bg) 92%, var(--panel) 8%); --cm-bg: transparent; --cm-border: color-mix(in srgb, var(--border) 72%, white 10%); --cm-code-bg: color-mix(in srgb, var(--bg-elevated) 72%, black 28%); --cm-inline-code-bg: color-mix(in srgb, var(--secondary) 58%, transparent); position: relative; width: min(100%, 82ch); margin: 0 auto; padding: clamp(26px, 4vw, 56px); border: 1px solid color-mix(in srgb, var(--border-strong) 70%, white 10%); border-radius: calc(var(--radius-xl) + 2px); background: linear-gradient( 180deg, color-mix(in srgb, var(--md-preview-document-bg) 94%, white 6%), var(--md-preview-document-bg) ); box-shadow: 0 22px 54px rgba(0, 0, 0, 0.32), inset 0 1px 0 rgba(255, 255, 255, 0.035); } .md-preview-dialog__reader::before { content: ""; position: absolute; inset: 0; pointer-events: none; background: radial-gradient(circle at top left, rgba(255, 255, 255, 0.04), transparent 24%), linear-gradient(180deg, rgba(255, 255, 255, 0.01), transparent 18%); } .md-preview-dialog__reader > * { position: relative; z-index: 1; } .md-preview-dialog__reader .cm-preview { background: transparent; } .md-preview-dialog__reader.sidebar-markdown { font-size: 15px; line-height: 1.74; color: var(--text); } .md-preview-dialog__reader.sidebar-markdown > :first-child { margin-top: 0; } .md-preview-dialog__reader.sidebar-markdown > :last-child { margin-bottom: 0; } .md-preview-dialog__reader.sidebar-markdown :is(h1, h2, h3, h4, h5, h6) { margin: 0 0 0.9em; line-height: 1.08; font-weight: 650; letter-spacing: -0.03em; color: var(--text-strong); text-wrap: balance; } .md-preview-dialog__reader.sidebar-markdown h1 { font-family: var(--md-preview-serif); font-size: clamp(2.2rem, 4.4vw, 3.35rem); line-height: 0.98; } .md-preview-dialog__reader.sidebar-markdown h2 { margin-top: 2.4rem; padding-top: 1.3rem; border-top: 1px solid color-mix(in srgb, var(--border) 82%, white 12%); font-family: var(--md-preview-serif); font-size: clamp(1.45rem, 2.1vw, 2rem); } .md-preview-dialog__reader.sidebar-markdown h3 { margin-top: 1.9rem; font-size: clamp(1.18rem, 1.4vw, 1.42rem); } .md-preview-dialog__reader.sidebar-markdown :is(p, ul, ol, blockquote, pre, table, hr, details) { margin-top: 0; margin-bottom: 1.05rem; } .md-preview-dialog__reader.sidebar-markdown :is(ul, ol) { padding-left: 1.2rem; } .md-preview-dialog__reader.sidebar-markdown :is(ul ul, ul ol, ol ul, ol ol) { margin-top: 0.4rem; margin-bottom: 0.4rem; } .md-preview-dialog__reader.sidebar-markdown li + li { margin-top: 0.32rem; } .md-preview-dialog__reader.sidebar-markdown blockquote { padding: 0.95rem 1.1rem; border-left: 3px solid color-mix(in srgb, var(--accent) 85%, white 15%); border-radius: 0 var(--radius-md) var(--radius-md) 0; background: color-mix(in srgb, var(--secondary) 64%, transparent); color: color-mix(in srgb, var(--text) 82%, var(--muted)); } .md-preview-dialog__reader.sidebar-markdown pre { padding: 16px 18px; border: 1px solid color-mix(in srgb, var(--border) 88%, white 8%); border-radius: var(--radius-lg); background: color-mix(in srgb, var(--bg-elevated) 84%, black 16%); } .md-preview-dialog__reader.sidebar-markdown :not(pre) > code { padding: 0.16rem 0.42rem; border: 1px solid color-mix(in srgb, var(--border) 82%, white 8%); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--secondary) 62%, transparent); font-size: 0.9em; } .md-preview-dialog__reader.sidebar-markdown hr { border: 0; border-top: 1px solid color-mix(in srgb, var(--border) 82%, white 10%); } .md-preview-dialog__reader.sidebar-markdown table { width: 100%; border-collapse: collapse; border-spacing: 0; overflow: hidden; border: 1px solid color-mix(in srgb, var(--border) 82%, white 10%); border-radius: var(--radius-lg); } .md-preview-dialog__reader.sidebar-markdown :is(th, td) { padding: 10px 12px; border-bottom: 1px solid color-mix(in srgb, var(--border) 82%, white 8%); text-align: left; vertical-align: top; } .md-preview-dialog__reader.sidebar-markdown th { background: color-mix(in srgb, var(--secondary) 56%, transparent); font-weight: 600; } .md-preview-dialog__reader.sidebar-markdown tr:last-child td { border-bottom: none; } .md-preview-dialog__panel.fullscreen { width: calc(100vw - 20px); max-height: calc(100vh - 20px); margin: 10px auto; } .md-preview-dialog__panel.fullscreen .md-preview-dialog__header { align-items: center; justify-content: flex-end; gap: 0; padding: 10px 12px; } .md-preview-dialog__panel.fullscreen .md-preview-dialog__header-main { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; } .md-preview-dialog__panel.fullscreen .md-preview-dialog__actions { margin-left: auto; } .md-preview-dialog__panel.fullscreen .md-preview-dialog__meta { display: none; } .md-preview-dialog__panel.fullscreen .md-preview-dialog__body { padding: clamp(10px, 1.5vw, 18px); } .md-preview-dialog__panel.fullscreen .md-preview-dialog__reader { width: min(100%, 96ch); padding: clamp(24px, 3vw, 52px); } @media (max-width: 720px) { .md-preview-dialog { width: 100vw; height: 100vh; } .md-preview-dialog__panel { width: calc(100vw - 10px); min-height: calc(100vh - 12px); max-height: calc(100vh - 12px); margin: 6px auto; border-radius: var(--radius-xl); } .md-preview-dialog__header { flex-direction: column; align-items: stretch; padding: 16px 16px 14px; } .md-preview-dialog__actions { justify-content: flex-end; flex-wrap: wrap; } .md-preview-dialog__meta { padding: 0 16px 14px; } .md-preview-dialog__body { padding: 14px; } .md-preview-dialog__reader { width: 100%; padding: 20px 16px 22px; } } @media (prefers-reduced-motion: reduce) { .md-preview-dialog::backdrop { backdrop-filter: none; } .md-preview-dialog__panel { animation: none; transition: none; } } .agent-tools-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; } .agent-tools-header__intro { min-width: 0; } .agent-tools-header__actions { display: flex; gap: 8px; flex-wrap: wrap; } .agent-tools-overview { display: grid; gap: 16px; grid-template-columns: minmax(0, 1.75fr) minmax(280px, 0.9fr); align-items: start; margin-top: 16px; } .agent-tools-overview__primary { display: grid; gap: 12px; } .agent-tools-pane { display: grid; gap: 10px; min-width: 0; } .agent-tools-facts { display: grid; gap: 10px; grid-template-columns: repeat(2, minmax(0, 1fr)); align-content: start; } .agent-tools-fact { min-width: 0; padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--radius-md); background: color-mix(in srgb, var(--bg-elevated) 92%, transparent); } .agent-tools-buttons { display: flex; gap: 8px; flex-wrap: wrap; } .agent-tools-grid { display: grid; gap: 16px; margin-top: 20px; } .agent-tools-runtime { display: flex; flex-wrap: wrap; gap: 8px; } .agent-tools-runtime-chip { display: inline-flex; align-items: center; gap: 8px; min-width: 0; max-width: 100%; padding: 7px 10px; border: 1px solid var(--border); border-radius: var(--radius-full); background: color-mix(in srgb, var(--card) 86%, transparent); color: inherit; text-decoration: none; transition: background-color var(--duration-fast) var(--ease-in-out), border-color var(--duration-fast) var(--ease-in-out), color var(--duration-fast) var(--ease-in-out); touch-action: manipulation; } .agent-tools-runtime-chip:hover { background: color-mix(in srgb, var(--card) 92%, transparent); border-color: color-mix(in srgb, var(--border-strong) 58%, var(--border)); } .agent-tools-runtime-chip:focus-visible { outline: none; box-shadow: var(--focus-ring); } .agent-tools-runtime-chip--more { color: var(--muted); cursor: default; background: color-mix(in srgb, var(--bg-elevated) 84%, transparent); } .agent-tools-runtime-chip--more:hover { background: color-mix(in srgb, var(--bg-elevated) 88%, transparent); border-color: var(--border); } .agent-tools-runtime-chip__meta { color: var(--muted); font-size: 11px; white-space: nowrap; } .agent-tools-group { border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--bg-elevated); overflow: hidden; } .agent-tools-group summary::-webkit-details-marker, .agent-tool-summary::-webkit-details-marker { display: none; } .agent-tools-group summary::marker, .agent-tool-summary::marker { content: ""; } .agent-tools-group__summary { display: flex; align-items: flex-start; gap: 12px; justify-content: space-between; padding: 12px 14px; cursor: pointer; list-style: none; transition: background-color var(--duration-fast) var(--ease-in-out), color var(--duration-fast) var(--ease-in-out); touch-action: manipulation; } .agent-tools-group__summary::before { content: "▸"; color: var(--muted); font-size: 11px; line-height: 20px; transition: transform var(--duration-fast) var(--ease-in-out); } .agent-tools-group[open] .agent-tools-group__summary::before { transform: rotate(90deg); } .agent-tools-group__summary:hover { background: color-mix(in srgb, var(--bg-elevated) 96%, var(--text) 4%); } .agent-tools-group__summary:hover::before { color: color-mix(in srgb, var(--text) 78%, var(--muted)); } .agent-tools-group__summary:focus-visible { outline: none; box-shadow: inset var(--focus-ring); } .agent-tools-group__title { display: flex; align-items: center; gap: 8px; min-width: 0; font-weight: 600; } .agent-tools-group__summary-main { display: grid; gap: 6px; min-width: 0; flex: 1; } .agent-tools-group__preview { display: flex; gap: 6px; flex-wrap: wrap; min-width: 0; color: var(--muted); font-size: 11px; } .agent-tools-group__preview > span { min-width: 0; max-width: min(180px, 100%); padding: 2px 6px; border: 1px solid color-mix(in srgb, var(--border) 74%, transparent); border-radius: var(--radius-full); background: color-mix(in srgb, var(--card) 70%, transparent); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .agent-tools-group__counts { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; color: var(--muted); font-size: 11px; font-variant-numeric: tabular-nums; text-transform: uppercase; letter-spacing: 0.04em; } .agent-tools-group__counts > span { white-space: nowrap; } .agent-tools-list { display: grid; gap: 10px; padding: 0 12px 12px; } .agent-tools-list--stacked { grid-template-columns: 1fr; } .agent-tool-card { position: relative; border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--card); overflow: hidden; scroll-margin-top: 16px; } .agent-tool-card[open] { border-color: color-mix(in srgb, var(--accent) 22%, var(--border)); box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 10%, transparent); } .agent-tool-summary { position: relative; display: grid; grid-template-columns: minmax(0, 1.7fr) minmax(220px, 0.9fr) auto; gap: 12px 16px; align-items: center; min-width: 0; padding: 12px 92px 12px 12px; cursor: pointer; list-style: none; transition: background-color var(--duration-fast) var(--ease-in-out), color var(--duration-fast) var(--ease-in-out); touch-action: manipulation; } .agent-tool-summary::after { content: "▸"; position: absolute; top: 18px; right: 64px; color: var(--muted); font-size: 11px; transition: transform var(--duration-fast) var(--ease-in-out); } .agent-tool-card[open] .agent-tool-summary::after { transform: rotate(90deg); } .agent-tool-summary:hover { background: color-mix(in srgb, var(--card) 97%, var(--text) 3%); } .agent-tool-summary:hover::after { color: color-mix(in srgb, var(--text) 78%, var(--muted)); } .agent-tool-summary:focus-visible { outline: none; box-shadow: inset var(--focus-ring); } .agent-tool-summary__main { min-width: 0; } .agent-tool-summary__title-row { display: flex; align-items: center; gap: 8px; min-width: 0; } .agent-tool-summary__badges { min-width: 0; } .agent-tool-summary__badges .agent-tool-badges { margin-top: 0; justify-content: flex-end; } .agent-tool-summary__facts { display: grid; gap: 8px 12px; grid-template-columns: repeat(2, minmax(0, 1fr)); margin: 0; min-width: 0; } .agent-tool-summary__fact { min-width: 0; } .agent-tool-summary__fact dd { margin: 2px 0 0; font-size: 12px; } .agent-tool-toggle { position: absolute; top: 12px; right: 12px; margin: 0; z-index: 1; } .agent-tool-badges { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 8px; } .agent-tool-title { font-weight: 600; font-size: 13px; min-width: 0; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .agent-tool-sub { color: var(--muted); font-size: 11px; margin-top: 3px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .agent-tool-details { padding: 0 12px 12px; border-top: 1px solid color-mix(in srgb, var(--border) 72%, transparent); } .agent-tool-card:not([open]) .agent-tool-details { display: none; } .agent-tool-details-strip { display: flex; flex-wrap: wrap; gap: 10px 20px; align-items: flex-start; padding-top: 10px; } .agent-tool-detail { min-width: 0; } .agent-tool-detail--inline { max-width: min(100%, 260px); } .agent-tool-detail .label { margin-bottom: 4px; } .agent-tool-card[open] .agent-tool-sub { overflow: visible; text-overflow: clip; white-space: normal; } .agent-tool-jump { color: var(--accent); text-decoration: none; align-self: end; margin-left: auto; } .agent-tool-jump:hover { color: var(--accent-hover); text-decoration: underline; } .agent-tool-jump:focus-visible { outline: none; box-shadow: var(--focus-ring); border-radius: var(--radius-sm); } @media (prefers-reduced-motion: reduce) { .agent-tools-runtime-chip, .agent-tools-group__summary, .agent-tool-summary, .agent-tools-group__summary::before, .agent-tool-summary::after { transition: none; } } @media (max-width: 1180px) { .agent-tools-overview { grid-template-columns: 1fr; } .agent-tools-facts { grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); } .agent-tool-summary { grid-template-columns: minmax(0, 1fr) auto; } .agent-tool-summary__facts { grid-column: 1 / -1; } .agent-tool-summary__badges .agent-tool-badges { justify-content: flex-start; } } @media (max-width: 760px) { .agent-tools-group__summary { flex-wrap: wrap; align-items: flex-start; } .agent-tools-group__summary::before { line-height: 18px; } .agent-tools-group__counts { justify-content: flex-start; width: 100%; padding-left: 24px; } .agent-tool-summary { grid-template-columns: 1fr; padding-right: 92px; } .agent-tool-summary__facts { grid-template-columns: 1fr; } .agent-tool-jump { margin-left: 0; } } .agent-skills-groups { display: grid; gap: 16px; } .agent-skills-group { display: grid; gap: 10px; } .agent-skills-group summary { list-style: none; } .agent-skills-header { display: flex; align-items: center; font-weight: 600; font-size: 13px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--muted); cursor: pointer; gap: 8px; } .agent-skills-header > span:last-child { margin-left: auto; } .agent-skills-group summary::-webkit-details-marker { display: none; } .agent-skills-group summary::marker { content: ""; } .agent-skills-header::after { content: "▸"; font-size: 12px; color: var(--muted); transition: transform var(--duration-fast) ease; margin-left: 8px; } .agent-skills-group[open] .agent-skills-header::after { transform: rotate(90deg); } .agent-skill-row { align-items: flex-start; gap: 18px; } .agent-skill-row .list-meta { display: flex; align-items: flex-start; justify-content: flex-end; min-width: auto; } .skills-grid { grid-template-columns: 1fr; } @container (min-width: 900px) { .skills-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 980px) { .agent-header { grid-template-columns: 1fr; } .agent-header-meta { justify-items: start; } .agent-tools-list { grid-template-columns: 1fr; } } @media (max-width: 600px) { .agents-toolbar-row { flex-direction: column; align-items: stretch; gap: 6px; } .agents-control-select { max-width: none; } .agents-toolbar-actions { margin-left: 0; justify-content: flex-end; } } .cmd-palette-overlay { position: fixed; inset: 0; z-index: 1000; width: 100vw; max-width: none; height: 100dvh; max-height: none; margin: 0; border: 0; box-sizing: border-box; display: flex; align-items: flex-start; justify-content: center; padding-top: min(20vh, 160px); padding-right: 0; padding-bottom: 0; padding-left: 0; background: rgba(0, 0, 0, 0.5); color: var(--text); animation: fade-in 0.12s ease-out; } .cmd-palette-overlay::backdrop { background: transparent; } .cmd-palette { width: min(560px, 90vw); overflow: hidden; background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); animation: scale-in 0.15s ease-out; } .cmd-palette__label { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; border: 0; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; } .cmd-palette__input { width: 100%; padding: 14px 18px; background: transparent; border: none; border-bottom: 1px solid var(--border); color: var(--text); font-size: 15px; outline: none; } .cmd-palette__input::placeholder { color: var(--muted); } .cmd-palette__results { max-height: 320px; overflow-y: auto; padding: 6px 0; } .cmd-palette__group-label { padding: 8px 18px 4px; color: var(--muted); font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; } .cmd-palette__item { display: flex; align-items: center; gap: 10px; padding: 8px 18px; font-size: 14px; cursor: pointer; transition: background var(--duration-fast) ease; } .cmd-palette__item:hover, .cmd-palette__item--active { background: var(--bg-hover); } .cmd-palette__item .nav-item__icon { width: 16px; height: 16px; flex-shrink: 0; } .cmd-palette__item .nav-item__icon svg { width: 100%; height: 100%; } .cmd-palette__item-desc { margin-left: auto; font-size: 12px; } .cmd-palette__empty { display: flex; align-items: center; gap: 8px; padding: 16px 18px; color: var(--muted); font-size: 13px; } .cmd-palette__footer { display: flex; align-items: center; justify-content: flex-end; gap: 12px; padding: 8px 18px; border-top: 1px solid var(--border); font-size: 11px; color: var(--muted); } .cmd-palette__footer kbd { display: inline-flex; align-items: center; justify-content: center; padding: 1px 5px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); font-family: var(--mono); font-size: 10px; line-height: 1.4; } /* =========================================== Overview Cards =========================================== */ .ov-cards { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); } .ov-card { display: grid; gap: 6px; padding: 16px; border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--card); cursor: pointer; text-align: left; transition: border-color var(--duration-normal) var(--ease-out), box-shadow var(--duration-normal) var(--ease-out), transform var(--duration-fast) var(--ease-out); animation: rise 0.25s var(--ease-out) backwards; } .ov-card:hover { border-color: var(--border-strong); box-shadow: var(--shadow-sm); transform: translateY(-1px); } .ov-card:focus-visible { outline: none; box-shadow: var(--focus-ring); } .ov-card__label { font-size: 11px; font-weight: 600; color: var(--muted); text-transform: uppercase; letter-spacing: 0.04em; } .ov-card__value { font-size: 22px; font-weight: 700; letter-spacing: -0.03em; line-height: 1.15; color: var(--text-strong); } .ov-card__hint { font-size: 12px; color: var(--muted); line-height: 1.35; } .ov-card__hint .danger { color: var(--danger); } /* Stagger entrance */ .ov-cards .ov-card:nth-child(1) { animation-delay: 0ms; } .ov-cards .ov-card:nth-child(2) { animation-delay: 50ms; } .ov-cards .ov-card:nth-child(3) { animation-delay: 100ms; } .ov-cards .ov-card:nth-child(4) { animation-delay: 150ms; } /* ── Attention items ── */ .ov-attention-list { display: flex; flex-direction: column; gap: 8px; } .ov-attention-item { display: flex; align-items: flex-start; gap: 10px; padding: 10px 12px; border-radius: var(--radius-md); background: var(--bg-hover); border: 1px solid var(--border); } .ov-attention-item.warn { border-color: var(--warning-subtle, rgba(234, 179, 8, 0.2)); background: rgba(234, 179, 8, 0.05); } .ov-attention-item.danger { border-color: var(--danger-subtle, rgba(239, 68, 68, 0.2)); background: rgba(239, 68, 68, 0.05); } .ov-attention-icon { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; width: 18px; height: 18px; color: var(--muted); margin-top: 1px; } .ov-attention-item.warn .ov-attention-icon { color: var(--warn); } .ov-attention-item.danger .ov-attention-icon { color: var(--danger); } .ov-attention-icon svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } .ov-attention-body { flex: 1; min-width: 0; } .ov-attention-title { font-size: 13px; font-weight: 500; } .ov-attention-link { font-size: 12px; color: var(--accent, #3b82f6); text-decoration: none; } .ov-attention-link:hover { text-decoration: underline; } /* Recent sessions widget */ .ov-recent { margin-top: 18px; } .ov-recent__title { font-size: 13px; font-weight: 600; color: var(--muted); text-transform: uppercase; letter-spacing: 0.04em; margin: 0 0 10px; } .ov-recent__list { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; } .ov-recent__row { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 12px; padding: 8px 12px; border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--card); font-size: 13px; align-items: center; transition: border-color var(--duration-fast) ease; } .ov-recent__row:hover { border-color: var(--border-strong); } .ov-recent__key { font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; } .ov-recent__model { color: var(--muted); font-size: 12px; font-family: var(--mono); } .ov-recent__time { color: var(--muted); font-size: 12px; white-space: nowrap; } .blur-digits { filter: blur(4px); user-select: none; } /* Section divider */ .ov-section-divider { border-top: 1px solid var(--border); margin: 18px 0 0; } /* Access grid */ .ov-access-grid { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(min(200px, 100%), 1fr)); } .ov-access-grid .field { min-width: 0; } .ov-access-grid .field input, .ov-access-grid .field select { box-sizing: border-box; min-width: 0; width: 100%; } .ov-access-grid__full { grid-column: 1 / -1; } /* Bottom grid (event log + log tail) */ .ov-bottom-grid { display: grid; gap: 16px; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); } /* Expandable log panels */ .ov-event-log, .ov-log-tail { padding: 0; overflow: hidden; } .ov-expandable-toggle { display: flex; align-items: center; gap: 8px; padding: 12px 16px; cursor: pointer; font-size: 13px; font-weight: 600; color: var(--text-strong); letter-spacing: -0.01em; user-select: none; list-style: none; transition: background var(--duration-fast) var(--ease-out); } .ov-expandable-toggle::-webkit-details-marker { display: none; } .ov-expandable-toggle::marker { content: ""; } .ov-expandable-toggle:hover { background: var(--card-highlight); } .ov-expandable-toggle .nav-item__icon { color: var(--muted); flex-shrink: 0; } .ov-expandable-toggle::after { content: ""; width: 16px; height: 16px; margin-left: auto; flex-shrink: 0; background: currentColor; opacity: 0.35; mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E"); mask-size: contain; mask-repeat: no-repeat; transition: transform var(--duration-fast) var(--ease-out); } details[open] > .ov-expandable-toggle::after { transform: rotate(90deg); } .ov-count-badge { font-size: 11px; font-weight: 500; color: var(--muted); background: var(--bg-muted); padding: 1px 7px; border-radius: var(--radius-full); line-height: 1.5; } /* Event log entries */ .ov-event-log-list { border-top: 1px solid var(--border); max-height: 320px; overflow-y: auto; } .ov-event-log-entry { display: flex; align-items: baseline; gap: 10px; padding: 6px 16px; font-size: 12px; line-height: 1.5; border-bottom: 1px solid var(--border); } .ov-event-log-entry:last-child { border-bottom: none; } .ov-event-log-entry:hover { background: var(--card-highlight); } .ov-event-log-ts { font-family: var(--mono); font-size: 11px; color: var(--muted); flex-shrink: 0; min-width: 72px; } .ov-event-log-name { font-family: var(--mono); font-size: 11px; font-weight: 500; color: var(--text); white-space: nowrap; } .ov-event-log-payload { font-family: var(--mono); font-size: 11px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; } /* Gateway log tail */ .ov-log-tail-content { margin: 0; padding: 12px 16px; border-top: 1px solid var(--border); font-family: var(--mono); font-size: 11px; line-height: 1.6; color: var(--text); max-height: 320px; overflow-y: auto; overflow-x: auto; white-space: pre; word-break: break-all; } .ov-log-refresh { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: var(--radius-sm); color: var(--muted); cursor: pointer; transition: color var(--duration-fast) var(--ease-out), background var(--duration-fast) var(--ease-out); } .ov-log-refresh:hover { color: var(--text); background: var(--bg-muted); } @media (max-width: 768px) { .ov-bottom-grid { grid-template-columns: 1fr; } .ov-event-log-list, .ov-log-tail-content { max-height: 240px; } .ov-access-grid { grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); } .ov-recent__row { gap: 8px; } .ov-recent__model { font-size: 11px; } .ov-attention-item { padding: 8px 10px; gap: 8px; } .agent-row { padding: 8px 10px; gap: 8px; } .agent-avatar--lg { width: 40px; height: 40px; font-size: 18px; } .agent-header { gap: 8px; } .agent-header-main { gap: 8px; } .exec-approval-card { padding: 16px; display: flex; flex-direction: column; } .exec-approval-actions { flex-direction: column; flex-shrink: 0; } .exec-approval-actions .btn { width: 100%; } .exec-approval-command { font-size: 12px; padding: 8px 10px; max-height: 40dvh; overflow-y: auto; } .table-head { display: none; } .table-row { grid-template-columns: 1fr; gap: 6px; } } /* ── Shared collapse chevron ── */ .collapse-chevron { display: inline-flex; align-items: center; justify-content: center; transition: transform var(--duration-fast) ease; } .collapse-chevron svg { width: 12px; height: 12px; stroke: currentColor; fill: none; stroke-width: 1.5px; stroke-linecap: round; stroke-linejoin: round; } .collapse-chevron--collapsed { transform: rotate(-90deg); } .md-preview-expand-btn .when-fullscreen { display: none; } .md-preview-expand-btn.is-fullscreen .when-normal { display: none; } .md-preview-expand-btn.is-fullscreen .when-fullscreen { display: inline; } @media (max-width: 600px) { .ov-cards { grid-template-columns: repeat(2, 1fr); gap: 8px; } .ov-card { padding: 12px; } .ov-card__value { font-size: 18px; } .ov-bottom-grid { grid-template-columns: 1fr; } .ov-access-grid { grid-template-columns: 1fr; } .ov-recent__row { grid-template-columns: 1fr; gap: 4px; } }