.ops-runtime-panel { min-width: 0; min-height: 0; } .ops-runtime-shell { display: grid; grid-template-rows: auto 1fr; gap: 10px; min-height: 0; height: 100%; } .ops-runtime-head { flex-wrap: wrap; align-items: center; } .ops-panel-tools { position: relative; display: flex; align-items: center; justify-content: flex-end; gap: 6px; flex-wrap: wrap; } .ops-runtime-scroll { min-height: 0; overflow: auto; display: grid; gap: 10px; align-content: start; padding-right: 2px; } .ops-runtime-card { display: grid; gap: 8px; } .ops-runtime-state-card { min-height: 0; } .ops-runtime-state-card:not(.is-visual) { min-height: 210px; align-content: start; } .ops-runtime-state-card.is-visual { min-height: 210px; padding: 0; gap: 0; overflow: hidden; } .ops-runtime-state-card.is-visual .ops-state-stage { height: 100%; min-height: 100%; border-radius: inherit; } .ops-runtime-state-card.is-visual .ops-state-face { width: 210px; height: 140px; gap: 34px; } .ops-runtime-state-card.is-visual .ops-state-eye { width: 30px; height: 30px; } .ops-runtime-state-card.is-visual .ops-state-eye::after { width: 10px; height: 10px; } .ops-runtime-state-card.is-visual .ops-state-idle .ops-state-eye { width: 36px; height: 6px; } .ops-runtime-state-card.is-visual .ops-state-caption { bottom: 14px; font-size: 12px; } .ops-runtime-state-card.is-visual .ops-state-float { padding: 6px; right: 22%; top: 24%; } .ops-state-stage { position: relative; height: 160px; border: 0; border-radius: 10px; display: grid; place-items: center; background: radial-gradient(circle at 20% 25%, rgba(95, 136, 210, 0.12), transparent 40%), radial-gradient(circle at 82% 70%, rgba(53, 94, 176, 0.1), transparent 40%), color-mix(in oklab, var(--panel-soft) 72%, var(--panel) 28%); overflow: hidden; } .ops-state-model { position: absolute; top: 10px; left: 50%; transform: translateX(-50%); max-width: calc(100% - 28px); border: 1px solid rgba(148, 179, 235, 0.55); border-radius: 999px; background: rgba(11, 24, 48, 0.58); color: #dce9ff; font-size: 11px; font-weight: 700; padding: 3px 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .ops-state-face { width: 148px; height: 96px; border-radius: 999px; border: 1px solid rgba(148, 179, 235, 0.55); background: rgba(19, 37, 74, 0.55); box-shadow: 0 8px 30px rgba(10, 22, 44, 0.35), inset 0 0 0 1px rgba(156, 185, 241, 0.18); display: flex; align-items: center; justify-content: center; gap: 26px; } .ops-state-eye { width: 22px; height: 22px; position: relative; border-radius: 999px; border: 3px solid #d8e7ff; background: rgba(232, 242, 255, 0.95); box-shadow: 0 0 0 1px rgba(145, 178, 234, 0.35); } .ops-state-eye::after { content: ""; position: absolute; width: 8px; height: 8px; border-radius: 999px; background: #1b3569; left: 50%; top: 50%; transform: translate(-50%, -50%); } .ops-state-eye::before { content: ""; display: none; } .ops-state-caption { position: absolute; bottom: 10px; left: 50%; transform: translateX(-50%); font-size: 11px; letter-spacing: 0.08em; color: color-mix(in oklab, var(--text) 70%, var(--muted) 30%); } .ops-state-float { position: absolute; color: #f2f7ff; border: 1px solid rgba(163, 187, 226, 0.65); background: rgba(17, 36, 71, 0.72); border-radius: 999px; padding: 4px; right: 24%; top: 26%; } .ops-state-float.state-tool { animation: ops-tool-bob 0.7s ease-in-out infinite; } .ops-state-float.state-success { color: #62e2ad; border-color: rgba(98, 226, 173, 0.6); } .ops-state-float.state-error { color: #ff9b9b; border-color: rgba(255, 155, 155, 0.6); } .ops-state-idle .ops-state-eye { width: 28px; height: 4px; border: 0; border-radius: 999px; background: #d8e7ff; box-shadow: none; } .ops-state-idle .ops-state-eye::after { display: none; } .ops-state-thinking .ops-state-face { animation: ops-state-breathe 1.25s ease-in-out infinite; } .ops-state-thinking .ops-state-eye::after { animation: ops-eye-scan 1.3s ease-in-out infinite; } .ops-state-tool_call .ops-state-face { animation: ops-state-breathe 0.8s ease-in-out infinite; } .ops-state-tool_call .ops-state-eye::after { animation: ops-eye-scan-fast 0.7s ease-in-out infinite; } .ops-state-success .ops-state-face { box-shadow: 0 8px 30px rgba(11, 48, 37, 0.3), inset 0 0 0 1px rgba(112, 225, 172, 0.35); } .ops-state-success .ops-state-eye { width: 22px; height: 12px; border: 0; border-top: 3px solid #78dfb4; border-radius: 999px; background: transparent; box-shadow: none; transform: translateY(3px); } .ops-state-success .ops-state-eye.left { transform: translateY(3px) rotate(-8deg); } .ops-state-success .ops-state-eye.right { transform: translateY(3px) rotate(8deg); } .ops-state-success .ops-state-eye::after { display: none; } .ops-state-error .ops-state-face { box-shadow: 0 8px 30px rgba(57, 19, 19, 0.32), inset 0 0 0 1px rgba(255, 155, 155, 0.32); } .ops-state-error .ops-state-eye { width: 20px; height: 20px; border: 0; background: transparent; box-shadow: none; } .ops-state-error .ops-state-eye::after, .ops-state-error .ops-state-eye::before { content: ""; display: block; position: absolute; left: 50%; top: 50%; width: 18px; height: 3px; border-radius: 999px; background: #ff9b9b; } .ops-state-error .ops-state-eye::after { transform: translate(-50%, -50%) rotate(45deg); } .ops-state-error .ops-state-eye::before { transform: translate(-50%, -50%) rotate(-45deg); } .ops-state-error .ops-state-face, .ops-state-stopped .ops-state-face, .ops-state-exited .ops-state-face { filter: saturate(0.75); } .ops-state-stopped .ops-state-eye, .ops-state-exited .ops-state-eye { width: 24px; height: 3px; border: 0; background: color-mix(in oklab, var(--muted) 68%, #9fb4dc 32%); box-shadow: none; } .ops-state-stopped .ops-state-eye::after, .ops-state-exited .ops-state-eye::after { display: none; } .ops-state-unknown .ops-state-eye, .ops-state-info .ops-state-eye { animation: none; } @keyframes ops-state-breathe { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.05); } } @keyframes ops-eye-scan { 0%, 100% { transform: translate(-50%, -50%) translateX(0); } 30% { transform: translate(-50%, -50%) translateX(-2px); } 65% { transform: translate(-50%, -50%) translateX(2px); } } @keyframes ops-eye-scan-fast { 0%, 100% { transform: translate(-50%, -50%) translateX(0); } 50% { transform: translate(-50%, -50%) translateX(2px); } } @keyframes ops-tool-bob { 0%, 100% { transform: rotate(0deg); } 50% { transform: rotate(-15deg) translateY(-1px); } } .workspace-panel { border: 1px solid var(--line); border-radius: 10px; overflow: hidden; min-width: 0; min-height: 340px; display: grid; grid-template-rows: 1fr auto; } .workspace-toolbar { display: flex; gap: 8px; align-items: stretch; min-width: 0; } .workspace-path-wrap { min-width: 0; flex: 1 1 auto; border: 1px solid color-mix(in oklab, var(--line) 78%, transparent); border-radius: 10px; background: color-mix(in oklab, var(--panel) 58%, var(--panel-soft) 42%); padding: 8px 10px; } .workspace-toolbar-actions { display: inline-flex; align-items: center; gap: 8px; margin-left: auto; min-width: 0; flex: 0 1 auto; overflow: hidden; } .workspace-refresh-icon-btn { width: 30px; height: 30px; border-radius: 8px; border: 1px solid var(--line); background: var(--panel-soft); color: var(--icon); display: inline-flex; align-items: center; justify-content: center; cursor: pointer; transition: border-color 0.2s ease, background 0.2s ease, transform 0.15s ease; } .workspace-refresh-icon-btn:hover { border-color: color-mix(in oklab, var(--brand) 60%, var(--line) 40%); background: color-mix(in oklab, var(--brand-soft) 42%, var(--panel-soft) 58%); } .workspace-refresh-icon-btn:disabled { opacity: 0.6; cursor: not-allowed; } .workspace-auto-switch { display: inline-flex; align-items: center; gap: 6px; color: var(--subtitle); font-size: 11px; font-weight: 700; user-select: none; min-width: 0; max-width: 100%; } .workspace-auto-switch-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .workspace-auto-switch input { position: absolute; opacity: 0; width: 0; height: 0; } .workspace-auto-switch-track { position: relative; width: 34px; height: 20px; border-radius: 999px; border: 1px solid var(--line); background: color-mix(in oklab, var(--panel-soft) 85%, var(--panel) 15%); transition: background 0.2s ease, border-color 0.2s ease; } .workspace-auto-switch-track::after { content: ''; position: absolute; left: 2px; top: 2px; width: 14px; height: 14px; border-radius: 999px; background: color-mix(in oklab, var(--text) 75%, #fff 25%); transition: transform 0.2s ease, background 0.2s ease; } .workspace-auto-switch input:checked + .workspace-auto-switch-track { border-color: color-mix(in oklab, var(--brand) 70%, var(--line) 30%); background: color-mix(in oklab, var(--brand) 42%, var(--panel-soft) 58%); } .workspace-auto-switch input:checked + .workspace-auto-switch-track::after { transform: translateX(14px); background: #fff; } .workspace-path { font-size: 11px; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; } .workspace-search-toolbar { margin-top: 8px; } .workspace-list { background: var(--panel); overflow: auto; padding: 8px; min-width: 0; } .workspace-entry { width: 100%; border: 1px solid transparent; border-radius: 8px; background: color-mix(in oklab, var(--panel-soft) 70%, transparent); color: var(--text); text-align: left; display: flex; align-items: center; gap: 8px; font-size: 12px; font-weight: 600; padding-top: 5px; padding-bottom: 5px; padding-left: 8px; padding-right: 8px; margin-bottom: 6px; min-width: 0; max-width: 100%; box-sizing: border-box; } .workspace-entry .workspace-entry-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .workspace-entry .workspace-entry-meta { color: var(--muted); font-size: 11px; margin-top: 1px; flex: 0 0 auto; max-width: 84px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .workspace-entry.dir { border-color: color-mix(in oklab, var(--line) 80%, transparent); } .workspace-entry.nav-up { border-style: dashed; } .workspace-entry.file { cursor: pointer; border-color: color-mix(in oklab, var(--line) 80%, transparent); } .workspace-entry:hover { border-color: color-mix(in oklab, var(--brand) 65%, var(--line) 35%); background: color-mix(in oklab, var(--brand-soft) 45%, transparent); } .workspace-entry.disabled { opacity: 0.5; cursor: not-allowed; } .workspace-hint { background: var(--panel-soft); color: var(--muted); font-size: 12px; font-weight: 600; border-bottom: 1px solid var(--line); padding: 7px 9px; } .app-shell[data-theme='light'] .ops-runtime-card { background: #f7fbff; } .app-shell[data-theme='light'] .workspace-list { background: #ffffff; } .app-shell[data-theme='light'] .workspace-hint, .app-shell[data-theme='light'] .workspace-path, .app-shell[data-theme='light'] .workspace-path-wrap { background: #f7fbff; } @media (max-width: 1160px) { .workspace-panel { min-height: 280px; grid-template-rows: 1fr auto; } .workspace-toolbar { gap: 6px; } .workspace-path-wrap { flex: 1; } .ops-runtime-state-card { min-height: 0; } .ops-runtime-state-card:not(.is-visual) { min-height: 170px; } .ops-runtime-state-card.is-visual { min-height: 170px; } .ops-runtime-state-card.is-visual .ops-state-stage { min-height: 100%; } .ops-runtime-state-card.is-visual .ops-state-face { width: 172px; height: 114px; gap: 28px; } .ops-runtime-state-card.is-visual .ops-state-eye { width: 24px; height: 24px; } .ops-runtime-state-card.is-visual .ops-state-idle .ops-state-eye { width: 30px; height: 5px; } }