Files
homeutils/src/main/resources/css/light-theme.css
T
张家训 7785f58b1e 建立统一异步状态机、任务控制器、线程池、Loading 按钮绑定和进度状态栏。
Scanner、MyBatis SQL 导出迁移到统一异步流程。
Scanner 普通搜索改为字面量匹配,正则模式才解释正则。
不支持真实中断的扫描任务不再显示误导性的“停止”按钮。
修复默认插件 ID 配置错误:首次运行从只能加载 3/8 修正为启用 7/8。
将请求参数、校验和执行编排从 Window 中分离,减少 UI 类职责。
新增状态迁移、并发执行、按钮文案、请求校验和插件配置测试。
2026-07-30 20:54:52 +08:00

470 lines
11 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.
/* ============================================================
WorkUtils Light Theme — 基于 AtlantaFX PrimerLight
定义所有项目自定义样式类,覆盖 AtlantaFX 默认
============================================================ */
/* ---- 根变量 ---- */
.root {
-workutils-bg: #f8fafc;
-workutils-surface: #ffffff;
-workutils-card: #f1f5f9;
-workutils-border: #e2e8f0;
-workutils-text: #1e293b;
-workutils-text-secondary: #64748b;
-workutils-text-muted: #94a3b8;
-workutils-primary: #2563eb;
-workutils-danger: #ef4444;
-workutils-warning: #f59e0b;
-workutils-success: #10b981;
-workutils-nav-bg: #1e293b;
-workutils-nav-text: #ffffff;
-workutils-nav-hover: rgba(255,255,255,0.10);
-workutils-nav-active: rgba(37,99,235,0.35);
-workutils-nav-bar: #2563eb;
}
/* ---- 导航栏 ---- */
.nav-bar {
-fx-background-color: -workutils-nav-bg;
}
.nav-brand {
-fx-text-fill: white;
-fx-padding: 18 14 18 14;
-fx-font-weight: bold;
}
.nav-separator {
-fx-background-color: rgba(255,255,255,0.1);
}
/* ============ ListView 导航(JavaFX 标准化方案) ============ */
.nav-list {
-fx-background-color: transparent;
-fx-background-insets: 0;
-fx-border-width: 0;
-fx-padding: 0;
}
/* 强制 ListView 所有内部容器透明,确保空区域不显示杂色 */
.nav-list,
.nav-list > *,
.nav-list .list-view,
.nav-list .viewport,
.nav-list .virtual-flow,
.nav-list .virtual-flow > *,
.nav-list .clipped-container,
.nav-list .sheet,
.nav-list .corner {
-fx-background-color: transparent;
-fx-background-insets: 0;
}
.nav-list .list-cell,
.nav-list .list-cell:empty,
.nav-list .list-cell:filled:empty {
-fx-background-color: transparent;
}
/* 滚动条美化 */
.nav-list .scroll-bar:vertical {
-fx-background-color: transparent;
-fx-pref-width: 6;
}
.nav-list .scroll-bar .thumb {
-fx-background-color: rgba(255,255,255,0.15);
-fx-background-radius: 3;
}
.nav-list .scroll-bar .thumb:hover {
-fx-background-color: rgba(255,255,255,0.25);
}
.nav-list .scroll-bar .increment-button,
.nav-list .scroll-bar .decrement-button {
-fx-background-color: transparent;
-fx-padding: 0;
}
/* 每个导航项(Cell) */
.nav-cell {
-fx-background-color: transparent;
-fx-background-radius: 0;
-fx-background-insets: 0;
-fx-padding: 10 14 10 14;
-fx-cursor: hand;
-fx-border-width: 0;
/* 平滑过渡背景色和文字色 */
-fx-transition: -fx-background-color 150ms ease-out;
}
.nav-cell .label {
-fx-text-fill: white;
/* 深色背景下的文字阴影,提升对比度 */
-fx-effect: dropshadow(gaussian, rgba(0,0,0,0.45), 3, 0, 0, 1);
-fx-transition: -fx-text-fill 150ms ease-out,
-fx-effect 150ms ease-out;
}
/* 移除 JavaFX ListCell 默认焦点环(让选中态边框干净) */
.nav-list .list-cell {
-fx-focus-color: transparent;
-fx-faint-focus-color: transparent;
-fx-border-color: transparent;
-fx-border-width: 0;
}
/* 强制空 cell 完全透明(含 placeholder、footer 等场景) */
.nav-list .list-cell:empty,
.nav-list .list-cell:filled:empty {
-fx-background-color: transparent !important;
}
/* hover 状态 */
.nav-cell:hover {
-fx-background-color: -workutils-nav-hover;
}
/* 兜底:所有 selected cell(含 empty)默认透明,防止虚拟化复用时空 cell 闪现蓝色 */
.nav-list .list-cell:selected {
-fx-background-color: transparent;
}
/* selected 状态:强制 padding、background-insets、文字色一致
关键:用 :filled:selected 而非自定义 class,避免 JavaFX 内置样式覆盖 */
.nav-list .list-cell:filled:selected {
-fx-background-color: -workutils-nav-active;
-fx-background-insets: 0;
-fx-padding: 10 14 10 14;
}
.nav-list .list-cell:filled:selected .label {
-fx-text-fill: white !important;
-fx-font-weight: 600;
/* 移除 dropshadow,让文字干净锐利 */
-fx-effect: null !important;
}
.nav-list .list-cell:filled:selected .nav-indicator {
-fx-fill: #2563eb;
-fx-effect: dropshadow(gaussian, #60a5fa, 6, 0, 0, 0);
}
/* 兼容:之前手动加的 .nav-cell-active 类名也支持 */
.nav-cell-active {
-fx-background-color: -workutils-nav-active;
-fx-background-insets: 0;
-fx-padding: 10 14 10 14;
}
/* 按下状态:微妙的反馈 */
.nav-cell:pressed {
-fx-background-color: rgba(96,165,250,0.35);
}
/* ListView 自身获得焦点时也保持透明,不显示蓝色环 */
.nav-list:focused {
-fx-background-color: transparent;
-fx-border-color: transparent;
}
/* 左侧指示条 */
.nav-indicator {
-fx-fill: transparent;
-fx-arc-width: 2;
-fx-arc-height: 2;
-fx-transition: -fx-fill 150ms ease-out;
}
.nav-cell-active .nav-indicator {
-fx-fill: #2563eb;
-fx-effect: dropshadow(gaussian, #60a5fa, 6, 0, 0, 0);
}
/* 点击涟漪层 */
.nav-ripple {
-fx-fill: rgba(96,165,250,0.4);
-fx-opacity: 0;
}
.nav-version {
-fx-text-fill: -workutils-text-muted;
-fx-padding: 10 14 10 14;
}
/* ---- 顶栏 ---- */
.header-bar {
-fx-background-color: -workutils-surface;
-fx-border-width: 0 0 1 0;
-fx-border-color: -workutils-border;
-fx-pref-height: 48;
}
/* ---- 内容区 ---- */
.content-area {
-fx-background-color: -workutils-bg;
}
/* ---- 卡片 ---- */
.card {
-fx-background-color: -workutils-surface;
-fx-background-radius: 6;
-fx-border-color: -workutils-border;
-fx-border-radius: 6;
-fx-border-width: 1;
}
/* ---- 按钮增强 ---- */
.btn-primary {
-fx-background-color: -workutils-primary;
-fx-text-fill: white;
-fx-font-weight: bold;
-fx-background-radius: 4;
-fx-cursor: hand;
}
.btn-primary:hover {
-fx-background-color: derive(-workutils-primary, -12%);
}
.btn-danger {
-fx-background-color: -workutils-danger;
-fx-text-fill: white;
-fx-background-radius: 4;
-fx-cursor: hand;
}
.btn-danger:hover {
-fx-background-color: derive(-workutils-danger, -12%);
}
.btn-success {
-fx-background-color: -workutils-success;
-fx-text-fill: white;
-fx-background-radius: 4;
-fx-cursor: hand;
}
.btn-warning {
-fx-background-color: -workutils-warning;
-fx-text-fill: white;
-fx-background-radius: 4;
-fx-cursor: hand;
}
.btn-small {
-fx-background-color: -workutils-card;
-fx-text-fill: -workutils-text-secondary;
-fx-background-radius: 4;
-fx-padding: 4 12 4 12;
-fx-cursor: hand;
}
.btn-small:hover {
-fx-background-color: -workutils-border;
}
/* ---- 文本域 ---- */
.text-field-default {
-fx-border-color: -workutils-border;
-fx-border-width: 1;
-fx-border-radius: 4;
-fx-background-radius: 4;
-fx-padding: 6 10;
}
.text-area-default {
-fx-border-color: -workutils-border;
-fx-border-width: 1;
-fx-border-radius: 4;
-fx-background-radius: 4;
-fx-background-insets: 0;
-fx-padding: 8;
}
/* ---- 日志区 ---- */
.log-area {
-fx-control-inner-background: #f8fafc;
-fx-text-fill: -workutils-text;
-fx-border-color: -workutils-border;
-fx-border-width: 1;
-fx-border-radius: 4;
-fx-background-radius: 4;
}
/* ---- 状态栏 ---- */
.status-bar {
-fx-background-color: -workutils-card;
-fx-border-width: 1 0 0 0;
-fx-border-color: -workutils-border;
-fx-text-fill: -workutils-text-secondary;
-fx-padding: 8 12 8 12;
}
/* ---- DB 信息栏 ---- */
.db-info-bar {
-fx-background-color: derive(#2563eb, 90%);
-fx-background-radius: 6;
}
.db-info-box {
-fx-border-color: -workutils-border;
-fx-border-width: 1;
-fx-border-radius: 4;
-fx-background-color: white;
-fx-background-radius: 4;
}
/* ---- 表格 ---- */
.table-default {
-fx-background-color: white;
-fx-border-color: -workutils-border;
-fx-border-width: 1;
-fx-border-radius: 4;
}
/* ---- 标题 ---- */
.section-title {
-fx-font-weight: bold;
-fx-text-fill: -workutils-text;
}
.hint-text {
-fx-text-fill: -workutils-text-secondary;
}
.muted-text {
-fx-text-fill: -workutils-text-muted;
}
.danger-text {
-fx-text-fill: -workutils-danger;
}
.warning-text {
-fx-text-fill: -workutils-warning;
}
/* ---- 欢迎页 ---- */
.welcome-page {
-fx-background-color: -workutils-bg;
}
.welcome-heading {
-fx-font-weight: bold;
-fx-text-fill: -workutils-text;
}
.welcome-desc {
-fx-text-fill: -workutils-text-secondary;
}
/* ---- 分割线 ---- */
.divider {
-fx-background-color: -workutils-border;
}
/* ---- 切换按钮组 ---- */
.toggle-btn {
-fx-background-radius: 4;
-fx-cursor: hand;
-fx-padding: 6 16;
}
.toggle-btn:selected {
-fx-background-color: -workutils-primary;
-fx-text-fill: white;
}
.toggle-btn:not(:selected) {
-fx-background-color: -workutils-card;
-fx-text-fill: -workutils-text;
-fx-border-color: -workutils-border;
-fx-border-width: 1;
-fx-border-radius: 4;
}
/* ---- ComboBox ---- */
.combo-default {
-fx-border-color: -workutils-border;
-fx-border-width: 1;
-fx-border-radius: 4;
-fx-background-radius: 4;
}
/* ---- 项目树 ---- */
.project-tree {
-fx-background-color: white;
-fx-border-color: -workutils-border;
-fx-border-width: 1;
-fx-border-radius: 4;
}
/* ---- 代码文本 ---- */
.mono-text {
-fx-font-family: "Consolas";
}
/* ---- 主题切换按钮 ---- */
.theme-toggle-row {
-fx-padding: 8 0;
-fx-alignment: CENTER_LEFT;
}
/* ---- 紧凑列表单元格 ---- */
.compact-list .list-cell {
-fx-padding: 3 8 3 8;
-fx-font-size: 13;
}
.compact-list .list-cell:selected {
-fx-background-color: derive(-workutils-primary, 85%);
-fx-text-fill: -workutils-text;
}
.compact-list .list-cell:filled:hover {
-fx-background-color: -workutils-card;
}
/* ---- TabPane 样式(API 导出界面) ---- */
.apidoc-tab-pane {
-fx-background-color: transparent;
-fx-padding: 0;
}
.apidoc-tab-pane .tab-header-area {
-fx-background-color: transparent;
-fx-padding: 0 0 8 0;
}
.apidoc-tab-pane .tab-header-background {
-fx-background-color: transparent;
-fx-border-color: transparent;
}
.apidoc-tab-pane .tab {
-fx-background-color: transparent;
-fx-background-radius: 0;
-fx-border-color: transparent;
-fx-border-width: 0 0 2 0;
-fx-padding: 6 16 6 16;
-fx-cursor: hand;
}
.apidoc-tab-pane .tab .tab-label {
-fx-text-fill: -workutils-text-secondary;
-fx-font-size: 14;
-fx-font-weight: normal;
}
.apidoc-tab-pane .tab:selected {
-fx-border-color: -workutils-primary;
-fx-border-width: 0 0 2 0;
}
.apidoc-tab-pane .tab:selected .tab-label {
-fx-text-fill: -workutils-primary;
-fx-font-weight: bold;
}
.apidoc-tab-pane .tab:hover:not(:selected) {
-fx-background-color: rgba(37,99,235,0.05);
}
.apidoc-tab-pane .tab-content-area {
-fx-background-color: transparent;
-fx-padding: 0;
}