vscode eva theme
{
// ─── 编辑器核心 ──────────────────────────────────────────────
"editor.fontSize": 15,
"editor.fontFamily": "'Maple Mono', 'Comic Mono', 'Cascadia Code', 'LXGW WenKai Mono','Symbols Nerd Font'",
"editor.fontLigatures": true,
"editor.fontVariations": true,
"editor.lineHeight": 1.6,
"editor.letterSpacing": 0.4,
"editor.codeLensFontFamily": "'Maple Mono', 'Comic Mono', 'Cascadia Code', 'LXGW WenKai Mono','Symbols Nerd Font'",
// ─── 光标与动画 ──────────────────────────────────────────────
"editor.cursorBlinking": "solid",
"editor.cursorStyle": "line",
"editor.cursorSmoothCaretAnimation": "on",
"editor.cursorWidth": 2,
"editor.smoothScrolling": true,
"editor.linkedEditing": true,
// ─── 格式化 ──────────────────────────────────────────────────
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
// ✅ 已删除 "editor.autoIndentOnPaste" —— 不是有效的 VS Code 设置
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.organizeImports": "explicit",
},
"[json]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[jsonc]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
// ─── 代码辅助 ────────────────────────────────────────────────
"editor.suggestSelection": "first",
"editor.acceptSuggestionOnEnter": "smart",
"editor.suggest.showStatusBar": true,
"editor.snippetSuggestions": "top",
"editor.suggest.preview": true,
"editor.quickSuggestionsDelay": 10,
// ✅ 已删除 "editor.parameterHints.enabled" —— 默认即为 true,无需声明
"editor.inlayHints.enabled": "on",
"editor.inlayHints.fontSize": 11,
// ─── 语义高亮 ────────────────────────────────────────────────
"editor.semanticHighlighting.enabled": true,
// ─── 视觉辅助 ────────────────────────────────────────────────
"editor.renderWhitespace": "boundary",
"editor.renderLineHighlight": "all",
"editor.occurrencesHighlight": "multiFile",
"editor.wordWrap": "off",
"editor.minimap.enabled": true,
"editor.minimap.renderCharacters": false,
"editor.minimap.maxColumn": 80,
"editor.stickyScroll.enabled": true,
// ─── 括号与缩进 ──────────────────────────────────────────────
"editor.bracketPairColorization.enabled": true,
"editor.bracketPairColorization.independentColorPoolPerBracketType": true,
"editor.guides.bracketPairs": "active",
"editor.guides.highlightActiveIndentation": true,
// ─── Unicode ─────────────────────────────────────────────────
"editor.unicodeHighlight.allowedLocales": { "zh-hans": true },
// ─── 文件管理 ────────────────────────────────────────────────
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 1000,
"files.autoGuessEncoding": true,
"files.trimFinalNewlines": true,
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
"files.readonlyFromPermissions": true,
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.patterns": {
"*.ts": "${capture}.js, ${capture}.js.map",
// ✅ 已删除 "*.d.ts": "" —— 空值无意义,会导致 .d.ts 文件悬空嵌套
"*.tsx": "${capture}.css, ${capture}.module.css",
"package.json": "package-lock.json, yarn.lock, pnpm-lock.yaml, .npmrc",
"tsconfig.json": "tsconfig.*.json",
".eslintrc*": ".eslintignore, .prettierrc*, .prettierignore",
},
// ─── 终端 ────────────────────────────────────────────────────
"terminal.external.windowsExec": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
"terminal.external.linuxExec": "zsh",
"terminal.integrated.fontFamily": "'Maple Mono', 'Comic Mono', 'Cascadia Code', 'LXGW WenKai Mono','Symbols Nerd Font'",
"terminal.integrated.fontSize": 15,
"terminal.integrated.cursorStyle": "line",
"terminal.integrated.cursorBlinking": true,
"terminal.integrated.smoothScrolling": true,
"terminal.integrated.rightClickBehavior": "default",
"terminal.integrated.lineHeight": 1.2,
// ─── 工作台 ──────────────────────────────────────────────────
"workbench.colorTheme": "Eva 02 Theme",
"workbench.iconTheme": "material-icon-theme",
"workbench.productIconTheme": "icons-carbon",
"workbench.startupEditor": "newUntitledFile",
"workbench.editor.enablePreview": false,
"workbench.editor.wrapTabs": false,
"workbench.editor.decorations.badges": true,
"workbench.tree.indent": 16,
"workbench.list.smoothScrolling": true,
"workbench.editor.tabSizing": "shrink",
// ─── Material Icon Theme ─────────────────────────────────────
"material-icon-theme.folders.color": "#E32828",
"material-icon-theme.folders.theme": "classic",
"material-icon-theme.opacity": 0.8,
// ─── GlassIt 透明度(255 = 不透明,216 ≈ 85%) ───────────────
"glassit.alpha": 216,
// ─── EVA 02 Token 配色 ────────────────────────────────────────
"editor.tokenColorCustomizations": {
"[Eva 02 Theme]": {
"textMateRules": [
{
"name": "关键字 (import/export/const/let/async/await)",
"scope": [
"keyword",
"keyword.control",
"keyword.operator.new",
"storage.type",
"storage.modifier",
],
"settings": { "foreground": "#FF4444" },
},
{
"name": "内置类型 (string/number/boolean/void)",
"scope": ["support.type", "keyword.type", "storage.type.primitive"],
"settings": { "foreground": "#FF6A00" },
},
{
"name": "函数名 / 方法名",
"scope": [
"entity.name.function",
"meta.function-call.generic",
"support.function",
],
"settings": { "foreground": "#EA8532" },
},
{
"name": "类名 / 接口名 / 类型名",
"scope": [
"entity.name.type",
"entity.name.class",
"entity.other.inherited-class",
"support.class",
],
"settings": { "foreground": "#FF9D00" },
},
{
"name": "变量 / 参数",
"scope": [
"variable",
"variable.parameter",
"variable.other.readwrite",
],
"settings": { "foreground": "#E8E8E8" },
},
{
"name": "对象属性 / 成员访问",
"scope": [
"variable.other.property",
"variable.other.object.property",
"support.variable.property",
"meta.object-literal.key",
],
"settings": { "foreground": "#00C8FF" },
},
{
"name": "字符串",
"scope": ["string", "string.quoted", "string.template"],
"settings": { "foreground": "#52D053" },
},
{
"name": "模板字符串插值 ${}",
"scope": [
"punctuation.definition.template-expression",
"string.template punctuation.accessor",
],
"settings": { "foreground": "#EA8532" },
},
{
"name": "数字 / 常量",
"scope": ["constant.numeric", "constant.language", "constant.other"],
"settings": { "foreground": "#FF6A00" },
},
{
"name": "操作符",
"scope": [
"keyword.operator",
"keyword.operator.arithmetic",
"keyword.operator.comparison",
"keyword.operator.logical",
],
"settings": { "foreground": "#FF4444" },
},
{
"name": "装饰器 @",
"scope": [
"meta.decorator",
"punctuation.decorator",
"entity.name.function.decorator",
],
"settings": { "foreground": "#FF2D78", "fontStyle": "italic" },
},
{
"name": "CSS 属性名",
"scope": [
"support.type.property-name.css",
"entity.other.attribute-name.css",
],
"settings": { "foreground": "#00C8FF" },
},
{
"name": "CSS 属性值 / 单位",
"scope": [
"support.constant.property-value.css",
"keyword.other.unit.css",
"constant.numeric.css",
],
"settings": { "foreground": "#52D053" },
},
{
"name": "CSS 选择器",
"scope": [
"entity.other.attribute-name",
"entity.name.tag.css",
"entity.other.attribute-name.class.css",
"entity.other.attribute-name.id.css",
],
"settings": { "foreground": "#EA8532" },
},
{
"name": "注释",
"scope": ["comment", "comment.line", "comment.block"],
"settings": {
"foreground": "#8A6060",
"fontStyle": "italic bold",
"fontFamily": "'FOT-Matisse Pro', 'Source Han Serif SC VF', serif",
},
},
{
"name": "标点 / 括号",
"scope": [
"punctuation",
"meta.brace",
"punctuation.definition.block",
],
"settings": { "foreground": "#993333" },
},
],
},
},
// ─── EVA 02 窗体配色 ──────────────────────────────────────────
"workbench.colorCustomizations": {
// 标题栏
"titleBar.activeBackground": "#9A0000",
"titleBar.activeForeground": "#FFFFFF",
"titleBar.inactiveBackground": "#4A0000",
// 活动栏(CSS 接管背景,此处与 CSS .activitybar 对齐,作为加载前兜底)
"activityBar.background": "#110202",
"activityBar.foreground": "#FF6600",
"activityBar.inactiveForeground": "#555555",
"activityBarBadge.background": "#3CEB54",
"activityBarBadge.foreground": "#000000",
// 侧边栏
"sideBar.background": "#121212",
"sideBar.foreground": "#A0A0A0",
"sideBarTitle.foreground": "#E32828",
"sideBarSectionHeader.background": "#1A0A0A",
// 标签页
"editorGroupHeader.tabsBackground": "#050505",
"tab.activeBackground": "#220808",
"tab.activeForeground": "#FF6600",
"tab.inactiveBackground": "#0D0D0D",
"tab.inactiveForeground": "#555555",
"tab.activeBorderTop": "#E32828",
"tab.hoverBackground": "#1A0A0A",
// 编辑器
"editor.background": "#0A0A0A",
"editor.lineHighlightBackground": "#1A0505",
"editor.selectionBackground": "#E3282850",
"editor.wordHighlightBackground": "#FF660025",
"editor.wordHighlightStrongBackground": "#E3282840",
// ✅ 已修正:原为 #3CEB54(绿色),与 CSS 光标红色冲突;CSS 加载失败时此值作为兜底
"editorCursor.foreground": "#E32828",
"editorLineNumber.foreground": "#333333",
"editorLineNumber.activeForeground": "#FF6600",
// 括号高亮(红 → 橙 → 绿)
"editorBracketHighlight.foreground1": "#E32828",
"editorBracketHighlight.foreground2": "#FF6600",
"editorBracketHighlight.foreground3": "#3CEB54",
"editorBracketHighlight.foreground4": "#E32828",
"editorBracketHighlight.foreground5": "#FF6600",
"editorBracketHighlight.foreground6": "#3CEB54",
// 缩进线
"editorIndentGuide.background1": "#2A2A2A",
"editorIndentGuide.activeBackground1": "#E32828",
// 迷你地图
"minimap.background": "#080808",
"minimapSlider.background": "#E3282830",
"minimapSlider.hoverBackground": "#FF660060",
"minimapSlider.activeBackground": "#3CEB5490",
// Sticky Scroll
"editorStickyScroll.background": "#110000",
"editorStickyScrollHover.background": "#1A0505",
// Inlay Hints
"editorInlayHint.background": "#1A0A0A",
"editorInlayHint.foreground": "#FF660099",
// 状态栏(CSS 接管背景,此处与 CSS .statusbar 对齐,作为加载前兜底)
"statusBar.background": "#1A0505",
"statusBar.foreground": "#FF6600",
"statusBar.noFolderBackground": "#0D0000",
"statusBar.debuggingBackground": "#3CEB54",
"statusBar.debuggingForeground": "#000000",
// 面板(终端/输出)
"panel.background": "#0F0F0F",
"panelTitle.activeBorder": "#E32828",
"panelTitle.activeForeground": "#FF6600",
// 滚动条
"scrollbarSlider.background": "#E3282820",
"scrollbarSlider.hoverBackground": "#FF660050",
"scrollbarSlider.activeBackground": "#E3282870",
},
"workbench.editor.empty.hint": "hidden",
"vscode_custom_css.imports": [
"file:///C:/Users/diana/Documents/WindowsPowerShell/vscode/eva-unit02.css",
"file:///C:/Users/diana/Documents/WindowsPowerShell/vscode/eva-unit02.js",
"file:///c:/Users/diana/.vscode/extensions/brandonkirbyson.vscode-animations-2.0.7/dist/updateHandler.js",
],
"terminal.integrated.initialHint": false,
"animations.Active": "Scale",
"animations.Command-Palette": "Slide",
"animations.Tabs": "Slide",
"animations.Smooth-Mode": true,
"animations.Install-Method": "Custom CSS and JS",
}
Plugins:
Carbon Product Icons
Material Icon Theme
Evangelion Theme
GlassIt-VSC
Custom CSS and JS Loader
VSCode AnimationsFonts:
Maple Mono
https://github.com/subframe7536/maple-font
Comic Mono
https://dtinth.github.io/comic-mono-font/
Cascadia Code
https://github.com/microsoft/cascadia-code
LXGW WenKai Mono
https://github.com/lxgw/LxgwWenkai
Symbols Nerd Font
https://github.com/ryanoasis/nerd-fonts
codicons
https://app.unpkg.com/@vscode/codicons@0.0.45/files/dist/codicon.ttf位置: C:/Users/diana/Documents/WindowsPowerShell/vscode/
生效方法: 管理员启动vscode,ctrl+shift+p,reload custom css and js然后关掉重启vscode
eva-unit02.js
// ============================================
// EVA Unit-02 — JS v4
// 粒子拖尾 / 残影 / 连击计数器
// ============================================
(function () {
"use strict";
// ── 颜色常量(与 CSS --eva-red / --eva-orange 保持一致)──
const EVA_RED = "#E32828"; // ✅ 统一主红,对应 CSS --eva-red
const EVA_ORANGE = "#EA8532"; // ✅ 统一橙色,对应 CSS --eva-orange
const EVA_COLORS = [
EVA_RED, // 主红
"#C0392B", // 深红(CSS --eva-red-dark)
EVA_ORANGE, // 橙
"#F39C12", // 黄橙
"#FF6B6B", // 亮粉红(粒子专用,增加层次感)
"#FF4500", // 橙红
];
const MAX_PARTICLES = 150;
const rand = (min, max) => Math.random() * (max - min) + min;
const pickColor = () => EVA_COLORS[(Math.random() * EVA_COLORS.length) | 0];
// ── 统一粒子池 + 单一 RAF 循环 ──────────────
const particles = [];
const afterimages = [];
let rafId = null;
function tick(now) {
for (let i = particles.length - 1; i >= 0; i--) {
const p = particles[i];
const t = (now - p.start) / p.lifetime;
if (t >= 1) {
p.el.remove();
particles.splice(i, 1);
continue;
}
p.el.style.left = p.x + p.vx * t + "px";
p.el.style.top = p.y + p.vy * t + 60 * t * t + "px";
p.el.style.opacity = String(1 - t * t);
}
for (let i = afterimages.length - 1; i >= 0; i--) {
const a = afterimages[i];
const t = (now - a.start) / 300;
if (t >= 1) {
a.el.remove();
afterimages.splice(i, 1);
continue;
}
a.el.style.opacity = String(0.6 * (1 - t));
a.el.style.transform = `scaleY(${1 - t * 0.5})`;
}
rafId =
particles.length || afterimages.length
? requestAnimationFrame(tick)
: null;
}
function ensureRAF() {
if (!rafId) rafId = requestAnimationFrame(tick);
}
// ── 1. 粒子系统 ──────────────────────────────
function spawnParticles(x, y, intensity = 1) {
if (particles.length >= MAX_PARTICLES) return;
const count = Math.min(
(rand(6, 12) * intensity) | 0,
MAX_PARTICLES - particles.length,
);
const now = performance.now();
for (let i = 0; i < count; i++) {
const isStreak = Math.random() > 0.5;
const color = pickColor();
const size = rand(2, isStreak ? 3 : 5);
const length = isStreak ? rand(8, 20) : size;
const angle = rand(0, Math.PI * 2);
const speed = rand(30, 80) * intensity;
const lifetime = rand(400, 700);
const el = document.createElement("div");
Object.assign(el.style, {
position: "fixed",
left: x + "px",
top: y + "px",
width: length + "px",
height: size + "px",
background: isStreak
? `linear-gradient(${angle}rad, ${color}, transparent)`
: color,
borderRadius: isStreak ? "0" : "50%",
pointerEvents: "none",
zIndex: "99999",
opacity: "1",
boxShadow: `0 0 ${size * 2}px ${color}`,
transform: isStreak ? `rotate(${angle}rad)` : "none",
transformOrigin: "left center",
willChange: "left, top, opacity",
});
document.body.appendChild(el);
particles.push({
el,
x,
y,
vx: Math.cos(angle) * speed,
vy: Math.sin(angle) * speed,
lifetime,
start: now,
});
}
ensureRAF();
}
// ── 2. 打字扫光残影 ──────────────────────────
function spawnAfterimage(cursorEl) {
const rect = cursorEl.getBoundingClientRect();
if (!rect.width && !rect.height) return; // 光标不可见时跳过
const el = document.createElement("div");
Object.assign(el.style, {
position: "fixed",
left: rect.left + "px",
top: rect.top + "px",
width: rect.width + "px",
height: rect.height + "px",
background: EVA_RED, // ✅ 与 CSS --eva-red 一致
opacity: "0.6",
pointerEvents: "none",
zIndex: "99998",
boxShadow: `0 0 8px ${EVA_RED}`,
willChange: "opacity, transform",
});
document.body.appendChild(el);
afterimages.push({ el, start: performance.now() });
ensureRAF();
}
// ── 3. 连击计数器 ────────────────────────────
let comboCount = 0;
let comboTimer = null;
const COMBO_THRESHOLD = 10;
function triggerComboEffect() {
const el = document.createElement("div");
Object.assign(el.style, {
position: "fixed",
top: "50%",
left: "50%",
transform: "translate(-50%, -50%) scale(0.5)",
zIndex: "999997",
pointerEvents: "none",
fontFamily: "monospace",
fontSize: "28px",
fontWeight: "bold",
color: EVA_RED, // ✅ 统一常量
textShadow: `0 0 20px ${EVA_RED}, 0 0 40px ${EVA_ORANGE}`, // ✅ 统一常量
letterSpacing: "4px",
opacity: "0",
transition: "transform 0.2s ease-out, opacity 0.5s ease-out",
});
el.textContent = `COMBO ×${comboCount}`;
document.body.appendChild(el);
requestAnimationFrame(() => {
el.style.transform = "translate(-50%, -50%) scale(1)";
el.style.opacity = "1";
});
setTimeout(() => {
el.style.opacity = "0";
el.style.transform = "translate(-50%, -60%) scale(1.2)";
setTimeout(() => el.remove(), 500);
}, 800);
}
// ── 事件:鼠标点击 ────────────────────────────
document.addEventListener("mousedown", (e) => {
if (e.target.closest(".monaco-editor, .editor-container")) {
spawnParticles(e.clientX, e.clientY, 1.2);
}
});
// ── 事件:键盘(缓存光标元素,避免每次 querySelector)──
let cachedCursor = null;
function getCursor() {
if (!cachedCursor || !document.body.contains(cachedCursor)) {
cachedCursor =
document.querySelector(".cursor.monaco-mouse-cursor-text") ||
document.querySelector(".cursor");
}
return cachedCursor;
}
document.addEventListener("keydown", (e) => {
if (e.key.length !== 1 && e.key !== "Backspace" && e.key !== "Enter")
return;
const cursor = getCursor();
if (cursor) {
const rect = cursor.getBoundingClientRect();
spawnParticles(
rect.left + rect.width / 2,
rect.top + rect.height / 2,
e.key === "Enter" ? 2.5 : 0.6,
);
spawnAfterimage(cursor);
}
comboCount++;
clearTimeout(comboTimer);
comboTimer = setTimeout(() => {
comboCount = 0;
}, 1000);
if (comboCount % COMBO_THRESHOLD === 0) triggerComboEffect();
});
})();
eva-unit02.css
/* ============================================
EVA Unit-02 — CSS v4
驾驶舱 / 机甲 / 警戒状态 + 发光效果
============================================ */
/* ══ 0. 颜色变量 ════════════════════════════ */
:root {
--eva-red: #e32828; /* ✅ 统一主红,与 settings / JS 保持一致 */
--eva-red-dark: #c0392b;
--eva-orange: #ea8532;
--eva-green: #3ceb54;
--eva-cyan: #00c8ff;
--eva-red-rgb: 227, 40, 40; /* ✅ 更新为 #E32828 对应 RGB */
--eva-dark-rgb: 192, 57, 43;
--eva-orange-rgb: 234, 133, 50;
--eva-green-rgb: 60, 235, 84;
--eva-cyan-rgb: 0, 200, 255;
}
/* ══ 1. 光标 ════════════════════════════════ */
.cursor {
background: var(--eva-red) !important;
border-color: var(--eva-red) !important;
border: none !important;
width: 2px !important;
box-shadow: 0 0 3px rgba(var(--eva-red-rgb), 0.8) !important; /* ✅ 修复:原写法缺 rgba(),无效 */
animation: cursorPulse 1.2s ease-in-out infinite !important;
transition:
left 0.06s ease-out,
top 0.06s ease-out !important;
}
@keyframes cursorPulse {
0%,
100% {
transform: scaleY(1);
box-shadow:
0 0 4px 1px rgba(var(--eva-red-rgb), 1),
0 0 10px 3px rgba(var(--eva-red-rgb), 0.7),
0 0 20px 6px rgba(var(--eva-dark-rgb), 0.4);
}
50% {
transform: scaleY(0.15);
box-shadow:
0 0 8px 3px rgba(var(--eva-red-rgb), 1),
0 0 20px 8px rgba(var(--eva-red-rgb), 0.8),
0 0 40px 14px rgba(var(--eva-dark-rgb), 0.5);
}
}
/* ══ 2. 编辑器背景叠层 ══════════════════════ */
/* 红色网格暗纹 */
.monaco-editor .overflow-guard::before {
content: "";
position: absolute;
inset: 0;
pointer-events: none;
z-index: 99;
background-image:
linear-gradient(rgba(var(--eva-dark-rgb), 0.04) 1px, transparent 1px),
linear-gradient(90deg, rgba(var(--eva-dark-rgb), 0.04) 1px, transparent 1px);
background-size: 32px 32px;
}
/* CRT 扫描线 */
.monaco-editor .overflow-guard::after {
content: "";
position: absolute;
inset: 0;
pointer-events: none;
z-index: 100;
background: repeating-linear-gradient(
0deg,
transparent 0px,
transparent 2px,
rgba(0, 0, 0, 0.06) 2px,
rgba(0, 0, 0, 0.06) 4px
);
animation: scanlineScroll 8s linear infinite;
will-change: background-position; /* ✅ 新增:提示 GPU 预备该属性 */
}
@keyframes scanlineScroll {
to {
background-position: 0 100px;
}
}
/* ══ 3. 代码 Token 发光 ═════════════════════ */
.monaco-editor .view-lines {
filter: brightness(1.04) !important;
}
span[class*="mtk"] {
text-shadow: none !important;
filter: none !important;
}
/* 关键字 #FF4444 → 红色发光 */
span[class*="mtk"][style*="#FF4444"] {
text-shadow: 0 0 8px rgba(var(--eva-red-rgb), 0.65) !important;
}
/* 函数名 #EA8532 → 橙色发光 */
span[class*="mtk"][style*="#EA8532"] {
text-shadow: 0 0 7px rgba(var(--eva-orange-rgb), 0.6) !important;
}
/* 类名/类型 #FF9D00 → 橙黄发光 */
span[class*="mtk"][style*="#FF9D00"] {
text-shadow: 0 0 7px rgba(255, 157, 0, 0.55) !important;
}
/* 字符串 #52D053 → 绿色发光 */
span[class*="mtk"][style*="#52D053"] {
text-shadow: 0 0 7px rgba(var(--eva-green-rgb), 0.5) !important;
}
/* 对象属性 #00C8FF → 青色发光 */
span[class*="mtk"][style*="#00C8FF"] {
text-shadow: 0 0 6px rgba(var(--eva-cyan-rgb), 0.5) !important;
}
/* 注释 #8A6060 → 轻透明,不发光 */
span[class*="mtk"][style*="#8A6060"] {
opacity: 0.7 !important;
}
/* 标点 #993333 → 极弱红色发光 */
span[class*="mtk"][style*="#993333"] {
text-shadow: 0 0 2px rgba(var(--eva-red-rgb), 0.35) !important;
}
/* ══ 4. 选中 / 同名高亮 ═════════════════════ */
.monaco-editor .selected-text {
background: rgba(var(--eva-dark-rgb), 0.4) !important;
}
.monaco-editor .selectionHighlight {
background: rgba(var(--eva-red-rgb), 0.15) !important;
border: 1px solid rgba(var(--eva-red-rgb), 0.5) !important;
}
/* ══ 5. 搜索高亮 ════════════════════════════ */
.monaco-editor .findMatch {
background: rgba(var(--eva-orange-rgb), 0.18) !important;
border: 1px solid rgba(var(--eva-orange-rgb), 0.45) !important;
}
.monaco-editor .currentFindMatch {
background: rgba(var(--eva-red-rgb), 0.3) !important;
border: 1px solid var(--eva-red) !important;
box-shadow: 0 0 6px rgba(var(--eva-red-rgb), 0.5) !important;
}
/* ══ 6. 括号 / 缩进 / 错误波浪线 ═══════════ */
.monaco-editor .bracket-match {
background: rgba(var(--eva-orange-rgb), 0.2) !important;
border: 1px solid var(--eva-orange) !important;
animation: bracketGlow 1.5s ease-in-out infinite !important;
}
@keyframes bracketGlow {
0%,
100% {
box-shadow: 0 0 5px rgba(var(--eva-orange-rgb), 0.4);
}
50% {
box-shadow: 0 0 12px rgba(var(--eva-orange-rgb), 0.75);
}
}
.monaco-editor .lines-content .cigr {
box-shadow: 1px 0 0 0 rgba(var(--eva-red-rgb), 0.08) !important;
}
.monaco-editor .lines-content .cigra {
box-shadow: 1px 0 0 0 rgba(var(--eva-red-rgb), 0.25) !important;
}
.monaco-editor .squiggly-error {
background: none !important;
border-bottom: 2px solid var(--eva-red) !important;
box-shadow: 0 2px 6px rgba(var(--eva-red-rgb), 0.5) !important;
}
.monaco-editor .squiggly-warning {
background: none !important;
border-bottom: 2px solid var(--eva-orange) !important;
box-shadow: 0 2px 5px rgba(var(--eva-orange-rgb), 0.4) !important;
}
/* ══ 7. 行号 / 折叠 / 概览标尺 ═════════════ */
.monaco-editor .margin {
border-right: 1px solid rgba(var(--eva-red-rgb), 0.1) !important;
}
.active-line-number {
color: var(--eva-red) !important;
text-shadow: 0 0 4px rgba(var(--eva-red-rgb), 0.6) !important;
font-weight: bold !important;
}
.monaco-editor .cldr:hover {
color: var(--eva-red) !important;
opacity: 1 !important;
}
.monaco-editor .decorationsOverviewRuler {
border-left: 1px solid rgba(var(--eva-red-rgb), 0.12) !important;
}
/* ══ 8. 滚动条 ══════════════════════════════ */
.monaco-scrollable-element > .scrollbar > .slider {
background: rgba(var(--eva-red-rgb), 0.22) !important;
border-radius: 2px !important;
transition: background 0.2s !important;
}
.monaco-scrollable-element > .scrollbar > .slider:hover {
background: rgba(var(--eva-red-rgb), 0.45) !important;
}
.monaco-scrollable-element > .scrollbar > .slider:active {
background: rgba(var(--eva-red-rgb), 0.65) !important;
}
/* ══ 9. 标签页 ══════════════════════════════ */
.tab[aria-selected="true"] {
border-top: 2px solid var(--eva-red) !important;
background: rgba(var(--eva-dark-rgb), 0.18) !important;
box-shadow: inset 0 -1px 0 rgba(var(--eva-red-rgb), 0.3) !important;
}
.tab {
position: relative;
overflow: hidden;
}
.tab::before {
content: "";
position: absolute;
inset: 0 auto 0 -100%;
width: 60%;
background: linear-gradient(
90deg,
transparent,
rgba(var(--eva-red-rgb), 0.12),
transparent
);
transition: left 0.45s ease;
}
.tab:hover::before {
left: 150%;
}
/* ══ 10. 命令面板 / 输入框 ══════════════════ */
.quick-input-widget {
border: 1px solid rgba(var(--eva-red-rgb), 0.55) !important;
border-top: 2px solid var(--eva-red) !important;
box-shadow:
0 0 0 1px rgba(var(--eva-dark-rgb), 0.3),
0 8px 40px rgba(var(--eva-dark-rgb), 0.6) !important;
animation: panelAppear 0.15s ease-out !important;
}
@keyframes panelAppear {
from {
opacity: 0;
transform: translateY(-6px) scaleY(0.97);
}
to {
opacity: 1;
transform: translateY(0) scaleY(1);
}
}
.monaco-inputbox.synthetic-focus,
.monaco-inputbox:focus-within {
outline: none !important;
border-color: var(--eva-red) !important;
box-shadow:
0 0 0 1px var(--eva-red),
0 0 10px rgba(var(--eva-red-rgb), 0.4) !important;
}
/* ══ 11. 状态栏 ═════════════════════════════ */
/* CSS 接管背景,settings 中 statusBar.background 已与此对齐 */
.statusbar {
position: relative;
border-top: 1px solid rgba(var(--eva-red-rgb), 0.5) !important;
background: #1a0505 !important;
display: flex !important;
align-items: center !important;
}
.statusbar .statusbar-item {
display: flex !important;
align-items: center !important;
height: 100% !important;
line-height: normal !important;
}
.statusbar .statusbar-item .codicon,
.statusbar .statusbar-item a .codicon {
display: flex !important;
align-items: center !important;
justify-content: center !important;
line-height: 1 !important;
vertical-align: middle !important;
}
.statusbar .codicon::before {
display: flex !important;
align-items: center !important;
line-height: 1 !important;
margin: 0 !important;
position: relative !important;
top: 0 !important;
}
/* 跑马灯装饰线 */
.statusbar::before {
content: "";
position: absolute;
top: 0;
left: -30%;
width: 30%;
height: 1px;
background: linear-gradient(
90deg,
transparent,
var(--eva-red),
var(--eva-orange),
transparent
);
animation: statusMarquee 3s linear infinite;
pointer-events: none;
}
@keyframes statusMarquee {
from {
left: -30%;
}
to {
left: 110%;
}
}
/* ══ 12. 活动栏 / 侧边栏 ════════════════════ */
/* CSS 接管背景,settings 中 activityBar.background 已与此对齐 */
.activitybar {
border-right: 1px solid rgba(var(--eva-red-rgb), 0.3) !important;
background: #110202 !important;
}
.action-item.checked .active-item-indicator:before {
border-left: none !important;
width: 3px !important;
background: linear-gradient(
180deg,
var(--eva-red),
var(--eva-orange)
) !important;
box-shadow: 2px 0 10px rgba(var(--eva-red-rgb), 0.8) !important;
animation: indicatorPulse 1.5s ease-in-out infinite !important;
}
@keyframes indicatorPulse {
0%,
100% {
opacity: 1;
}
50% {
opacity: 0.5;
}
}
.explorer-item:hover,
.monaco-list-row:hover {
border-left: 2px solid rgba(var(--eva-red-rgb), 0.6) !important;
}
.monaco-list-row.selected {
border-left: 2px solid var(--eva-red) !important;
background: rgba(var(--eva-dark-rgb), 0.2) !important;
}
/* ══ 13. 终端 ═══════════════════════════════ */
.terminal .xterm-cursor-layer .xterm-cursor {
background: var(--eva-red) !important;
box-shadow: 0 0 10px rgba(var(--eva-red-rgb), 0.9) !important;
}
/* ══ 14. 通知弹窗 ═══════════════════════════ */
.notifications-toasts .notification-toast {
border-left: 3px solid var(--eva-red) !important;
box-shadow: -4px 0 20px rgba(var(--eva-dark-rgb), 0.5) !important;
animation: toastSlide 0.2s ease-out !important;
}
@keyframes toastSlide {
from {
transform: translateX(16px);
opacity: 0;
}
to {
transform: translateX(0);
opacity: 1;
}
}