@@ -1,43 +1,44 @@
/* 设计令牌与 UI 组件样式已迁入 Agent-System-UI( @ui/tokens.css、@ui/ui.css, main.tsx 引入)。
R4 视觉收敛(2026-09-30):三级表面阶梯 + 发丝边框 + 圆角标尺 + 克制阴影 + 统一线性图标。 */
/* 宿主样式(R5/Zai 复刻,2026-09-30;权威规则见父仓 DESIGN.md):
- 颜色/圆角/字号只消费 @ui/tokens.css 令牌(--fs-ui-* 标尺);
- 动效只消费 @ui/motion.css 的 mk-* 类(本文件不得出现 @keyframes,守护测试拦截);
- 布局面板化:三栏为浮在 --bg-inset 底座上的圆角面板,间隙 4px; */
* { box-sizing : border-box ; }
html , body , # root { height : 100 % ; margin : 0 ; }
body {
font-family : var ( - - font ) ; background : var ( - - bg ) ; color : var ( - - text ) ;
font-size : 13.5 px ; line-height : 1.55 ;
font-family : var ( - - font ) ; background : var ( - - bg - inset ) ; color : var ( - - text ) ;
font-size : var ( - - fs - ui - base ) ; line-height : 1.6 ;
-webkit- font-smoothing : antialiased ; text-rendering : optimizeLegibility ;
}
button { font-family : inherit ; font-size : inherit ; color : inherit ; }
:: selection { background : var ( - - accent - soft -2 ) ; }
: focus-visible { outline : 2 px solid var ( - - accent ) ; outline-offset : 1 px ; border-radius : 2 px ; }
. app { display : flex ; height : 100 vh ; overflow : hidden ; }
/* ---- 三栏布局:层次靠背景阶梯(bg-panel 侧栏 / bg 主区),边框只发丝勾边 ---- */
. left-nav { background : var ( - - bg - panel ) ; border-right : 1 px solid var ( - - border ) ; display : flex ; flex-direction : column ; min-width : 0 ; flex-shrink : 0 ; transition : width .15 s var ( - - ease ) ; }
/* ---- 面板化三栏:独立圆角面板 + 4px 间隙(DESIGN.md §6) ---- */
. app { display : flex ; height : 100 vh ; overflow : hidden ; gap : 4 px ; padding : 4 px ; background : var ( - - bg - inset ) ; }
. left-nav { background : var ( - - bg - panel ) ; border : 1 px solid var ( - - border - soft ) ; border-radius : var ( - - radius - lg ) ; display : flex ; flex-direction : column ; min-width : 0 ; flex-shrink : 0 ; transition : width .15 s var ( - - ease ) ; }
. left-nav . collapsed { width : 52 px !important ; }
. divider { width : 4 px ; cursor : col-resize ; background : transparent ; flex-shrink : 0 ; position : relative ; }
. divider :: before { content : '' ; position : absolute ; left : 1.5 px ; top : 0 ; bottom : 0 ; width : 1 px ; background : transparent ; transition : background .12 s ; }
. divider : hover :: before , . divider . dragging :: before { background : var ( - - accent ) ; }
. divider :: before { content : '' ; position : absolute ; left : 1 px ; top : 12 px ; bottom : 12 px ; width : 2 px ; border-radius : 2 px ; background : transparent ; transition : background .12 s ; }
. divider : hover :: before , . divider . dragging :: before { background : var ( - - border - strong ) ; }
. divider :: after { content : '' ; position : absolute ; inset : 0 -3 px ; } /* 拖拽热区加宽 */
. main { flex : 1 ; min-width : 0 ; display : flex ; flex-direction : column ; background : var ( - - bg ) ; }
. right-panel { background : var ( - - bg - panel ) ; border-left : 1 px solid var ( - - border ) ; display : flex ; flex-direction : column ; flex-shrink : 0 ; min-width : 0 ; }
. main { flex : 1 ; min-width : 0 ; display : flex ; flex-direction : column ; background : var ( - - bg ) ; border : 1 px solid var ( - - border - soft ) ; border-radius : var ( - - radius - lg ) ; }
. right-panel { background : var ( - - bg - panel ) ; border : 1 px solid var ( - - border - soft ) ; border-radius : var ( - - radius - lg ) ; display : flex ; flex-direction : column ; flex-shrink : 0 ; min-width : 0 ; }
. right-panel . collapsed { width : 44 px !important ; }
/* ---- 通用控件 ---- */
. btn {
background : var ( - - accent ) ; color : var ( - - text - on - accent ) ; border : none ;
border-radius : var ( - - radius ) ; padding : 8 px 16 px ; cursor : pointer ;
font-size : 13 px ; font-weight : 550 ; white-space : nowrap ;
box-shadow : inset 0 1 px 0 rgba ( 255 , 255 , 255 , .14 ) , 0 1 px 2 px rgba ( 8 , 9 , 12 , .3 ) ;
transition : filter .12 s var ( - - ease ) , transform .12 s var ( - - ease ) ;
background : var ( - - primary ) ; color : var ( - - primary - foreground ) ; border : none ;
border-radius : var ( - - radius - sm ) ; padding : 8 px 16 px ; cursor : pointer ;
font-size : var ( - - fs - ui - caption ) ; font-weight : 550 ; white-space : nowrap ;
box-shadow : 0 1 px 2 px rgba ( 0 , 0 , 0 , .25 ) ;
transition : background .12 s var ( - - ease ) , transform .12 s var ( - - ease ) ;
}
. btn : hover : not ( : disabled ) { filter : brightness ( 1.09 ) ; }
. btn : hover : not ( : disabled ) { background : color-mix ( in srgb , var ( - - primary ) 86 % , var ( - - bg ) ) ; }
. btn : active : not ( : disabled ) { transform : translateY ( 1 px ) ; }
. btn : disabled { opacity : .42 ; cursor : not-allowed ; box-shadow : none ; }
. btn . ghost { background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border - strong ) ; color : var ( - - text - dim ) ; box-shadow : none ; }
. btn . ghost : hover : not ( : disabled ) { color : var ( - - text ) ; border-color : var ( - - text - faint ) ; filter : none ; }
. btn . ghost : hover : not ( : disabled ) { color : var ( - - text ) ; border-color : var ( - - text - faint ) ; background : var ( - - bg - raised ) ; }
. btn . danger { background : var ( - - err ) ; }
. icon-btn {
background : none ; border : none ; color : var ( - - text - faint ) ;
@@ -48,7 +49,7 @@ button { font-family: inherit; font-size: inherit; color: inherit; }
. icon-btn : hover { background : var ( - - bg - hover ) ; color : var ( - - text ) ; }
. search-input , . cmd-menu input {
background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border ) ; border-radius : var ( - - radius ) ;
color : var ( - - text ) ; padding : 7 px 11 px ; font-family : inherit ; font-size : 13 px ; width : 100 % ;
color : var ( - - text ) ; padding : 7 px 11 px ; font-family : inherit ; font-size : var ( - - fs - ui - caption ) ; width : 100 % ;
transition : border-color .12 s , box-shadow .12 s ;
}
. search-input : focus { border-color : var ( - - accent ) ; box-shadow : var ( - - ring ) ; outline : none ; }
@@ -57,24 +58,24 @@ button { font-family: inherit; font-size: inherit; color: inherit; }
/* min-height:0 须随列向 flex 链下传(.main→.chat→.chat-body):flex 项的自动最小
高度是内容高度,缺失时消息会撑破 .chat——chat-body 永不滚动、输入栏被顶出视口。 */
. chat { flex : 1 ; display : flex ; flex-direction : column ; min-width : 0 ; min-height : 0 ; }
. chat-header { padding : 12 px 22 px ; border-bottom : 1 px solid var ( - - border - soft ) ; display : flex ; align-items : center ; gap : 10 px ; background : var ( - - bg ) ; }
. chat-title { font-weight : 600 ; font-size : 14.5 px ; letter-spacing : -0.01 em ; flex : 1 ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. chat-header { padding : 12 px 22 px ; border-bottom : 1 px solid var ( - - border - soft ) ; display : flex ; align-items : center ; gap : 10 px ; background : var ( - - bg ) ; border-radius : var ( - - radius - lg ) var ( - - radius - lg ) 0 0 ; }
. chat-title { font-weight : 600 ; font-size : var ( - - fs - ui - base ) ; letter-spacing : -0.01 em ; flex : 1 ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. chat-body { flex : 1 ; overflow-y : auto ; min-height : 0 ; padding : 22 px max ( 22 px , 13 % ) ; }
. empty-state { height : 100 % ; display : flex ; flex-direction : column ; align-items : center ; justify-content : center ; color : var ( - - text - faint ) ; gap : 10 px ; font-size : 13.5 px ; }
. empty-state . es-mark { width : 44 px ; height : 44 px ; border-radius : 12 px ; background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border - soft ) ; display : flex ; align-items : center ; justify-content : center ; color : var ( - - text - faint ) ; margin-bottom : 4 px ; }
. empty-state { height : 100 % ; display : flex ; flex-direction : column ; align-items : center ; justify-content : center ; color : var ( - - text - faint ) ; gap : 10 px ; font-size : var ( - - fs - ui - caption ) ; }
. empty-state . es-mark { width : 44 px ; height : 44 px ; border-radius : var ( - - radius - lg ) ; background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border - soft ) ; display : flex ; align-items : center ; justify-content : center ; color : var ( - - text - faint ) ; margin-bottom : 4 px ; }
. empty-state svg { opacity : .5 ; }
. msg { margin-bottom : 20 px ; }
. msg-role { font-size : 12 px ; color : var ( - - text - faint ) ; margin-bottom : 6 px ; display : flex ; gap : 8 px ; align-items : center ; }
. msg-role { font-size : var ( - - fs - ui - sm ) ; color : var ( - - text - faint ) ; margin-bottom : 6 px ; display : flex ; gap : 8 px ; align-items : center ; }
. msg-role . role-mark { width : 18 px ; height : 18 px ; border-radius : 5 px ; display : inline-flex ; align-items : center ; justify-content : center ; color : var ( - - text - dim ) ; background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border ) ; }
. msg . user . bubble {
background : var ( - - accent - soft ) ; border : 1 px solid transparent ;
border-radius : var ( - - radius - lg ) ; padding : 11 px 16 px ; white-space : pre-wrap ;
}
. part { margin : 4 px 0 ; }
. part-thinking { color : var ( - - text - dim ) ; font-size : 12.5 px ; border-left : 2 px solid var ( - - border ) ; padding-left : 10 px ; margin : 4 px 0 ; }
. part-thinking { color : var ( - - text - dim ) ; font-size : var ( - - fs - ui - sm ) ; border-left : 2 px solid var ( - - border ) ; padding-left : 10 px ; margin : 4 px 0 ; }
. part-thinking summary { cursor : pointer ; color : var ( - - text - faint ) ; user-select : none ; }
. part-thinking . part-thinking-body { white-space : pre-wrap ; margin-top : 4 px ; }
. part-tool { font-size : 12.5 px ; }
. part-tool { font-size : var ( - - fs - ui - sm ) ; }
. tool-chip { display : inline-flex ; gap : 6 px ; align-items : center ; background : var ( - - bg - inset ) ; border : 1 px solid var ( - - border - soft ) ; border-radius : var ( - - radius - sm ) ; padding : 4 px 9 px ; margin : 2 px 4 px 2 px 0 ; font-family : var ( - - mono ) ; }
. tool-chip . status-ok { color : var ( - - ok ) ; }
. tool-chip . status-error { color : var ( - - err ) ; }
@@ -91,8 +92,8 @@ button { font-family: inherit; font-size: inherit; color: inherit; }
. part-text : is ( ul , ol ) { margin : 0.4 em 0 ; padding-left : 1.6 em ; }
. part-text li { margin : 0.15 em 0 ; }
. part-text li > p { margin : 0.2 em 0 ; }
. part-text pre { background : var ( - - bg - inset ) ; border : 1 px solid var ( - - border - soft ) ; border-radius : var ( - - radius ) ; padding : 11 px 13 px ; overflow-x : auto ; font-family : var ( - - mono ) ; font-size : 12.5 px ; }
. part-text code { font-family : var ( - - mono ) ; background : var ( - - bg - raised ) ; border-radius : var ( - - radius - xs ) ; padding : 1 px 5 px ; font-size : 12.5 px ; }
. part-text pre { background : var ( - - bg - inset ) ; border : 1 px solid var ( - - border - soft ) ; border-radius : var ( - - radius ) ; padding : 11 px 13 px ; overflow-x : auto ; font-family : var ( - - mono ) ; font-size : var ( - - fs - ui - sm ) ; }
. part-text code { font-family : var ( - - mono ) ; background : var ( - - bg - raised ) ; border-radius : var ( - - radius - xs ) ; padding : 1 px 5 px ; font-size : var ( - - fs - ui - sm ) ; }
. part-text pre code { background : none ; padding : 0 ; }
. part-text blockquote { margin : 0.5 em 0 ; padding : 0.1 em 0 0.1 em 10 px ; border-left : 3 px solid var ( - - border - strong ) ; color : var ( - - text - dim ) ; }
. part-text table { border-collapse : collapse ; margin : 0.6 em 0 ; font-size : 0.95 em ; display : block ; max-width : 100 % ; overflow-x : auto ; }
@@ -101,7 +102,7 @@ button { font-family: inherit; font-size: inherit; color: inherit; }
. part-text hr { border : none ; border-top : 1 px solid var ( - - border ) ; margin : 0.8 em 0 ; }
. part-text a { color : var ( - - accent ) ; }
. part-error { color : var ( - - err ) ; background : var ( - - err - soft ) ; border : 1 px solid var ( - - err ) ; border-radius : var ( - - radius - sm ) ; padding : 8 px 12 px ; }
. artifact-chip { display : inline-flex ; align-items : stretch ; background : var ( - - bg - panel ) ; border : 1 px solid var ( - - border ) ; border-radius : var ( - - radius - sm ) ; overflow : hidden ; font-size : 13 px ; margin : 2 px 0 ; }
. artifact-chip { display : inline-flex ; align-items : stretch ; background : var ( - - bg - panel ) ; border : 1 px solid var ( - - border ) ; border-radius : var ( - - radius - sm ) ; overflow : hidden ; font-size : var ( - - fs - ui - caption ) ; margin : 2 px 0 ; }
. artifact-chip . ac-main { display : inline-flex ; align-items : center ; gap : 7 px ; color : var ( - - accent ) ; background : none ; border : none ; padding : 5 px 10 px ; cursor : pointer ; font : inherit ; max-width : 340 px ; }
. artifact-chip . ac-main span , . artifact-chip . ac-main { white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. artifact-chip : hover { border-color : var ( - - accent ) ; }
@@ -112,16 +113,15 @@ button { font-family: inherit; font-size: inherit; color: inherit; }
/* 过程折叠(run 终态后) */
. process-collapse { border : 1 px solid var ( - - border - soft ) ; border-radius : var ( - - radius ) ; background : var ( - - bg - panel ) ; margin : 6 px 0 ; }
. process-collapse summary { list-style : none ; cursor : pointer ; padding : 7 px 12 px ; color : var ( - - text - faint ) ; font-size : 12.5 px ; display : flex ; align-items : center ; gap : 8 px ; user-select : none ; }
. process-collapse summary :: before { content : '▸' ; transition : transform .12 s ; font-size : 10 px ; }
. process-collapse summary { list-style : none ; cursor : pointer ; padding : 7 px 12 px ; color : var ( - - text - faint ) ; font-size : var ( - - fs - ui - sm ) ; display : flex ; align-items : center ; gap : 8 px ; user-select : none ; }
. process-collapse summary :: before { content : '▸' ; transition : transform .12 s ; font-size : var ( - - fs - ui - xs ) ; }
. process-collapse [ open ] summary :: before { transform : rotate ( 90 deg ) ; }
. process-collapse . body { padding : 4 px 12 px 10 px ; }
/* 流式状态行 */
. live-bar { display : flex ; align-items : center ; gap : 8 px ; color : var ( - - text - faint ) ; font-size : 12.5 px ; margin-bottom : 6 px ; }
. live-dot { width : 8 px ; height : 8 px ; border-radius : 50 % ; background : var ( - - accent ) ; animation : pulse 1.2 s infinite ; }
@ keyframes pulse { 0 % , 100 % { opacity : .4 } 50 % { opacity : 1 } }
. cursor-blink :: after { content : '▍' ; animation : pulse 1 s infinite ; color : var ( - - accent ) ; }
/* 流式状态行(呼吸/扫光走 mk-* 类) */
. live-bar { display : flex ; align-items : center ; gap : 8 px ; color : var ( - - text - faint ) ; font-size : var ( - - fs - ui - sm ) ; margin-bottom : 6 px ; }
. live-dot { width : 8 px ; height : 8 px ; border-radius : 50 % ; background : var ( - - accent ) ; animation : mk-breathe 1.2 s infinite ; }
. cursor-blink :: after { content : '▍' ; animation : mk-breathe 1 s infinite ; color : var ( - - accent ) ; }
/* HITL 卡片(确认类交互统一绿色语言) */
. hitl-card { border : 1 px solid var ( - - ok - border ) ; background : var ( - - ok - soft ) ; border-radius : var ( - - radius - lg ) ; padding : 14 px ; margin : 10 px 0 ; }
@@ -131,31 +131,31 @@ button { font-family: inherit; font-size: inherit; color: inherit; }
. hitl-choice { text-align : left ; border : 1 px solid var ( - - border ) ; background : var ( - - bg - raised ) ; color : var ( - - text ) ; border-radius : var ( - - radius ) ; padding : 10 px 12 px ; cursor : pointer ; transition : border-color .12 s , background .12 s ; }
. hitl-choice : hover { border-color : var ( - - accent ) ; background : var ( - - accent - soft ) ; }
. hitl-choice . label { font-weight : 600 ; display : flex ; gap : 8 px ; align-items : center ; }
. hitl-choice . desc { color : var ( - - text - dim ) ; font-size : 12.5 px ; margin-top : 3 px ; }
. hitl-choice . impact { color : var ( - - warn ) ; font-size : 12 px ; margin-top : 3 px ; }
. hitl-choice . rec { font-size : 10.5 px ; color : var ( - - accent ) ; border : 1 px solid var ( - - accent ) ; padding : 0 5 px ; border-radius : var ( - - radius - full ) ; }
. hitl-choice . desc { color : var ( - - text - dim ) ; font-size : var ( - - fs - ui - sm ) ; margin-top : 3 px ; }
. hitl-choice . impact { color : var ( - - warn ) ; font-size : var ( - - fs - ui - sm ) ; margin-top : 3 px ; }
. hitl-choice . rec { font-size : var ( - - fs - ui - xs ) ; color : var ( - - accent ) ; border : 1 px solid var ( - - accent ) ; padding : 0 5 px ; border-radius : var ( - - radius - full ) ; }
. hitl-free { display : flex ; gap : 8 px ; margin-top : 10 px ; }
/* 输入区:悬浮卡片式输入壳(外圆角大、聚焦发光 ) */
. input-bar { padding : 8 px max ( 16 px , 6 % ) 16 px ; background : var ( - - bg ) ; }
/* 输入区:悬浮卡片式输入壳(16px 大圆角 = DESIGN.md 特批例外 ) */
. input-bar { padding : 8 px max ( 16 px , 6 % ) 16 px ; background : var ( - - bg ) ; border-radius : 0 0 var ( - - radius - lg ) var ( - - radius - lg ) ; }
. attachments { display : flex ; flex-wrap : wrap ; gap : 6 px ; margin-bottom : 8 px ; }
. attach-chip { display : inline-flex ; gap : 6 px ; align-items : center ; background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border ) ; border-radius : var ( - - radius - sm ) ; padding : 3 px 8 px ; font-size : 12 px ; }
. attach-chip { display : inline-flex ; gap : 6 px ; align-items : center ; background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border ) ; border-radius : var ( - - radius - sm ) ; padding : 3 px 8 px ; font-size : var ( - - fs - ui - sm ) ; }
. input-row { display : flex ; gap : 8 px ; align-items : flex-end ; background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border ) ; border-radius : var ( - - radius - lg ) ; padding : 8 px 8 px 8 px 14 px ; box-shadow : var ( - - shadow - md ) ; transition : border-color .12 s , box-shadow .12 s ; }
. input-row : focus-within { border-color : var ( - - accent ) ; box-shadow : var ( - - shadow - md ) , var ( - - ring ) ; }
. input-row textarea { flex : 1 ; resize : none ; background : transparent ; border : none ; color : var ( - - text ) ; padding : 6 px 0 ; font-family : inherit ; font-size : 13.5 px ; max-height : 160 px ; outline : none ; }
. input-row textarea { flex : 1 ; resize : none ; background : transparent ; border : none ; color : var ( - - text ) ; padding : 6 px 0 ; font-family : inherit ; font-size : var ( - - fs - ui - caption ) ; max-height : 160 px ; outline : none ; }
. input-row textarea :: placeholder { color : var ( - - text - faint ) ; }
. cmd-menu { border : 1 px solid var ( - - border ) ; background : var ( - - bg - raised ) ; border-radius : var ( - - radius ) ; margin-bottom : 6 px ; max-height : 180 px ; overflow-y : auto ; box-shadow : var ( - - shadow - md ) ; }
. cmd-item { padding : 7 px 12 px ; cursor : pointer ; display : flex ; gap : 10 px ; font-size : 13 px ; }
. cmd-item { padding : 7 px 12 px ; cursor : pointer ; display : flex ; gap : 10 px ; font-size : var ( - - fs - ui - caption ) ; }
. cmd-item : hover , . cmd-item . active { background : var ( - - bg - hover ) ; }
. cmd-item . name { color : var ( - - accent ) ; font-family : var ( - - mono ) ; }
/* ---- 右栏 ---- */
. tabs { display : flex ; border-bottom : 1 px solid var ( - - border - soft ) ; overflow-x : auto ; padding : 0 8 px ; }
. tab { background : none ; border : none ; color : var ( - - text - faint ) ; padding : 10 px 10 px ; cursor : pointer ; font-size : 12.5 px ; font-weight : 550 ; border-bottom : 2 px solid transparent ; margin-bottom : -1 px ; white-space : nowrap ; }
. tab { background : none ; border : none ; color : var ( - - text - faint ) ; padding : 10 px 10 px ; cursor : pointer ; font-size : var ( - - fs - ui - sm ) ; font-weight : 550 ; border-bottom : 2 px solid transparent ; margin-bottom : -1 px ; white-space : nowrap ; }
. tab : hover { color : var ( - - text - dim ) ; }
. tab . active { color : var ( - - text ) ; border-bottom-color : var ( - - accent ) ; }
. tab-body { flex : 1 ; overflow-y : auto ; padding : 12 px ; }
. step { display : flex ; gap : 8 px ; align-items : flex-start ; padding : 6 px 4 px ; font-size : 13 px ; }
. step { display : flex ; gap : 8 px ; align-items : flex-start ; padding : 6 px 4 px ; font-size : var ( - - fs - ui - caption ) ; }
. step-icon { width : 16 px ; text-align : center ; flex-shrink : 0 ; }
. step . pending . step-icon { color : var ( - - text - faint ) ; }
. step . in_progress . step-icon { color : var ( - - accent ) ; }
@@ -164,8 +164,8 @@ button { font-family: inherit; font-size: inherit; color: inherit; }
/* ---- 工件面板(工作区文件管理)---- */
. artifacts-panel { display : flex ; flex-direction : column ; gap : 4 px ; }
. ap-toolbar { display : flex ; align-items : center ; gap : 6 px ; margin-bottom : 8 px ; flex-wrap : wrap ; }
. ap-toolbar . search-input { flex : 1 ; min-width : 120 px ; height : 30 px ; font-size : 12.5 px ; }
. kind-pill { border : 1 px solid var ( - - border ) ; background : none ; color : var ( - - text - dim ) ; border-radius : var ( - - radius - full ) ; padding : 3 px 10 px ; font-size : 12 px ; cursor : pointer ; }
. ap-toolbar . search-input { flex : 1 ; min-width : 120 px ; height : 30 px ; font-size : var ( - - fs - ui - sm ) ; }
. kind-pill { border : 1 px solid var ( - - border ) ; background : none ; color : var ( - - text - dim ) ; border-radius : var ( - - radius - full ) ; padding : 3 px 10 px ; font-size : var ( - - fs - ui - sm ) ; cursor : pointer ; }
. kind-pill : hover { color : var ( - - text ) ; background : var ( - - bg - hover ) ; }
. kind-pill . on { color : var ( - - accent ) ; border-color : var ( - - accent ) ; background : var ( - - accent - soft ) ; }
. ap-upload { cursor : pointer ; }
@@ -173,30 +173,28 @@ button { font-family: inherit; font-size: inherit; color: inherit; }
. artifact-row : hover { background : var ( - - bg - hover ) ; }
. artifact-row . ar-icon { display : flex ; color : var ( - - text - dim ) ; cursor : pointer ; flex : none ; }
. artifact-row . ar-main { flex : 1 ; min-width : 0 ; display : flex ; flex-direction : column ; gap : 1 px ; cursor : pointer ; }
. artifact-row . name { white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; font-size : 13 px ; }
. artifact-row . meta { font-size : 11 px ; color : var ( - - text - faint ) ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. artifact-row . name { white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; font-size : var ( - - fs - ui - caption ) ; }
. artifact-row . meta { font-size : var ( - - fs - ui - xs ) ; color : var ( - - text - faint ) ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. artifact-row . ar-acts { display : none ; align-items : center ; gap : 2 px ; flex : none ; }
. artifact-row : hover . ar-acts { display : inline-flex ; }
. artifact-row . ar-acts . icon-btn { width : 26 px ; height : 26 px ; }
. artifact-row . ar-acts . icon-btn . danger { color : var ( - - err ) ; }
. empty-note { color : var ( - - text - faint ) ; font-size : 12.5 px ; padding : 14 px 6 px ; }
. agent-row { display : flex ; align-items : center ; gap : 8 px ; padding : 8 px ; border-radius : var ( - - radius - sm ) ; cursor : pointer ; font-size : 13 px ; }
. empty-note { color : var ( - - text - faint ) ; font-size : var ( - - fs - ui - sm ) ; padding : 14 px 6 px ; }
. agent-row { display : flex ; align-items : center ; gap : 8 px ; padding : 8 px ; border-radius : var ( - - radius - sm ) ; cursor : pointer ; font-size : var ( - - fs - ui - caption ) ; }
. agent-row : hover { background : var ( - - bg - hover ) ; }
. status-dot { width : 8 px ; height : 8 px ; border-radius : 50 % ; flex-shrink : 0 ; }
. status-running { background : var ( - - accent ) ; animation : pulse 1.2 s infinite ; }
. status-running { background : var ( - - accent ) ; animation : mk-breathe 1.2 s infinite ; }
. status-completed { background : var ( - - ok ) ; }
. status-failed , . status-cancelled , . status-interrupted { background : var ( - - err ) ; }
. status-pending , . status-waiting_hitl { background : var ( - - warn ) ; }
/* ---- 弹窗 / 模态 ---- */
. overlay { position : fixed ; inset : 0 ; background : rgba ( 8 , 9 , 12 , .6 ) ; backdrop-filter : blur ( 8 px ) ; display : flex ; align-items : center ; justify-content : center ; z-index : 50 ; animation : overlay - in .14 s var ( - - ease ) ; }
@ keyframes overlay-in { from { opacity : 0 } }
. modal { background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border ) ; border-radius : var ( - - radius - xl ) ; width : min ( 860 px , 92 vw ) ; max-height : 86 vh ; display : flex ; flex-direction : column ; box-shadow : var ( - - shadow - lg ) ; animation : modal-in .16 s var ( - - ease ) ; }
@ keyframes modal-in { from { opacity : 0 ; transform : translateY ( 6 px ) scale ( .99 ) } }
. modal-header { padding : 16 px 20 px ; border-bottom : 1 px solid var ( - - border - soft ) ; display : flex ; align-items : center ; font-weight : 600 ; font-size : 14.5 px ; letter-spacing : -0.01 em ; }
/* ---- 弹窗 / 模态(动画走 mk-* 类) ---- */
. overlay { position : fixed ; inset : 0 ; background : rgba ( 0 , 0 , 0 , .55 ) ; backdrop-filter : blur ( 8 px ) ; display : flex ; align-items : center ; justify-content : center ; z-index : 50 ; animation : mk-overlay-in .14 s var ( - - ease ) ; }
. modal { background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border ) ; border-radius : var ( - - radius - xl ) ; width : min ( 860 px , 92 vw ) ; max-height : 86 vh ; display : flex ; flex-direction : column ; box-shadow : var ( - - shadow - lg ) ; animation : mk-modal-in .16 s var ( - - ease ) ; }
. modal-header { padding : 16 px 20 px ; border-bottom : 1 px solid var ( - - border - soft ) ; display : flex ; align-items : center ; font-weight : 600 ; font-size : var ( - - fs - ui - base ) ; letter-spacing : -0.01 em ; }
. modal-header . spacer { flex : 1 ; }
. modal-body { flex : 1 ; overflow-y : auto ; padding : 18 px 20 px ; }
. subagent-tree { font-size : 13 px ; }
. subagent-tree { font-size : var ( - - fs - ui - caption ) ; }
. subagent-node { border : 1 px solid var ( - - border ) ; border-radius : var ( - - radius ) ; padding : 10 px ; margin-bottom : 8 px ; background : var ( - - bg - panel ) ; }
. subagent-node . head { display : flex ; gap : 8 px ; align-items : center ; margin-bottom : 6 px ; }
@@ -205,7 +203,7 @@ button { font-family: inherit; font-size: inherit; color: inherit; }
. ui-setting-control input , . ui-setting-control select { background : var ( - - bg ) ; border : 1 px solid var ( - - border ) ; border-radius : var ( - - radius - sm ) ; color : var ( - - text ) ; padding : 7 px 10 px ; font-family : inherit ; width : 100 % ; max-width : 340 px ; }
. ui-setting-control input : focus , . ui-setting-control select : focus { border-color : var ( - - accent ) ; box-shadow : var ( - - ring ) ; outline : none ; }
. ui-setting-control input [ type = "checkbox" ] { width : auto ; }
. effect-badge { font-size : 10.5 px ; padding : 2 px 7 px ; border-radius : var ( - - radius - full ) ; border : 1 px solid var ( - - border ) ; color : var ( - - text - faint ) ; white-space : nowrap ; }
. effect-badge { font-size : var ( - - fs - ui - xs ) ; padding : 2 px 7 px ; border-radius : var ( - - radius - full ) ; border : 1 px solid var ( - - border ) ; color : var ( - - text - faint ) ; white-space : nowrap ; }
. effect-hot { color : var ( - - ok ) ; border-color : var ( - - ok ) ; }
. effect-new-run { color : var ( - - warn ) ; border-color : var ( - - warn ) ; }
@@ -213,16 +211,16 @@ button { font-family: inherit; font-size: inherit; color: inherit; }
. docv { display : flex ; flex-direction : column ; min-height : 0 ; }
. docv-toolbar { display : flex ; align-items : center ; gap : 8 px ; padding : 0 0 10 px ; border-bottom : 1 px solid var ( - - border - soft ) ; margin-bottom : 10 px ; }
. docv-toolbar . spacer { flex : 1 ; }
. docv-meta { font-size : 11.5 px ; color : var ( - - text - faint ) ; text-transform : capitalize ; }
. docv-dirty { color : var ( - - warn ) ; font-size : 12 px ; }
. docv-meta { font-size : var ( - - fs - ui - xs ) ; color : var ( - - text - faint ) ; text-transform : capitalize ; }
. docv-dirty { color : var ( - - warn ) ; font-size : var ( - - fs - ui - sm ) ; }
. docv-dl { text-decoration : none ; }
. docv-body { flex : 1 ; min-height : 0 ; overflow : auto ; }
. docv-pdf { width : 100 % ; height : 100 % ; min-height : 60 vh ; border : 1 px solid var ( - - border - soft ) ; border-radius : var ( - - radius ) ; background : var ( - - bg ) ; }
. docv-editor { width : 100 % ; height : 56 vh ; font-family : var ( - - mono ) ; font-size : 12.5 px ; resize : vertical ; }
. docv-pre { font-family : var ( - - mono ) ; font-size : 12.5 px ; white-space : pre-wrap ; word-break : break-word ; background : var ( - - bg - inset ) ; border : 1 px solid var ( - - border - soft ) ; border-radius : var ( - - radius ) ; padding : 12 px 14 px ; }
. docv-editor { width : 100 % ; height : 56 vh ; font-family : var ( - - mono ) ; font-size : var ( - - fs - ui - sm ) ; resize : vertical ; }
. docv-pre { font-family : var ( - - mono ) ; font-size : var ( - - fs - ui - sm ) ; white-space : pre-wrap ; word-break : break-word ; background : var ( - - bg - inset ) ; border : 1 px solid var ( - - border - soft ) ; border-radius : var ( - - radius ) ; padding : 12 px 14 px ; }
/* ---- 杂项 ---- */
. toast { position : fixed ; bottom : 24 px ; left : 50 % ; transform : translateX ( -50 % ) ; background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border ) ; color : var ( - - text ) ; padding : 9 px 16 px ; border-radius : var ( - - radius - full ) ; box-shadow : var ( - - shadow - lg ) ; z-index : 90 ; font-size : 13 px ; }
. toast { position : fixed ; bottom : 24 px ; left : 50 % ; transform : translateX ( -50 % ) ; background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border ) ; color : var ( - - text ) ; padding : 9 px 16 px ; border-radius : var ( - - radius - full ) ; box-shadow : var ( - - shadow - lg ) ; z-index : 90 ; font-size : var ( - - fs - ui - caption ) ; }
. conn-dot { width : 8 px ; height : 8 px ; border-radius : 50 % ; }
. conn-dot . on { background : var ( - - ok ) ; }
. conn-dot . off { background : var ( - - err ) ; }
@@ -232,49 +230,49 @@ button { font-family: inherit; font-size: inherit; color: inherit; }
:: -webkit-scrollbar-thumb : hover { background : var ( - - border - strong ) ; background-clip : content-box ; border : 3 px solid transparent ; }
:: -webkit-scrollbar-track { background : transparent ; }
/* ---- 品牌标(侧栏 / 登录页 / 头像共用的星芒渐变底) ---- */
. brand-mark { background : linear-gradient ( 135 deg , #6d8dff , #9d7bff ) ; color : #fff ; display : inline-flex ; align-items : center ; justify-content : center ; flex : none ; box-shadow : inset 0 1 px 0 rgba ( 255 , 255 , 255 , .22 ) ; }
/* ---- 品牌标(侧栏 / 登录页 / 头像共用的星芒渐变底;辅色为品牌令牌 --brand-2 ) ---- */
. brand-mark { background : linear-gradient ( 135 deg , var ( - - accent ) , var ( - - brand -2 ) ) ; color : var ( - - text - on - accent ) ; display : inline-flex ; align-items : center ; justify-content : center ; flex : none ; box-shadow : inset 0 1 px 0 rgba ( 255 , 255 , 255 , .22 ) ; }
/* ---- 左栏:任务中心(方案 A;R4 重造型) ---- */
/* ---- 左栏:任务中心(方案 A;Zai 复刻 重造型) ---- */
. tsb-brand { display : flex ; align-items : center ; gap : 9 px ; padding : 14 px 14 px 8 px ; }
. tsb-logo { width : 24 px ; height : 24 px ; border-radius : 8 px ; background : linear-gradient ( 135 deg , #6d8dff , #9d7bff ) ; color : #fff ; font-size : 12 px ; font-weight : 700 ; display : flex ; align-items : center ; justify-content : center ; flex : none ; }
. tsb-name { font-weight : 650 ; font-size : 13.5 px ; letter-spacing : -0.01 em ; }
. tsb-iconbtn { width : 26 px ; height : 26 px ; border-radius : var ( - - radius - sm ) ; background : none ; border : none ; color : var ( - - text - faint ) ; cursor : pointer ; font-size : 13 px ; display : inline-flex ; align-items : center ; justify-content : center ; position : relative ; }
. tsb-logo { width : 24 px ; height : 24 px ; border-radius : var ( - - radius ) ; background : linear-gradient ( 135 deg , var ( - - accent ) , var ( - - brand -2 ) ) ; color : var ( - - text - on - accent ) ; font-size : var ( - - fs - ui - sm ) ; font-weight : 700 ; display : flex ; align-items : center ; justify-content : center ; flex : none ; }
. tsb-name { font-weight : 650 ; font-size : var ( - - fs - ui - caption ) ; letter-spacing : -0.01 em ; }
. tsb-iconbtn { width : 26 px ; height : 26 px ; border-radius : var ( - - radius - sm ) ; background : none ; border : none ; color : var ( - - text - faint ) ; cursor : pointer ; font-size : var ( - - fs - ui - caption ) ; display : inline-flex ; align-items : center ; justify-content : center ; position : relative ; }
. tsb-iconbtn : hover { background : var ( - - bg - hover ) ; color : var ( - - text ) ; }
. tsb-iconbtn . active { color : var ( - - accent ) ; background : var ( - - accent - soft ) ; }
. tsb-actions { padding : 6 px 12 px 8 px ; display : flex ; flex-direction : column ; gap : 7 px ; }
. tsb-newtask { display : flex ; height : 36 px ; border-radius : var ( - - radius ) ; background : var ( - - accent ) ; color : var ( - - text - on - accent ) ; overflow : hidden ; box-shadow : inset 0 1 px 0 rgba ( 255 , 255 , 255 , .16 ) , 0 2 px 6 px rgba ( 8 , 9 , 12 , .28 ) ; transition : filter .12 s ; }
. tsb-newtask : hover { filter : brightness ( 1.08 ) ; }
. tsb-newtask-main { flex : 1 ; display : flex ; align-items : center ; gap : 7 px ; padding : 0 11 px ; background : none ; border : none ; color : inherit ; font-weight : 600 ; font-size : 13 px ; cursor : pointer ; min-width : 0 ; }
. tsb-newtask { display : flex ; height : 36 px ; border-radius : var ( - - radius ) ; background : var ( - - primary ) ; color : var ( - - primary - foreground ) ; overflow : hidden ; box-shadow : 0 1 px 3 px rgba ( 0 , 0 , 0 , .3 ) ; transition : background .12 s ; }
. tsb-newtask : hover { background : color-mix ( in srgb , var ( - - primary ) 86 % , var ( - - bg ) ) ; }
. tsb-newtask-main { flex : 1 ; display : flex ; align-items : center ; gap : 7 px ; padding : 0 11 px ; background : none ; border : none ; color : inherit ; font-weight : 600 ; font-size : var ( - - fs - ui - caption ) ; cursor : pointer ; min-width : 0 ; }
. tsb-newtask-main svg { flex : none ; }
. tsb-newtask-proj { font-weight : 450 ; font-size : 11.5 px ; opacity : .75 ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. tsb-newtask-caret { width : 30 px ; border : none ; border-left : 1 px solid rgba ( 255 , 255 , 255 , .18 ) ; background : none ; color : inherit ; cursor : pointer ; display : flex ; align-items : center ; justify-content : center ; }
. tsb-newtask-caret : hover { background : rgba ( 255 , 255 , 255 , .08 ) ; }
. tsb-newtask-proj { font-weight : 450 ; font-size : var ( - - fs - ui - xs ) ; opacity : .75 ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. tsb-newtask-caret { width : 30 px ; border : none ; border-left : 1 px solid color-mix ( in srgb , var ( - - primary - foreground ) 18 % , transparent ) ; background : none ; color : inherit ; cursor : pointer ; display : flex ; align-items : center ; justify-content : center ; }
. tsb-newtask-caret : hover { background : color-mix ( in srgb , var ( - - primary - foreground ) 8 % , transparent ) ; }
. tsb-search { display : flex ; align-items : center ; gap : 7 px ; height : 32 px ; border-radius : var ( - - radius ) ; border : 1 px solid var ( - - border ) ; background : var ( - - bg - raised ) ; color : var ( - - text - faint ) ; padding : 0 10 px ; transition : border-color .12 s , box-shadow .12 s ; }
. tsb-search : focus-within { border-color : var ( - - accent ) ; box-shadow : var ( - - ring ) ; }
. tsb-search svg { flex : none ; }
. tsb-search input { flex : 1 ; border : none ; background : none ; color : var ( - - text ) ; font-size : 12.5 px ; outline : none ; min-width : 0 ; }
. tsb-search input { flex : 1 ; border : none ; background : none ; color : var ( - - text ) ; font-size : var ( - - fs - ui - sm ) ; outline : none ; min-width : 0 ; }
. tsb-search input :: placeholder { color : var ( - - text - faint ) ; }
. tsb-orgrow { display : flex ; align-items : center ; gap : 6 px ; padding : 0 12 px 8 px ; }
. tsb-pills { flex : 1 ; display : flex ; background : var ( - - bg - inset ) ; border : 1 px solid var ( - - border - soft ) ; border-radius : var ( - - radius - sm ) ; padding : 2 px ; gap : 2 px ; }
. tsb-pill { flex : 1 ; height : 22 px ; border : none ; border-radius : var ( - - radius - xs ) ; background : none ; color : var ( - - text - faint ) ; font-size : 12 px ; cursor : pointer ; transition : all .12 s ; }
. tsb-pill { flex : 1 ; height : 22 px ; border : none ; border-radius : var ( - - radius - xs ) ; background : none ; color : var ( - - text - faint ) ; font-size : var ( - - fs - ui - sm ) ; cursor : pointer ; transition : all .12 s ; }
. tsb-pill : hover { color : var ( - - text - dim ) ; }
. tsb-pill . on { background : var ( - - bg - raised ) ; color : var ( - - text ) ; font-weight : 550 ; box-shadow : 0 1 px 2 px rgba ( 8 , 9 , 12 , .25 ) ; }
. tsb-pill . on { background : var ( - - bg - raised ) ; color : var ( - - text ) ; font-weight : 550 ; box-shadow : 0 1 px 2 px rgba ( 0 , 0 , 0 , .25 ) ; }
. tsb-scroll { flex : 1 ; overflow-y : auto ; padding : 0 10 px 8 px ; min-height : 0 ; }
. tsb-seclabel { font-size : 11 px ; color : var ( - - text - faint ) ; padding : 12 px 8 px 4 px ; letter-spacing : .05 em ; font-weight : 600 ; }
. tsb-empty { padding : 20 px 14 px ; color : var ( - - text - faint ) ; font-size : 12.5 px ; line-height : 1.9 ; text-align : center ; }
. tsb-seclabel { font-size : var ( - - fs - ui - xs ) ; color : var ( - - text - faint ) ; padding : 12 px 8 px 4 px ; letter-spacing : .05 em ; font-weight : 600 ; }
. tsb-empty { padding : 20 px 14 px ; color : var ( - - text - faint ) ; font-size : var ( - - fs - ui - sm ) ; line-height : 1.9 ; text-align : center ; }
. tsb-newproject { padding : 0 2 px 8 px ; }
. tsb-group { margin-bottom : 2 px ; }
. tsb-group-head { display : flex ; align-items : center ; gap : 6 px ; height : 30 px ; padding : 0 6 px 0 4 px ; border-radius : var ( - - radius - sm ) ; color : var ( - - text - dim ) ; font-weight : 550 ; font-size : 13 px ; cursor : pointer ; user-select : none ; }
. tsb-group-head { display : flex ; align-items : center ; gap : 6 px ; height : 30 px ; padding : 0 6 px 0 4 px ; border-radius : var ( - - radius - sm ) ; color : var ( - - text - dim ) ; font-weight : 550 ; font-size : var ( - - fs - ui - caption ) ; cursor : pointer ; user-select : none ; }
. tsb-group-head : hover { background : var ( - - bg - hover ) ; }
. tsb-group . closed . tsb-chev { transform : rotate ( 0 deg ) ; }
. tsb-chev { display : inline-flex ; color : var ( - - text - faint ) ; transform : rotate ( 90 deg ) ; transition : transform .12 s ; }
. tsb-group-name { flex : 1 ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. tsb-group-cnt { font-size : 11 px ; color : var ( - - text - faint ) ; font-weight : 400 ; font-variant-numeric : tabular-nums ; }
. tsb-group-cnt { font-size : var ( - - fs - ui - xs ) ; color : var ( - - text - faint ) ; font-weight : 400 ; font-variant-numeric : tabular-nums ; }
. tsb-group-add { visibility : hidden ; width : 22 px ; height : 22 px ; border : none ; border-radius : var ( - - radius - xs ) ; background : none ; color : var ( - - text - faint ) ; display : inline-flex ; align-items : center ; justify-content : center ; cursor : pointer ; }
. tsb-group-head : hover . tsb-group-add { visibility : visible ; }
. tsb-group-add : hover { background : var ( - - bg - active ) ; color : var ( - - text ) ; }
@@ -284,9 +282,9 @@ button { font-family: inherit; font-size: inherit; color: inherit; }
. tsb-task . active { background : var ( - - bg - active ) ; color : var ( - - text ) ; }
. tsb-task . active :: before { content : '' ; position : absolute ; left : -2 px ; top : 6 px ; bottom : 6 px ; width : 2.5 px ; border-radius : 2 px ; background : var ( - - accent ) ; }
. tsb-task . archived . tsb-task-t { text-decoration : line-through ; opacity : .6 ; }
. tsb-task-t { flex : 1 ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; font-size : 13 px ; }
. tsb-task-tm { font-size : 11 px ; color : var ( - - text - faint ) ; font-variant-numeric : tabular-nums ; }
. tsb-pbadge { font-size : 10.5 px ; color : var ( - - text - faint ) ; border : 1 px solid var ( - - border ) ; border-radius : var ( - - radius - xs ) ; padding : 0 5 px ; line-height : 1.5 ; white-space : nowrap ; }
. tsb-task-t { flex : 1 ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; font-size : var ( - - fs - ui - caption ) ; }
. tsb-task-tm { font-size : var ( - - fs - ui - xs ) ; color : var ( - - text - faint ) ; font-variant-numeric : tabular-nums ; }
. tsb-pbadge { font-size : var ( - - fs - ui - xs ) ; color : var ( - - text - faint ) ; border : 1 px solid var ( - - border ) ; border-radius : var ( - - radius - xs ) ; padding : 0 5 px ; line-height : 1.5 ; white-space : nowrap ; }
. tsb-row-acts { display : none ; gap : 2 px ; }
. tsb-task : hover . tsb-row-acts { display : inline-flex ; }
. tsb-task : hover . tsb-task-tm { display : none ; }
@@ -297,92 +295,92 @@ button { font-family: inherit; font-size: inherit; color: inherit; }
. tsb-wsstrip button { border : none ; background : none ; color : var ( - - text - faint ) ; cursor : pointer ; padding : 5 px ; border-radius : var ( - - radius - sm ) ; display : inline-flex ; }
. tsb-wsstrip button : hover { background : var ( - - bg - hover ) ; color : var ( - - text ) ; }
. tsb-footer { display : flex ; align-items : center ; gap : 4 px ; padding : 10 px 12 px ; border-top : 1 px solid var ( - - border - soft ) ; }
. tsb-footer { display : flex ; align-items : center ; gap : 4 px ; padding : 10 px 12 px ; border-top : 1 px solid var ( - - border - soft ) ; border-radius : 0 0 var ( - - radius - lg ) var ( - - radius - lg ) ; }
. tsb-user { flex : 1 ; display : flex ; align-items : center ; gap : 9 px ; min-width : 0 ; height : 40 px ; padding : 0 7 px ; border : none ; border-radius : var ( - - radius ) ; background : none ; cursor : pointer ; text-align : left ; transition : background .12 s ; }
. tsb-user : hover { background : var ( - - bg - hover ) ; }
. tsb-avatar { width : 27 px ; height : 27 px ; border-radius : 50 % ; background : linear-gradient ( 135 deg , #6d8dff , #9d7bff ) ; color : #fff ; font-size : 12 px ; font-weight : 600 ; display : flex ; align-items : center ; justify-content : center ; flex : none ; box-shadow : inset 0 1 px 0 rgba ( 255 , 255 , 255 , .2 ) ; }
. tsb-avatar { width : 27 px ; height : 27 px ; border-radius : 50 % ; background : linear-gradient ( 135 deg , var ( - - accent ) , var ( - - brand -2 ) ) ; color : var ( - - text - on - accent ) ; font-size : var ( - - fs - ui - sm ) ; font-weight : 600 ; display : flex ; align-items : center ; justify-content : center ; flex : none ; box-shadow : inset 0 1 px 0 rgba ( 255 , 255 , 255 , .2 ) ; }
. tsb-user-info { flex : 1 ; min-width : 0 ; display : flex ; flex-direction : column ; }
. tsb-user-name { font-size : 13 px ; font-weight : 600 ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. tsb-user-sub { font-size : 11 px ; color : var ( - - text - faint ) ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. tsb-user-name { font-size : var ( - - fs - ui - caption ) ; font-weight : 600 ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. tsb-user-sub { font-size : var ( - - fs - ui - xs ) ; color : var ( - - text - faint ) ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. tsb-user-chev { color : var ( - - text - faint ) ; display : inline-flex ; }
. tsb-menu { position : fixed ; z-index : 300 ; min-width : 216 px ; background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border - strong ) ; border-radius : var ( - - radius - lg ) ; box-shadow : var ( - - shadow - lg ) ; padding : 5 px ; display : flex ; flex-direction : column ; animation : modal-in .12 s var ( - - ease ) ; }
. tsb-mi { display : flex ; align-items : center ; gap : 9 px ; min-height : 31 px ; padding : 4 px 9 px ; border : none ; border-radius : var ( - - radius - sm ) ; background : none ; color : var ( - - text - dim ) ; font-size : 13 px ; cursor : pointer ; text-align : left ; }
. tsb-menu { position : fixed ; z-index : 300 ; min-width : 216 px ; background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border - strong ) ; border-radius : var ( - - radius ) ; box-shadow : var ( - - shadow - lg ) ; padding : 5 px ; display : flex ; flex-direction : column ; animation : mk-modal-in .12 s var ( - - ease ) ; }
. tsb-mi { display : flex ; align-items : center ; gap : 9 px ; min-height : 31 px ; padding : 4 px 9 px ; border : none ; border-radius : var ( - - radius - sm ) ; background : none ; color : var ( - - text - dim ) ; font-size : var ( - - fs - ui - caption ) ; cursor : pointer ; text-align : left ; }
. tsb-mi svg { color : var ( - - text - faint ) ; flex : none ; }
. tsb-mi : hover { background : var ( - - bg - hover ) ; color : var ( - - text ) ; }
. tsb-mi : hover svg { color : var ( - - text - dim ) ; }
. tsb-mi . danger { color : var ( - - err ) ; }
. tsb-mi . danger : hover { background : var ( - - err ) ; color : #fff ; }
. tsb-mi . danger : hover svg { color : #fff ; }
. tsb-mi kbd { margin-left : auto ; font-size : 10.5 px ; font-family : var ( - - mono ) ; color : var ( - - text - faint ) ; }
. tsb-mi . danger : hover { background : var ( - - err ) ; color : var ( - - text - on - accent ) ; }
. tsb-mi . danger : hover svg { color : var ( - - text - on - accent ) ; }
. tsb-mi kbd { margin-left : auto ; font-size : var ( - - fs - ui - xs ) ; font-family : var ( - - mono ) ; color : var ( - - text - faint ) ; }
. tsb-menu-div { height : 1 px ; background : var ( - - border - soft ) ; margin : 5 px 4 px ; }
. tsb-acc-head { display : flex ; gap : 10 px ; align-items : center ; padding : 8 px 9 px 6 px ; }
. tsb-acc-name { font-size : 13.5 px ; font-weight : 600 ; }
. tsb-acc-mail { font-size : 11.5 px ; color : var ( - - text - faint ) ; }
. tsb-acc-name { font-size : var ( - - fs - ui - caption ) ; font-weight : 600 ; }
. tsb-acc-mail { font-size : var ( - - fs - ui - xs ) ; color : var ( - - text - faint ) ; }
/* ---- 登录页与改密门(R4 重造型:宽屏右侧品牌面板 ) ---- */
. lg-wrap { position : fixed ; inset : 0 ; display : flex ; align-items : stretch ; background : var ( - - bg ) ; z-index : 500 ; }
. lg-panel { flex : none ; width : 46 % ; max-width : 620 px ; position : relative ; overflow : hidden ; display : flex ; flex-direction : column ; justify-content : center ; padding : 64 px ; color : #dfe4f2 ; background : linear-gradient ( 160 deg , #171e38 0 % , #1d2145 55 % , #251d4d 100 % ) ; }
. lg-panel :: before { content : '' ; position : absolute ; width : 560 px ; height : 560 px ; border-radius : 50 % ; background : radial-gradient ( closest - side , rgba ( 109 , 141 , 255 , .22 ) , transparent 70 % ) ; top : -140 px ; right : -160 px ; }
. lg-panel :: after { content : '' ; position : absolute ; width : 440 px ; height : 440 px ; border-radius : 50 % ; background : radial-gradient ( closest - side , rgba ( 157 , 123 , 255 , .18 ) , transparent 70 % ) ; bottom : -150 px ; left : -120 px ; }
/* ---- 登录页与改密门(Zai 复刻:近单色深底 + 深海军品牌面;品牌面板固定深底浅字 ) ---- */
. lg-wrap { position : fixed ; inset : 0 ; display : flex ; align-items : stretch ; background : var ( - - bg - inset ) ; z-index : 500 ; }
. lg-panel { flex : none ; width : 46 % ; max-width : 620 px ; position : relative ; overflow : hidden ; display : flex ; flex-direction : column ; justify-content : center ; padding : 64 px ; color : #dfe4f2 ; background : linear-gradient ( 160 deg , #0e1116 0 % , #101826 55 % , #0b1f38 100 % ) ; }
. lg-panel :: before { content : '' ; position : absolute ; width : 560 px ; height : 560 px ; border-radius : 50 % ; background : radial-gradient ( closest - side , rgba ( 64 , 153 , 255 , .16 ) , transparent 70 % ) ; top : -140 px ; right : -160 px ; }
. lg-panel :: after { content : '' ; position : absolute ; width : 440 px ; height : 440 px ; border-radius : 50 % ; background : radial-gradient ( closest - side , rgba ( 123 , 92 , 229 , .12 ) , transparent 70 % ) ; bottom : -150 px ; left : -120 px ; }
. lg-panel h2 { font-size : 26 px ; font-weight : 700 ; letter-spacing : -0.02 em ; line-height : 1.35 ; margin : 0 0 12 px ; position : relative ; }
. lg-panel p { font-size : 14 px ; opacity : .72 ; line-height : 1.75 ; margin : 0 ; position : relative ; }
. lg-panel p { font-size : var ( - - fs - ui - base ) ; opacity : .72 ; line-height : 1.75 ; margin : 0 ; position : relative ; }
. lg-panel ul { margin : 28 px 0 0 ; list-style : none ; display : flex ; flex-direction : column ; gap : 13 px ; position : relative ; }
. lg-panel li { display : flex ; gap : 10 px ; align-items : flex-start ; font-size : 13.5 px ; opacity : .88 ; }
. lg-panel li svg { margin-top : 2 px ; color : #8fa8ff ; flex : none ; }
. lg-panel . lg-foot { position : absolute ; bottom : 28 px ; left : 64 px ; right : 64 px ; display : flex ; justify-content : space-between ; font-size : 11.5 px ; opacity : .45 ; }
. lg-panel li { display : flex ; gap : 10 px ; align-items : flex-start ; font-size : var ( - - fs - ui - caption ) ; opacity : .88 ; }
. lg-panel li svg { margin-top : 2 px ; color : var ( - - accent - strong ) ; flex : none ; }
. lg-panel . lg-foot { position : absolute ; bottom : 28 px ; left : 64 px ; right : 64 px ; display : flex ; justify-content : space-between ; font-size : var ( - - fs - ui - xs ) ; opacity : .45 ; }
@ media ( max-width : 960px ) { . lg-panel { display : none ; } }
. lg-formside { flex : 1 ; display : flex ; align-items : center ; justify-content : center ; padding : 24 px ; min-width : 0 ; }
. lg-card { width : 392 px ; max-width : 100 % ; }
. lg-brand { display : flex ; align-items : center ; gap : 10 px ; font-weight : 700 ; font-size : 15.5 px ; letter-spacing : -0.01 em ; margin-bottom : 26 px ; }
. lg-title { margin : 0 0 4 px ; font-size : 22 px ; font-weight : 700 ; letter-spacing : -0.02 em ; }
. lg-sub { margin : 0 0 18 px ; font-size : 12.5 px ; color : var ( - - text - faint ) ; line-height : 1.6 ; }
. lg-brand { display : flex ; align-items : center ; gap : 10 px ; font-weight : 700 ; font-size : var ( - - fs - ui - base ) ; letter-spacing : -0.01 em ; margin-bottom : 26 px ; }
. lg-title { margin : 0 0 4 px ; font-size : var ( - - fs - ui - xl ) ; font-weight : 700 ; letter-spacing : -0.02 em ; }
. lg-sub { margin : 0 0 18 px ; font-size : var ( - - fs - ui - sm ) ; color : var ( - - text - faint ) ; line-height : 1.6 ; }
. lg-tabs { display : flex ; background : var ( - - bg - inset ) ; border : 1 px solid var ( - - border - soft ) ; border-radius : var ( - - radius ) ; padding : 3 px ; gap : 3 px ; margin-bottom : 16 px ; }
. lg-tab { flex : 1 ; height : 30 px ; border : none ; border-radius : var ( - - radius - xs ) ; background : none ; color : var ( - - text - faint ) ; font-size : 12.5 px ; cursor : pointer ; transition : all .12 s ; }
. lg-tab { flex : 1 ; height : 30 px ; border : none ; border-radius : var ( - - radius - xs ) ; background : none ; color : var ( - - text - faint ) ; font-size : var ( - - fs - ui - sm ) ; cursor : pointer ; transition : all .12 s ; }
. lg-tab : hover { color : var ( - - text - dim ) ; }
. lg-tab . on { background : var ( - - bg - raised ) ; color : var ( - - text ) ; font-weight : 550 ; box-shadow : 0 1 px 2 px rgba ( 8 , 9 , 12 , .25 ) ; }
. lg-label { display : block ; font-size : 12 px ; font-weight : 550 ; color : var ( - - text - dim ) ; margin : 12 px 0 6 px ; }
. lg-input { width : 100 % ; height : 38 px ; border-radius : var ( - - radius ) ; border : 1 px solid var ( - - border ) ; background : var ( - - bg - raised ) ; color : var ( - - text ) ; padding : 0 12 px ; font-size : 13.5 px ; transition : border-color .12 s , box-shadow .12 s ; }
. lg-tab . on { background : var ( - - bg - raised ) ; color : var ( - - text ) ; font-weight : 550 ; box-shadow : 0 1 px 2 px rgba ( 0 , 0 , 0 , .25 ) ; }
. lg-label { display : block ; font-size : var ( - - fs - ui - sm ) ; font-weight : 550 ; color : var ( - - text - dim ) ; margin : 12 px 0 6 px ; }
. lg-input { width : 100 % ; height : 38 px ; border-radius : var ( - - radius ) ; border : 1 px solid var ( - - border ) ; background : var ( - - bg - raised ) ; color : var ( - - text ) ; padding : 0 12 px ; font-size : var ( - - fs - ui - caption ) ; transition : border-color .12 s , box-shadow .12 s ; }
. lg-input : focus { border-color : var ( - - accent ) ; box-shadow : var ( - - ring ) ; outline : none ; }
. lg-mono { font-family : var ( - - mono ) ; font-size : 12.5 px ; }
. lg-err { margin-top : 12 px ; font-size : 12.5 px ; color : var ( - - err ) ; background : var ( - - err - soft ) ; border : 1 px solid color-mix ( in srgb , var ( - - err ) 35 % , transparent ) ; border-radius : var ( - - radius ) ; padding : 8 px 11 px ; display : flex ; gap : 7 px ; align-items : flex-start ; }
. lg-mono { font-family : var ( - - mono ) ; font-size : var ( - - fs - ui - sm ) ; }
. lg-err { margin-top : 12 px ; font-size : var ( - - fs - ui - sm ) ; color : var ( - - err ) ; background : var ( - - err - soft ) ; border : 1 px solid color-mix ( in srgb , var ( - - err ) 35 % , transparent ) ; border-radius : var ( - - radius ) ; padding : 8 px 11 px ; display : flex ; gap : 7 px ; align-items : flex-start ; }
. lg-err svg { flex : none ; margin-top : 1 px ; }
. lg-submit {
width : 100 % ; height : 38 px ; margin-top : 16 px ; border : none ; border-radius : var ( - - radius ) ;
background : var ( - - accent ) ; color : var ( - - text - on - accent ) ; font-weight : 600 ; font-size : 13.5 px ; cursor : pointer ;
box-shadow : inset 0 1 px 0 rgba ( 255 , 255 , 255 , .16 ) , 0 2 px 8 px var ( - - accent - glow ) ;
transition : filter .12 s , transform .12 s ;
background : var ( - - primary ) ; color : var ( - - primary - foreground ) ; font-weight : 600 ; font-size : var ( - - fs - ui - caption ) ; cursor : pointer ;
box-shadow : 0 2 px 8 px rgba ( 0 , 0 , 0 , .3 ) ;
transition : background .12 s , transform .12 s ;
}
. lg-submit : disabled { opacity : .45 ; cursor : default ; box-shadow : none ; }
. lg-submit : not ( : disabled ) : hover { filter : brightness ( 1.09 ) ; }
. lg-submit : not ( : disabled ) : hover { background : color-mix ( in srgb , var ( - - primary ) 86 % , var ( - - bg ) ) ; }
. lg-submit : not ( : disabled ) : active { transform : translateY ( 1 px ) ; }
. lg-cancel { width : 100 % ; margin-top : 8 px ; border : none ; background : none ; color : var ( - - text - faint ) ; font-size : 12.5 px ; cursor : pointer ; }
. lg-cancel { width : 100 % ; margin-top : 8 px ; border : none ; background : none ; color : var ( - - text - faint ) ; font-size : var ( - - fs - ui - sm ) ; cursor : pointer ; }
. lg-cancel : hover { color : var ( - - text - dim ) ; text-decoration : underline ; }
. lg-hint { margin : 14 px 0 0 ; font-size : 11.5 px ; color : var ( - - text - faint ) ; line-height : 1.7 ; }
. lg-hint code { font-family : var ( - - mono ) ; font-size : 10.5 px ; background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border ) ; border-radius : var ( - - radius - xs ) ; padding : 1 px 5 px ; }
. lg-hint { margin : 14 px 0 0 ; font-size : var ( - - fs - ui - xs ) ; color : var ( - - text - faint ) ; line-height : 1.7 ; }
. lg-hint code { font-family : var ( - - mono ) ; font-size : var ( - - fs - ui - xs ) ; background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border ) ; border-radius : var ( - - radius - xs ) ; padding : 1 px 5 px ; }
/* ---- 用户管理 / 改密弹层 ---- */
. ad-body { padding : 16 px 20 px 20 px ; display : flex ; flex-direction : column ; gap : 12 px ; max-height : 70 vh ; overflow-y : auto ; }
. ad-create { border : 1 px solid var ( - - border ) ; border-radius : var ( - - radius - lg ) ; padding : 14 px ; display : flex ; flex-direction : column ; gap : 8 px ; background : var ( - - bg - panel ) ; }
. ad-row { display : flex ; gap : 8 px ; align-items : center ; }
. ad-row . lg-input { flex : 1 ; min-width : 0 ; height : 34 px ; }
. ad-check { display : flex ; align-items : center ; gap : 5 px ; font-size : 12.5 px ; color : var ( - - text - dim ) ; white-space : nowrap ; }
. ad-create-btn { width : auto ; padding : 0 14 px ; margin-top : 0 ; height : 34 px ; flex : none ; box-shadow : inset 0 1 px 0 rgba ( 255 , 255 , 255 , .14 ) ; }
. ad-mini { border : 1 px solid var ( - - border ) ; background : var ( - - bg - raised ) ; color : var ( - - text - dim ) ; border-radius : var ( - - radius - sm ) ; padding : 4 px 9 px ; font-size : 12 px ; cursor : pointer ; white-space : nowrap ; display : inline-flex ; align-items : center ; gap : 4 px ; }
. ad-check { display : flex ; align-items : center ; gap : 5 px ; font-size : var ( - - fs - ui - sm ) ; color : var ( - - text - dim ) ; white-space : nowrap ; }
. ad-create-btn { width : auto ; padding : 0 14 px ; margin-top : 0 ; height : 34 px ; flex : none ; }
. ad-mini { border : 1 px solid var ( - - border ) ; background : var ( - - bg - raised ) ; color : var ( - - text - dim ) ; border-radius : var ( - - radius - sm ) ; padding : 4 px 9 px ; font-size : var ( - - fs - ui - sm ) ; cursor : pointer ; white-space : nowrap ; display : inline-flex ; align-items : center ; gap : 4 px ; }
. ad-mini : hover { color : var ( - - text ) ; border-color : var ( - - accent ) ; }
. ad-hint { margin : 0 ; font-size : 11.5 px ; color : var ( - - text - faint ) ; }
. ad-notice { font-size : 12.5 px ; color : var ( - - ok ) ; background : var ( - - ok - soft ) ; border : 1 px solid var ( - - ok - border ) ; border-radius : var ( - - radius ) ; padding : 8 px 11 px ; display : flex ; gap : 7 px ; align-items : flex-start ; }
. ad-hint { margin : 0 ; font-size : var ( - - fs - ui - xs ) ; color : var ( - - text - faint ) ; }
. ad-notice { font-size : var ( - - fs - ui - sm ) ; color : var ( - - ok ) ; background : var ( - - ok - soft ) ; border : 1 px solid var ( - - ok - border ) ; border-radius : var ( - - radius ) ; padding : 8 px 11 px ; display : flex ; gap : 7 px ; align-items : flex-start ; }
. ad-notice svg { flex : none ; margin-top : 1 px ; }
. ad-table { width : 100 % ; border-collapse : collapse ; font-size : 12.5 px ; }
. ad-table th { text-align : left ; font-weight : 600 ; color : var ( - - text - faint ) ; font-size : 11 px ; text-transform : uppercase ; letter-spacing : .06 em ; padding : 8 px ; border-bottom : 1 px solid var ( - - border ) ; }
. ad-table { width : 100 % ; border-collapse : collapse ; font-size : var ( - - fs - ui - sm ) ; }
. ad-table th { text-align : left ; font-weight : 600 ; color : var ( - - text - faint ) ; font-size : var ( - - fs - ui - xs ) ; text-transform : uppercase ; letter-spacing : .06 em ; padding : 8 px ; border-bottom : 1 px solid var ( - - border ) ; }
. ad-table td { padding : 9 px 8 px ; border-bottom : 1 px solid var ( - - border - soft ) ; }
. ad-table tr : last-child td { border-bottom : none ; }
. ad-mono { font-family : var ( - - mono ) ; font-size : 12 px ; }
. ad-mono { font-family : var ( - - mono ) ; font-size : var ( - - fs - ui - sm ) ; }
. ad-dim { color : var ( - - text - faint ) ; }
. ad-chip { font-size : 10 px ; border-radius : var ( - - radius - xs ) ; padding : 2 px 7 px ; font-weight : 700 ; letter-spacing : .5 px ; background : var ( - - bg - hover ) ; color : var ( - - text - faint ) ; }
. ad-chip { font-size : var ( - - fs - ui - xs ) ; border-radius : var ( - - radius - xs ) ; padding : 2 px 7 px ; font-weight : 700 ; letter-spacing : .5 px ; background : var ( - - bg - hover ) ; color : var ( - - text - faint ) ; }
. ad-chip-admin { background : var ( - - accent - soft ) ; color : var ( - - accent ) ; }
. ad-chip-warn { background : var ( - - warn - soft ) ; color : var ( - - warn ) ; }
. ad-reset { display : flex ; gap : 8 px ; align-items : center ; flex-wrap : wrap ; border : 1 px solid color-mix ( in srgb , var ( - - warn ) 40 % , transparent ) ; background : var ( - - warn - soft ) ; border-radius : var ( - - radius - lg ) ; padding : 12 px ; font-size : 12.5 px ; }
. ad-reset { display : flex ; gap : 8 px ; align-items : center ; flex-wrap : wrap ; border : 1 px solid color-mix ( in srgb , var ( - - warn ) 40 % , transparent ) ; background : var ( - - warn - soft ) ; border-radius : var ( - - radius - lg ) ; padding : 12 px ; font-size : var ( - - fs - ui - sm ) ; }
. ad-reset . lg-input { flex : 1 ; min-width : 160 px ; height : 32 px ; }
. ad-changepw { display : flex ; flex-direction : column ; gap : 2 px ; max-width : 340 px ; }
@@ -390,7 +388,7 @@ button { font-family: inherit; font-size: inherit; color: inherit; }
. icon-only { display : flex ; flex-direction : column ; align-items : center ; gap : 6 px ; padding-top : 12 px ; }
. icon-only button { background : none ; border : none ; color : var ( - - text - faint ) ; cursor : pointer ; padding : 0 ; width : 34 px ; height : 34 px ; border-radius : var ( - - radius ) ; display : inline-flex ; align-items : center ; justify-content : center ; position : relative ; }
. icon-only button : hover { background : var ( - - bg - hover ) ; color : var ( - - text ) ; }
. rail-badge { position : absolute ; top : 3 px ; right : 3 px ; min-width : 14 px ; height : 14 px ; border-radius : 7 px ; background : var ( - - warn ) ; color : #fff ; font-size : 9.5 px ; font-weight : 700 ; display : flex ; align-items : center ; justify-content : center ; padding : 0 4 px ; }
. rail-badge { position : absolute ; top : 3 px ; right : 3 px ; min-width : 14 px ; height : 14 px ; border-radius : 7 px ; background : var ( - - warn ) ; color : var ( - - text - on - accent ) ; font-size : var ( - - fs - ui - xs ) ; font-weight : 700 ; display : flex ; align-items : center ; justify-content : center ; padding : 0 4 px ; }
/* ---- UI 能力平台消费(消息头像列 / 设置外壳 / 管理弹层头像) ---- */
. role-mark { width : 20 px ; height : 20 px ; border-radius : 6 px ; display : inline-flex ; align-items : center ; justify-content : center ; color : var ( - - text - dim ) ; background : var ( - - bg - raised ) ; border : 1 px solid var ( - - border ) ; }
@@ -400,7 +398,7 @@ button { font-family: inherit; font-size: inherit; color: inherit; }
/* ---- 右栏轻预览(裁定 D4:右栏 + 弹窗双落位)---- */
. rail-preview-head { display : flex ; align-items : center ; gap : 6 px ; padding : 0 2 px 8 px ; border-bottom : 1 px solid var ( - - border - soft ) ; margin-bottom : 8 px ; }
. rail-preview-head . rp-name { font-size : 13 px ; font-weight : 600 ; overflow : hidden ; text-overflow : ellipsis ; white-space : nowrap ; max-width : 55 % ; }
. rail-preview-head . rp-name { font-size : var ( - - fs - ui - caption ) ; font-weight : 600 ; overflow : hidden ; text-overflow : ellipsis ; white-space : nowrap ; max-width : 55 % ; }
. tab-body [ data-rail-preview ] { display : flex ; flex-direction : column ; }
. tab-body [ data-rail-preview ] . ui-fp { flex : 1 ; }
. artifact-chip . ac-act { border : none ; background : none ; }