/* app global css */ :root { --utools-bg-color: #f4f4f4; --utools-font-color: #333; --transparent-bg-color: rgba(0, 0, 0, 0.02); --q-dark: #464646; --q-dark-page: #303133; } :root:has(.body--dark) { --utools-bg-color: #303133; --utools-font-color: #fff; --transparent-bg-color: rgba(255, 255, 255, 0.05); } .q-card--dark { background: var(--q-dark-page); } body { background: var(--utools-bg-color); color: var(--utools-font-color); } /* Monaco Editor 调整行号栏样式 */ .monaco-editor .margin { width: 40px !important; } .monaco-editor .line-numbers { text-align: center !important; width: 40px !important; padding-right: 5px !important; left: 0 !important; } /* Monaco Editor 当前行高亮样式 */ .monaco-editor .current-line { border: none !important; background-color: transparent !important; } .monaco-editor .line-numbers { color: rgba(0, 0, 0, 0.5) !important; } .body--dark .monaco-editor .line-numbers { color: rgba(255, 255, 255, 0.5) !important; } .monaco-editor .current-line~.line-numbers { color: var(--q-primary) !important; } .monaco-editor .margin-view-overlays .current-line { background-color: transparent !important; } /* Monaco Editor 滚动条样式 */ .monaco-editor .scrollbar { width: 5px !important; height: 5px !important; } .monaco-editor .scrollbar.vertical .slider { width: 5px !important; border-radius: 2px !important; background: rgba(0, 0, 0, 0.2) !important; } .monaco-editor .scrollbar.horizontal .slider { height: 5px !important; border-radius: 2px !important; background: rgba(0, 0, 0, 0.2) !important; } /* 标签样式 */ .q-chip { background: #e3e3e39a; } .q-chip--dark { background: #676666; } ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-thumb { border-radius: 10px; box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); background: rgba(194, 194, 194, 0.4); border: rgba(194, 194, 194, 0.4); } ::-webkit-scrollbar-track-piece { background: rgba(194, 194, 194, 0.1); } .fade-enter-from { opacity: 0; } .fade-enter-to { opacity: 1; } .fade-enter-active { transition: opacity 0.3s ease; } /* 优化 Tooltip 样式 */ .q-tooltip { font-size: 11px; } .q-tooltip { background: rgba(255, 255, 255, 0.18) !important; border-radius: 6px; backdrop-filter: blur(8px); padding: 6px 10px; font-size: 0.85rem; font-weight: 400; letter-spacing: 0.3px; color: rgba(35, 35, 35, 0.98) !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); transform-origin: center; animation: tooltip-appear 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* 暗色模式适配 */ .body--dark .q-tooltip { background: rgba(35, 35, 35, 0.18) !important; color: rgba(255, 255, 255, 0.98) !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); } /* Tooltip 动画 */ @keyframes tooltip-appear { from { opacity: 0; transform: scale(0.95) translateY(5px); } to { opacity: 1; transform: scale(1) translateY(0); } } /* 多行文本的 Tooltip */ .q-tooltip.multiline { max-width: 280px; line-height: 1.5; white-space: pre-wrap; } /* Tooltip 位置微调 */ .q-tooltip[data-v-anchor="top middle"] { transform-origin: bottom center; } .q-tooltip[data-v-anchor="bottom middle"] { transform-origin: top center; } .q-tooltip[data-v-anchor="center left"] { transform-origin: center right; } .q-tooltip[data-v-anchor="center right"] { transform-origin: center left; } .full-height { height: 100vh; } /* 毛玻璃效果叠加 */ body.glass-effect-menu .q-card.command { background: rgba(255, 255, 255, calc(0.3 + var(--glass-effect-strength) * 0.01)) !important; } body.body--dark.glass-effect-menu .q-card.command { background: rgba(30, 30, 30, calc(0.3 + var(--glass-effect-strength) * 0.02)) !important; } /* 标签栏毛玻璃效果 */ body.glass-effect-menu .tag-bar .q-tabs { background: rgba(255, 255, 255, calc(0.15 + var(--glass-effect-strength) * 0.01)) !important; backdrop-filter: blur(calc(var(--glass-effect-strength) * 1px)) !important; -webkit-backdrop-filter: blur(calc(var(--glass-effect-strength) * 1px)) !important; border-right: 1px solid rgba(255, 255, 255, 0.1); } body.body--dark.glass-effect-menu .tag-bar .q-tabs { background: rgba(0, 0, 0, calc(0.2 + var(--glass-effect-strength) * 0.02)) !important; border-right: 1px solid rgba(255, 255, 255, 0.05); } /* 基础菜单样式 - 始终保持最小毛玻璃效果 */ .q-menu { background: rgba(255, 255, 255, 0.15) !important; backdrop-filter: blur(5px) !important; -webkit-backdrop-filter: blur(5px) !important; border: 1px solid rgba(255, 255, 255, 0.1); box-shadow: 0 4px 16px 0 rgba(31, 38, 135, 0.07); } .body--dark .q-menu { background: rgba(0, 0, 0, 0.2) !important; border: 1px solid rgba(255, 255, 255, 0.05); } /* 毛玻璃菜单效果 - 叠加用户设置的效果 */ body.glass-effect-menu .q-menu { background: rgba(255, 255, 255, calc(0.15 + var(--glass-effect-strength) * 0.01)) !important; backdrop-filter: blur(calc(5px + var(--glass-effect-strength) * 1px)) !important; -webkit-backdrop-filter: blur(calc(5px + var(--glass-effect-strength) * 1px)) !important; } /* 暗色模式菜单 */ body.body--dark.glass-effect-menu .q-menu { background: rgba(0, 0, 0, calc(0.2 + var(--glass-effect-strength) * 0.02)) !important; } /* 菜单列表透明背景 */ .q-menu .q-list { background: transparent !important; } /* 菜单项浮效果 */ .q-menu .q-item:hover { background: rgba(255, 255, 255, 0.1) !important; } .body--dark .q-menu .q-item:hover { background: rgba(255, 255, 255, 0.05) !important; } /* 输入框样式 */ .q-menu .q-field__control { background: rgba(255, 255, 255, 0.15) !important; border-radius: 4px; } .body--dark .q-menu .q-field__control { background: rgba(0, 0, 0, 0.3) !important; } /* 添加图标光晕效果 */ .featureIco { transition: all 0.8s cubic-bezier(0.34, 1.56, 0.64, 1); will-change: transform; position: relative; z-index: 1; } .featureIcoHover { transform: scale(1.08) translateY(-2px); } .featureIco::after { content: ""; position: absolute; z-index: -1; top: 0; left: 0; right: 0; bottom: 0; transition: all 0.8s cubic-bezier(0.34, 1.56, 0.64, 1); opacity: 0; background-image: var(--icon-url); background-size: contain; background-position: center; background-repeat: no-repeat; filter: blur(8px) brightness(1.1); transform: scale(1.05); pointer-events: none; } .featureIcoHover::after { opacity: 0.8; transform: scale(1.1); } .feature-disabled, .platform-icons-disabled { opacity: 0.5; filter: grayscale(100%); } .platform-icons { display: flex; gap: 2px; align-items: center; justify-content: flex-end; font-size: 12px; } .body--dark .q-tab-panels { background-color: transparent; } /* 左右移动 */ @keyframes leftRight { 0% { transform: translateX(-2px); opacity: 0.7; } 50% { transform: translateX(2px); opacity: 1; } 100% { transform: translateX(-2px); opacity: 0.7; } } /* 上下移动 */ @keyframes upDown { 0% { transform: translateY(-1px); opacity: 1; } 50% { transform: translateY(1px); opacity: 0.6; } 75% { transform: translateY(0.5px); opacity: 0.8; } 100% { transform: translateY(-1px); opacity: 1; } } /* 左右抖动 */ @keyframes shake { 0%, 100% { transform: rotate(0deg); } 25% { transform: rotate(-10deg); } 75% { transform: rotate(10deg); } } /* q-field--filled 布局更加紧凑 */ /* 输入框高度及字体 */ .q-field--filled:not(.q-textarea) .q-field__control, .q-field--filled:not(.q-textarea) .q-field__control>*, .q-field--filled:not(.q-field--labeled):not(.q-textarea) .q-field__native { max-height: 36px !important; min-height: 36px !important; } .q-field--filled .q-field__control, .q-field--filled .q-field__control>*, .q-field--filled .q-field__native { border-radius: 5px; font-size: 12px; } .q-field--filled.q-select--with-chips .q-field__control .q-chip { margin: 0 4px; } /* 输入框图标大小 */ .q-field--filled .q-field__control .q-icon { font-size: 18px; } /* 输入框标签字体大小,占位时的位置 */ .q-field--filled .q-field__label { font-size: 11px; top: 11px; } /* 输入框标签悬浮的位置 */ .q-field--filled.q-field--dense.q-field--float .q-field__label { transform: translateY(-50%) scale(0.75); } /* 去除filled输入框边框 */ .q-field--filled .q-field__control:before { border: none; } /* 去除filled输入框下划线 */ .q-field--filled .q-field__control:after { height: 0; border-bottom: none; } /* 输入框背景颜色及内边距 */ .q-field--filled .q-field__control { background: rgba(0, 0, 0, 0.03); padding: 0 8px; } /* 输入框聚焦时的背景颜色 */ .q-field--filled.q-field--highlighted .q-field__control { background: rgba(0, 0, 0, 0.03); } /* 暗黑模式下的输入框背景颜色 */ .body--dark .q-field--filled .q-field__control { background: rgba(255, 255, 255, 0.04); } /* 暗黑模式下输入框聚焦时的背景颜色 */ .body--dark .q-field--filled.q-field--highlighted .q-field__control { background: rgba(255, 255, 255, 0.08); }