style: 全局 UI 主题皮肤重构与样式模块化

引入 Element Plus 主题定制和主题皮肤 composable,将全局
样式拆分为组件级独立 CSS 文件(侧边栏、顶栏、工作台等),
统一色彩变量和间距规范,重构所有视图和组件样式以适配新
主题系统,优化图表和知识图谱组件视觉表现,提取审计和差
旅报销相关子组件。
This commit is contained in:
caoxiaozhu
2026-05-27 09:17:57 +08:00
parent df49103f23
commit 2dcc72102d
112 changed files with 10983 additions and 8996 deletions

View File

@@ -41,7 +41,7 @@
.application-dialog-eyebrow {
display: block;
margin-bottom: 4px;
color: #059669;
color: var(--theme-primary-active);
font-size: 12px;
font-weight: 800;
}
@@ -106,8 +106,8 @@
}
.application-input-panel textarea:focus {
border-color: #10b981;
box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.12);
border-color: var(--theme-primary);
box-shadow: 0 0 0 3px var(--theme-focus-ring);
}
.application-example-row {
@@ -144,7 +144,7 @@
.primary-parse-btn,
.confirm-btn {
border: 0;
background: #059669;
background: var(--theme-gradient-primary);
color: #fff;
}
@@ -181,7 +181,7 @@
}
.ontology-panel-head strong {
color: #059669;
color: var(--theme-primary-active);
}
.ontology-empty-state {
@@ -215,8 +215,8 @@
.ontology-chip {
border-radius: 8px;
background: #eefbf5;
color: #047857;
background: var(--theme-primary-soft);
color: var(--theme-primary-active);
padding: 6px 10px;
font-size: 12px;
font-weight: 800;
@@ -269,7 +269,7 @@
.application-policy-strip i {
margin-top: 2px;
color: #059669;
color: var(--theme-primary);
font-size: 20px;
}

View File

@@ -0,0 +1,705 @@
.workbench {
min-width: 0;
display: grid;
gap: 16px;
padding-bottom: 10px;
}
.assistant-hero {
position: relative;
overflow: hidden;
display: grid;
grid-template-columns: 228px minmax(0, 1fr);
gap: 18px;
padding: 20px 24px 20px 18px;
border: 1px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.18);
background:
radial-gradient(circle at top left, rgba(var(--theme-primary-rgb, 58, 124, 165), 0.12), transparent 34%),
radial-gradient(circle at right 20%, rgba(59, 130, 246, 0.07), transparent 28%),
linear-gradient(135deg, #f7fbff 0%, #ffffff 48%, #f5fbff 100%);
}
.assistant-hero::before,
.assistant-hero::after {
content: "";
position: absolute;
border-radius: 999px;
background: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.06);
pointer-events: none;
}
.assistant-hero::before {
right: -48px;
bottom: -58px;
width: 220px;
height: 220px;
}
.assistant-hero::after {
right: 92px;
top: -44px;
width: 140px;
height: 140px;
}
.assistant-visual {
position: relative;
min-height: 196px;
display: flex;
align-items: flex-end;
justify-content: flex-start;
padding: 0 0 10px 8px;
}
.assistant-visual::before {
content: "";
position: absolute;
inset: auto auto -78px -58px;
width: 264px;
height: 228px;
border-radius: 50%;
background: radial-gradient(circle at 48% 38%, rgba(255, 255, 255, 0.92) 0%, rgba(224, 242, 254, 0.84) 58%, rgba(224, 242, 254, 0) 100%);
pointer-events: none;
}
.assistant-visual::after {
content: "";
position: absolute;
left: 52px;
bottom: 18px;
width: 132px;
height: 18px;
border-radius: 999px;
background: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.14);
filter: blur(12px);
pointer-events: none;
}
.assistant-glow {
position: absolute;
left: 24px;
bottom: 22px;
width: 176px;
height: 176px;
border-radius: 50%;
background: radial-gradient(circle, rgba(255, 255, 255, 0.98) 0%, rgba(224, 242, 254, 0.9) 58%, rgba(224, 242, 254, 0) 100%);
box-shadow: 0 24px 48px rgba(var(--theme-primary-rgb, 58, 124, 165), 0.12);
pointer-events: none;
}
.assistant-image {
position: relative;
z-index: 1;
width: 184px;
max-width: 100%;
height: auto;
object-fit: contain;
object-position: left bottom;
filter: drop-shadow(0 22px 28px rgba(15, 23, 42, 0.16));
}
.assistant-copy {
position: relative;
z-index: 1;
display: grid;
gap: 10px;
align-content: center;
}
.assistant-copy h3 {
color: #0f172a;
font-size: 26px;
line-height: 1.25;
font-weight: 800;
}
.assistant-copy p {
max-width: 760px;
color: #5b6b83;
font-size: 14px;
line-height: 1.6;
}
.assistant-input {
display: flex;
align-items: center;
min-height: 48px;
padding: 4px 14px;
border: 1px solid rgba(148, 163, 184, 0.28);
border-radius: 4px;
background: rgba(255, 255, 255, 0.92);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.7);
}
.assistant-file-input {
display: none;
}
.assistant-input textarea {
min-width: 0;
flex: 1;
height: 22px;
min-height: 22px;
max-height: 22px;
resize: none;
border: 0;
padding: 1px 0;
background: transparent;
color: #0f172a;
font-size: 15px;
line-height: 22px;
overflow: hidden;
}
.assistant-input textarea::placeholder {
color: #94a3b8;
}
.assistant-input textarea:focus {
outline: none;
}
.hero-action,
.secondary-action,
.ghost-action,
.row-action,
.link-action,
.row-link {
border: 0;
background: transparent;
}
.hero-action {
height: 40px;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 0 16px;
border-radius: 4px;
background: linear-gradient(135deg, var(--theme-primary), var(--theme-primary-active));
color: #fff;
font-size: 14px;
font-weight: 800;
white-space: nowrap;
box-shadow: 0 10px 22px rgba(var(--theme-primary-rgb, 58, 124, 165), 0.18);
}
.hero-action .mdi,
.secondary-action .mdi,
.ghost-action .mdi {
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 14px;
line-height: 1;
}
.hero-action span,
.secondary-action span,
.ghost-action span {
display: inline-flex;
align-items: center;
line-height: 1;
}
.assistant-tools {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
}
.assistant-file-strip {
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
}
.assistant-file-note,
.assistant-file-chip {
display: inline-flex;
align-items: center;
min-height: 30px;
padding: 0 12px;
border-radius: 999px;
font-size: 12px;
font-weight: 700;
}
.assistant-file-note {
background: var(--theme-primary-soft);
color: var(--theme-primary-active);
}
.assistant-file-chip {
max-width: 220px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
border: 1px solid rgba(148, 163, 184, 0.24);
background: rgba(255, 255, 255, 0.9);
color: #475569;
}
.assistant-file-clear {
border: 0;
background: transparent;
color: #64748b;
font-size: 12px;
font-weight: 700;
cursor: pointer;
}
.ghost-action {
height: 40px;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 0 16px;
border: 1px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.22);
border-radius: 4px;
background: linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(248, 251, 255, 0.92));
color: var(--theme-primary-active);
font-size: 14px;
font-weight: 700;
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.9),
0 6px 14px rgba(var(--theme-primary-rgb, 58, 124, 165), 0.08);
}
.ghost-action .mdi {
color: var(--theme-primary);
}
.secondary-action {
height: 40px;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 0 16px;
border: 1px solid rgba(59, 130, 246, 0.18);
border-radius: 4px;
background: linear-gradient(180deg, rgba(244, 249, 255, 0.96), rgba(234, 244, 255, 0.9));
color: #1d4ed8;
font-size: 14px;
font-weight: 700;
white-space: nowrap;
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.92),
0 6px 14px rgba(37, 99, 235, 0.08);
}
.secondary-action .mdi {
color: #2563eb;
}
.hero-action:disabled,
.secondary-action:disabled,
.ghost-action:disabled {
cursor: not-allowed;
opacity: 0.68;
box-shadow: none;
}
.workbench-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 20px;
}
.list-panel,
.policy-panel {
padding: 20px 22px;
}
.section-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 16px;
}
.section-head h3 {
color: #0f172a;
font-size: 17px;
font-weight: 700;
}
.title-with-badge {
display: inline-flex;
align-items: center;
gap: 8px;
min-width: 0;
}
.alert-badge {
min-width: 22px;
height: 22px;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0 7px;
border-radius: 999px;
background: #ef4444;
color: #fff;
font-size: 12px;
font-weight: 800;
line-height: 1;
box-shadow: 0 6px 14px rgba(239, 68, 68, 0.22);
}
.link-action {
display: inline-flex;
align-items: center;
gap: 4px;
color: var(--theme-primary-active);
font-size: 14px;
font-weight: 700;
}
.list-body {
display: grid;
}
.todo-row,
.progress-row {
display: grid;
grid-template-columns: 56px minmax(0, 1fr) auto;
gap: 14px;
align-items: center;
padding: 14px 0;
border-top: 1px solid #edf2f7;
}
.todo-row:first-child,
.progress-row:first-child {
padding-top: 4px;
border-top: 0;
}
.todo-copy {
min-width: 0;
}
.todo-copy strong {
display: block;
color: #0f172a;
font-size: 15px;
font-weight: 700;
line-height: 1.4;
}
.todo-copy p {
margin-top: 4px;
color: #6b7280;
font-size: 14px;
line-height: 1.5;
}
.todo-advice {
display: flex;
align-items: flex-start;
gap: 8px;
flex-wrap: wrap;
}
.todo-advice-label {
display: inline-flex;
align-items: center;
min-height: 22px;
padding: 0 8px;
border-radius: 999px;
background: var(--theme-primary-soft);
color: var(--theme-primary-active);
font-size: 12px;
font-weight: 800;
white-space: nowrap;
}
.todo-advice-text {
color: #64748b;
}
.row-action {
height: 38px;
padding: 0 16px;
border: 1px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.36);
border-radius: 4px;
color: var(--theme-primary-active);
font-size: 14px;
font-weight: 700;
white-space: nowrap;
}
.progress-row {
grid-template-columns: 56px minmax(0, 1fr) minmax(84px, auto) minmax(104px, auto);
gap: 14px 16px;
}
.progress-copy strong {
margin-bottom: 2px;
}
.progress-amount {
color: #0f172a;
font-size: 20px;
font-weight: 800;
line-height: 1;
text-align: right;
font-variant-numeric: tabular-nums;
white-space: nowrap;
}
.progress-status {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 104px;
min-height: 34px;
padding: 6px 14px;
border-radius: 999px;
font-size: 13px;
font-weight: 800;
white-space: nowrap;
justify-self: end;
}
.progress-status.success,
.policy-status.success {
background: var(--success-soft);
color: var(--success);
}
.progress-status.info,
.policy-status.info {
background: #eff6ff;
color: #3b82f6;
}
.progress-status.mint {
background: var(--success-soft);
color: var(--success);
}
.policy-table {
border: 1px solid #e7edf5;
border-radius: 4px;
overflow: hidden;
}
.policy-row {
display: grid;
grid-template-columns: 2.2fr 2.4fr 1fr;
gap: 16px;
align-items: center;
min-height: 56px;
padding: 0 18px;
border-top: 1px solid #edf2f7;
}
.policy-head {
min-height: 44px;
background: #f8fbff;
color: #64748b;
font-size: 12px;
font-weight: 800;
border-top: 0;
}
.policy-row strong,
.policy-row span {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.policy-row strong {
color: #0f172a;
font-size: 14px;
font-weight: 700;
}
.policy-row span {
color: #64748b;
font-size: 14px;
}
.policy-title-cell,
.policy-summary-cell {
justify-self: stretch;
text-align: left;
}
.policy-date-cell {
justify-self: center;
text-align: center;
}
@media (max-width: 1320px) {
.assistant-copy h3 {
font-size: 24px;
}
.policy-row {
grid-template-columns: 1.8fr 1.8fr 1fr;
}
}
@media (max-width: 1440px) {
.workbench {
gap: 14px;
}
.assistant-hero {
gap: 16px;
padding: 18px 20px 18px 16px;
}
.assistant-copy h3 {
font-size: 24px;
}
.assistant-visual {
min-height: 184px;
}
.assistant-image {
width: 172px;
}
.workbench-grid {
gap: 16px;
}
.list-panel,
.policy-panel {
padding: 18px 20px;
}
.policy-row {
min-height: 52px;
padding: 0 16px;
}
}
@media (max-width: 1080px) {
.assistant-hero {
grid-template-columns: 1fr;
gap: 8px;
}
.assistant-visual {
min-height: 188px;
justify-content: center;
padding: 0 0 8px;
}
.assistant-visual::before,
.assistant-visual::after,
.assistant-glow {
left: 50%;
transform: translateX(-50%);
}
.assistant-visual::before {
inset: auto auto -82px 50%;
}
.assistant-image {
width: 176px;
}
.workbench-grid {
grid-template-columns: 1fr;
}
}
@media (max-width: 860px) {
.assistant-hero,
.list-panel,
.policy-panel {
padding: 18px;
}
.assistant-input {
flex-direction: column;
align-items: stretch;
padding: 14px;
}
.assistant-visual {
min-height: 160px;
}
.assistant-glow {
width: 148px;
height: 148px;
}
.assistant-image {
width: 150px;
}
.assistant-input textarea {
height: 40px;
min-height: 40px;
max-height: 40px;
line-height: 1.5;
}
.hero-action,
.secondary-action,
.ghost-action,
.row-action {
width: 100%;
justify-content: center;
}
.assistant-file-chip {
max-width: 100%;
}
.todo-row,
.progress-row {
grid-template-columns: 56px minmax(0, 1fr);
}
.progress-amount {
grid-column: 2;
text-align: left;
font-size: 18px;
}
.row-action,
.progress-status {
grid-column: 2;
justify-self: start;
}
.policy-table {
border: 0;
border-radius: 0;
}
.policy-head {
display: none;
}
.policy-row {
grid-template-columns: 1fr;
gap: 8px;
padding: 16px 0;
border-top: 1px solid #edf2f7;
}
.policy-row strong,
.policy-row span {
white-space: normal;
}
}

View File

@@ -174,7 +174,7 @@
.risk-sim-message-row.user .risk-sim-bubble {
grid-column: 1;
justify-self: end;
background: #0f766e;
background: var(--theme-primary);
color: #fff;
}
@@ -191,7 +191,7 @@
border: 1px solid #dbe5ef;
border-radius: 12px;
background: #fff;
color: #0f766e;
color: var(--theme-primary-active);
}
.risk-sim-message-row.user .risk-sim-avatar {
@@ -483,8 +483,8 @@
.risk-sim-recognized-fields em {
padding: 3px 7px;
border-radius: 999px;
background: #ecfdf5;
color: #047857;
background: var(--success-soft);
color: var(--success-hover);
font-size: 11px;
font-style: normal;
font-weight: 850;
@@ -574,9 +574,9 @@
}
.risk-sim-file-chip.recognized {
border-color: #bbf7d0;
background: #ecfdf5;
color: #047857;
border-color: var(--success-line);
background: var(--success-soft);
color: var(--success-hover);
}
.risk-sim-file-chip.failed {
@@ -611,8 +611,8 @@
}
.risk-sim-send-btn {
border-color: #0f766e;
background: #0f766e;
border-color: var(--theme-primary);
background: var(--theme-primary);
color: #fff;
}
@@ -634,8 +634,8 @@
}
.risk-sim-composer-shell:focus-within {
border-color: rgba(15, 118, 110, 0.58);
box-shadow: 0 0 0 3px rgba(15, 118, 110, 0.1);
border-color: rgba(var(--theme-primary-rgb), 0.58);
box-shadow: 0 0 0 3px var(--theme-focus-ring);
}
.risk-sim-composer-shell textarea {
@@ -699,8 +699,8 @@
}
.risk-sim-step.done i {
background: #ecfdf5;
color: #047857;
background: var(--success-soft);
color: var(--success-hover);
}
.risk-sim-step.running i {
@@ -823,8 +823,8 @@
}
.risk-sim-primary-btn {
border: 1px solid #0f766e;
background: #0f766e;
border: 1px solid var(--theme-primary);
background: var(--theme-primary);
color: #fff;
}

