:root { --wb-primary: #0077ff; --wb-primary-alt: #00b8ff; --wb-ink: #0f2a4b; --wb-subtle: #5f7da3; --wb-page: #eef5ff; --wb-panel: rgba(255, 255, 255, 0.76); --wb-card: rgba(255, 255, 255, 0.92); --wb-border: #d7e4f6; --wb-border-strong: #c7d8ef; --wb-grid: rgba(0, 102, 255, 0.08); --wb-shadow-lg: 0 24px 56px rgba(24, 74, 150, 0.16); --wb-shadow-md: 0 12px 30px rgba(20, 76, 154, 0.12); --el-color-primary: var(--wb-primary); --el-color-success: #17b26a; --el-color-warning: #f79009; --el-color-danger: #f04438; --el-bg-color: #f8fbff; --el-bg-color-page: var(--wb-page); --el-bg-color-overlay: #ffffff; --el-fill-color-blank: #ffffff; --el-border-color: var(--wb-border); --el-border-color-light: #e4edf9; --el-border-color-lighter: #edf3fb; --el-text-color-primary: var(--wb-ink); --el-text-color-regular: #26486f; --el-text-color-secondary: var(--wb-subtle); --el-text-color-placeholder: #8ca4c1; } * { box-sizing: border-box; } html, body, #app { height: 100%; overflow: hidden; } body { margin: 0; color: var(--el-text-color-primary); font-family: "Space Grotesk", "PingFang SC", "Microsoft YaHei", sans-serif; background: radial-gradient(circle at 15% 12%, rgba(0, 167, 255, 0.2), transparent 42%), radial-gradient(circle at 85% 8%, rgba(0, 98, 255, 0.17), transparent 44%), linear-gradient(180deg, #f9fcff 0%, #edf4ff 100%); position: relative; overflow: hidden; } body::before, body::after { content: ""; position: fixed; pointer-events: none; inset: 0; z-index: -1; } body::before { background-image: linear-gradient(transparent 31px, var(--wb-grid) 32px), linear-gradient(90deg, transparent 31px, var(--wb-grid) 32px); background-size: 32px 32px; opacity: 0.55; } body::after { background: radial-gradient(circle at 18% 78%, rgba(0, 168, 255, 0.16), transparent 34%), radial-gradient(circle at 80% 74%, rgba(0, 110, 255, 0.14), transparent 38%); } .app-root { height: 100%; overscroll-behavior: none; } .app-shell { height: 100vh; padding: 14px; gap: 12px; overscroll-behavior: none; } .app-aside { border: 1px solid var(--wb-border); border-radius: 22px; overflow: hidden; background: var(--wb-panel); backdrop-filter: blur(14px); box-shadow: var(--wb-shadow-lg); } .brand-panel { padding: 20px 16px 16px; border-bottom: 1px solid var(--el-border-color-light); } .brand-title { font-size: 18px; font-weight: 700; color: #083a72; letter-spacing: 0.4px; } .brand-sub { margin-top: 6px; font-size: 11px; font-weight: 600; letter-spacing: 1.4px; text-transform: uppercase; color: #6284af; } .app-menu { border-right: none !important; background: transparent !important; padding: 10px 8px 14px; } .app-menu .el-menu-item { height: 42px; margin-bottom: 6px; border-radius: 12px; color: #2f557f; font-weight: 600; } .app-menu .el-menu-item .el-icon { font-size: 16px; margin-right: 10px; } .app-menu .el-menu-item:hover { background: rgba(0, 122, 255, 0.12); color: #005ac0; } .app-menu .el-menu-item.is-active { color: #ffffff !important; background: linear-gradient(135deg, #0084ff 0%, #00b0ff 100%); box-shadow: 0 10px 22px rgba(0, 129, 255, 0.3); } .app-main { border: 1px solid var(--wb-border); border-radius: 22px; padding: 0 !important; overflow: hidden !important; display: flex; flex-direction: column; background: var(--wb-panel); backdrop-filter: blur(14px); box-shadow: var(--wb-shadow-lg); } .app-topbar { height: 58px; padding: 0 18px; border-bottom: 1px solid var(--el-border-color-light); background: linear-gradient(180deg, rgba(255, 255, 255, 0.98), rgba(246, 250, 255, 0.92)); display: flex; align-items: center; justify-content: space-between; gap: 12px; } .topbar-title { font-size: 13px; font-weight: 600; letter-spacing: 0.6px; text-transform: uppercase; color: #6584ac; } .topbar-right { margin-left: auto; display: flex; align-items: center; gap: 10px; } .auth-pill { padding: 6px 10px; border-radius: 999px; font-size: 12px; color: #0b4d94; border: 1px solid #b8d8ff; background: linear-gradient(120deg, #eaf6ff 0%, #f4fbff 100%); } .content-stage { flex: 1; min-height: 0; display: flex; flex-direction: column; overscroll-behavior: contain; } .panel-page { flex: 1; min-height: 0; display: flex; flex-direction: column; overscroll-behavior: contain; } .panel-scroll { flex: 1; overflow-y: auto; padding: 18px; overscroll-behavior: contain; } .panel-loading { padding: 40px; text-align: center; color: var(--el-text-color-placeholder); } .panel-footer { padding: 12px 18px; border-top: 1px solid var(--el-border-color-light); display: flex; justify-content: flex-end; background: rgba(251, 253, 255, 0.8); } .log-toolbar { padding: 10px 16px; display: flex; align-items: center; gap: 10px; border-bottom: 1px solid var(--el-border-color-light); background: linear-gradient(180deg, rgba(255, 255, 255, 0.95), rgba(246, 250, 255, 0.8)); } .log-search { width: 260px; } .log-status { margin-left: auto; display: inline-flex; align-items: center; gap: 7px; font-size: 12px; color: #5f7ca1; } .status-dot { width: 9px; height: 9px; border-radius: 50%; background: #9ab4d8; box-shadow: 0 0 0 4px rgba(154, 180, 216, 0.2); } .log-status.is-online .status-dot { background: #0fb772; box-shadow: 0 0 0 4px rgba(15, 183, 114, 0.16); } .log-status.is-offline .status-dot { background: #f04438; box-shadow: 0 0 0 4px rgba(240, 68, 56, 0.14); } .log-stream { flex: 1; overflow-y: auto; padding: 12px 16px 16px; font-family: "JetBrains Mono", "Cascadia Code", "Consolas", monospace; font-size: 13px; line-height: 1.65; overscroll-behavior: contain; } .log-line { padding: 2px 0; white-space: pre-wrap; word-break: break-word; } .config-card { margin-bottom: 14px; } .config-card-header { display: flex; align-items: baseline; gap: 8px; } .config-card-title { font-weight: 700; } .config-card-section { color: var(--el-text-color-placeholder); font-size: 12px; } .config-row { display: flex; align-items: center; padding: 10px 0; gap: 12px; border-bottom: 1px dashed var(--el-border-color-light); } .config-key { width: 220px; flex-shrink: 0; color: #4f7097; font-size: 13px; font-weight: 600; } .config-val { flex: 1; } .config-tags { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; } .plugin-card { margin-bottom: 12px; } .plugin-main { display: flex; align-items: center; gap: 14px; } .plugin-info { flex: 1; min-width: 0; } .plugin-title { display: flex; align-items: center; gap: 8px; } .plugin-name { font-size: 15px; font-weight: 700; } .plugin-version { font-size: 12px; color: var(--el-text-color-placeholder); } .plugin-desc { font-size: 13px; color: var(--el-text-color-secondary); margin-top: 4px; } .plugin-meta { font-size: 12px; color: var(--el-text-color-placeholder); margin-top: 4px; } .plugin-actions { display: inline-flex; align-items: center; gap: 8px; } .dialog-body-scroll { max-height: 60vh; overflow-y: auto; overscroll-behavior: contain; } .security-wrap { max-width: 680px; } .login-page { height: 100%; display: flex; align-items: center; justify-content: center; padding: 16px; } .login-card { width: min(92vw, 430px); } .login-title { font-size: 21px; font-weight: 700; color: #0d335f; letter-spacing: 0.4px; } .login-subtitle { margin-top: 6px; font-size: 13px; color: #6b87ab; } .el-card { border-radius: 18px; border: 1px solid var(--wb-border); background: var(--wb-card); box-shadow: var(--wb-shadow-md); } .el-card__header { border-bottom: 1px solid var(--el-border-color-light); } .el-dialog { border-radius: 20px; overflow: hidden; } .el-dialog__header { margin-right: 0; padding: 16px 18px; border-bottom: 1px solid var(--el-border-color-light); background: linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(249, 252, 255, 0.86)); } .el-dialog__body { padding: 16px 18px; } .el-dialog__footer { padding: 10px 18px 16px; } .el-input__wrapper, .el-textarea__inner, .el-input-number__decrease, .el-input-number__increase, .el-input-number .el-input__wrapper { border-radius: 12px !important; } .el-input__wrapper, .el-textarea__inner, .el-input-number .el-input__wrapper { box-shadow: 0 0 0 1px var(--wb-border-strong) inset !important; background: #f8fbff; } .el-input__wrapper.is-focus, .el-textarea__inner:focus, .el-input-number .el-input__wrapper.is-focus { box-shadow: 0 0 0 2px rgba(0, 119, 255, 0.22) inset !important; } .el-button { border-radius: 12px; font-weight: 600; } .el-button--primary { border: none; color: #ffffff; background: linear-gradient(135deg, var(--wb-primary) 0%, var(--wb-primary-alt) 100%); box-shadow: 0 10px 22px rgba(0, 123, 255, 0.26); } .el-button--primary:hover { color: #ffffff; filter: brightness(1.04); } .el-tag { border-radius: 999px; } .el-alert { border-radius: 14px; } @media (max-width: 980px) { .app-shell { padding: 10px; gap: 8px; } .app-aside { width: 86px !important; min-width: 86px !important; border-radius: 16px; } .brand-panel { padding: 14px 8px; } .brand-title { font-size: 13px; text-align: center; } .brand-sub { display: none; } .app-menu { padding: 8px 6px 10px; } .app-menu .el-menu-item { justify-content: center; padding: 0 !important; } .app-menu .el-menu-item .el-icon { margin-right: 0; } .app-menu .el-menu-item span { display: none; } .app-topbar { height: 52px; padding: 0 12px; } .topbar-title { display: none; } .log-search { width: 180px; } .config-key { width: 132px; } } @media (max-width: 720px) { .log-toolbar { flex-wrap: wrap; justify-content: flex-start; } .log-search { width: 100%; } .log-status { margin-left: 0; } .plugin-main { flex-direction: column; align-items: flex-start; gap: 12px; } .plugin-actions { width: 100%; justify-content: flex-end; } .config-row { align-items: flex-start; flex-direction: column; gap: 8px; } .config-key { width: 100%; } }