html, body {
margin: 0;
padding: 0;
height: 100%;
overflow: hidden;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
}
#root {
height: 100vh;
overflow: hidden;
}
/* Scrollbar */
::-webkit-scrollbar {
width: 6px;
height: 6px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: rgba(0, 0, 0, 0.15);
border-radius: 3px;
}
::-webkit-scrollbar-thumb:hover {
background: rgba(0, 0, 0, 0.25);
}
.ant-menu-dark {
background: transparent !important;
}
.ant-menu-dark .ant-menu-item-selected {
background-color: #2e3250 !important;
}
.ant-menu-dark .ant-menu-item:hover {
background-color: rgba(255, 255, 255, 0.08) !important;
}
/* editable-card Tabs 默认有 4px paddingTop,导致 TabBar 顶部出现空隙 */
.ant-tabs-editable-card > .ant-tabs-nav {
padding-top: 0 !important;
margin-top: 0 !important;
}
/*
* nav-only-tabs:Tabs 组件只用于渲染导航栏,内容区由外部 flex 子元素控制。
* 彻底绕开 Ant Design v5 CSS-in-JS 对内容高度的干扰。
*/
.ant-tabs.nav-only-tabs .ant-tabs-content-holder {
display: none !important;
}
/*
* flex-tabs(保留兼容,当前 Runs 页改用 nav-only-tabs)
*/
/* Run list row hover */
.run-row {
transition: background 0.12s;
}
.run-row:hover {
background: #fafafa;
}
/* Pulse dot for running indicators */
.pulse-dot {
width: 8px;
height: 8px;
border-radius: 50%;
display: inline-block;
flex-shrink: 0;
box-shadow: 0 0 0 0 rgba(22, 119, 255, 0.55);
animation: pulse-dot 1.6s ease-out infinite;
}
@keyframes pulse-dot {
0% { box-shadow: 0 0 0 0 rgba(22, 119, 255, 0.55); }
70% { box-shadow: 0 0 0 8px rgba(22, 119, 255, 0); }
100% { box-shadow: 0 0 0 0 rgba(22, 119, 255, 0); }
}
/* Typing dots for pending replies */
.typing-dots {
display: inline-flex;
gap: 4px;
padding: 2px 4px;
}
.typing-dots > span {
width: 6px;
height: 6px;
border-radius: 50%;
background: #b7c0cd;
animation: typing-blink 1.2s infinite ease-in-out;
}
.typing-dots > span:nth-child(2) { animation-delay: 0.2s; }
.typing-dots > span:nth-child(3) { animation-delay: 0.4s; }
@keyframes typing-blink {
0%, 80%, 100% { opacity: 0.25; transform: translateY(0); }
40% { opacity: 1; transform: translateY(-2px); }
}
/* Category tree node hover — reveal action buttons */
.cat-tree-node:hover .cat-actions {
opacity: 1 !important;
}