diff --git a/src/renderer/index.tsx b/src/renderer/index.tsx
index 8864218..e18b0c2 100644
--- a/src/renderer/index.tsx
+++ b/src/renderer/index.tsx
@@ -1,9 +1,18 @@
import { createRoot } from 'react-dom/client';
import App from './App';
+import { ThemeProvider, CssBaseline } from '@mui/material';
+import { defaultTheme } from '../theme/themes'; // <-- поправь путь, если themes.ts лежит в другом месте
+
const container = document.getElementById('root') as HTMLElement;
const root = createRoot(container);
-root.render();
+
+root.render(
+
+
+
+ ,
+);
// calling IPC exposed from preload script
window.electron?.ipcRenderer.once('ipc-example', (arg) => {
diff --git a/src/theme/themes.ts b/src/theme/themes.ts
new file mode 100644
index 0000000..f64a55a
--- /dev/null
+++ b/src/theme/themes.ts
@@ -0,0 +1,173 @@
+import { createTheme, SxProps, Theme } from '@mui/material/styles';
+
+declare module '@mui/material/styles' {
+ interface Theme {
+ launcher: {
+ fonts: {
+ default: string;
+ };
+
+ topbar: {
+ firstBox: {
+ background: string;
+ backdropFilter: string;
+ boxShadow: string;
+ };
+ backButton: {
+ transition: string;
+ '&:hover': {
+ transform: string;
+ };
+ };
+ tabsBox: {
+ borderColor: string;
+ };
+ tabs: SxProps;
+ tabBase: SxProps;
+ tabActive: SxProps;
+ menuPaper: SxProps;
+ menuDivider: SxProps;
+ menuItem: SxProps;
+ menuUsername: SxProps;
+ logoutButton: SxProps;
+ windowControlIcon: {
+ color: string;
+ };
+ windowControlButton: SxProps;
+ };
+ };
+ }
+
+ interface ThemeOptions {
+ launcher?: Theme['launcher'];
+ }
+}
+
+export const defaultTheme = createTheme({
+ palette: {
+ mode: 'dark',
+ primary: { main: '#F27121' },
+ secondary: { main: '#E940CD' },
+ text: {
+ primary: '#FFFFFF',
+ secondary: 'rgba(255,255,255,0.7)',
+ },
+ },
+
+ launcher: {
+ fonts: {
+ default: 'Benzin-Bold',
+ },
+
+ topbar: {
+ firstBox: {
+ background:
+ 'linear-gradient(71deg, rgba(242,113,33,0.18) 0%, rgba(233,64,205,0.14) 70%, rgba(138,35,135,0.16) 100%)',
+ backdropFilter: 'blur(10px)',
+ boxShadow: '0 8px 30px rgba(0,0,0,0.35)',
+ },
+ backButton: {
+ transition: 'transform 0.3s ease',
+ '&:hover': {
+ transform: 'scale(1.2)',
+ },
+ },
+ tabsBox: {
+ borderColor: 'transparent',
+ },
+ tabs: {
+ // один градиент на весь Tabs
+ '--tabs-grad':
+ 'linear-gradient(90deg, #F27121 0%, #E940CD 50%, #8A2387 100%)',
+
+ // активный текст показывает “срез” общего градиента
+ '& .MuiTab-root.Mui-selected': {
+ color: 'transparent',
+ backgroundImage: 'var(--tabs-grad)',
+ backgroundRepeat: 'no-repeat',
+ backgroundSize: 'var(--tabs-w) 100%',
+ backgroundPosition: 'calc(-1 * var(--active-x)) 0',
+ WebkitBackgroundClip: 'text',
+ backgroundClip: 'text',
+ },
+
+ // подчёркивание тоже из того же “единого” градиента
+ '& .MuiTabs-indicator': {
+ height: '2px',
+ backgroundImage: 'var(--tabs-grad)',
+ backgroundRepeat: 'no-repeat',
+ backgroundSize: 'var(--tabs-w) 100%',
+ backgroundPosition: 'calc(-1 * var(--active-x)) 0',
+ },
+ },
+ tabBase: (theme: Theme) => ({
+ color: 'white',
+ fontFamily: theme.launcher.fonts.default,
+ transition: 'all 0.3s ease',
+ '&:hover': {
+ color: 'rgb(170, 170, 170)',
+ },
+ }),
+ tabActive: {
+ color: 'transparent',
+ WebkitTextFillColor: 'transparent',
+ backgroundImage: 'var(--tabs-grad)',
+ backgroundRepeat: 'no-repeat',
+ backgroundSize: 'var(--tabs-w) 100%',
+ backgroundPosition: 'calc(-1 * var(--active-x)) 0',
+ WebkitBackgroundClip: 'text',
+ backgroundClip: 'text',
+ },
+ menuPaper: {
+ color: 'white',
+ bgcolor: 'rgba(0,0,0,0.82)',
+ backdropFilter: 'blur(10px)',
+ border: '1px solid rgba(233,64,205,0.25)',
+ boxShadow: '0 18px 40px rgba(0,0,0,0.55)',
+ },
+
+ menuDivider: {
+ borderColor: 'rgba(255,255,255,0.08)',
+ },
+
+ menuItem: (theme: Theme) => ({
+ fontFamily: theme.launcher.fonts.default,
+ '&:hover': {
+ bgcolor: 'rgba(255,77,77,0.15)',
+ },
+ }),
+
+ menuUsername: (theme: Theme) => ({
+ fontFamily: theme.launcher.fonts.default,
+ color: theme.palette.text.primary,
+ }),
+
+ logoutButton: (theme: Theme) => ({
+ fontFamily: theme.launcher.fonts.default,
+ background:
+ 'linear-gradient(71deg, #F27121 0%, #E940CD 70%, #8A2387 100%)',
+ color: theme.palette.text.primary,
+ border: 'none',
+ transition: 'transform 0.3s ease',
+ '&:hover': {
+ background:
+ 'linear-gradient(71deg, #F27121 0%, #E940CD 70%, #8A2387 100%)',
+ transform: 'scale(1.01)',
+ boxShadow: '0 4px 15px rgba(242, 113, 33, 0.4)',
+ },
+ boxShadow: '0 2px 8px rgba(0, 0, 0, 0.3)',
+ }),
+
+ windowControlIcon: {
+ color: 'white',
+ },
+
+ windowControlButton: {
+ // тут только “визуал”, размеры оставим в TopBar
+ '&:hover': {
+ bgcolor: 'rgba(255,255,255,0.06)',
+ },
+ },
+ },
+ },
+});