Files
workutils/src/main/resources/css/light-theme.css
T
2026-07-30 22:06:04 +08:00

453 lines
10 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;
}
.operation-status {
-fx-padding: 6 0;
}
.operation-status-success .label {
-fx-text-fill: #059669;
}
.operation-status-error .label {
-fx-text-fill: #dc2626;
}
.empty-state {
-fx-padding: 28 20;
-fx-background-color: #f8fafc;
-fx-background-radius: 8;
}
.empty-state-title {
-fx-text-fill: #1e293b;
}
.empty-state-description {
-fx-text-fill: #64748b;
}