message / app /static /plugin-ui.css
hunian
Refactor video audio extractor plugin and enhance functionality
e5e756a
Raw
History Blame Contribute Delete
12.4 kB
:root {
--plugin-bg: #eef2f6;
--plugin-surface: #ffffff;
--plugin-surface-raised: #f9fbfd;
--plugin-surface-muted: #f2f5f8;
--plugin-border: #d8e0ea;
--plugin-border-strong: #aebccc;
--plugin-text: #17202d;
--plugin-text-soft: #344256;
--plugin-muted: #64748b;
--plugin-muted-strong: #475569;
--plugin-accent: #2563eb;
--plugin-accent-strong: #1d4ed8;
--plugin-accent-soft: #eff6ff;
--plugin-success: #047857;
--plugin-success-soft: #ecfdf5;
--plugin-warning: #a16207;
--plugin-warning-soft: #fffbeb;
--plugin-error: #b42318;
--plugin-error-soft: #fff1f2;
--plugin-focus: #93c5fd;
--plugin-radius: 8px;
}
* {
box-sizing: border-box;
}
html {
min-width: 0;
color-scheme: light;
}
body {
margin: 0;
padding: 24px;
color: var(--plugin-text);
background: var(--plugin-bg);
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 14px;
line-height: 1.5;
text-rendering: optimizeLegibility;
}
button,
input,
select,
textarea {
font: inherit;
}
button,
label,
select,
input[type="checkbox"],
input[type="file"] {
cursor: pointer;
}
.plugin-shell {
width: min(1160px, 100%);
min-height: 100vh;
margin: 0 auto;
}
.plugin-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 16px;
margin-bottom: 14px;
padding: 14px 16px;
border: 1px solid var(--plugin-border);
border-radius: var(--plugin-radius);
background: var(--plugin-surface);
}
.plugin-title {
margin: 0;
color: var(--plugin-text);
font-size: 20px;
line-height: 1.25;
font-weight: 750;
letter-spacing: 0;
text-wrap: balance;
}
.plugin-subtitle {
max-width: 72ch;
margin: 5px 0 0;
color: var(--plugin-muted-strong);
font-size: 13px;
text-wrap: pretty;
}
.plugin-grid {
display: grid;
grid-template-columns: minmax(300px, 380px) minmax(0, 1fr);
gap: 12px;
align-items: stretch;
}
.plugin-grid.equal {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.plugin-panel {
min-width: 0;
height: 100%;
background: var(--plugin-surface);
border: 1px solid var(--plugin-border);
border-radius: var(--plugin-radius);
padding: 14px;
}
.plugin-panel + .plugin-panel {
margin-top: 12px;
}
.plugin-grid > .plugin-panel + .plugin-panel {
margin-top: 0;
}
.plugin-grid + .plugin-panel {
margin-top: 12px;
}
.plugin-panel-title {
margin: 0 0 12px;
color: var(--plugin-text);
font-size: 13px;
line-height: 1.25;
font-weight: 750;
}
.plugin-stack {
display: flex;
flex-direction: column;
gap: 11px;
}
.plugin-row {
display: flex;
gap: 8px;
align-items: center;
flex-wrap: wrap;
}
.plugin-field {
display: flex;
min-width: 0;
flex-direction: column;
gap: 6px;
}
.plugin-label {
color: var(--plugin-muted-strong);
font-size: 12px;
font-weight: 700;
}
input,
select,
textarea {
width: 100%;
min-width: 0;
border: 1px solid var(--plugin-border-strong);
border-radius: 7px;
padding: 8px 10px;
color: var(--plugin-text);
background: #fff;
outline: none;
transition: border-color 160ms ease, box-shadow 160ms ease, background 160ms ease;
}
input:hover,
select:hover,
textarea:hover {
border-color: #8fa2b8;
}
input:focus,
select:focus,
textarea:focus {
border-color: var(--plugin-accent);
box-shadow: 0 0 0 3px var(--plugin-focus);
}
input::placeholder,
textarea::placeholder {
color: #5f6f84;
}
textarea {
min-height: 170px;
resize: vertical;
line-height: 1.55;
}
input[type="file"] {
padding: 6px;
background: var(--plugin-surface-raised);
}
input[type="file"]::file-selector-button {
margin-right: 10px;
border: 1px solid var(--plugin-border);
border-radius: 6px;
padding: 7px 10px;
color: var(--plugin-text);
background: #fff;
font-weight: 650;
}
input[type="checkbox"] {
width: 15px;
height: 15px;
accent-color: var(--plugin-accent);
}
.plugin-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
min-height: 34px;
border: 1px solid transparent;
border-radius: 7px;
padding: 8px 12px;
color: #fff;
background: var(--plugin-accent);
font-weight: 700;
cursor: pointer;
text-decoration: none;
transition: background 160ms ease, border-color 160ms ease, color 160ms ease, transform 120ms ease;
}
.plugin-button:hover {
background: var(--plugin-accent-strong);
}
.plugin-button:active {
transform: translateY(1px);
}
.plugin-button.secondary {
color: var(--plugin-text-soft);
background: var(--plugin-surface-muted);
border-color: var(--plugin-border);
}
.plugin-button.secondary:hover {
color: var(--plugin-text);
background: #e8eef5;
border-color: var(--plugin-border-strong);
}
.plugin-button.danger {
background: var(--plugin-error);
}
.plugin-button:focus-visible {
outline: none;
box-shadow: 0 0 0 3px var(--plugin-focus);
}
.plugin-button:disabled {
opacity: .55;
cursor: not-allowed;
transform: none;
}
.plugin-status {
display: inline-flex;
align-items: center;
white-space: nowrap;
border: 1px solid var(--plugin-border);
border-radius: 999px;
padding: 4px 9px;
color: var(--plugin-muted-strong);
background: var(--plugin-surface-muted);
font-size: 12px;
font-weight: 750;
}
.plugin-status.ok {
color: var(--plugin-success);
border-color: #a7d8c2;
background: var(--plugin-success-soft);
}
.plugin-status.warn {
color: var(--plugin-warning);
border-color: #e9ca84;
background: var(--plugin-warning-soft);
}
.plugin-status.error {
color: var(--plugin-error);
border-color: #f0afa9;
background: var(--plugin-error-soft);
}
.plugin-message {
display: none;
margin-bottom: 12px;
border: 1px solid var(--plugin-border);
border-radius: var(--plugin-radius);
padding: 10px 12px;
color: var(--plugin-muted-strong);
background: var(--plugin-surface);
white-space: pre-wrap;
}
.plugin-message.show {
display: block;
}
.plugin-message.success {
color: var(--plugin-success);
border-color: #a7d8c2;
background: var(--plugin-success-soft);
}
.plugin-message.error {
color: var(--plugin-error);
border-color: #f0afa9;
background: var(--plugin-error-soft);
}
.plugin-output {
min-height: 80px;
max-height: 430px;
overflow: auto;
border: 1px solid var(--plugin-border);
border-radius: var(--plugin-radius);
padding: 12px;
color: var(--plugin-text-soft);
background: var(--plugin-surface-raised);
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
font-size: 12px;
line-height: 1.55;
white-space: pre-wrap;
word-break: break-word;
}
.plugin-table {
width: 100%;
border-collapse: separate;
border-spacing: 0;
overflow: hidden;
border: 1px solid var(--plugin-border);
border-radius: var(--plugin-radius);
}
.plugin-table th,
.plugin-table td {
border-bottom: 1px solid var(--plugin-border);
padding: 10px;
text-align: left;
vertical-align: top;
}
.plugin-table tr:last-child td {
border-bottom: 0;
}
.plugin-table th {
color: var(--plugin-muted-strong);
background: var(--plugin-surface-muted);
font-size: 12px;
font-weight: 750;
}
.plugin-drop {
border: 1px dashed var(--plugin-border-strong);
border-radius: var(--plugin-radius);
padding: 18px;
color: var(--plugin-muted-strong);
background: var(--plugin-surface-raised);
text-align: center;
}
.plugin-list {
display: flex;
flex-direction: column;
gap: 8px;
}
.plugin-kv {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 8px;
}
.plugin-kv-item {
border: 1px solid var(--plugin-border);
border-radius: var(--plugin-radius);
padding: 10px;
background: var(--plugin-surface-raised);
}
.plugin-kv-label {
display: block;
margin-bottom: 4px;
color: var(--plugin-muted-strong);
font-size: 12px;
font-weight: 700;
}
.plugin-kv-value {
color: var(--plugin-text);
font-weight: 750;
word-break: break-word;
}
.plugin-item {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
border: 1px solid var(--plugin-border);
border-radius: var(--plugin-radius);
padding: 10px;
background: var(--plugin-surface-raised);
}
.plugin-muted {
color: var(--plugin-muted-strong);
}
/* ============================================================
Run Log 组件样式
============================================================ */
.run-log-panel {
display: flex;
flex-direction: column;
gap: 0;
}
/* 运行状态指示器 */
.run-log-status {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 10px;
margin-bottom: 10px;
border: 1px solid var(--plugin-border);
border-radius: var(--plugin-radius);
background: var(--plugin-surface-raised);
font-size: 12px;
font-weight: 650;
}
.run-log-status-dot {
width: 9px;
height: 9px;
border-radius: 50%;
background: var(--plugin-muted);
flex-shrink: 0;
}
.run-log-status-dot--running {
background: var(--plugin-accent);
animation: run-log-pulse 1.2s ease-in-out infinite;
}
.run-log-status-dot--done {
background: var(--plugin-success);
}
.run-log-status-dot--error {
background: var(--plugin-error);
}
@keyframes run-log-pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.4; }
}
/* 日志列表 */
.run-log-list {
flex: 1;
min-height: 80px;
max-height: 380px;
overflow-y: auto;
display: flex;
flex-direction: column;
gap: 4px;
}
/* 单条日志 */
.run-log-entry {
padding: 8px 10px;
border-left: 3px solid var(--plugin-border);
border-radius: 0 5px 5px 0;
background: var(--plugin-surface-raised);
font-size: 12px;
}
.run-log-entry--warn {
border-left-color: var(--plugin-warning);
background: var(--plugin-warning-soft);
}
.run-log-entry--error {
border-left-color: var(--plugin-error);
background: var(--plugin-error-soft);
}
/* 日志头部:时间 + 阶段 + 级别 */
.run-log-entry-header {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 3px;
}
.run-log-entry-ts {
color: var(--plugin-muted);
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-size: 11px;
}
.run-log-entry-stage {
color: var(--plugin-muted-strong);
font-weight: 700;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.03em;
}
.run-log-entry-level {
display: inline-block;
padding: 1px 6px;
border-radius: 4px;
font-size: 10px;
font-weight: 750;
}
.run-log-level--info {
color: var(--plugin-accent);
background: var(--plugin-accent-soft);
}
.run-log-level--warning {
color: var(--plugin-warning);
background: var(--plugin-warning-soft);
}
.run-log-level--error {
color: var(--plugin-error);
background: var(--plugin-error-soft);
}
.run-log-level--debug {
color: var(--plugin-muted-strong);
background: var(--plugin-surface-muted);
}
/* 日志消息 */
.run-log-entry-message {
color: var(--plugin-text-soft);
line-height: 1.45;
}
/* 详情折叠 */
.run-log-entry-detail {
margin-top: 4px;
}
.run-log-entry-detail summary {
color: var(--plugin-muted-strong);
font-size: 11px;
cursor: pointer;
}
.run-log-entry-detail pre {
margin: 4px 0 0;
padding: 6px 8px;
border-radius: 5px;
background: var(--plugin-surface-muted);
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-size: 11px;
white-space: pre-wrap;
word-break: break-word;
max-height: 120px;
overflow-y: auto;
}
/* artifact 链接 */
.run-log-entry-artifact {
margin-top: 4px;
font-size: 11px;
color: var(--plugin-muted-strong);
}
.run-log-artifact-icon {
margin-right: 3px;
}
code {
border: 1px solid var(--plugin-border);
border-radius: 5px;
padding: 2px 5px;
color: var(--plugin-text-soft);
background: var(--plugin-surface-muted);
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
font-size: 12px;
}
@media (max-width: 760px) {
body {
padding: 16px;
}
.plugin-header,
.plugin-item {
flex-direction: column;
align-items: stretch;
}
.plugin-grid,
.plugin-grid.equal {
grid-template-columns: 1fr;
}
.plugin-button {
width: 100%;
}
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
scroll-behavior: auto !important;
transition-duration: 0.01ms !important;
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
}
}