Files

1118 lines
20 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
:root {
--workbench-bg: #f6f7fb;
--workbench-surface: #ffffff;
--workbench-border: #e6e8ec;
--workbench-muted: #6b7280;
--workbench-title: #111827;
}
body {
background-color: var(--workbench-bg);
background-image: none;
}
.page-head {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 12px;
flex-wrap: wrap;
}
.status-chip {
border: 1px solid var(--workbench-border);
background: #fff;
color: var(--workbench-muted);
border-radius: 999px;
padding: 6px 10px;
font-size: 11px;
}
.status-chip.running {
color: #1d4ed8;
border-color: #bfdbfe;
background: #eff6ff;
}
.status-chip.done {
color: #047857;
border-color: #a7f3d0;
background: #ecfdf5;
}
.status-chip.error {
color: #b91c1c;
border-color: #fecaca;
background: #fef2f2;
}
.workbench-grid {
display: grid;
grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr);
gap: 20px;
}
@media (max-width: 1080px) {
.workbench-grid {
grid-template-columns: 1fr;
}
}
.panel {
background: var(--workbench-surface);
border-radius: 12px;
padding: 18px;
}
.panel-title {
font-size: 13px;
font-weight: 600;
color: var(--workbench-title);
margin-bottom: 12px;
}
.panel-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
margin-bottom: 12px;
}
.panel-head-actions {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
}
.head-meta {
font-size: 12px;
color: var(--workbench-muted);
}
.panel-toggle-btn {
min-height: 32px;
padding: 0 12px;
font-size: 12px;
white-space: nowrap;
}
.upload-row {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
}
.reference-strip {
margin-top: 10px;
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
min-height: 44px;
}
.reference-empty {
font-size: 12px;
color: var(--workbench-muted);
}
.reference-item {
width: 64px;
height: 64px;
border-radius: 12px;
border: 1px solid var(--workbench-border);
background: #f3f4f6;
overflow: hidden;
position: relative;
cursor: pointer;
}
.reference-item.is-primary {
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.35);
border-color: #60a5fa;
}
.reference-thumb {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
.reference-index-badge {
position: absolute;
left: 4px;
right: 4px;
bottom: 4px;
padding: 2px 4px;
border-radius: 999px;
background: rgba(15, 23, 42, 0.78);
color: #f8fafc;
font-size: 9px;
font-weight: 700;
line-height: 1.2;
pointer-events: none;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-align: center;
}
.reference-primary-badge {
position: absolute;
left: 4px;
bottom: 4px;
font-size: 10px;
line-height: 1;
padding: 3px 5px;
border-radius: 999px;
background: rgba(15, 23, 42, 0.78);
color: #fff;
pointer-events: none;
}
.reference-remove-btn {
position: absolute;
top: 4px;
right: 4px;
width: 18px;
height: 18px;
border: none;
border-radius: 999px;
background: rgba(15, 23, 42, 0.78);
color: #fff;
font-size: 12px;
line-height: 1;
display: inline-flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.reference-add-slot {
width: 64px;
height: 64px;
border-radius: 12px;
border: 1px dashed var(--workbench-border);
background: #fff;
color: var(--workbench-muted);
font-size: 22px;
line-height: 1;
display: inline-flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.parent-quick-row {
margin-top: 10px;
}
.parent-quick-input-wrap {
display: grid;
grid-template-columns: 1fr auto;
gap: 8px;
}
@media (max-width: 680px) {
.parent-quick-input-wrap {
grid-template-columns: 1fr;
}
}
.file-name {
font-size: 12px;
color: var(--workbench-muted);
word-break: normal;
}
.preview-shell {
margin-top: 12px;
border: 1px solid var(--workbench-border);
border-radius: 12px;
min-height: 240px;
background: #f9fafb;
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
transition: border-color .2s ease, box-shadow .2s ease, background .2s ease;
}
.preview-shell.dragover {
border-color: #60a5fa;
background: #eff6ff;
box-shadow: 0 0 0 3px rgba(96, 165, 250, 0.22);
}
.current-gallery {
width: 100%;
height: 100%;
min-height: 240px;
display: grid;
grid-template-columns: 1fr;
gap: 8px;
padding: 8px;
box-sizing: border-box;
position: relative;
z-index: 1;
}
.current-gallery.hidden {
display: none;
}
.current-gallery[data-count="2"] {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.current-gallery[data-count="3"],
.current-gallery[data-count="4"] {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.current-gallery-item {
border-radius: 10px;
overflow: hidden;
border: 1px solid var(--workbench-border);
background: #0b1220;
min-height: 210px;
}
.current-gallery-item img {
width: 100%;
height: 100%;
display: block;
object-fit: contain;
}
.preview-empty {
color: var(--workbench-muted);
font-size: 13px;
position: relative;
z-index: 2;
}
.drop-hint {
position: absolute;
left: 10px;
right: 10px;
bottom: 10px;
z-index: 3;
font-size: 12px;
color: #334155;
background: rgba(255, 255, 255, 0.82);
border: 1px solid #dbe2ea;
border-radius: 8px;
padding: 6px 10px;
text-align: center;
backdrop-filter: blur(2px);
}
.meta-grid {
margin-top: 12px;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
}
@media (max-width: 680px) {
.meta-grid {
grid-template-columns: 1fr;
}
}
.meta-item {
border: 1px solid var(--workbench-border);
border-radius: 10px;
padding: 10px;
}
.meta-label {
font-size: 11px;
color: var(--workbench-muted);
margin-bottom: 4px;
}
.meta-value {
font-size: 12px;
color: var(--workbench-title);
word-break: break-all;
}
.field {
margin-top: 12px;
}
.field-label {
display: block;
font-size: 11px;
color: var(--accents-4);
margin-bottom: 6px;
}
.prompt-editor-shell {
position: relative;
min-height: 180px;
resize: vertical;
overflow: hidden;
}
.prompt-rich-input {
position: absolute;
inset: 0;
z-index: 2;
width: 100%;
border: 1px solid var(--workbench-border);
border-radius: 12px;
background: #fff;
color: var(--workbench-title);
padding: 14px 14px 56px;
line-height: 1.75;
font-size: 14px;
white-space: pre-wrap;
word-break: break-word;
overflow-wrap: anywhere;
overflow-x: hidden;
overflow-y: auto;
scrollbar-width: thin;
outline: none;
cursor: text;
box-sizing: border-box;
}
.prompt-rich-input:focus {
border-color: #60a5fa;
box-shadow: 0 0 0 3px rgba(96, 165, 250, 0.18);
}
.prompt-rich-input.is-disabled {
opacity: 0.72;
cursor: not-allowed;
}
.prompt-rich-input.is-empty::before {
content: attr(data-placeholder);
color: #9ca3af;
pointer-events: none;
}
.prompt-mention-chip {
display: inline-flex;
max-width: 100%;
margin: 0 3px;
vertical-align: middle;
user-select: all;
-webkit-user-select: all;
cursor: pointer;
align-items: center;
}
.prompt-mention-chip.is-active {
box-shadow: 0 0 0 2px rgba(96, 165, 250, 0.5);
border-radius: 8px;
}
.prompt-mention-chip-inner {
display: inline-flex;
align-items: center;
height: 25px;
overflow: hidden;
border: 1px solid #d7dce3;
border-radius: 8px;
background: #f3f4f6;
color: #111827;
}
.prompt-mention-chip-thumb-wrap {
position: relative;
width: 25px;
height: 25px;
flex: none;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.prompt-mention-chip-thumb {
width: 100%;
height: 100%;
object-fit: cover;
flex: none;
}
.prompt-mention-chip-label {
padding: 0 8px 0 6px;
font-size: 13px;
font-weight: 600;
white-space: nowrap;
color: #111827;
}
.prompt-mention-menu {
position: absolute;
left: 12px;
top: 12px;
z-index: 20;
min-width: 220px;
max-width: min(320px, calc(100% - 24px));
border: 1px solid var(--workbench-border);
border-radius: 16px;
background: rgba(255, 255, 255, 0.96);
box-shadow: 0 20px 50px rgba(15, 23, 42, 0.2);
padding: 8px;
backdrop-filter: blur(10px);
}
.prompt-mention-item {
width: 100%;
border: none;
background: transparent;
color: inherit;
display: flex;
align-items: center;
gap: 10px;
text-align: left;
border-radius: 12px;
padding: 8px 10px;
cursor: pointer;
}
.prompt-mention-item:hover,
.prompt-mention-item.is-active {
background: rgba(15, 23, 42, 0.08);
}
.prompt-mention-thumb {
width: 36px;
height: 36px;
border-radius: 10px;
object-fit: cover;
flex: none;
}
.prompt-mention-label {
font-size: 15px;
font-weight: 700;
color: var(--workbench-title);
}
.prompt-textarea-proxy {
position: relative !important;
z-index: 1 !important;
width: 100% !important;
height: 100% !important;
min-height: 180px !important;
opacity: 0 !important;
pointer-events: none !important;
resize: none !important;
caret-color: transparent !important;
}
.prompt-editor-shell > .prompt-enhance-wrap {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
z-index: 10;
pointer-events: none;
}
.prompt-editor-shell > .prompt-enhance-wrap > .prompt-enhance-actions {
position: absolute !important;
right: 12px !important;
bottom: 12px !important;
pointer-events: auto;
z-index: 11;
}
.form-textarea {
min-height: 96px;
resize: vertical;
}
/* 确保提示词增强按钮固定在输入框内部右下角 (通用 field 兼容) */
.field .prompt-enhance-wrap {
width: 100%;
position: relative;
}
.field .prompt-enhance-wrap > textarea.form-textarea {
width: 100%;
display: block;
box-sizing: border-box;
min-height: 150px;
padding-left: 12px;
padding-right: calc(var(--pe-action-width, 104px) + 12px);
padding-bottom: 48px;
}
.field .prompt-enhance-wrap > .prompt-enhance-actions {
position: absolute;
right: 10px;
bottom: 10px;
z-index: 3;
}
.action-row {
margin-top: 12px;
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 8px;
}
.action-row.action-row-inline {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.edit-progress-wrap {
margin-top: 10px;
width: 100%;
height: 9px;
border-radius: 999px;
background: #eef1f5;
overflow: hidden;
display: none;
}
.edit-progress-wrap.active {
display: block;
}
.edit-progress-wrap.is-success {
background: #d1fae5;
}
.edit-progress-wrap.is-error {
background: #fee2e2;
}
.edit-progress-bar {
width: 0%;
height: 100%;
background: linear-gradient(90deg, #3b82f6, #2563eb);
border-radius: inherit;
transition: width .16s linear;
}
.edit-progress-wrap.is-success .edit-progress-bar {
background: linear-gradient(90deg, #10b981, #059669);
}
.edit-progress-wrap.is-error .edit-progress-bar {
background: linear-gradient(90deg, #ef4444, #dc2626);
}
.edit-progress-text {
margin-top: 6px;
font-size: 12px;
color: var(--workbench-muted);
display: none;
}
.edit-progress-text.active {
display: block;
}
@media (max-width: 680px) {
.action-row {
grid-template-columns: 1fr;
}
}
@media (max-width: 768px) {
.field .prompt-enhance-wrap > textarea.form-textarea {
padding-right: calc(var(--pe-action-width, 92px) + 12px);
padding-bottom: 76px;
}
.field .prompt-enhance-wrap > .inline-submit-btn,
.field .prompt-enhance-wrap > .prompt-enhance-actions {
height: var(--pe-action-height, 28px);
}
.field .prompt-enhance-wrap > .inline-submit-btn {
width: var(--pe-action-width, 92px);
min-width: var(--pe-action-width, 92px);
padding: 0 10px;
}
.field .prompt-enhance-wrap > .prompt-enhance-actions {
width: var(--pe-action-width, 92px);
min-width: var(--pe-action-width, 92px);
bottom: 40px;
}
.field .prompt-enhance-wrap > .inline-submit-btn {
bottom: 8px;
}
}
.empty-state {
border: 1px dashed var(--workbench-border);
border-radius: 10px;
color: var(--workbench-muted);
font-size: 12px;
text-align: center;
padding: 18px;
}
.history-list {
margin-top: 12px;
display: grid;
gap: 10px;
max-height: 680px;
overflow: auto;
padding-right: 4px;
}
.history-list::-webkit-scrollbar {
width: 6px;
}
.history-list::-webkit-scrollbar-thumb {
background: #d1d5db;
border-radius: 999px;
}
.history-item {
border: 1px solid var(--workbench-border);
border-radius: 10px;
padding: 10px;
display: grid;
grid-template-columns: 84px 1fr;
gap: 10px;
background: #fff;
}
.history-thumb {
width: 84px;
height: 84px;
border-radius: 8px;
object-fit: cover;
background: #f3f4f6;
}
.history-main {
min-width: 0;
}
.history-line {
font-size: 11px;
color: var(--workbench-muted);
line-height: 1.45;
}
.history-line strong {
color: var(--workbench-title);
font-weight: 600;
}
.history-prompt {
margin-top: 4px;
font-size: 12px;
color: var(--workbench-title);
line-height: 1.5;
word-break: break-word;
}
html[data-theme='dark'] .history-item {
background: #111821;
border-color: #324154;
}
html[data-theme='dark'] .prompt-rich-input {
background: #111821;
border-color: #324154;
color: #eef4ff;
}
html[data-theme='dark'] .prompt-rich-input.is-empty::before {
color: #7f90a6;
}
html[data-theme='dark'] .prompt-mention-menu {
background: rgba(17, 24, 33, 0.96);
border-color: #324154;
box-shadow: 0 24px 54px rgba(2, 6, 23, 0.46);
}
html[data-theme='dark'] .prompt-mention-chip {
color: #eef4ff;
}
html[data-theme='dark'] .prompt-mention-chip-inner {
border-color: rgba(148, 163, 184, 0.3);
background: #1f2937;
color: #eef4ff;
}
html[data-theme='dark'] .prompt-mention-chip-label {
color: #eef4ff;
}
html[data-theme='dark'] .prompt-mention-item:hover,
html[data-theme='dark'] .prompt-mention-item.is-active {
background: rgba(148, 163, 184, 0.12);
}
html[data-theme='dark'] .prompt-mention-label {
color: #eef4ff;
}
html[data-theme='dark'] .reference-item {
background: #111821;
border-color: #324154;
}
html[data-theme='dark'] .reference-index-badge {
background: rgba(2, 6, 23, 0.82);
color: #e5eefc;
}
html[data-theme='dark'] .reference-add-slot {
background: #111821;
border-color: #324154;
color: #b7c4d4;
}
html[data-theme='dark'] .history-line {
color: #b7c4d4;
}
html[data-theme='dark'] .history-line strong {
color: #eef4ff;
}
html[data-theme='dark'] .history-prompt {
color: #e8effa;
}
.history-actions {
margin-top: 8px;
display: flex;
gap: 8px;
}
.history-actions .geist-button-outline {
height: 28px;
font-size: 11px;
padding: 0 10px;
}
@media (max-width: 900px) {
#selectSeedBtn,
#applyParentBtn,
.action-row {
display: none !important;
}
.workbench-grid {
gap: 12px;
}
.panel {
padding: 12px;
border-radius: 12px;
}
.preview-shell {
min-height: 170px;
margin-top: 10px;
}
.drop-hint {
font-size: 11px;
padding: 4px 8px;
left: 8px;
right: 8px;
bottom: 8px;
}
.form-textarea {
min-height: 72px;
}
.history-list {
max-height: 42dvh;
gap: 8px;
}
.history-item {
grid-template-columns: 60px 1fr;
gap: 8px;
padding: 8px;
}
.history-thumb {
width: 60px;
height: 60px;
}
}
@media (max-width: 480px) {
.history-item {
grid-template-columns: 1fr;
}
.history-thumb {
width: 100%;
height: auto;
max-height: 170px;
}
}
/* ─── Workbench 移动端底部 Sticky 操作栏 ─── */
.wb-sticky-bar {
display: none; /* 桌面端不显示 */
}
@media (max-width: 900px) {
/* 防止内容被 sticky bar 遮挡 */
body {
padding-bottom: 72px;
}
/* -- Sticky Bar 本体 -- */
.wb-sticky-bar {
display: block;
position: fixed;
left: 0;
right: 0;
bottom: 0;
z-index: 200;
padding-bottom: env(safe-area-inset-bottom, 0px);
background: var(--workbench-surface, #fff);
border-top: 1px solid var(--workbench-border, #e6e8ec);
box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.07);
}
html[data-theme='dark'] .wb-sticky-bar {
background: #111821;
border-top-color: #2b3440;
box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.35);
}
/* -- Bar 内部:左图标区 + 右主按钮 -- */
.wb-sticky-bar-inner {
display: flex;
align-items: center;
gap: 8px;
height: 56px;
padding: 0 12px;
}
/* -- 左图标组 -- */
.wb-icon-group {
display: flex;
align-items: center;
gap: 6px;
flex-shrink: 0;
}
/* -- 单个图标按钮 -- */
.wb-icon-btn {
width: 40px;
height: 40px;
flex-shrink: 0;
border-radius: 10px;
border: 1px solid var(--workbench-border, #e6e8ec);
background: transparent;
color: var(--workbench-muted, #6b7280);
display: inline-flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: background 0.15s ease, color 0.15s ease;
}
.wb-icon-btn:active {
background: #f3f4f6;
}
html[data-theme='dark'] .wb-icon-btn {
border-color: #2b3440;
color: #8fa3bc;
}
html[data-theme='dark'] .wb-icon-btn:active {
background: #1a2130;
}
/* 危险操作(清空历史)提示色 */
.wb-icon-btn--danger:active {
color: #dc2626;
border-color: #fca5a5;
background: #fef2f2;
}
/* -- 右侧执行编辑主按钮 -- */
.wb-submit-btn {
flex: 1;
height: 40px;
font-size: 14px;
font-weight: 500;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
border-radius: 8px;
min-width: 0;
transition:
background-color .22s ease,
color .22s ease,
border-color .22s ease,
box-shadow .22s ease,
transform .18s ease;
}
.wb-submit-btn:disabled {
opacity: 0.6;
cursor: not-allowed;
}
.wb-submit-btn.is-editing {
background: #fee2e2 !important;
color: #ef4444 !important;
border: 1px solid #fecaca !important;
box-shadow: none;
}
.wb-submit-btn.is-editing:active {
transform: translateY(1px);
}
}
/* ============================
图片工作台 移动端 Sticky Bar(<=900px)
PC 端默认隐藏
============================ */
.wb-sticky-bar {
display: none !important;
}
@media (max-width: 900px) {
body {
padding-bottom: 72px !important;
}
.wb-sticky-bar {
display: flex !important;
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 200;
background: #fff;
border-top: 1px solid var(--border);
box-shadow: 0 -4px 24px rgba(0, 0, 0, 0.07);
padding: 10px 16px;
padding-bottom: calc(10px + env(safe-area-inset-bottom, 0px));
}
.wb-sticky-bar-inner {
display: flex;
align-items: center;
gap: 8px;
width: 100%;
}
.wb-icon-group {
display: flex;
align-items: center;
gap: 6px;
flex: 1;
}
/* 图标按钮:与 im-icon-btn 规范对齐(40px) */
.wb-icon-btn {
width: 40px;
height: 40px;
border: 1px solid var(--border);
border-radius: 10px;
background: #fff;
color: var(--fg);
display: inline-flex;
align-items: center;
justify-content: center;
cursor: pointer;
flex-shrink: 0;
transition: background .15s ease;
padding: 0;
}
.wb-icon-btn:active {
background: var(--accents-1);
}
.wb-icon-btn--danger {
color: #ef4444;
border-color: #fecaca;
}
.wb-icon-btn--danger:active {
background: #fef2f2;
}
/* 主按钮:与 im-main-btn 规范对齐(40px / 14px / 600) */
.wb-submit-btn {
height: 40px !important;
font-size: 14px !important;
font-weight: 600 !important;
border-radius: 10px !important;
padding: 0 18px !important;
min-width: 96px !important;
flex-shrink: 0;
margin-left: auto;
display: inline-flex;
align-items: center;
gap: 6px;
justify-content: center;
transition:
background-color .22s ease,
color .22s ease,
border-color .22s ease,
box-shadow .22s ease,
transform .18s ease;
}
.wb-submit-btn.is-editing {
background: #fee2e2 !important;
color: #ef4444 !important;
border: 1px solid #fecaca !important;
box-shadow: none;
}
.wb-submit-btn.is-editing:active {
transform: translateY(1px);
}
/* 暗色主题 */
html[data-theme='dark'] .wb-sticky-bar {
background: #111821;
border-top-color: #2b3440;
}
html[data-theme='dark'] .wb-icon-btn {
background: #1a2330;
border-color: #3b4654;
color: #c9d6e5;
}
html[data-theme='dark'] .wb-icon-btn:active {
background: #243244;
}
html[data-theme='dark'] .wb-submit-btn.is-editing {
background: #2d1414 !important;
color: #f87171 !important;
border-color: #7f1d1d !important;
}
}