Files
frpc-console/static/style-4.css
T
2026-07-25 23:36:13 +08:00

339 lines
6.9 KiB
CSS
Raw 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.
/* ===== style-4.css - v1.5 新增样式 ===== */
/* ---------- 配置页面 ---------- */
.config-tab-content {
padding-bottom: 20px;
}
.config-page-header {
margin-bottom: 12px;
}
.config-page-header h2 {
font-size: 18px;
font-weight: 500;
color: var(--text-primary);
margin-bottom: 2px;
}
.config-subtitle {
font-size: 13px;
color: var(--text-dim);
}
/* 首次使用提示 */
.config-tip {
background: rgba(255, 200, 50, 0.08);
border: 1px solid rgba(255, 200, 50, 0.15);
border-radius: 10px;
padding: 10px 16px;
font-size: 13px;
color: #f0c040;
margin-bottom: 16px;
}
/* ---------- 配置卡片 ---------- */
.config-card {
background: rgba(255, 255, 255, 0.02);
border: 1px solid var(--border-subtle);
border-radius: 14px;
padding: 16px 20px;
margin-bottom: 14px;
}
.config-card-header {
display: flex;
align-items: center;
gap: 10px;
padding-bottom: 10px;
border-bottom: 1px solid var(--border-subtle);
margin-bottom: 14px;
}
.card-title {
font-size: 14px;
font-weight: 500;
color: var(--text-secondary);
}
.config-card-body {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px 24px;
}
.config-card-body .form-row {
display: flex;
flex-direction: column;
gap: 4px;
}
.config-card-body .form-row label {
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--text-dim);
}
.config-card-body .form-row input,
.config-card-body .form-row select {
padding: 8px 12px;
background: rgba(255, 255, 255, 0.04);
border: 1px solid var(--border-subtle);
border-radius: 8px;
color: #fff;
font-size: 14px;
outline: none;
transition: border-color 0.3s;
width: 100%;
}
.config-card-body .form-row input:focus,
.config-card-body .form-row select:focus {
border-color: var(--primary-blue-border);
}
/* 数字输入框统一宽度 */
.config-card-body .form-row input[type="number"] {
width: 100%;
max-width: 120px;
}
/* 只读行(TCP Mux */
.readonly-value {
display: flex;
align-items: center;
gap: 10px;
padding: 8px 12px;
background: rgba(255, 255, 255, 0.02);
border-radius: 8px;
}
.readonly-value .status-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: #63e2b7;
box-shadow: 0 0 10px rgba(99, 226, 183, 0.3);
flex-shrink: 0;
}
.readonly-value .status-text.active {
color: #63e2b7;
font-size: 13px;
}
.readonly-value .hint-text {
font-size: 12px;
color: var(--text-dim);
margin-left: 8px;
}
/* Token 输入框 + 显示按钮 */
.token-input-wrapper {
display: flex;
gap: 8px;
}
.token-input-wrapper input {
flex: 1;
}
.token-toggle-btn {
padding: 8px 16px;
background: rgba(255, 255, 255, 0.06);
border: 1px solid var(--border-subtle);
border-radius: 8px;
color: var(--text-secondary);
font-size: 12px;
cursor: pointer;
white-space: nowrap;
}
.token-toggle-btn:hover {
background: rgba(255, 255, 255, 0.1);
}
/* ---------- v2 协议开关(灰标禁用) ---------- */
.v2-switch-row {
grid-column: 1 / -1 !important;
padding-top: 4px;
border-top: 1px solid var(--border-subtle);
margin-top: 4px;
}
.v2-switch-wrapper {
display: flex;
align-items: center;
gap: 14px;
padding: 6px 0;
}
/* 禁用状态开关 - 灰标 */
.switch.disabled {
opacity: 0.4;
cursor: not-allowed;
pointer-events: none;
}
.switch.disabled .slider {
background: rgba(255, 255, 255, 0.08);
}
.switch.disabled input:checked + .slider {
background: rgba(74, 124, 255, 0.25);
}
.switch.disabled .slider::before {
background: #3a3a4a;
}
/* "即将推出" 徽章 */
.v2-badge {
font-size: 11px;
padding: 2px 12px;
background: rgba(255, 200, 50, 0.12);
border: 1px solid rgba(255, 200, 50, 0.15);
border-radius: 12px;
color: #f0c040;
letter-spacing: 0.5px;
font-weight: 500;
}
.v2-hint {
font-size: 12px;
color: var(--text-dim);
line-height: 1.5;
padding: 2px 0 4px;
display: block;
}
/* ---------- 日志面板 ---------- */
.log-tab-content {
display: flex;
flex-direction: column;
height: 100%;
min-height: 400px;
}
.log-toolbar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 0 12px;
flex-shrink: 0;
flex-wrap: wrap;
gap: 10px;
}
.log-toolbar-left {
display: flex;
align-items: center;
gap: 14px;
}
.log-toolbar-right {
display: flex;
align-items: center;
gap: 10px;
}
.log-info-badge {
font-size: 13px;
color: var(--text-secondary);
}
.log-error-badge {
font-size: 13px;
color: #f87171;
}
.log-auto-scroll-label {
font-size: 13px;
color: var(--text-secondary);
display: flex;
align-items: center;
gap: 6px;
cursor: pointer;
}
.log-auto-scroll-label input[type="checkbox"] {
width: 16px;
height: 16px;
accent-color: var(--primary-blue);
cursor: pointer;
}
.log-btn {
padding: 6px 14px;
background: rgba(255, 255, 255, 0.04);
border: 1px solid var(--border-subtle);
border-radius: 8px;
color: var(--text-secondary);
font-size: 13px;
cursor: pointer;
transition: background 0.2s;
}
.log-btn:hover {
background: rgba(255, 255, 255, 0.08);
}
/* 终端样式(类似命令行) */
.log-terminal {
flex: 1;
background: rgba(0, 0, 0, 0.6);
border-radius: 12px;
border: 1px solid var(--border-subtle);
padding: 12px 16px;
overflow-y: auto;
font-family: 'JetBrains Mono', 'Consolas', monospace;
font-size: 13px;
line-height: 1.7;
min-height: 300px;
max-height: 500px;
}
.log-terminal::-webkit-scrollbar {
width: 6px;
}
.log-terminal::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.02);
border-radius: 4px;
}
.log-terminal::-webkit-scrollbar-thumb {
background: rgba(74, 124, 255, 0.25);
border-radius: 4px;
}
.log-terminal::-webkit-scrollbar-thumb:hover {
background: rgba(74, 124, 255, 0.4);
}
.log-lines {
display: flex;
flex-direction: column;
}
.log-line {
color: #c0c0c0;
white-space: pre-wrap;
word-break: break-all;
padding: 1px 0;
}
.log-line:hover {
background: rgba(255, 255, 255, 0.02);
}
.log-empty {
color: var(--text-dim);
text-align: center;
padding: 40px 0;
}
/* 日志底部状态 */
.log-footer {
display: flex;
justify-content: space-between;
padding: 10px 4px 0;
font-size: 12px;
color: var(--text-dim);
flex-shrink: 0;
}
.log-polling-status {
color: var(--primary-blue);
}
/* ---------- 响应式调整 ---------- */
@media (max-width: 768px) {
.config-card-body {
grid-template-columns: 1fr;
}
.log-toolbar {
flex-direction: column;
align-items: stretch;
}
.log-toolbar-right {
flex-wrap: wrap;
}
.token-input-wrapper {
flex-wrap: wrap;
}
.v2-switch-wrapper {
flex-wrap: wrap;
}
}