View File

@@ -0,0 +1,533 @@
.rail {
--rail-motion-duration: 220ms;
--rail-motion-ease: cubic-bezier(0.4, 0, 0.2, 1);
--rail-fade-duration: 110ms;
--rail-label-delay: 55ms;
position: sticky;
top: 0;
width: 100%;
height: var(--desktop-stage-height, 100dvh);
min-height: var(--desktop-stage-height, 100dvh);
min-width: 0;
display: flex;
flex-direction: column;
overflow: visible;
background: linear-gradient(180deg, rgba(255, 255, 255, 0.98), rgba(248, 250, 252, 0.96)), #fff;
border-right: 1px solid #dbe4ee;
box-shadow: 1px 0 0 rgba(15, 23, 42, 0.02);
z-index: 20;
contain: layout;
transform: translateZ(0);
transition:
background 240ms var(--ease),
box-shadow 240ms var(--ease);
}
.rail-brand {
position: relative;
min-height: 112px;
display: flex;
align-items: flex-start;
justify-content: flex-start;
gap: 12px;
padding: 54px 16px 8px;
overflow: visible;
transition:
min-height var(--rail-motion-duration) var(--rail-motion-ease),
padding var(--rail-motion-duration) var(--rail-motion-ease),
gap var(--rail-motion-duration) var(--rail-motion-ease);
will-change: min-height, padding, gap;
}
.brand-mark {
flex: 0 0 auto;
width: 32px;
height: 32px;
display: grid;
place-items: center;
color: var(--theme-primary-active);
border-radius: 4px;
overflow: hidden;
transform: translateY(-8px);
transition:
color 160ms var(--ease),
transform var(--rail-motion-duration) var(--rail-motion-ease);
will-change: transform;
}
.custom-logo {
width: 100%;
height: 100%;
object-fit: contain;
}
.brand-mark svg {
width: 32px;
height: 32px;
fill: currentColor;
}
.brand-name {
flex: 1 1 auto;
min-width: 0;
max-width: 124px;
color: #0f172a;
font-size: 16px;
font-weight: 800;
white-space: nowrap;
overflow: hidden;
transform: translateY(-8px);
transition:
max-width var(--rail-motion-duration) var(--rail-motion-ease),
opacity var(--rail-fade-duration) var(--rail-motion-ease) var(--rail-label-delay),
transform var(--rail-fade-duration) var(--rail-motion-ease) var(--rail-label-delay);
will-change: max-width, opacity, transform;
}
.rail-collapse-btn {
position: absolute;
right: -14px;
top: 55px;
z-index: 30;
width: 28px;
height: 28px;
display: inline-grid;
place-items: center;
cursor: pointer;
border: 1px solid #dbe4ee;
border-radius: 999px;
background: rgba(255, 255, 255, 0.96);
color: #64748b;
box-shadow:
0 8px 18px rgba(15, 23, 42, 0.12),
0 0 0 3px rgba(248, 250, 252, 0.92);
transition:
top var(--rail-motion-duration) var(--rail-motion-ease),
right var(--rail-motion-duration) var(--rail-motion-ease),
width var(--rail-motion-duration) var(--rail-motion-ease),
height var(--rail-motion-duration) var(--rail-motion-ease),
transform var(--rail-motion-duration) var(--rail-motion-ease),
background 180ms var(--ease),
border-color 180ms var(--ease),
color 180ms var(--ease),
box-shadow 180ms var(--ease);
}
.rail-collapse-btn:hover {
border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.28);
background: #fff;
color: var(--theme-primary-active);
box-shadow:
0 10px 22px rgba(var(--theme-primary-rgb, 58, 124, 165), 0.16),
0 0 0 3px rgba(248, 250, 252, 0.96);
}
.rail-collapse-btn .mdi {
font-size: 17px;
line-height: 1;
}
.rail-nav {
display: flex;
flex-direction: column;
gap: 8px;
padding: 4px 8px 16px;
overflow-y: auto;
overflow-x: hidden;
flex: 1;
transition:
padding var(--rail-motion-duration) var(--rail-motion-ease),
gap var(--rail-motion-duration) var(--rail-motion-ease);
will-change: padding, gap;
}
.nav-btn {
width: 100%;
min-height: 48px;
position: relative;
display: flex;
align-items: center;
gap: 12px;
padding: 0;
border: 1px solid transparent;
border-radius: 4px;
background: transparent;
color: #64748b;
text-align: left;
overflow: hidden;
transition:
gap var(--rail-motion-duration) var(--rail-motion-ease),
background 180ms var(--ease),
border-color 180ms var(--ease),
color 180ms var(--ease);
will-change: gap;
}
.nav-btn:hover {
background: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.08);
color: var(--theme-primary-active);
}
.nav-btn.active {
background: var(--theme-primary-soft);
border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.18);
color: var(--theme-primary-active);
}
.nav-icon {
flex: 0 0 48px;
width: 48px;
height: 36px;
display: grid;
place-items: center;
border-radius: 4px;
color: currentColor;
transition: color 180ms var(--ease);
}
.nav-btn :deep(svg) {
width: 19px;
height: 19px;
stroke: currentColor;
stroke-width: 2;
fill: none;
stroke-linecap: round;
stroke-linejoin: round;
}
.nav-label {
flex: 1;
min-width: 0;
max-width: 128px;
color: currentColor;
font-size: 14px;
font-weight: 700;
white-space: nowrap;
overflow: hidden;
opacity: 1;
transition:
max-width var(--rail-motion-duration) var(--rail-motion-ease),
opacity var(--rail-fade-duration) var(--rail-motion-ease) var(--rail-label-delay),
transform var(--rail-fade-duration) var(--rail-motion-ease) var(--rail-label-delay);
will-change: max-width, opacity, transform;
}
.nav-badge {
flex: 0 0 auto;
min-width: 34px;
height: 22px;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0 8px;
border-radius: 999px;
background: #ff5b67;
color: #fff;
font-size: 12px;
font-weight: 800;
transition:
min-width var(--rail-motion-duration) var(--rail-motion-ease),
max-width var(--rail-motion-duration) var(--rail-motion-ease),
padding var(--rail-motion-duration) var(--rail-motion-ease),
opacity var(--rail-fade-duration) var(--rail-motion-ease) var(--rail-label-delay);
will-change: min-width, max-width, padding, opacity;
}
.nav-unread-dot {
flex: 0 0 auto;
width: 8px;
height: 8px;
border: 2px solid #fff;
border-radius: 999px;
background: #ef4444;
box-shadow: 0 6px 14px rgba(239, 68, 68, 0.26);
}
.rail-user {
position: relative;
min-width: 0;
min-height: 78px;
margin: 0;
padding: 16px 20px 18px;
border-top: 1px solid #edf2f7;
transition: padding var(--rail-motion-duration) var(--rail-motion-ease);
}
.user-summary {
position: relative;
min-width: 0;
min-height: 42px;
display: flex;
align-items: center;
gap: 10px;
padding: 4px;
color: #64748b;
border-radius: 4px;
cursor: pointer;
transition:
gap var(--rail-motion-duration) var(--rail-motion-ease),
padding var(--rail-motion-duration) var(--rail-motion-ease),
background 180ms var(--ease);
}
.rail-user:hover .user-summary {
background: rgba(255, 255, 255, 0.72);
}
.user-avatar {
flex: 0 0 36px;
width: 36px;
height: 36px;
display: grid;
place-items: center;
border: 2px solid #fff;
border-radius: 999px;
background: linear-gradient(135deg, var(--theme-primary), var(--theme-primary-active));
box-shadow: 0 6px 14px rgba(var(--theme-primary-rgb, 58, 124, 165), 0.18);
color: #fff;
font-size: 14px;
font-weight: 800;
transition:
flex-basis var(--rail-motion-duration) var(--rail-motion-ease),
width var(--rail-motion-duration) var(--rail-motion-ease),
height var(--rail-motion-duration) var(--rail-motion-ease);
}
.user-copy {
flex: 1;
min-width: 0;
max-width: 116px;
display: flex;
flex-direction: column;
gap: 2px;
opacity: 1;
transition:
max-width var(--rail-motion-duration) var(--rail-motion-ease),
opacity var(--rail-fade-duration) var(--rail-motion-ease) var(--rail-label-delay),
transform var(--rail-fade-duration) var(--rail-motion-ease) var(--rail-label-delay);
will-change: max-width, opacity, transform;
}
.user-copy strong {
color: #334155;
font-size: 14px;
font-weight: 750;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.user-copy span {
color: #64748b;
font-size: 12px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.user-summary .mdi {
flex: 0 0 18px;
font-size: 18px;
transition:
max-width var(--rail-motion-duration) var(--rail-motion-ease),
opacity var(--rail-fade-duration) var(--rail-motion-ease) var(--rail-label-delay);
will-change: max-width, opacity;
}
.user-menu {
position: absolute;
right: 20px;
bottom: calc(100% - 6px);
min-width: 132px;
padding: 8px;
border: 1px solid rgba(226, 232, 240, 0.96);
border-radius: 4px;
background: rgba(255, 255, 255, 0.98);
box-shadow: 0 16px 32px rgba(15, 23, 42, 0.1);
opacity: 0;
transform: translateY(8px);
pointer-events: none;
transition: all 180ms var(--ease);
z-index: 4;
}
.rail-user:hover .user-menu {
opacity: 1;
transform: translateY(0);
pointer-events: auto;
}
.user-menu-item {
width: 100%;
height: 38px;
display: flex;
align-items: center;
gap: 8px;
padding: 0 12px;
border: 0;
border-radius: 4px;
background: transparent;
color: #dc2626;
font-size: 13px;
font-weight: 700;
transition: all 180ms var(--ease);
}
/* ========================================= */
/* COLLAPSED STATE */
/* ========================================= */
.rail-collapsed .rail-brand {
min-height: 136px;
justify-content: flex-start;
gap: 0;
padding: 52px 16px 8px;
}
.rail-collapsed .brand-mark {
width: 32px;
height: 32px;
margin: 0;
transform: translateY(-6px);
}
.rail-collapsed .brand-mark svg {
width: 32px;
height: 32px;
}
.rail-collapsed .brand-name {
position: absolute;
width: 1px;
height: 1px;
max-width: 0;
margin: 0;
opacity: 0;
overflow: hidden;
clip: rect(0 0 0 0);
pointer-events: none;
transform: translateX(-6px);
transition-delay: 0ms;
}
.rail-collapsed .rail-collapse-btn {
top: 96px;
right: -14px;
width: 28px;
height: 28px;
transform: none;
}
.rail-collapsed .rail-nav {
gap: 8px;
padding: 4px 8px 16px;
}
.rail-collapsed .nav-btn {
justify-content: flex-start;
gap: 0;
transform: translateX(0);
}
.rail-collapsed .nav-icon {
width: 48px;
height: 36px;
flex: 0 0 48px;
transform: translateX(0);
}
.rail-collapsed .nav-label {
max-width: 0;
opacity: 0;
transform: translateX(-6px);
transition-delay: 0ms;
}
.rail-collapsed .nav-badge {
max-width: 0;
min-width: 0;
padding: 0;
opacity: 0;
overflow: hidden;
transition-delay: 0ms;
}
.rail-collapsed .nav-unread-dot {
position: absolute;
top: 10px;
right: 11px;
width: 9px;
height: 9px;
}
.rail-collapsed {
overflow: visible;
}
.rail-collapsed .rail-user {
position: relative;
z-index: 6;
padding: 14px 8px;
overflow: visible;
}
.rail-collapsed .user-summary {
justify-content: center;
padding: 4px;
gap: 0;
}
.rail-user-menu-floating {
position: fixed;
z-index: 12000;
min-width: 132px;
padding: 8px;
border: 1px solid rgba(226, 232, 240, 0.96);
border-radius: 4px;
background: rgba(255, 255, 255, 0.98);
box-shadow: 0 16px 32px rgba(15, 23, 42, 0.14);
transform: translateY(-50%);
animation: railUserMenuIn 180ms var(--rail-motion-ease) both;
}
.rail-user-menu-floating .user-menu-item {
width: 100%;
}
@keyframes railUserMenuIn {
from {
opacity: 0;
transform: translateY(-50%) translateX(-6px);
}
to {
opacity: 1;
transform: translateY(-50%) translateX(0);
}
}
.rail-collapsed .user-copy,
.rail-collapsed .user-summary .mdi {
max-width: 0;
opacity: 0;
overflow: hidden;
transform: translateX(-6px);
transition-delay: 0ms;
}
@media (max-width: 980px) {
.rail {
position: relative;
height: auto;
}
}
@media (prefers-reduced-motion: reduce) {
.rail *,
.rail *::before,
.rail *::after {
transition-duration: 120ms !important;
animation-duration: 120ms !important;
}
}

View File

@@ -0,0 +1,459 @@
.topbar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 24px;
padding: 18px 24px 20px;
background: #fff;
}
.topbar.chat-mode {
padding-bottom: 16px;
border-bottom: 1px solid #eef2f7;
}
.title-group {
min-width: 0;
}
.eyebrow {
display: inline-block;
margin-bottom: 8px;
padding: 3px 10px;
border-radius: 6px;
background: linear-gradient(135deg, rgba(var(--theme-primary-rgb, 58, 124, 165), 0.12), rgba(59, 130, 246, 0.08));
color: var(--theme-primary-active);
font-size: 11px;
font-weight: 800;
letter-spacing: 1.2px;
text-transform: uppercase;
}
.topbar h1 {
color: #0f172a;
font-size: 26px;
font-weight: 800;
letter-spacing: 0;
line-height: 1.2;
}
.topbar p {
margin-top: 6px;
max-width: 720px;
color: #64748b;
font-size: 14px;
line-height: 1.5;
}
.top-actions {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 14px;
flex-wrap: wrap;
}
.range-combo {
position: relative;
display: inline-flex;
align-items: center;
gap: 8px;
}
.range-shell {
height: 42px;
display: inline-flex;
align-items: center;
padding: 3px;
border: 1px solid #d7e0ea;
border-radius: 4px;
background: #fff;
box-shadow: 0 1px 2px rgba(15, 23, 42, .04);
}
.range-meta {
height: 34px;
display: inline-flex;
align-items: center;
gap: 8px;
padding: 0 12px;
border-right: 1px solid #e2e8f0;
color: #334155;
font-size: 13px;
font-weight: 650;
white-space: nowrap;
}
.range-meta .mdi {
color: var(--theme-primary);
}
.range-tabs {
display: inline-flex;
align-items: center;
gap: 2px;
padding-left: 3px;
}
.range-tabs button {
height: 34px;
min-width: 54px;
padding: 0 14px;
border: 0;
border-radius: 4px;
background: transparent;
color: #64748b;
font-size: 13px;
font-weight: 700;
white-space: nowrap;
transition: background 160ms ease, color 160ms ease, box-shadow 160ms ease;
}
.range-tabs button:hover:not(.active) {
background: #f1f5f9;
color: #334155;
}
.range-tabs button.active {
background: var(--theme-primary);
color: #fff;
box-shadow: 0 6px 14px rgba(var(--theme-primary-rgb, 58, 124, 165), .18);
}
.custom-range-wrap {
position: relative;
}
.custom-range-btn {
height: 42px;
display: inline-flex;
align-items: center;
gap: 8px;
padding: 0 13px;
border: 1px solid #d7e0ea;
border-radius: 4px;
background: #fff;
color: #334155;
font-size: 13px;
font-weight: 750;
white-space: nowrap;
}
.custom-range-btn:hover,
.custom-range-btn.active {
border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), .34);
background: #f5fbff;
color: var(--theme-primary-active);
}
.calendar-popover {
position: absolute;
top: calc(100% + 10px);
right: 0;
width: 336px;
z-index: 40;
display: grid;
gap: 14px;
padding: 16px;
border: 1px solid #d7e0ea;
border-radius: 4px;
background: #fff;
box-shadow: 0 18px 42px rgba(15, 23, 42, .16);
}
.calendar-popover header,
.calendar-popover footer {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
}
.calendar-popover header strong {
color: #0f172a;
font-size: 15px;
}
.calendar-popover header button {
width: 30px;
height: 30px;
display: grid;
place-items: center;
border: 0;
border-radius: 4px;
background: transparent;
color: #64748b;
}
.date-fields {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
}
.date-fields label {
display: grid;
gap: 6px;
}
.date-fields span {
color: #64748b;
font-size: 12px;
font-weight: 700;
}
.date-fields input {
width: 100%;
height: 38px;
padding: 0 9px;
border: 1px solid #d7e0ea;
border-radius: 4px;
color: #0f172a;
font-size: 13px;
}
.ghost-btn,
.apply-btn {
height: 36px;
padding: 0 14px;
border-radius: 8px;
font-size: 13px;
font-weight: 750;
}
.ghost-btn {
border: 1px solid #d7e0ea;
background: #fff;
color: #334155;
}
.apply-btn {
border: 0;
background: var(--theme-primary);
color: #fff;
}
.apply-btn:disabled {
cursor: not-allowed;
background: #cbd5e1;
}
.kpi-chips {
display: flex;
gap: 10px;
}
.detail-alert-strip {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 10px;
flex-wrap: wrap;
}
.detail-alert-pill {
display: inline-flex;
align-items: center;
gap: 6px;
min-height: 32px;
padding: 0 12px;
border: 1px solid #fed7aa;
border-radius: 999px;
background: #fff7ed;
color: #ea580c;
font-size: 12px;
font-weight: 800;
white-space: nowrap;
}
.detail-alert-pill i {
font-size: 14px;
}
.detail-alert-pill.success {
border-color: var(--success-line);
background: var(--success-soft);
color: var(--success);
}
.detail-alert-pill.danger {
border-color: #fecaca;
background: #fff1f2;
color: #dc2626;
}
.kpi-chip {
display: grid;
grid-template-columns: auto auto;
grid-template-rows: auto auto;
gap: 2px 10px;
padding: 8px 16px;
border-radius: 4px;
background: linear-gradient(135deg, color-mix(in srgb, var(--chip-color) 8%, #fff), color-mix(in srgb, var(--chip-color) 3%, #f8fafc));
border: 1px solid color-mix(in srgb, var(--chip-color) 18%, #e2e8f0);
}
.chip-value {
grid-row: 1 / 3;
align-self: center;
color: #0f172a;
font-size: 22px;
font-weight: 850;
line-height: 1;
}
.chip-value small {
font-size: 13px;
font-weight: 700;
margin-left: 2px;
}
.chip-label {
color: #64748b;
font-size: 12px;
font-weight: 700;
}
.chip-delta {
color: #94a3b8;
font-size: 11px;
font-weight: 700;
}
.chip-delta.up { color: var(--success); }
.chip-delta.down { color: #f59e0b; }
.topbar-spacer {
flex: 1;
min-width: 0;
}
.create-top-btn {
height: 40px;
display: inline-flex;
align-items: center;
gap: 8px;
padding: 0 18px;
border: 0;
border-radius: 8px;
background: var(--theme-primary);
color: #fff;
font-size: 14px;
font-weight: 750;
box-shadow: 0 8px 18px rgba(var(--theme-primary-rgb, 58, 124, 165), 0.18);
white-space: nowrap;
}
.create-top-btn:hover {
background: var(--theme-primary-active);
}
@media (max-width: 1120px) {
.range-combo {
width: 100%;
justify-content: flex-end;
}
}
@media (max-width: 960px) {
.topbar {
flex-direction: column;
align-items: stretch;
}
.top-actions,
.search-wrap,
.search-wrap.wide,
.detail-alert-strip,
.month-chip,
.qa-filter,
.new-question-btn {
width: 100%;
}
.range-combo {
justify-content: stretch;
}
.range-shell {
flex: 1;
}
.range-meta {
flex: 1;
}
.custom-range-btn {
width: 100%;
justify-content: center;
}
.calendar-popover {
right: auto;
left: 0;
}
}
@media (max-width: 640px) {
.topbar {
gap: 14px;
padding: 16px 16px 14px;
}
.topbar h1 {
font-size: 24px;
}
.kpi-chips {
width: 100%;
overflow-x: auto;
padding-bottom: 2px;
scrollbar-width: thin;
}
.kpi-chip {
min-width: 118px;
padding: 8px 12px;
}
.chip-label,
.chip-delta {
white-space: nowrap;
}
.range-combo {
display: grid;
gap: 8px;
}
.range-shell {
height: auto;
display: grid;
gap: 4px;
}
.range-meta {
width: 100%;
border-right: 0;
border-bottom: 1px solid #e2e8f0;
justify-content: center;
}
.range-tabs {
width: 100%;
padding-left: 0;
}
.range-tabs button {
flex: 1;
padding: 0 8px;
}
.calendar-popover {
width: min(336px, calc(100vw - 32px));
}
.date-fields {
grid-template-columns: 1fr;
}
}

View File

@@ -0,0 +1,381 @@
.insight-panel-shell {
flex: none;
display: flex;
width: clamp(300px, 28vw, 420px);
min-width: 0;
min-height: 0;
max-width: 100%;
overflow: hidden;
transition: width 360ms cubic-bezier(0.22, 1, 0.36, 1);
}
.insight-panel-shell.collapsed {
width: 0;
}
.insight-panel {
flex: 1;
min-width: 0;
min-height: 0;
display: grid;
grid-template-rows: auto minmax(0, 1fr);
overflow: hidden;
border: 1px solid rgba(189, 201, 214, 0.74);
border-radius: 16px;
background: #ffffff;
box-shadow: 0 14px 32px rgba(148, 163, 184, 0.16);
}
.insight-head {
display: grid;
gap: 12px;
padding: 16px;
border-bottom: 1px solid #e2e8f0;
background: linear-gradient(180deg, #f8fbff, #ffffff);
}
.insight-head h3 {
margin: 6px 0 0;
color: #0f172a;
font-size: var(--wb-fs-insight-title, 17px);
font-weight: 850;
}
.insight-head p {
margin: 6px 0 0;
color: #64748b;
font-size: var(--wb-fs-insight-body, 12px);
line-height: 1.55;
}
.insight-body {
min-height: 0;
display: grid;
gap: 12px;
align-content: start;
padding: 14px;
overflow-y: auto;
}
.intent-pill,
.flow-status-chip,
.status-pill {
min-height: 26px;
display: inline-flex;
align-items: center;
padding: 0 10px;
border-radius: 999px;
background: #eff6ff;
color: #2563eb;
font-size: 11px;
font-weight: 800;
}
.confidence-card,
.insight-card,
.review-side-card,
.review-flow-panel {
display: grid;
gap: 10px;
padding: 12px;
border: 1px solid #e2e8f0;
border-radius: 12px;
background: #ffffff;
}
.confidence-card {
grid-template-columns: minmax(0, 1fr) auto;
align-items: center;
background: #f8fbff;
}
.confidence-card span,
.card-head p,
.note-block p,
.review-side-head p,
.review-side-risk-summary,
.flow-step-tool,
.flow-step-detail,
.flow-step-card time {
margin: 0;
color: #64748b;
font-size: var(--wb-fs-insight-body, 12px);
line-height: 1.55;
}
.confidence-card strong,
.card-head h4,
.note-block strong,
.review-side-head strong,
.flow-step-card strong,
.review-side-metric-copy strong,
.review-side-category-copy strong {
color: #0f172a;
font-weight: 850;
}
.card-head,
.review-side-head,
.flow-step-card header,
.review-document-switch-head,
.review-flow-summary {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 10px;
}
.card-head h4 {
margin: 0;
font-size: var(--wb-fs-insight-h4, 14px);
}
.note-block {
display: grid;
gap: 6px;
padding: 10px;
border-radius: 10px;
background: #f8fbff;
}
.capability-chip-row,
.citation-stack,
.knowledge-question-list,
.review-flow-list,
.review-side-risk-list,
.review-document-warning-list {
display: grid;
gap: 8px;
}
.risk-chip,
.review-document-meta-chip,
.review-side-confidence {
min-height: 24px;
display: inline-flex;
align-items: center;
padding: 0 8px;
border-radius: 999px;
background: #eff6ff;
color: #2563eb;
font-size: 11px;
font-weight: 800;
}
.citation-card,
.knowledge-question-btn,
.review-side-metric-card,
.review-side-category-card,
.review-side-risk-item,
.flow-step-card,
.review-document-preview-card {
border: 1px solid #e2e8f0;
border-radius: 10px;
background: #ffffff;
}
.knowledge-question-btn,
.review-side-metric-card,
.review-side-category-card,
.review-side-risk-item {
width: 100%;
display: grid;
gap: 8px;
padding: 10px;
color: #334155;
font: inherit;
text-align: left;
}
.knowledge-question-btn {
grid-template-columns: 30px minmax(0, 1fr) auto;
align-items: center;
}
.knowledge-question-index {
width: 30px;
height: 30px;
display: grid;
place-items: center;
border-radius: 8px;
background: #eff6ff;
color: #2563eb;
font-size: 11px;
font-weight: 850;
}
.review-side-grid,
.review-side-category-grid,
.review-document-edit-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
gap: 8px;
}
.review-side-metric-card {
grid-template-columns: 30px minmax(0, 1fr) auto;
align-items: start;
}
.review-side-metric-icon,
.review-side-risk-icon {
width: 30px;
height: 30px;
display: grid;
place-items: center;
border-radius: 8px;
background: #eff6ff;
color: var(--theme-primary, #3a7ca5);
}
.review-side-metric-copy,
.review-side-category-copy,
.review-side-risk-copy {
display: grid;
gap: 4px;
min-width: 0;
}
.review-side-metric-copy small,
.review-side-edit-hint,
.review-side-category-copy p {
margin: 0;
color: #64748b;
font-size: 11px;
line-height: 1.45;
}
.review-side-category-card.active {
border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.55);
background: var(--theme-primary-soft, #eaf4fa);
}
.review-insight-tools,
.review-document-nav,
.review-document-meta-chip-row {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.review-insight-switch-icon-btn,
.flow-icon-btn,
.review-document-nav-btn,
.review-side-save-pill {
border: 1px solid #cbd5e1;
border-radius: 8px;
background: #ffffff;
color: #334155;
}
.review-insight-switch-icon-btn,
.flow-icon-btn,
.review-document-nav-btn {
width: 32px;
height: 32px;
display: grid;
place-items: center;
}
.review-insight-switch-icon-btn.active,
.review-side-save-pill {
border-color: var(--theme-primary, #3a7ca5);
background: var(--theme-primary, #3a7ca5);
color: #ffffff;
}
.review-flow-list {
position: relative;
}
.flow-step-item {
display: grid;
grid-template-columns: 28px minmax(0, 1fr);
gap: 8px;
}
.flow-step-rail span {
width: 26px;
height: 26px;
display: grid;
place-items: center;
border-radius: 999px;
background: #eff6ff;
color: #2563eb;
font-size: 11px;
font-weight: 850;
}
.flow-step-card {
padding: 10px;
}
.flow-empty-state,
.review-side-empty,
.review-document-preview-placeholder {
display: grid;
place-items: center;
gap: 8px;
padding: 18px;
border: 1px dashed #cbd5e1;
border-radius: 10px;
background: #f8fbff;
color: #64748b;
text-align: center;
}
.review-inline-input,
.review-document-edit-field input,
.review-document-edit-field textarea {
width: 100%;
min-height: 34px;
border: 1px solid #cbd5e1;
border-radius: 8px;
background: #ffffff;
color: #0f172a;
font: inherit;
}
.review-document-edit-field {
display: grid;
gap: 6px;
}
.review-document-edit-field span {
color: #64748b;
font-size: 11px;
font-weight: 800;
}
.review-document-scroll {
display: grid;
gap: 10px;
}
.review-document-preview-card {
min-height: 140px;
display: grid;
place-items: center;
overflow: hidden;
background: #f8fbff;
}
.review-document-preview-card img {
max-width: 100%;
max-height: 240px;
object-fit: contain;
}
.review-side-save-pill {
min-height: 34px;
padding: 0 12px;
font-size: 12px;
font-weight: 800;
}
@media (max-width: 1440px) {
.insight-panel-shell:not(.collapsed) {
width: 100%;
max-height: min(34dvh, 360px);
}
}

View File

@@ -0,0 +1,469 @@
.message-row {
display: grid;
grid-template-columns: 38px minmax(0, 1fr);
align-items: start;
gap: 12px;
}
.message-row.user {
grid-template-columns: minmax(0, 1fr) 38px;
}
.message-row.user .message-avatar {
order: 2;
}
.message-row.user .message-bubble {
order: 1;
justify-self: end;
background: linear-gradient(135deg, #eaf3ff, #f7fbff);
border-color: rgba(96, 165, 250, 0.3);
}
.message-avatar {
width: 38px;
height: 38px;
display: grid;
place-items: center;
border-radius: 999px;
overflow: hidden;
background: #eff6ff;
box-shadow: 0 8px 18px rgba(148, 163, 184, 0.22);
}
.message-avatar img {
width: 100%;
height: 100%;
display: block;
object-fit: cover;
}
.message-bubble {
max-width: min(100%, 760px);
padding: 12px 14px;
border: 1px solid #d8e4f0;
border-radius: 14px;
background: #ffffff;
color: #24324a;
font-size: var(--wb-fs-bubble, 13px);
line-height: 1.62;
box-shadow: 0 10px 22px rgba(148, 163, 184, 0.14);
}
.message-bubble-application-preview {
max-width: min(100%, 980px);
}
.message-bubble-review-risk-low,
.message-bubble-review-risk-medium,
.message-bubble-review-risk-high {
background: #ffffff;
}
.message-bubble-review-risk-low {
border-color: rgba(37, 99, 235, 0.56);
}
.message-bubble-review-risk-medium {
border-color: rgba(217, 119, 6, 0.58);
}
.message-bubble-review-risk-high {
border-color: rgba(220, 38, 38, 0.58);
}
.message-meta {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 8px;
}
.message-meta strong {
color: #0f172a;
font-size: var(--wb-fs-bubble-meta, 12px);
font-weight: 800;
}
.message-meta time {
color: #64748b;
font-size: var(--wb-fs-bubble-time, 11px);
font-weight: 700;
}
.message-answer-content {
color: #24324a;
}
.message-answer-markdown :deep(p),
.message-answer-markdown :deep(li),
.message-answer-markdown :deep(td),
.message-answer-markdown :deep(th),
.message-answer-markdown :deep(blockquote) {
margin: 0;
color: inherit;
line-height: 1.62;
}
.message-answer-markdown :deep(p + p),
.message-answer-markdown :deep(p + ul),
.message-answer-markdown :deep(ul + p),
.message-answer-markdown :deep(ol + p) {
margin-top: 8px;
}
.message-answer-markdown :deep(strong) {
color: #0f172a;
font-weight: 850;
}
.welcome-quick-actions {
margin-top: 14px;
padding-top: 12px;
border-top: 1px solid #e2e8f0;
}
.welcome-quick-actions-title {
margin: 0 0 12px;
color: #64748b;
font-size: var(--wb-fs-chip, 12px);
font-weight: 750;
}
.welcome-quick-action-grid,
.message-suggested-actions,
.message-detail-chip-row,
.message-files {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.welcome-quick-action-btn,
.message-suggested-action-btn,
.review-footer-btn,
.expense-query-record-card,
.expense-query-risk-chip {
border: 1px solid #cbd5e1;
background: #ffffff;
color: #334155;
font: inherit;
}
.welcome-quick-action-btn,
.review-footer-btn {
min-height: 32px;
display: inline-flex;
align-items: center;
gap: 6px;
padding: 0 12px;
border-radius: 8px;
font-size: var(--wb-fs-chip, 12px);
font-weight: 750;
}
.welcome-quick-action-btn i {
color: var(--theme-primary, #3a7ca5);
font-size: 15px;
}
.welcome-quick-action-btn:hover:not(:disabled),
.message-suggested-action-btn:hover:not(:disabled),
.review-footer-btn:hover:not(:disabled) {
border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.55);
background: var(--theme-primary-soft, #eaf4fa);
color: var(--theme-primary-active, #2f6d95);
}
.message-meta-row {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-top: 10px;
}
.message-meta-chip,
.message-risk-chip,
.file-chip {
min-height: 26px;
display: inline-flex;
align-items: center;
gap: 5px;
padding: 0 9px;
border-radius: 999px;
background: #eff6ff;
color: #2563eb;
font-size: 11px;
font-weight: 750;
}
.message-suggested-actions {
margin-top: 12px;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
}
.message-suggested-action-btn {
min-height: 54px;
display: grid;
grid-template-columns: 30px minmax(0, 1fr) auto;
align-items: center;
gap: 10px;
padding: 10px 12px;
border-radius: 10px;
text-align: left;
}
.message-suggested-action-icon {
width: 30px;
height: 30px;
display: grid;
place-items: center;
border-radius: 8px;
background: #eff6ff;
color: var(--theme-primary, #3a7ca5);
}
.message-suggested-action-copy {
display: grid;
gap: 3px;
min-width: 0;
}
.message-suggested-action-title {
color: #0f172a;
font-size: 12px;
font-weight: 800;
}
.message-suggested-action-btn small {
color: #64748b;
font-size: 11px;
line-height: 1.4;
}
.message-detail-block,
.application-preview-table,
.draft-preview {
margin-top: 12px;
padding: 12px;
border: 1px solid #e2e8f0;
border-radius: 12px;
background: #f8fbff;
}
.message-detail-block > strong,
.expense-query-block > strong {
display: block;
margin-bottom: 8px;
color: #0f172a;
font-size: 12px;
font-weight: 850;
}
.application-preview-table {
display: grid;
padding: 0;
overflow: hidden;
}
.application-preview-row {
display: grid;
grid-template-columns: minmax(96px, 0.42fr) minmax(0, 1fr);
min-height: 38px;
border-top: 1px solid #e2e8f0;
}
.application-preview-row:first-child {
border-top: 0;
}
.application-preview-row.head {
background: #eff6ff;
color: #334155;
font-size: 12px;
font-weight: 850;
}
.application-preview-row > span {
display: flex;
align-items: center;
gap: 8px;
min-width: 0;
padding: 8px 10px;
}
.application-preview-label {
color: #64748b;
border-right: 1px solid #e2e8f0;
}
.application-preview-value {
color: #0f172a;
font-weight: 750;
}
.application-preview-input {
width: 100%;
min-height: 32px;
border: 1px solid #cbd5e1;
border-radius: 8px;
background: #ffffff;
color: #0f172a;
}
.application-preview-edit-btn {
width: 28px;
height: 28px;
display: inline-grid;
place-items: center;
border: 1px solid #cbd5e1;
border-radius: 8px;
background: #ffffff;
color: #2563eb;
}
.expense-query-record-list,
.message-citation-list {
display: grid;
gap: 8px;
}
.expense-query-record-card {
width: 100%;
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 10px;
padding: 10px;
border-radius: 10px;
text-align: left;
}
.expense-query-record-main {
display: grid;
gap: 6px;
min-width: 0;
}
.expense-query-record-top,
.expense-query-record-meta,
.expense-query-summary-row {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px;
}
.expense-query-record-top strong {
color: #0f172a;
font-size: 12px;
font-weight: 850;
}
.expense-query-record-card p,
.expense-query-record-meta span,
.expense-query-window-label,
.expense-query-hint {
margin: 0;
color: #64748b;
font-size: 11px;
line-height: 1.45;
}
.expense-query-record-status,
.expense-query-summary-chip {
min-height: 22px;
display: inline-flex;
align-items: center;
padding: 0 8px;
border-radius: 999px;
background: #eff6ff;
color: #2563eb;
font-size: 11px;
font-weight: 800;
}
.expense-query-empty {
display: flex;
align-items: center;
gap: 8px;
color: #64748b;
font-size: 12px;
}
.review-plain-followup,
.draft-preview {
display: grid;
gap: 8px;
}
.review-plain-lead {
margin: 0;
color: #0f172a;
font-size: 14px;
font-weight: 850;
}
.review-plain-summary,
.review-plain-note {
margin: 0;
color: #64748b;
font-size: 12px;
line-height: 1.55;
}
.review-plain-list {
display: grid;
gap: 6px;
margin: 0;
padding-left: 18px;
color: #334155;
font-size: 12px;
}
.review-footer-actions {
margin-top: 10px;
}
.review-footer-btn.primary {
border-color: var(--theme-primary, #3a7ca5);
background: var(--theme-primary, #3a7ca5);
color: #ffffff;
}
.draft-preview header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
}
.draft-preview pre {
margin: 0;
overflow: auto;
color: #334155;
font-size: 12px;
line-height: 1.5;
white-space: pre-wrap;
}
@media (max-width: 760px) {
.message-row,
.message-row.user {
grid-template-columns: 1fr;
}
.message-avatar {
display: none;
}
.message-row.user .message-bubble {
justify-self: stretch;
}
.message-bubble {
max-width: 100%;
border-radius: 12px;
}
}