fragmenta / app /frontend /src /theme.js
MazCodes's picture
Upload folder using huggingface_hub
c7986a9 verified
raw
history blame
81.2 kB
import { createTheme, responsiveFontSizes } from '@mui/material/styles';
let theme = createTheme({
palette: {
mode: 'dark',
primary: {
main: '#35C2D4',
light: '#73D7E3',
dark: '#1B98A8',
contrastText: '#061017',
},
secondary: {
main: '#9AA7BA',
light: '#C4CEDB',
dark: '#6E7C92',
contrastText: '#09101A',
},
background: {
default: '#090C12',
paper: '#121926',
},
text: {
primary: '#E8EDF5',
secondary: '#9DA9BC',
},
divider: 'rgba(194, 207, 228, 0.16)',
error: {
main: '#E36C61',
},
warning: {
main: '#E3A34B',
},
success: {
main: '#53C18A',
},
info: {
main: '#35C2D4',
},
},
shape: {
borderRadius: 12,
},
typography: {
fontFamily: [
'Helvetica Neue',
'Helvetica',
'Arial',
'sans-serif'
].join(','),
h1: {
fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif',
fontWeight: 1500,
},
h2: {
fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif',
fontWeight: 200,
},
h3: {
fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif',
fontWeight: 250,
},
h4: {
fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif',
fontWeight: 300,
letterSpacing: '0.01em',
},
h5: {
fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif',
fontWeight: 350,
letterSpacing: '0.01em',
},
h6: {
fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif',
fontWeight: 400,
},
body1: {
fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif',
fontWeight: 300,
},
body2: {
fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif',
fontWeight: 300,
},
button: {
fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif',
fontWeight: 400,
letterSpacing: '0.01em',
},
},
components: {
MuiCssBaseline: {
styleOverrides: {
':root': {
colorScheme: 'dark',
},
body: {
margin: 0,
minHeight: '100vh',
backgroundColor: '#090C12',
backgroundImage: 'radial-gradient(1400px 700px at 8% -10%, rgba(53, 194, 212, 0.16), transparent 55%), radial-gradient(900px 500px at 92% -20%, rgba(83, 193, 138, 0.12), transparent 60%), linear-gradient(160deg, #090C12 0%, #0D121B 45%, #0A0F16 100%)',
color: '#E8EDF5',
},
'#root': {
minHeight: '100vh',
},
'*::-webkit-scrollbar': {
width: '10px',
height: '10px',
},
'*::-webkit-scrollbar-track': {
background: 'rgba(157, 169, 188, 0.14)',
borderRadius: '999px',
},
'*::-webkit-scrollbar-thumb': {
background: 'rgba(157, 169, 188, 0.45)',
borderRadius: '999px',
border: '2px solid rgba(0, 0, 0, 0)',
backgroundClip: 'padding-box',
'&:hover': {
background: 'rgba(157, 169, 188, 0.62)',
},
},
'*::-webkit-scrollbar-corner': {
background: 'rgba(157, 169, 188, 0.12)',
},
'*': {
scrollbarWidth: 'thin',
scrollbarColor: 'rgba(157, 169, 188, 0.45) rgba(157, 169, 188, 0.14)',
},
},
},
MuiPaper: {
styleOverrides: {
root: {
backgroundColor: '#121926',
backgroundImage: 'linear-gradient(180deg, rgba(20, 27, 40, 0.92) 0%, rgba(15, 22, 34, 0.95) 100%)',
border: '1px solid rgba(194, 207, 228, 0.14)',
boxShadow: '0 18px 32px rgba(4, 8, 14, 0.42)',
backdropFilter: 'blur(8px)',
},
},
},
MuiCard: {
styleOverrides: {
root: {
backgroundColor: '#111826',
backgroundImage: 'linear-gradient(180deg, rgba(18, 25, 38, 0.98) 0%, rgba(15, 22, 34, 0.96) 100%)',
border: '1px solid rgba(194, 207, 228, 0.14)',
boxShadow: '0 10px 18px rgba(4, 8, 14, 0.3)',
transition: 'border-color 180ms ease, box-shadow 180ms ease, transform 180ms ease',
'&:hover': {
borderColor: 'rgba(115, 215, 227, 0.3)',
boxShadow: '0 16px 30px rgba(4, 8, 14, 0.46)',
transform: 'translateY(-1px)',
},
},
},
},
MuiButton: {
styleOverrides: {
root: {
textTransform: 'none',
borderRadius: 10,
fontWeight: 600,
paddingInline: 16,
display: 'inline-flex',
alignItems: 'center',
justifyContent: 'center',
lineHeight: 1.2,
'& .MuiButton-startIcon, & .MuiButton-endIcon': {
display: 'inline-flex',
alignItems: 'center',
},
transition: 'transform 160ms ease, box-shadow 160ms ease, border-color 160ms ease, background-color 160ms ease',
},
contained: {
boxShadow: '0 8px 18px rgba(6, 10, 18, 0.46)',
'&:hover': {
boxShadow: '0 12px 22px rgba(6, 10, 18, 0.58)',
transform: 'translateY(-1px)',
},
},
containedPrimary: {
backgroundImage: 'linear-gradient(135deg, #35C2D4 0%, #2AA9B9 55%, #228E9D 100%)',
},
containedError: {
backgroundImage: 'linear-gradient(135deg, #E36C61 0%, #CF5A4E 100%)',
},
outlined: {
borderColor: 'rgba(157, 169, 188, 0.4)',
'&:hover': {
borderColor: '#35C2D4',
backgroundColor: 'rgba(53, 194, 212, 0.08)',
},
},
},
},
MuiInputBase: {
styleOverrides: {
root: {
'&:not(.MuiInputBase-multiline)': {
alignItems: 'center',
},
},
input: {
lineHeight: 1.4,
},
},
},
MuiTextField: {
styleOverrides: {
root: {
'& .MuiOutlinedInput-root': {
backgroundColor: 'rgba(10, 15, 23, 0.84)',
'& fieldset': {
borderColor: 'rgba(157, 169, 188, 0.3)',
},
'&:hover fieldset': {
borderColor: 'rgba(157, 169, 188, 0.55)',
},
'&.Mui-focused fieldset': {
borderColor: '#35C2D4',
},
},
},
},
},
MuiSelect: {
styleOverrides: {
root: {
backgroundColor: 'rgba(10, 15, 23, 0.84)',
'& .MuiOutlinedInput-notchedOutline': {
borderColor: 'rgba(157, 169, 188, 0.3)',
},
'&:hover .MuiOutlinedInput-notchedOutline': {
borderColor: 'rgba(157, 169, 188, 0.55)',
},
'&.Mui-focused .MuiOutlinedInput-notchedOutline': {
borderColor: '#35C2D4',
},
},
select: {
display: 'flex',
alignItems: 'center',
},
},
},
MuiMenuItem: {
styleOverrides: {
root: {
backgroundColor: '#121926',
'&:hover': {
backgroundColor: 'rgba(53, 194, 212, 0.08)',
},
'&.Mui-selected': {
backgroundColor: 'rgba(53, 194, 212, 0.14)',
'&:hover': {
backgroundColor: 'rgba(53, 194, 212, 0.2)',
},
},
},
},
},
MuiChip: {
styleOverrides: {
root: {
backgroundColor: 'rgba(157, 169, 188, 0.16)',
color: '#E8EDF5',
border: '1px solid rgba(157, 169, 188, 0.24)',
'&.MuiChip-colorPrimary': {
backgroundColor: 'rgba(53, 194, 212, 0.2)',
color: '#C8F3F9',
},
},
outlined: {
borderColor: 'rgba(157, 169, 188, 0.4)',
'&.MuiChip-colorPrimary': {
borderColor: '#35C2D4',
color: '#73D7E3',
},
},
},
},
MuiAccordion: {
styleOverrides: {
root: {
backgroundColor: 'rgba(12, 18, 28, 0.7)',
border: '1px solid rgba(194, 207, 228, 0.16)',
borderRadius: 12,
overflow: 'hidden',
'&:before': {
display: 'none',
},
'&.Mui-expanded': {
margin: 0,
},
},
},
},
MuiAccordionSummary: {
styleOverrides: {
root: {
backgroundColor: 'rgba(15, 22, 34, 0.8)',
borderRadius: 12,
minHeight: 44,
'& .MuiAccordionSummary-content': {
margin: '10px 0',
alignItems: 'center',
},
'&.Mui-expanded': {
minHeight: 44,
},
'&.Mui-expanded .MuiAccordionSummary-content': {
margin: '10px 0',
},
'&:hover': {
backgroundColor: 'rgba(19, 28, 42, 0.9)',
},
},
},
},
MuiDialog: {
styleOverrides: {
paper: {
backgroundColor: '#121926',
backgroundImage: 'linear-gradient(180deg, rgba(20, 27, 40, 0.98) 0%, rgba(14, 21, 33, 0.98) 100%)',
border: '1px solid rgba(194, 207, 228, 0.18)',
borderRadius: 14,
boxShadow: '0 28px 48px rgba(4, 8, 14, 0.6)',
},
},
},
MuiDialogTitle: {
styleOverrides: {
root: {
backgroundColor: 'rgba(14, 21, 33, 0.8)',
borderBottom: '1px solid rgba(194, 207, 228, 0.15)',
color: '#F4F7FC',
fontWeight: 600,
fontSize: '1.15rem',
},
},
},
MuiDialogContent: {
styleOverrides: {
root: {
backgroundColor: 'rgba(14, 21, 33, 0.64)',
color: '#CCD5E3',
},
},
},
MuiDialogActions: {
styleOverrides: {
root: {
backgroundColor: 'rgba(14, 21, 33, 0.72)',
borderTop: '1px solid rgba(194, 207, 228, 0.15)',
padding: '14px 20px',
gap: 8,
},
},
},
MuiListItem: {
styleOverrides: {
root: {
'&:hover': {
backgroundColor: 'rgba(53, 194, 212, 0.08)',
},
'&.Mui-selected': {
backgroundColor: 'rgba(53, 194, 212, 0.14)',
'&:hover': {
backgroundColor: 'rgba(53, 194, 212, 0.2)',
},
},
},
},
},
MuiCheckbox: {
styleOverrides: {
root: {
color: '#9AA7BA',
'&.Mui-checked': {
color: '#35C2D4',
},
'&:hover': {
backgroundColor: 'rgba(53, 194, 212, 0.08)',
},
},
},
},
MuiFormControlLabel: {
styleOverrides: {
label: {
color: '#CCD5E3',
fontSize: '0.875rem',
},
},
},
MuiSlider: {
styleOverrides: {
root: {
color: '#35C2D4',
},
rail: {
backgroundColor: 'rgba(157, 169, 188, 0.24)',
},
track: {
backgroundColor: '#35C2D4',
border: 0,
},
thumb: {
backgroundColor: '#74DEE9',
'&:hover': {
boxShadow: '0 0 0 8px rgba(53, 194, 212, 0.2)',
},
},
},
},
MuiLinearProgress: {
styleOverrides: {
root: {
backgroundColor: 'rgba(157, 169, 188, 0.2)',
},
bar: {
backgroundColor: '#35C2D4',
},
},
},
MuiCircularProgress: {
styleOverrides: {
root: {
color: '#35C2D4',
},
},
},
MuiTabs: {
styleOverrides: {
root: {
'& .MuiTabs-indicator': {
backgroundColor: '#35C2D4',
},
},
},
},
MuiTab: {
styleOverrides: {
root: {
color: '#9DA9BC',
'&.Mui-selected': {
color: '#35C2D4',
},
'&:hover': {
color: '#E8EDF5',
},
},
},
},
MuiBackdrop: {
styleOverrides: {
root: {
backgroundColor: 'rgba(5, 9, 16, 0.84)',
backdropFilter: 'blur(4px)',
},
},
},
MuiDivider: {
styleOverrides: {
root: {
borderColor: 'rgba(194, 207, 228, 0.16)',
},
},
},
MuiIconButton: {
styleOverrides: {
root: {
color: '#9DA9BC',
'&:hover': {
backgroundColor: 'rgba(53, 194, 212, 0.1)',
color: '#73D7E3',
},
},
},
},
MuiContainer: {
styleOverrides: {
root: {
backgroundColor: 'transparent',
background: 'transparent',
},
},
},
},
});
theme = responsiveFontSizes(theme, {
breakpoints: ['sm', 'md', 'lg'],
factor: 2.4,
});
export const lightTheme = createTheme(theme, {
palette: {
mode: 'light',
primary: {
main: '#1497A8',
light: '#4CBCCA',
dark: '#0F7482',
contrastText: '#F7FDFF',
},
secondary: {
main: '#64748B',
light: '#93A3B8',
dark: '#475569',
contrastText: '#F8FAFC',
},
background: {
default: '#F5F9FC',
paper: '#FFFFFF',
},
text: {
primary: '#0F172A',
secondary: '#475569',
disabled: 'rgba(0, 0, 0, 0.38)',
},
action: {
active: 'rgba(0, 0, 0, 0.54)',
hover: 'rgba(0, 0, 0, 0.04)',
selected: 'rgba(0, 0, 0, 0.08)',
disabled: 'rgba(0, 0, 0, 0.26)',
disabledBackground: 'rgba(0, 0, 0, 0.12)',
},
divider: 'rgba(15, 23, 42, 0.14)',
error: {
main: '#DC5B57',
},
warning: {
main: '#D08C30',
},
success: {
main: '#2E9E63',
},
info: {
main: '#1497A8',
},
},
components: {
MuiCssBaseline: {
styleOverrides: {
':root': {
colorScheme: 'light',
},
body: {
margin: 0,
minHeight: '100vh',
backgroundColor: '#F5F9FC',
backgroundImage: 'radial-gradient(1400px 700px at 8% -10%, rgba(20, 151, 168, 0.14), transparent 55%), radial-gradient(900px 500px at 92% -20%, rgba(46, 158, 99, 0.1), transparent 60%), linear-gradient(160deg, #F6FAFD 0%, #EFF5FA 45%, #F8FBFE 100%)',
color: '#0F172A',
},
'#root': {
minHeight: '100vh',
},
'*::-webkit-scrollbar-track': {
background: 'rgba(100, 116, 139, 0.12)',
borderRadius: '999px',
},
'*::-webkit-scrollbar-thumb': {
background: 'rgba(100, 116, 139, 0.38)',
borderRadius: '999px',
'&:hover': {
background: 'rgba(100, 116, 139, 0.52)',
},
},
'*::-webkit-scrollbar-corner': {
background: 'rgba(100, 116, 139, 0.1)',
},
'*': {
scrollbarWidth: 'thin',
scrollbarColor: 'rgba(100, 116, 139, 0.38) rgba(100, 116, 139, 0.12)',
},
},
},
MuiPaper: {
styleOverrides: {
root: {
backgroundColor: '#FFFFFF',
backgroundImage: 'linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(248, 251, 255, 0.98) 100%)',
border: '1px solid rgba(15, 23, 42, 0.12)',
boxShadow: '0 14px 26px rgba(15, 23, 42, 0.08)',
},
},
},
MuiCard: {
styleOverrides: {
root: {
backgroundColor: '#FFFFFF',
backgroundImage: 'linear-gradient(180deg, rgba(255, 255, 255, 0.99) 0%, rgba(248, 251, 255, 0.99) 100%)',
border: '1px solid rgba(15, 23, 42, 0.12)',
boxShadow: '0 10px 18px rgba(15, 23, 42, 0.08)',
'&:hover': {
borderColor: 'rgba(20, 151, 168, 0.32)',
boxShadow: '0 16px 30px rgba(15, 23, 42, 0.12)',
},
},
},
},
MuiButton: {
styleOverrides: {
contained: {
boxShadow: '0 8px 18px rgba(20, 151, 168, 0.22)',
'&:hover': {
boxShadow: '0 12px 24px rgba(20, 151, 168, 0.28)',
},
},
containedPrimary: {
backgroundImage: 'linear-gradient(135deg, #1497A8 0%, #1AAABC 55%, #107A88 100%)',
},
containedError: {
backgroundImage: 'linear-gradient(135deg, #DC5B57 0%, #CB4B45 100%)',
},
outlined: {
borderColor: 'rgba(100, 116, 139, 0.32)',
'&:hover': {
borderColor: '#1497A8',
backgroundColor: 'rgba(20, 151, 168, 0.08)',
},
},
},
},
MuiTextField: {
styleOverrides: {
root: {
'& .MuiOutlinedInput-root': {
backgroundColor: 'rgba(255, 255, 255, 0.92)',
'& fieldset': {
borderColor: 'rgba(100, 116, 139, 0.28)',
},
'&:hover fieldset': {
borderColor: 'rgba(100, 116, 139, 0.5)',
},
'&.Mui-focused fieldset': {
borderColor: '#1497A8',
},
},
},
},
},
MuiSelect: {
styleOverrides: {
root: {
backgroundColor: 'rgba(255, 255, 255, 0.92)',
'& .MuiOutlinedInput-notchedOutline': {
borderColor: 'rgba(100, 116, 139, 0.28)',
},
'&:hover .MuiOutlinedInput-notchedOutline': {
borderColor: 'rgba(100, 116, 139, 0.5)',
},
'&.Mui-focused .MuiOutlinedInput-notchedOutline': {
borderColor: '#1497A8',
},
},
},
},
MuiMenuItem: {
styleOverrides: {
root: {
backgroundColor: '#FFFFFF',
'&:hover': {
backgroundColor: 'rgba(20, 151, 168, 0.08)',
},
'&.Mui-selected': {
backgroundColor: 'rgba(20, 151, 168, 0.14)',
'&:hover': {
backgroundColor: 'rgba(20, 151, 168, 0.2)',
},
},
},
},
},
MuiChip: {
styleOverrides: {
root: {
backgroundColor: 'rgba(100, 116, 139, 0.12)',
color: '#0F172A',
border: '1px solid rgba(100, 116, 139, 0.24)',
},
},
},
MuiAccordion: {
styleOverrides: {
root: {
backgroundColor: 'rgba(255, 255, 255, 0.82)',
border: '1px solid rgba(15, 23, 42, 0.12)',
borderRadius: 12,
overflow: 'hidden',
'&:before': {
display: 'none',
},
'&.Mui-expanded': {
margin: 0,
},
},
},
},
MuiAccordionSummary: {
styleOverrides: {
root: {
backgroundColor: 'rgba(248, 251, 255, 0.95)',
borderRadius: 12,
'&:hover': {
backgroundColor: 'rgba(239, 245, 250, 1)',
},
},
},
},
MuiDialog: {
styleOverrides: {
paper: {
backgroundColor: '#FFFFFF',
backgroundImage: 'linear-gradient(180deg, rgba(255, 255, 255, 0.99) 0%, rgba(246, 250, 254, 0.99) 100%)',
border: '1px solid rgba(15, 23, 42, 0.12)',
boxShadow: '0 28px 48px rgba(15, 23, 42, 0.16)',
},
},
},
MuiDialogTitle: {
styleOverrides: {
root: {
backgroundColor: 'rgba(246, 250, 254, 0.98)',
borderBottom: '1px solid rgba(15, 23, 42, 0.1)',
color: '#0F172A',
},
},
},
MuiDialogContent: {
styleOverrides: {
root: {
backgroundColor: 'rgba(255, 255, 255, 0.98)',
color: '#334155',
},
},
},
MuiDialogActions: {
styleOverrides: {
root: {
backgroundColor: 'rgba(246, 250, 254, 0.98)',
borderTop: '1px solid rgba(15, 23, 42, 0.1)',
},
},
},
MuiListItem: {
styleOverrides: {
root: {
'&:hover': {
backgroundColor: 'rgba(53, 194, 212, 0.08)',
},
'&.Mui-selected': {
backgroundColor: 'rgba(53, 194, 212, 0.14)',
'&:hover': {
backgroundColor: 'rgba(53, 194, 212, 0.2)',
},
},
},
},
},
MuiCheckbox: {
styleOverrides: {
root: {
color: '#64748B',
'&.Mui-checked': {
color: '#1497A8',
},
'&:hover': {
backgroundColor: 'rgba(20, 151, 168, 0.08)',
},
},
},
},
MuiFormControlLabel: {
styleOverrides: {
label: {
color: '#334155',
},
},
},
MuiSlider: {
styleOverrides: {
root: {
color: '#1497A8',
},
rail: {
backgroundColor: 'rgba(100, 116, 139, 0.24)',
},
track: {
backgroundColor: '#1497A8',
border: 0,
},
thumb: {
backgroundColor: '#4CBCCA',
'&:hover': {
boxShadow: '0 0 0 8px rgba(20, 151, 168, 0.2)',
},
},
},
},
MuiLinearProgress: {
styleOverrides: {
root: {
backgroundColor: 'rgba(100, 116, 139, 0.2)',
},
bar: {
backgroundColor: '#1497A8',
},
},
},
MuiCircularProgress: {
styleOverrides: {
root: {
color: '#1497A8',
},
},
},
MuiTabs: {
styleOverrides: {
root: {
'& .MuiTabs-indicator': {
backgroundColor: '#1497A8',
},
},
},
},
MuiTab: {
styleOverrides: {
root: {
color: '#64748B',
'&.Mui-selected': {
color: '#1497A8',
},
'&:hover': {
color: '#0F172A',
},
},
},
},
MuiBackdrop: {
styleOverrides: {
root: {
backgroundColor: 'rgba(15, 23, 42, 0.38)',
backdropFilter: 'blur(4px)',
},
},
},
MuiDivider: {
styleOverrides: {
root: {
borderColor: 'rgba(15, 23, 42, 0.14)',
},
},
},
MuiIconButton: {
styleOverrides: {
root: {
color: '#64748B',
'&:hover': {
backgroundColor: 'rgba(20, 151, 168, 0.1)',
color: '#1497A8',
},
},
},
},
},
});
export const appStyles = {
root: {
minHeight: '100vh',
background: 'transparent',
backgroundColor: 'transparent',
overflow: 'visible',
position: 'relative',
display: 'flex',
flexDirection: 'column',
},
container: (showWelcomePage) => ({
py: { xs: 1, sm: 1.5, md: 2.5 },
px: { xs: 0.75, sm: 1.25, md: 2.5 },
minHeight: '100vh',
display: 'flex',
flexDirection: 'column',
backgroundColor: 'transparent',
background: 'transparent',
overflow: 'visible',
boxSizing: 'border-box',
width: '100%',
maxWidth: '100%',
filter: showWelcomePage ? 'blur(8px)' : 'none',
transition: 'filter 0.3s ease-in-out',
}),
headerRow: {
display: 'flex',
justifyContent: 'space-between',
alignItems: { xs: 'stretch', md: 'flex-start' },
flexDirection: { xs: 'column', md: 'row' },
gap: { xs: 1.25, sm: 1.75, md: 2 },
mb: { xs: 1, sm: 1.5 },
},
headerBrand: {
position: 'relative',
display: 'flex',
alignItems: 'center',
gap: { xs: 1.25, sm: 2 },
py: { xs: 0.25, sm: 0.5 },
},
logo: {
width: 60,
height: 60,
backgroundImage: 'url(/fragmenta_icon_1024.png)',
backgroundSize: 'cover',
backgroundPosition: 'center',
borderRadius: 2,
border: '1px solid rgba(194, 207, 228, 0.22)',
boxShadow: '0 10px 20px rgba(4, 8, 14, 0.36)',
filter: 'drop-shadow(0 4px 8px rgba(0, 0, 0, 0.3))',
},
title: {
color: 'text.primary',
fontFamily: '"Bitcount Single", "IBM Plex Mono", "JetBrains Mono", "Space Mono", "Courier New", monospace',
fontWeight: 400,
letterSpacing: '0.02em',
textShadow: '0 2px 10px rgba(0, 0, 0, 0.6)',
},
headerActionsContainer: (isCompactLayout) => ({
display: 'flex',
alignItems: 'stretch',
justifyContent: { xs: 'flex-start', md: 'flex-end' },
gap: { xs: 1, sm: 1.5 },
flexDirection: isCompactLayout ? 'column' : 'row',
flexWrap: isCompactLayout ? 'wrap' : 'nowrap',
width: { xs: '100%', md: 'auto' },
}),
headerActionsGrid: (isCompactLayout) => ({
display: 'grid',
gridTemplateColumns: isCompactLayout
? 'repeat(2, minmax(0, 1fr))'
: 'repeat(2, 122px)',
gap: { xs: 0.75, sm: 1 },
justifyContent: 'flex-end',
flex: isCompactLayout ? '1 1 auto' : '0 1 auto',
width: isCompactLayout ? '100%' : 'auto',
}),
headerActionButton: {
fontSize: { xs: '0.70rem', sm: '0.72rem' },
height: { xs: 34, sm: 36 },
minWidth: 0,
width: '100%',
px: { xs: 1, sm: 1.5 },
'& .MuiButton-startIcon svg': {
width: { xs: 14, sm: 15 },
height: { xs: 14, sm: 15 },
},
},
gpuCard: (isCompactLayout) => ({
p: { xs: 1.25, sm: 1.75 },
bgcolor: 'background.paper',
borderRadius: 2.5,
border: '1px solid',
borderColor: 'divider',
minWidth: isCompactLayout ? '100%' : 270,
flexShrink: 0,
position: 'relative',
overflow: 'hidden',
boxShadow: '0 16px 32px rgba(4, 8, 14, 0.44)',
}),
gpuUsageTrack: {
position: 'relative',
width: '100%',
height: 6,
bgcolor: 'rgba(157, 169, 188, 0.2)',
borderRadius: 3,
overflow: 'hidden',
},
gpuUsageFill: (width, color) => ({
position: 'absolute',
top: 0,
left: 0,
height: '100%',
width,
bgcolor: color,
borderRadius: 3,
transition: 'width 0.3s ease-in-out',
}),
emphasizedPrimaryBody2: {
fontWeight: 'bold',
color: 'primary.main',
},
advancedSettingsDetails: (muiTheme) => {
const isDark = muiTheme.palette.mode === 'dark';
return {
backgroundColor: isDark
? 'rgba(10, 15, 23, 0.46)'
: 'rgba(255, 255, 255, 0.82)',
borderTop: isDark
? '1px solid rgba(194, 207, 228, 0.12)'
: '1px solid rgba(15, 23, 42, 0.08)',
borderBottomLeftRadius: 12,
borderBottomRightRadius: 12,
maxHeight: { xs: 'none', md: '400px' },
overflowY: { xs: 'visible', md: 'auto' },
overflowX: 'hidden',
'&::-webkit-scrollbar': {
width: '8px',
},
'&::-webkit-scrollbar-track': {
background: isDark
? 'rgba(157, 169, 188, 0.14)'
: 'rgba(100, 116, 139, 0.14)',
borderRadius: '4px',
},
'&::-webkit-scrollbar-thumb': {
background: isDark
? 'rgba(157, 169, 188, 0.45)'
: 'rgba(100, 116, 139, 0.42)',
borderRadius: '4px',
'&:hover': {
background: isDark
? 'rgba(157, 169, 188, 0.62)'
: 'rgba(100, 116, 139, 0.56)',
},
},
};
},
mainLayout: {
display: 'flex',
flexDirection: { xs: 'column', md: 'row' },
width: '100%',
flex: 1,
gap: { xs: 1, sm: 1.25, md: 1.5 },
borderRadius: 3,
minHeight: 0,
},
navPaper: {
width: { xs: '100%', md: 64, lg: 220 },
backgroundColor: 'background.paper',
borderRadius: 2.5,
overflow: 'hidden',
display: 'flex',
flexDirection: 'column',
height: '100%',
},
navigationTabs: (isCompactLayout, isIconOnly = false) => ({
height: isCompactLayout ? 'auto' : '100%',
p: { xs: 0.5, sm: 1 },
gap: { xs: 0.25, sm: 0.5 },
'& .MuiTabs-indicator': {
display: 'none',
},
'& .MuiTab-root': {
alignItems: 'center',
justifyContent: (isCompactLayout || isIconOnly) ? 'center' : 'flex-start',
textAlign: (isCompactLayout || isIconOnly) ? 'center' : 'left',
minHeight: { xs: 40, sm: 46 },
fontSize: { xs: '0.78rem', sm: '0.86rem' },
fontWeight: 500,
textTransform: 'none',
color: 'text.secondary',
borderRadius: 2,
px: isIconOnly ? 0 : { xs: 1, sm: 1.5 },
py: { xs: 0.75, sm: 1 },
mx: isCompactLayout ? 0.25 : 0,
minWidth: isIconOnly ? 0 : undefined,
'& .MuiTab-iconWrapper': {
marginBottom: '0 !important',
},
'&.Mui-selected': {
color: 'primary.main',
fontWeight: 600,
backgroundColor: 'rgba(53, 194, 212, 0.16)',
boxShadow: 'inset 0 0 0 1px rgba(115, 215, 227, 0.35)',
},
'&:hover': {
color: 'text.primary',
backgroundColor: 'rgba(53, 194, 212, 0.08)',
},
},
}),
mainContentPaper: (muiTheme) => ({
flex: 1,
backgroundColor: 'background.paper',
borderRadius: 2.5,
display: 'flex',
flexDirection: 'column',
minHeight: { xs: 'auto', md: 0 },
overflow: 'visible',
'& .MuiTypography-body1, & .MuiTypography-body2, & .MuiTypography-caption, & .MuiTypography-subtitle2': {
fontSize: muiTheme.typography.body2.fontSize,
lineHeight: muiTheme.typography.body2.lineHeight,
},
'& .MuiButton-startIcon svg, & .MuiButton-endIcon svg, & .MuiIconButton-root svg, & .MuiAccordionSummary-expandIconWrapper svg': {
width: 20,
height: 20,
},
}),
elevatedInfoCard: (muiTheme) => {
const isDark = muiTheme.palette.mode === 'dark';
return {
p: { xs: 1.5, sm: 2 },
mb: 2,
boxShadow: isDark
? '0 14px 28px rgba(4, 8, 14, 0.44)'
: '0 14px 26px rgba(15, 23, 42, 0.1)',
borderRadius: 2.5,
border: isDark
? '1px solid rgba(194, 207, 228, 0.16)'
: '1px solid rgba(15, 23, 42, 0.12)',
background: isDark
? 'linear-gradient(160deg, rgba(17, 24, 37, 0.96) 0%, rgba(13, 20, 31, 0.92) 100%)'
: 'linear-gradient(160deg, rgba(255, 255, 255, 0.98) 0%, rgba(245, 250, 255, 0.98) 100%)',
'&:hover': {
boxShadow: isDark
? '0 20px 34px rgba(4, 8, 14, 0.56)'
: '0 20px 34px rgba(15, 23, 42, 0.14)',
transform: 'translateY(-1px)',
transition: 'all 0.3s ease',
},
transition: 'all 0.3s ease',
};
},
modelMissingAlert: {
mt: 2,
backgroundColor: 'rgba(219, 80, 68, 0)',
border: '1px solid #DB5044',
borderRadius: 2,
'& .MuiAlert-icon': {
color: '#DB5044',
},
},
modelMissingLink: {
fontWeight: 600,
color: 'primary.main',
textDecoration: 'none',
'&:hover': {
textDecoration: 'underline',
},
},
headerActionButtonWithOpacity: (isEnabled) => ({
fontSize: { xs: '0.70rem', sm: '0.72rem' },
height: { xs: 34, sm: 36 },
minWidth: 0,
width: '100%',
px: { xs: 1, sm: 1.5 },
opacity: isEnabled ? 1 : 0.5,
'& .MuiButton-startIcon svg': {
width: { xs: 14, sm: 15 },
height: { xs: 14, sm: 15 },
},
}),
gpuHeaderRow: {
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
mb: 1,
},
gpuLabel: {
fontWeight: 500,
},
gpuStatusGroup: {
display: 'flex',
alignItems: 'center',
gap: 0.5,
},
gpuStatusDot: (status, animate = true) => ({
width: 6,
height: 6,
borderRadius: '50%',
bgcolor: status === 'good'
? 'success.main'
: status === 'low'
? 'warning.main'
: 'error.main',
animation: animate ? 'pulse 2s infinite' : 'none',
'@keyframes pulse': {
'0%': { opacity: 1 },
'50%': { opacity: 0.5 },
'100%': { opacity: 1 },
},
}),
gpuUsageWrap: {
mb: 1.25,
},
gpuFooterRow: {
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
},
gpuFreeText: {
fontWeight: 'bold',
},
centeredCaption: {
display: 'block',
textAlign: 'center',
},
centeredCaptionWithMargin: {
display: 'block',
textAlign: 'center',
mt: 0.5,
},
dataProcessingGrid: {
flex: 1,
minHeight: 0,
flexWrap: 'wrap',
alignItems: 'stretch',
},
primaryPaneItem: {
display: 'flex',
flexDirection: 'column',
minHeight: 0,
overflow: 'visible',
},
primaryPaneContent: {
flex: 1,
overflow: 'visible',
pr: { xs: 0, md: 1 },
},
secondaryPaneItem: {
display: 'flex',
flexDirection: 'column',
overflow: 'visible',
},
secondaryPaneContent: {
flex: 1,
overflow: 'visible',
pl: { xs: 0, md: 1 },
},
addRowButton: {
mb: { xs: 2, sm: 3 },
},
sectionInfoAlert: {
mb: 2,
},
recentFilesBlock: {
mt: 1,
minWidth: 0,
overflowWrap: 'anywhere',
wordBreak: 'break-word',
},
responsiveGrid: {
height: 'auto',
flexWrap: 'wrap',
},
formControlMarginBottom: {
mb: 2,
},
fieldMarginBottom: {
mb: 2,
},
fieldMarginBottomLarge: {
mb: 3,
},
accordionMarginBottom: {
mb: 2,
},
sliderRow: {
display: 'flex',
alignItems: 'center',
gap: 2,
},
sliderFlexGrow: {
flex: 1,
},
sliderInputSmall: {
width: { xs: '72px', sm: '80px' },
},
sliderInputMedium: {
width: { xs: '88px', sm: '100px' },
},
trainingActionRow: {
display: 'flex',
gap: { xs: 1.25, sm: 2 },
flexDirection: { xs: 'column', sm: 'row' },
},
actionButtonFlexGrow: {
flex: 1,
},
mediumWeightBodyText: {
fontWeight: 500,
},
trainingMonitorWrap: {
flex: 1,
display: 'flex',
flexDirection: 'column',
},
trainingMonitorHeaderRow: {
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
mb: 1,
},
trainingMonitorTitle: {
mb: 0,
},
trainingMonitorStatusInline: (muiTheme) => ({
display: 'flex',
alignItems: 'center',
gap: 0.75,
px: 1,
py: 0.35,
borderRadius: 999,
border: '1px solid',
borderColor: 'divider',
backgroundColor: muiTheme.palette.mode === 'dark'
? 'rgba(10, 15, 23, 0.7)'
: 'rgba(255, 255, 255, 0.9)',
}),
trainingMonitorStatusDot: (status, animate = false) => ({
width: 8,
height: 8,
borderRadius: '50%',
bgcolor: status === 'live'
? 'success.main'
: status === 'error'
? 'error.main'
: status === 'complete'
? 'primary.main'
: 'text.secondary',
animation: animate ? 'pulse 2s infinite' : 'none',
'@keyframes pulse': {
'0%': { opacity: 1 },
'50%': { opacity: 0.5 },
'100%': { opacity: 1 },
},
}),
trainingMonitorStatusText: (status) => ({
color: status === 'live'
? 'success.main'
: status === 'error'
? 'error.main'
: status === 'complete'
? 'primary.main'
: 'text.secondary',
fontWeight: 600,
letterSpacing: '0.03em',
textTransform: 'uppercase',
fontSize: { xs: '0.64rem', sm: '0.7rem' },
lineHeight: 1,
}),
generationModelRow: {
display: 'flex',
alignItems: 'center',
gap: { xs: 1, sm: 2 },
mb: 2,
},
refreshModelsButton: {
minWidth: 40,
},
durationRow: {
display: 'flex',
alignItems: 'center',
gap: { xs: 1, sm: 2 },
mb: 2,
},
generatingWrap: {
mb: 3,
},
generatingHeader: {
display: 'flex',
alignItems: 'center',
mb: 1,
},
generatingSpinner: {
mr: 1,
},
generatingProgress: {
height: 8,
borderRadius: 4,
},
generatingHint: {
mt: 1,
display: 'block',
},
generateButton: {
mb: 2,
},
warningAlertTop: {
mt: 2,
},
sectionCardHeader: {
display: 'flex',
alignItems: 'center',
gap: 1,
mb: 1.5,
},
sectionCardIcon: {
display: 'inline-flex',
color: 'text.primary',
lineHeight: 0,
},
sectionCardTitle: {
fontWeight: 500,
},
selectedModelCard: (muiTheme) => {
const isDark = muiTheme.palette.mode === 'dark';
return {
p: { xs: 1.5, sm: 2 },
mb: 2,
boxShadow: isDark
? '0 14px 28px rgba(4, 8, 14, 0.44)'
: '0 14px 26px rgba(15, 23, 42, 0.1)',
borderRadius: 2.5,
border: isDark
? '1px solid rgba(194, 207, 228, 0.16)'
: '1px solid rgba(15, 23, 42, 0.12)',
background: isDark
? 'linear-gradient(160deg, rgba(17, 24, 37, 0.96) 0%, rgba(13, 20, 31, 0.92) 100%)'
: 'linear-gradient(160deg, rgba(255, 255, 255, 0.98) 0%, rgba(245, 250, 255, 0.98) 100%)',
'&:hover': {
boxShadow: isDark
? '0 20px 34px rgba(4, 8, 14, 0.56)'
: '0 20px 34px rgba(15, 23, 42, 0.14)',
transform: 'translateY(-1px)',
transition: 'all 0.3s ease',
},
transition: 'all 0.3s ease',
};
},
boldBodyText: {
fontWeight: 'bold',
},
selectedModelMetaText: {
display: 'block',
mt: 0.5,
},
unwrappedInfoWrap: {
mt: 2,
},
dialogBodyText: {
mt: 3,
},
dialogErrorText: {
mt: 2,
},
modeToggleButton: (muiTheme) => {
const isDark = muiTheme.palette.mode === 'dark';
return {
position: 'fixed',
left: { xs: 12, sm: 16 },
bottom: { xs: 58, sm: 66 },
width: { xs: 38, sm: 42 },
height: { xs: 38, sm: 42 },
zIndex: 1350,
border: isDark
? '1px solid rgba(194, 207, 228, 0.22)'
: '1px solid rgba(15, 23, 42, 0.16)',
background: isDark
? 'linear-gradient(145deg, rgba(18, 25, 38, 0.96) 0%, rgba(12, 19, 30, 0.96) 100%)'
: 'linear-gradient(145deg, rgba(255, 255, 255, 0.98) 0%, rgba(245, 250, 255, 0.98) 100%)',
color: isDark ? 'primary.light' : 'primary.main',
boxShadow: isDark
? '0 14px 24px rgba(4, 8, 14, 0.5)'
: '0 14px 24px rgba(15, 23, 42, 0.14)',
'&:hover': {
background: isDark
? 'linear-gradient(145deg, rgba(20, 28, 42, 1) 0%, rgba(14, 22, 34, 1) 100%)'
: 'linear-gradient(145deg, rgba(244, 250, 255, 1) 0%, rgba(236, 245, 252, 1) 100%)',
transform: 'translateY(-1px)',
boxShadow: isDark
? '0 18px 28px rgba(4, 8, 14, 0.6)'
: '0 18px 28px rgba(15, 23, 42, 0.18)',
},
};
},
infoButton: (muiTheme) => {
const isDark = muiTheme.palette.mode === 'dark';
return {
position: 'fixed',
left: { xs: 12, sm: 16 },
bottom: { xs: 12, sm: 16 },
width: { xs: 38, sm: 42 },
height: { xs: 38, sm: 42 },
zIndex: 1350,
border: isDark
? '1px solid rgba(194, 207, 228, 0.22)'
: '1px solid rgba(15, 23, 42, 0.16)',
background: isDark
? 'linear-gradient(145deg, rgba(18, 25, 38, 0.96) 0%, rgba(12, 19, 30, 0.96) 100%)'
: 'linear-gradient(145deg, rgba(255, 255, 255, 0.98) 0%, rgba(245, 250, 255, 0.98) 100%)',
color: isDark ? 'primary.light' : 'primary.main',
boxShadow: isDark
? '0 14px 24px rgba(4, 8, 14, 0.5)'
: '0 14px 24px rgba(15, 23, 42, 0.14)',
'&:hover': {
background: isDark
? 'linear-gradient(145deg, rgba(20, 28, 42, 1) 0%, rgba(14, 22, 34, 1) 100%)'
: 'linear-gradient(145deg, rgba(244, 250, 255, 1) 0%, rgba(236, 245, 252, 1) 100%)',
transform: 'translateY(-1px)',
boxShadow: isDark
? '0 18px 28px rgba(4, 8, 14, 0.6)'
: '0 18px 28px rgba(15, 23, 42, 0.18)',
},
};
},
infoDialogTitleRow: {
display: 'inline-flex',
alignItems: 'center',
gap: 1,
},
infoDialogIntro: {
mt: 2.5,
color: 'text.secondary',
},
infoDialogSectionTitle: {
mt: 2.25,
mb: 1,
color: 'text.primary',
fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif',
fontWeight: 700,
letterSpacing: '0.03em',
textTransform: 'uppercase',
fontSize: { xs: '0.7rem', sm: '0.74rem' },
},
infoDialogActionStack: {
mt: 0.25,
display: 'flex',
flexDirection: 'row',
flexWrap: 'wrap',
justifyContent: 'center',
gap: 1,
},
infoDocButton: {
fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif',
},
};
export const tabPanelStyles = {
root: {
p: { xs: 1.25, md: 2 },
background: 'transparent',
flex: 1,
display: 'flex',
flexDirection: 'column',
minHeight: 0,
overflow: 'visible',
},
};
export const audioUploadRowStyles = {
card: (muiTheme) => {
const isDark = muiTheme.palette.mode === 'dark';
return {
mb: { xs: 1.5, sm: 2 },
boxShadow: isDark
? '0 12px 24px rgba(4, 8, 14, 0.34)'
: '0 12px 24px rgba(15, 23, 42, 0.1)',
borderRadius: 2.2,
border: isDark
? '1px solid rgba(194, 207, 228, 0.15)'
: '1px solid rgba(15, 23, 42, 0.12)',
background: isDark
? 'linear-gradient(160deg, rgba(17, 24, 37, 0.96) 0%, rgba(13, 20, 31, 0.92) 100%)'
: 'linear-gradient(160deg, rgba(255, 255, 255, 0.99) 0%, rgba(245, 250, 255, 0.98) 100%)',
'&:hover': {
boxShadow: isDark
? '0 16px 30px rgba(4, 8, 14, 0.46)'
: '0 16px 30px rgba(15, 23, 42, 0.14)',
transform: 'translateY(-1px)',
transition: 'all 0.3s ease',
},
transition: 'all 0.3s ease',
};
},
cardContent: {
p: { xs: 1.5, sm: 2 },
'&:last-child': {
pb: { xs: 1.5, sm: 2 },
},
},
gridSpacing: { xs: 1.5, sm: 2 },
uploadDropZone: (isDragActive) => (muiTheme) => {
const isDark = muiTheme.palette.mode === 'dark';
return {
border: isDark
? '1.5px dashed rgba(194, 207, 228, 0.35)'
: '1.5px dashed rgba(100, 116, 139, 0.34)',
borderRadius: 2,
p: { xs: 1.5, sm: 2 },
textAlign: 'center',
cursor: 'pointer',
'&:hover': {
borderColor: 'primary.main',
backgroundColor: isDark
? 'rgba(53, 194, 212, 0.08)'
: 'rgba(20, 151, 168, 0.08)',
},
backgroundColor: isDragActive
? (isDark ? 'rgba(53, 194, 212, 0.12)' : 'rgba(20, 151, 168, 0.12)')
: (isDark ? 'rgba(10, 15, 23, 0.8)' : 'rgba(255, 255, 255, 0.9)'),
};
},
hiddenInput: {
display: 'none',
},
audioPreview: {
width: '100%',
marginTop: 8,
},
deleteGridItem: {
display: 'flex',
justifyContent: { xs: 'flex-end', sm: 'center' },
},
deleteIconButton: {
alignSelf: { xs: 'center', sm: 'flex-start' },
},
};
export const generatedFragmentsWindowStyles = {
rootPaper: (muiTheme) => {
const isDark = muiTheme.palette.mode === 'dark';
return {
p: 2,
height: 240,
display: 'flex',
flexDirection: 'column',
borderRadius: 2.5,
borderColor: isDark
? 'rgba(194, 207, 228, 0.16)'
: 'rgba(15, 23, 42, 0.12)',
background: isDark
? 'linear-gradient(160deg, rgba(17, 24, 37, 0.94) 0%, rgba(13, 20, 31, 0.9) 100%)'
: 'linear-gradient(160deg, rgba(255, 255, 255, 0.99) 0%, rgba(245, 250, 255, 0.98) 100%)',
boxShadow: isDark
? '0 14px 28px rgba(4, 8, 14, 0.42)'
: '0 14px 28px rgba(15, 23, 42, 0.1)',
};
},
headerRow: {
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
mb: 2,
},
titleRow: {
display: 'flex',
alignItems: 'center',
gap: 1,
minWidth: 0,
},
titleIcon: {
display: 'inline-flex',
color: 'text.primary',
lineHeight: 0,
},
titleText: {
fontWeight: 500,
},
countText: {
fontWeight: 600,
minWidth: 20,
textAlign: 'right',
},
emptyState: {
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
height: '100%',
color: 'text.secondary',
},
listRoot: (muiTheme) => {
const isDark = muiTheme.palette.mode === 'dark';
return {
flex: 1,
overflow: 'auto',
maxHeight: 180,
'& .MuiListItem-root': {
border: '1px solid',
borderColor: isDark
? 'rgba(194, 207, 228, 0.16)'
: 'rgba(15, 23, 42, 0.12)',
borderRadius: 1.5,
mb: 1,
backgroundColor: isDark
? 'rgba(12, 18, 28, 0.62)'
: 'rgba(248, 251, 255, 0.9)',
'&:last-child': {
mb: 0,
},
},
};
},
listItem: {
display: 'flex',
flexDirection: 'column',
alignItems: 'stretch',
py: 1,
},
fragmentRow: {
display: 'flex',
justifyContent: 'space-between',
alignItems: 'flex-start',
mb: 1,
},
fragmentMeta: {
flex: 1,
minWidth: 0,
},
fragmentPrompt: {
fontWeight: 'bold',
overflow: 'hidden',
textOverflow: 'ellipsis',
display: '-webkit-box',
WebkitLineClamp: 2,
WebkitBoxOrient: 'vertical',
},
fragmentActions: {
display: 'flex',
gap: 1,
flexShrink: 0,
},
playPauseButton: (isPlaying) => (muiTheme) => ({
border: '1px solid',
borderColor: isPlaying
? 'primary.main'
: (muiTheme.palette.mode === 'dark' ? 'rgba(194, 207, 228, 0.22)' : 'rgba(15, 23, 42, 0.2)'),
}),
hiddenAudio: {
display: 'none',
},
};
export const trainingMonitorStyles = {
rootPaper: (muiTheme) => {
const isDark = muiTheme.palette.mode === 'dark';
return {
p: 3,
mb: 2,
flex: 1,
display: 'flex',
flexDirection: 'column',
boxShadow: isDark
? '0 16px 30px rgba(4, 8, 14, 0.48)'
: '0 16px 30px rgba(15, 23, 42, 0.1)',
borderRadius: 2.5,
border: isDark
? '1px solid rgba(194, 207, 228, 0.16)'
: '1px solid rgba(15, 23, 42, 0.12)',
background: isDark
? 'linear-gradient(160deg, rgba(17, 24, 37, 0.96) 0%, rgba(13, 20, 31, 0.92) 100%)'
: 'linear-gradient(160deg, rgba(255, 255, 255, 0.99) 0%, rgba(245, 250, 255, 0.98) 100%)',
'&:hover': {
boxShadow: isDark
? '0 22px 38px rgba(4, 8, 14, 0.58)'
: '0 22px 38px rgba(15, 23, 42, 0.14)',
transform: 'translateY(-1px)',
transition: 'all 0.3s ease',
},
transition: 'all 0.3s ease',
};
},
headerRow: {
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
flexWrap: 'wrap',
gap: 1,
mb: 2,
},
headerTitleWrap: {
display: 'flex',
alignItems: 'center',
gap: 1,
},
headerIcon: {
display: 'inline-flex',
color: 'text.primary',
lineHeight: 0,
},
headerTitle: {
fontWeight: 500,
},
statusInline: (muiTheme) => ({
display: 'flex',
alignItems: 'center',
gap: 0.75,
px: 1,
py: 0.35,
borderRadius: 999,
border: '1px solid',
borderColor: 'divider',
backgroundColor: muiTheme.palette.mode === 'dark'
? 'rgba(10, 15, 23, 0.7)'
: 'rgba(255, 255, 255, 0.9)',
}),
statusDot: (status, animate = false) => ({
width: 8,
height: 8,
borderRadius: '50%',
bgcolor: status === 'live'
? 'success.main'
: status === 'error'
? 'error.main'
: status === 'complete'
? 'primary.main'
: 'text.secondary',
animation: animate ? 'pulse 2s infinite' : 'none',
'@keyframes pulse': {
'0%': { opacity: 1 },
'50%': { opacity: 0.5 },
'100%': { opacity: 1 },
},
}),
statusText: (status) => ({
color: status === 'live'
? 'success.main'
: status === 'error'
? 'error.main'
: status === 'complete'
? 'primary.main'
: 'text.secondary',
fontWeight: 600,
letterSpacing: '0.03em',
textTransform: 'uppercase',
fontSize: { xs: '0.64rem', sm: '0.7rem' },
lineHeight: 1,
}),
progressSection: {
mb: 2,
},
progressHeader: {
display: 'flex',
justifyContent: 'space-between',
mb: 1,
},
progressBar: {
height: 8,
borderRadius: 4,
},
deviceSection: {
mb: 2,
},
deviceInfo: {
fontSize: { xs: '0.74rem', sm: '0.8rem' },
mt: 0.5,
},
metricsGrid: {
mb: 2,
},
lossSection: {
mb: 2,
},
lossChartBox: {
height: 200,
width: '100%',
},
errorAlert: {
mb: 2,
},
};
export const welcomePageStyles = {
backdrop: (muiTheme) => {
const isDark = muiTheme.palette.mode === 'dark';
return {
zIndex: 9999,
background: isDark
? 'radial-gradient(1200px 600px at 8% -15%, rgba(53, 194, 212, 0.2), transparent 55%), radial-gradient(800px 500px at 92% 110%, rgba(83, 193, 138, 0.16), transparent 65%), linear-gradient(160deg, #090C12 0%, #0C1119 45%, #090D13 100%)'
: 'radial-gradient(1200px 600px at 8% -15%, rgba(20, 151, 168, 0.16), transparent 55%), radial-gradient(800px 500px at 92% 110%, rgba(72, 171, 118, 0.14), transparent 65%), linear-gradient(160deg, #F4FAFF 0%, #EAF4FF 45%, #F8FCFF 100%)',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
p: { xs: 2, md: 4 },
cursor: 'pointer',
};
},
panel: (muiTheme) => {
const isDark = muiTheme.palette.mode === 'dark';
return {
textAlign: 'center',
width: 'min(920px, 100%)',
border: isDark
? '1px solid rgba(194, 207, 228, 0.2)'
: '1px solid rgba(15, 23, 42, 0.12)',
borderRadius: 4,
background: isDark
? 'linear-gradient(170deg, rgba(19, 27, 41, 0.95) 0%, rgba(12, 19, 31, 0.96) 100%)'
: 'linear-gradient(170deg, rgba(255, 255, 255, 0.98) 0%, rgba(242, 248, 255, 0.98) 100%)',
boxShadow: isDark
? '0 32px 56px rgba(4, 8, 14, 0.64)'
: '0 24px 46px rgba(15, 23, 42, 0.2)',
backdropFilter: 'blur(10px)',
px: { xs: 3, md: 7 },
py: { xs: 5, md: 6 },
};
},
logo: (muiTheme) => {
const isDark = muiTheme.palette.mode === 'dark';
return {
width: { xs: 96, sm: 122 },
height: { xs: 96, sm: 122 },
backgroundImage: 'url(/fragmenta_icon_1024.png)',
backgroundSize: 'cover',
backgroundPosition: 'center',
borderRadius: 3,
border: isDark
? '1px solid rgba(194, 207, 228, 0.24)'
: '1px solid rgba(15, 23, 42, 0.12)',
boxShadow: isDark
? '0 16px 28px rgba(4, 8, 14, 0.45)'
: '0 12px 24px rgba(15, 23, 42, 0.22)',
filter: isDark
? 'drop-shadow(0 8px 16px rgba(0, 0, 0, 0.4))'
: 'drop-shadow(0 6px 12px rgba(15, 23, 42, 0.22))',
mx: 'auto',
mb: 1.5,
};
},
title: {
fontFamily: '"Bitcount Single", "IBM Plex Mono", "JetBrains Mono", "Space Mono", "Courier New", monospace',
fontWeight: 400,
color: 'text.primary',
mb: 1,
fontSize: { xs: '2.5rem', sm: '3.5rem', md: '4rem' },
letterSpacing: '0.02em',
},
overline: {
color: 'primary.main',
letterSpacing: { xs: '0.12em', md: '0.18em' },
fontWeight: 700,
fontSize: { xs: '0.62rem', sm: '0.7rem' },
},
footer: {
color: 'text.secondary',
opacity: 0.6,
fontSize: { xs: '0.64rem', sm: '0.7rem' },
marginTop: 5,
},
version: {
color: 'text.secondary',
opacity: 0.6,
fontSize: { xs: '0.64rem', sm: '0.7rem' },
fontStyle: 'italic',
},
ctaButton: {
mt: 3,
mb: 2,
px: { xs: 3.25, md: 4.5 },
py: { xs: 1.2, md: 1.5 },
borderRadius: 2,
textTransform: 'none',
fontSize: { xs: '0.98rem', sm: '1.05rem', md: '1.1rem' },
fontWeight: 500,
},
};
export const checkpointManagerStyles = {
root: {
mt: 2,
pt: 2,
borderTop: '1px solid',
borderColor: 'divider',
},
panelPaper: (muiTheme) => {
const isDark = muiTheme.palette.mode === 'dark';
return {
p: 2,
mb: 2,
boxShadow: isDark
? '0 16px 30px rgba(4, 8, 14, 0.48)'
: '0 16px 30px rgba(15, 23, 42, 0.1)',
borderRadius: 2.5,
border: isDark
? '1px solid rgba(194, 207, 228, 0.16)'
: '1px solid rgba(15, 23, 42, 0.12)',
background: isDark
? 'linear-gradient(160deg, rgba(17, 24, 37, 0.96) 0%, rgba(13, 20, 31, 0.92) 100%)'
: 'linear-gradient(160deg, rgba(255, 255, 255, 0.99) 0%, rgba(245, 250, 255, 0.98) 100%)',
'&:hover': {
boxShadow: isDark
? '0 22px 38px rgba(4, 8, 14, 0.58)'
: '0 22px 38px rgba(15, 23, 42, 0.14)',
transform: 'translateY(-1px)',
transition: 'all 0.3s ease',
},
transition: 'all 0.3s ease',
};
},
checkpointsList: {
mt: 1,
display: 'grid',
gap: 1,
},
checkpointCard: (muiTheme) => {
const isDark = muiTheme.palette.mode === 'dark';
return {
mb: 1,
p: 1.25,
boxShadow: isDark
? '0 10px 20px rgba(4, 8, 14, 0.34)'
: '0 10px 18px rgba(15, 23, 42, 0.08)',
borderRadius: 1.75,
border: isDark
? '1px solid rgba(194, 207, 228, 0.16)'
: '1px solid rgba(15, 23, 42, 0.12)',
background: isDark
? 'linear-gradient(180deg, rgba(18, 25, 38, 0.98) 0%, rgba(15, 22, 34, 0.96) 100%)'
: 'linear-gradient(180deg, rgba(255, 255, 255, 0.99) 0%, rgba(248, 251, 255, 0.99) 100%)',
'&:hover': {
boxShadow: isDark
? '0 14px 26px rgba(4, 8, 14, 0.44)'
: '0 16px 28px rgba(15, 23, 42, 0.12)',
transform: 'translateY(-1px)',
transition: 'all 0.2s ease',
},
transition: 'all 0.2s ease',
};
},
checkpointRow: {
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
gap: 1,
},
checkpointInfo: {
flex: 1,
},
checkpointName: {
fontWeight: 600,
display: 'flex',
alignItems: 'center',
flexWrap: 'wrap',
gap: 0.75,
},
unwrappedChip: {
fontSize: '0.7rem',
},
emptyText: {
display: 'block',
mt: 0.5,
},
metaNext: {
ml: 1,
},
actions: {
display: 'flex',
gap: 1,
flexWrap: 'wrap',
justifyContent: 'flex-end',
},
errorAlert: {
mt: 2,
},
deleteDialogText: {
mt: 1.5,
},
snackbarAlert: {
width: '100%',
},
};
export const hfAuthDialogStyles = {
checkingBox: {
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
my: 4,
},
checkingProgress: {
mb: 2,
},
authStepBox: {
mt: 2,
},
downloadStepBox: {
mt: 2,
textAlign: 'center',
},
downloadProgress: {
mb: 2,
height: 10,
borderRadius: 5,
},
successStepBox: {
mt: 2,
textAlign: 'center',
},
stepper: {
mb: 4,
},
errorAlert: {
mb: 2,
},
loginSpinnerSize: 24,
};
export const modelUnwrapButtonStyles = {
root: {
mt: 1,
},
result: {
mt: 0.5,
},
error: {
color: '#DB5044',
mt: 0.5,
},
};
export const lossChartStyles = {
padding: { top: 10, right: 16, bottom: 28, left: 44 },
colors: {
grid: '#2B3446',
axis: '#9DA9BC',
line: '#35C2D4',
point: '#73D7E3',
tooltipBg: '#111826',
tooltipBorder: 'rgba(194, 207, 228, 0.2)',
tooltipText: '#E8EDF5',
},
svg: {
width: '100%',
height: '100%',
},
axisFontSize: 10,
tooltip: {
width: 100,
height: 34,
rx: 4,
textX: 6,
timeY: 14,
lossY: 28,
},
};
// Shared visual tokens for the Performance page (panel, channels, MIDI menu).
// One source of truth for the size/spacing/height scale so similar elements
// match. The previous code carried 9+ distinct font sizes and 5+ letter
// spacings across these surfaces; anything new should pick from this set.
export const perfTokens = {
fontSize: {
knob: '0.58rem', // knob labels, pan label, master peak readout
small: '0.66rem', // small labels: BPM unit, mute/solo, durationLabel, footer notes
body: '0.72rem', // primary text: buttons, dropdowns, prompt field, mapping rows
badge: '0.78rem', // section badges (MASTER, channel numbers)
},
letterSpacing: {
wide: '0.08em', // uppercase labels and badges
},
height: {
compact: 26, // primary compact controls (Link, MIDI, Q, BPM, transport, generate)
sub: 22, // small subordinate square buttons (mute, solo, loop)
},
// Sharp 2px radius is the deliberate Ableton-style accent on Link/MIDI.
// Everything else lives on the MUI scale via shape.borderRadius (= 1.5).
};
export const performancePanelStyles = {
root: {
display: 'flex',
flexDirection: 'column',
gap: 1.5,
width: '100%',
minHeight: 0,
},
headerCard: {
display: 'flex',
alignItems: 'center',
gap: 2,
p: { xs: 1.25, sm: 1.75 },
borderRadius: 2.5,
border: '1px solid',
borderColor: 'divider',
background: 'linear-gradient(135deg, rgba(53, 194, 212, 0.08) 0%, rgba(159, 138, 230, 0.06) 100%)',
flexWrap: { xs: 'wrap', md: 'nowrap' },
},
headerLeft: {
display: 'flex',
flexDirection: 'column',
gap: 0.25,
minWidth: 200,
flex: '0 0 auto',
},
titleRow: {
display: 'flex',
alignItems: 'center',
gap: 1,
color: 'primary.main',
},
title: {
fontWeight: 400,
letterSpacing: '0.02em',
},
subtitle: {
color: 'text.secondary',
fontSize: perfTokens.fontSize.body,
},
headerPickers: {
display: 'flex',
gap: 1,
flex: 1,
minWidth: 0,
flexWrap: { xs: 'wrap', sm: 'nowrap' },
},
headerModelPicker: {
flex: 1,
minWidth: 200,
'& .MuiOutlinedInput-root': { borderRadius: 2 },
},
headerCheckpointPicker: {
flex: 1,
minWidth: 180,
'& .MuiOutlinedInput-root': { borderRadius: 2 },
},
errorAlert: {
borderRadius: 2,
},
channelsRow: {
display: 'flex',
gap: 1.5,
alignItems: 'stretch',
flexWrap: { xs: 'wrap', md: 'nowrap' },
},
channelsGrid: {
display: 'grid',
gridTemplateColumns: 'repeat(4, minmax(150px, 1fr))',
gap: 1.25,
flex: 1,
minWidth: 0,
},
masterStrip: (color) => (theme) => ({
display: 'flex',
flexDirection: 'column',
gap: 1.5,
p: 1.25,
borderRadius: 2.5,
border: `1px solid ${color}55`,
background: theme.palette.mode === 'dark'
? `linear-gradient(160deg, ${color}14 0%, rgba(13, 20, 31, 0.94) 70%)`
: `linear-gradient(160deg, ${color}14 0%, ${theme.palette.background.paper} 70%)`,
boxShadow: theme.palette.mode === 'dark'
? `0 8px 22px rgba(4, 8, 14, 0.44), inset 0 0 0 1px ${color}22`
: `0 2px 8px rgba(0,0,0,0.1), inset 0 0 0 1px ${color}22`,
width: { xs: '100%', md: 160 },
flex: { xs: '1 1 100%', md: '0 0 160px' },
minHeight: 0,
overflow: 'hidden',
boxSizing: 'border-box',
}),
masterHeader: (color) => ({
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
gap: 0.5,
borderBottom: `1px solid ${color}33`,
pb: 0.75,
color,
}),
masterBadge: (color) => ({
fontSize: perfTokens.fontSize.badge,
fontWeight: 600,
color,
letterSpacing: perfTokens.letterSpacing.wide,
px: 0.75,
py: 0.25,
borderRadius: 1,
backgroundColor: `${color}1F`,
border: `1px solid ${color}55`,
}),
masterFaderWrap: {
flex: 1,
display: 'flex',
flexDirection: 'row',
alignItems: 'stretch',
justifyContent: 'center',
gap: 1,
py: 1.25,
minHeight: 0,
},
masterMeterTrack: (theme) => ({
width: 10,
backgroundColor: theme.palette.mode === 'dark' ? 'rgba(9, 12, 18, 0.7)' : 'rgba(0, 0, 0, 0.08)',
borderRadius: 0.75,
border: '1px solid',
borderColor: theme.palette.divider,
position: 'relative',
overflow: 'hidden',
display: 'flex',
alignItems: 'flex-end',
}),
masterMeterFill: (color) => ({
width: '100%',
height: '0%',
background: `linear-gradient(0deg, ${color} 0%, ${color}DD 60%, #E3A34B 80%, #E36C61 100%)`,
transition: 'height 0.05s linear',
}),
masterFader: (color) => (theme) => ({
height: '100%',
color,
'& .MuiSlider-thumb': { width: 16, height: 16 },
'& .MuiSlider-rail': { opacity: 0.3, width: 4 },
'& .MuiSlider-track': { display: 'none' },
'& .MuiSlider-mark': {
width: 6,
height: 1,
backgroundColor: theme.palette.mode === 'dark' ? 'rgba(157, 169, 188, 0.55)' : 'rgba(0, 0, 0, 0.25)',
opacity: 1,
},
'& .MuiSlider-markActive': {
backgroundColor: theme.palette.mode === 'dark' ? 'rgba(157, 169, 188, 0.55)' : 'rgba(0, 0, 0, 0.25)',
},
}),
masterReadouts: {
display: 'flex',
flexDirection: 'column',
gap: 0.25,
alignItems: 'center',
},
masterValue: {
textAlign: 'center',
color: 'primary.main',
fontSize: perfTokens.fontSize.small,
letterSpacing: '0.04em',
},
masterPeakValue: {
textAlign: 'center',
color: 'text.disabled',
fontSize: perfTokens.fontSize.knob,
letterSpacing: '0.04em',
},
masterTransport: {
display: 'flex',
flexDirection: 'column',
gap: 0.5,
pt: 0.75,
borderTop: '1px solid',
borderTopColor: 'divider',
},
masterBtn: (color, variant) => (theme) => ({
textTransform: 'none',
borderRadius: 1.5,
fontSize: perfTokens.fontSize.body,
py: 0.5,
...(variant === 'play'
? {
color,
borderColor: theme.palette.mode === 'dark' ? `${color}66` : `${color}BB`,
backgroundColor: `${color}14`,
'&:hover': { backgroundColor: `${color}26`, borderColor: color },
}
: {
color: '#E36C61',
borderColor: theme.palette.mode === 'dark' ? 'rgba(227, 108, 97, 0.5)' : 'rgba(227, 108, 97, 0.8)',
'&:hover': { backgroundColor: 'rgba(227, 108, 97, 0.12)', borderColor: '#E36C61' },
}),
}),
};
export const performanceChannelStyles = {
strip: (color, playing) => (theme) => ({
display: 'flex',
flexDirection: 'column',
gap: 1,
p: 1.25,
borderRadius: 2.5,
border: '1px solid',
borderColor: playing ? color : theme.palette.divider,
background: playing
? `linear-gradient(160deg, ${color}1F 0%, ${theme.palette.background.paper} 60%)`
: theme.palette.background.paper,
boxShadow: playing
? `0 0 0 1px ${color}66, 0 8px 22px ${theme.palette.mode === 'dark' ? 'rgba(4, 8, 14, 0.5)' : 'rgba(0,0,0,0.15)'}`
: `0 2px 8px ${theme.palette.mode === 'dark' ? 'rgba(4, 8, 14, 0.36)' : 'rgba(0,0,0,0.08)'}`,
transition: 'box-shadow 0.2s ease, border-color 0.2s ease, background 0.3s ease',
height: '100%',
minWidth: 150,
}),
stripHeader: (color) => ({
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
borderBottom: `1px solid ${color}33`,
pb: 0.75,
}),
channelBadge: (color) => ({
fontFamily: 'inherit',
fontSize: perfTokens.fontSize.badge,
fontWeight: 600,
color,
letterSpacing: perfTokens.letterSpacing.wide,
px: 0.75,
py: 0.25,
borderRadius: 1,
backgroundColor: `${color}1F`,
border: `1px solid ${color}55`,
}),
muteSoloRow: {
display: 'flex',
gap: 0.5,
},
muteBtn: (active) => ({
width: perfTokens.height.sub,
height: perfTokens.height.sub,
fontSize: perfTokens.fontSize.small,
fontWeight: 700,
borderRadius: 1,
color: active ? '#fff' : 'text.secondary',
backgroundColor: active ? 'rgba(227, 108, 97, 0.85)' : 'transparent',
border: '1px solid',
borderColor: active ? 'rgba(227, 108, 97, 0.85)' : 'divider',
'&:hover': {
backgroundColor: active ? 'rgba(227, 108, 97, 0.95)' : 'rgba(227, 108, 97, 0.18)',
},
}),
soloBtn: (active) => ({
width: perfTokens.height.sub,
height: perfTokens.height.sub,
fontSize: perfTokens.fontSize.small,
fontWeight: 700,
borderRadius: 1,
color: active ? '#0c1018' : 'text.secondary',
backgroundColor: active ? 'rgba(227, 163, 75, 0.95)' : 'transparent',
border: '1px solid',
borderColor: active ? 'rgba(227, 163, 75, 0.95)' : 'divider',
'&:hover': {
backgroundColor: active ? 'rgba(227, 163, 75, 1)' : 'rgba(227, 163, 75, 0.2)',
},
}),
promptBox: {
display: 'flex',
flexDirection: 'column',
gap: 0.5,
},
promptField: (theme) => ({
'& .MuiOutlinedInput-root': {
fontSize: perfTokens.fontSize.body,
backgroundColor: theme.palette.mode === 'dark' ? 'rgba(9, 12, 18, 0.5)' : 'rgba(0, 0, 0, 0.04)',
borderRadius: 1.5,
'& textarea': { lineHeight: 1.3 },
},
'& fieldset': { borderColor: theme.palette.divider },
}),
durationRow: {
display: 'flex',
alignItems: 'center',
gap: 0.75,
},
durationLabel: {
fontFamily: 'inherit',
fontSize: perfTokens.fontSize.small,
color: 'text.secondary',
minWidth: 22,
},
durationSlider: (color) => ({
flex: 1,
color,
'& .MuiSlider-thumb': { width: 10, height: 10 },
'& .MuiSlider-rail': { opacity: 0.3 },
}),
generateBtn: (color) => (theme) => ({
alignSelf: 'flex-end',
width: perfTokens.height.compact,
height: perfTokens.height.compact,
borderRadius: 1.5,
color,
border: `1px solid ${color}55`,
backgroundColor: `${color}14`,
'&:hover': { backgroundColor: `${color}26` },
'&.Mui-disabled': theme.palette.mode === 'dark' ? { opacity: 0.35 } : {},
}),
waveformWrap: (theme) => ({
position: 'relative',
height: 42,
backgroundColor: theme.palette.mode === 'dark' ? 'rgba(9, 12, 18, 0.6)' : 'rgba(0, 0, 0, 0.06)',
borderRadius: 1.5,
border: '1px solid',
borderColor: theme.palette.divider,
overflow: 'hidden',
}),
waveformPlaceholder: {
position: 'absolute',
inset: 0,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
color: 'text.disabled',
fontFamily: 'inherit',
fontSize: perfTokens.fontSize.small,
letterSpacing: perfTokens.letterSpacing.wide,
pointerEvents: 'none',
},
knobsGrid: {
display: 'grid',
gridTemplateColumns: 'repeat(4, 1fr)',
gap: 0.5,
py: 0.5,
},
knobCell: {
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
gap: 0.25,
height: 70,
},
knobSlider: (color, fat = false) => ({
height: 50,
color,
// Gain is visually fattened (wider track + bigger thumb) so it stands
// out from LPF/DLY/REV — it's the dBFS-scaled "fader" of the four.
'& .MuiSlider-thumb': { width: fat ? 12 : 10, height: fat ? 12 : 10 },
'& .MuiSlider-rail': { opacity: 0.3, width: fat ? 4 : 2 },
'& .MuiSlider-track': { width: fat ? 4 : 2, border: 'none' },
}),
knobLabel: {
display: 'block',
fontFamily: 'inherit',
fontSize: perfTokens.fontSize.knob,
color: 'text.secondary',
letterSpacing: perfTokens.letterSpacing.wide,
mt: 0.75,
},
transportRow: {
display: 'flex',
alignItems: 'center',
gap: 0.5,
mt: 'auto',
pt: 0.75,
borderTop: '1px solid',
borderTopColor: 'divider',
},
transportBtn: (color, playing) => (theme) => ({
width: perfTokens.height.compact,
height: perfTokens.height.compact,
borderRadius: 1.5,
color: playing ? '#0c1018' : color,
backgroundColor: playing ? color : `${color}14`,
border: `1px solid ${color}55`,
'&:hover': { backgroundColor: playing ? color : `${color}28` },
'&.Mui-disabled': theme.palette.mode === 'dark' ? { opacity: 0.3 } : {},
}),
loopBtn: (color, active) => ({
width: perfTokens.height.sub,
height: perfTokens.height.sub,
borderRadius: 1,
color: active ? color : 'text.secondary',
backgroundColor: active ? `${color}1F` : 'transparent',
border: '1px solid',
borderColor: active ? `${color}55` : 'divider',
'&:hover': { backgroundColor: `${color}1F` },
}),
meterTrack: (theme) => ({
flex: 1,
height: 12,
mt: 1,
backgroundColor: theme.palette.mode === 'dark' ? 'rgba(9, 12, 18, 0.7)' : 'rgba(0, 0, 0, 0.08)',
borderRadius: 0.75,
border: '1px solid',
borderColor: theme.palette.divider,
position: 'relative',
overflow: 'hidden',
display: 'flex',
alignItems: 'center',
}),
meterFill: (color) => ({
width: '0%',
height: '100%',
background: `linear-gradient(90deg, ${color} 0%, ${color}AA 70%, #E36C61 100%)`,
transition: 'width 0.05s linear',
}),
};
export default theme;