@pheem49/mint 1.8.2 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cargo.lock +55 -3
- package/Cargo.toml +2 -1
- package/Release_Note.md +297 -107
- package/bin/mint +0 -0
- package/crates/mint-cli/Cargo.toml +1 -0
- package/crates/mint-cli/src/actions.rs +233 -0
- package/crates/mint-cli/src/agent.rs +382 -127
- package/crates/mint-cli/src/gmail.rs +22 -2
- package/crates/mint-cli/src/image.rs +8 -8
- package/crates/mint-cli/src/interactive.rs +2888 -0
- package/crates/mint-cli/src/main.rs +391 -2506
- package/crates/mint-cli/src/markdown.rs +294 -0
- package/crates/mint-cli/src/onboard.rs +152 -109
- package/crates/mint-cli/src/setup.rs +143 -143
- package/crates/mint-cli/src/updater.rs +48 -6
- package/crates/mint-core/Cargo.toml +1 -0
- package/crates/mint-core/src/agent_loop.rs +1 -0
- package/crates/mint-core/src/api_server.rs +431 -65
- package/crates/mint-core/src/browser.rs +630 -102
- package/crates/mint-core/src/channels.rs +105 -6
- package/crates/mint-core/src/chat.rs +174 -11
- package/crates/mint-core/src/code_tools.rs +47 -31
- package/crates/mint-core/src/config.rs +302 -17
- package/crates/mint-core/src/image_gen.rs +299 -38
- package/crates/mint-core/src/lib.rs +10 -7
- package/crates/mint-core/src/mcp.rs +119 -6
- package/crates/mint-core/src/memory.rs +6 -1
- package/crates/mint-core/src/orchestration.rs +237 -96
- package/crates/mint-core/src/pictures.rs +67 -5
- package/crates/mint-core/src/semantic.rs +1 -1
- package/crates/mint-core/src/shell.rs +1 -1
- package/crates/mint-core/src/skills.rs +128 -25
- package/crates/mint-core/src/video_gen.rs +235 -0
- package/package.json +8 -2
- package/shared-modules/linux-audio/fluidsynth2-static.json +9 -3
- package/shared-modules/linux-audio/fluidsynth2.json +8 -2
- package/shared-modules/linux-audio/lilv.json +26 -19
- package/shared-modules/linux-audio/lv2.json +0 -1
- package/shared-modules/luajit/luajit.json +2 -2
- package/skills-lock.json +41 -0
- package/src/renderer/index-web.html +1 -1
- package/src/renderer/index.html +1 -1
- package/src/renderer/shared/components/AgentActivityTable.tsx +25 -6
- package/src/renderer/shared/constants/slashCommands.ts +27 -0
- package/src/renderer/shared/platform.ts +3 -0
- package/src/renderer/shared/types.ts +4 -0
- package/src/renderer/shared/utils/approval.tsx +86 -7
- package/src/renderer/shared/utils/fileIcons.ts +135 -0
- package/src/renderer/shared/utils/markdown.tsx +217 -88
- package/src/renderer/shared/utils/slashCommandProcessor.ts +239 -0
- package/src/renderer/src/components/ChatPanel.tsx +486 -69
- package/src/renderer/src/components/DashboardSidebar.tsx +11 -2
- package/src/renderer/src/components/ImageStudioPanel.tsx +87 -4
- package/src/renderer/src/components/MintDashboard.tsx +195 -7
- package/src/renderer/src/components/PicturesLibrary.tsx +156 -15
- package/src/renderer/src/components/Settings/AgentsTab.tsx +21 -2
- package/src/renderer/src/components/Settings/AutomationTab.tsx +316 -18
- package/src/renderer/src/components/Settings/GeneralTab.tsx +795 -413
- package/src/renderer/src/components/Settings/PluginsTab.tsx +304 -70
- package/src/renderer/src/components/Settings/ThemeTab.tsx +6 -1
- package/src/renderer/src/components/SettingsWindow.tsx +106 -3
- package/src/renderer/src/components/VeoStudioPanel.tsx +549 -0
- package/src/renderer/src/components/WorkspacePanel.tsx +7 -125
- package/src/renderer/src/css/image-studio.css +106 -0
- package/src/renderer/src/css/settings.css +158 -0
- package/src/renderer/src/css/styles.css +368 -1
- package/src/renderer/src/css/veo-studio.css +626 -0
- package/src/renderer/src/index.css +1 -0
- package/src/renderer/src/tauri.ts +144 -17
- package/src/renderer/src-web/components/ChatPanel.tsx +385 -93
- package/src/renderer/src-web/components/DashboardSidebar.tsx +16 -1
- package/src/renderer/src-web/components/ImageStudioPanel.tsx +87 -4
- package/src/renderer/src-web/components/MintDashboard.tsx +156 -5
- package/src/renderer/src-web/components/PicturesLibrary.tsx +155 -15
- package/src/renderer/src-web/components/Settings/AgentsTab.tsx +21 -2
- package/src/renderer/src-web/components/Settings/AutomationTab.tsx +316 -18
- package/src/renderer/src-web/components/Settings/GeneralTab.tsx +795 -411
- package/src/renderer/src-web/components/Settings/PluginsTab.tsx +304 -70
- package/src/renderer/src-web/components/Settings/ThemeTab.tsx +6 -1
- package/src/renderer/src-web/components/SettingsWindow.tsx +110 -3
- package/src/renderer/src-web/components/VeoStudioPanel.tsx +549 -0
- package/src/renderer/src-web/css/image-studio.css +106 -0
- package/src/renderer/src-web/css/settings.css +158 -0
- package/src/renderer/src-web/css/styles.css +369 -1
- package/src/renderer/src-web/css/veo-studio.css +650 -0
- package/src/renderer/src-web/index.css +1 -0
- package/src/renderer/src-web/tauri.ts +135 -16
- package/src-tauri/src/desktop.rs +18 -16
- package/src-tauri/src/discord_rpc.rs +1 -1
- package/src-tauri/src/lib.rs +155 -25
- package/src-tauri/src/webhooks.rs +45 -31
- package/src-tauri/src/workflows.rs +1 -0
- package/src-tauri/tauri.conf.json +1 -1
- package/temp_gridgeist/AGENTS.md +8 -0
- package/temp_gridgeist/CHANGELOG.md +130 -0
- package/temp_gridgeist/LICENSE +21 -0
- package/temp_gridgeist/README.md +323 -0
- package/temp_gridgeist/README.th.md +325 -0
- package/temp_gridgeist/skills/gridgeist/SKILL.md +88 -0
- package/temp_gridgeist/skills/gridgeist/agents/openai.yaml +9 -0
- package/temp_gridgeist/skills/gridgeist/assets/gridgeist-small.svg +10 -0
- package/temp_gridgeist/skills/gridgeist/assets/gridgeist.png +0 -0
- package/temp_gridgeist/skills/gridgeist/assets/gridgeist.svg +18 -0
- package/temp_gridgeist/skills/gridgeist/references/design-language.md +88 -0
- package/temp_gridgeist/skills/gridgeist/references/review-checklist.md +128 -0
- package/temp_gridgeist/skills/gridgeist/references/system-contract.md +109 -0
|
@@ -1,60 +1,12 @@
|
|
|
1
1
|
import React, { useEffect, useState } from 'react'
|
|
2
2
|
import { getWorkspaceTree, type WorkspaceTreeEntry, createWorkspaceFile, createWorkspaceFolder, deleteWorkspaceItem } from '../tauri'
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
import folderDistOpenIcon from 'material-icon-theme/icons/folder-dist-open.svg?url'
|
|
11
|
-
import folderDocsIcon from 'material-icon-theme/icons/folder-docs.svg?url'
|
|
12
|
-
import folderDocsOpenIcon from 'material-icon-theme/icons/folder-docs-open.svg?url'
|
|
13
|
-
import folderGitIcon from 'material-icon-theme/icons/folder-git.svg?url'
|
|
14
|
-
import folderGitOpenIcon from 'material-icon-theme/icons/folder-git-open.svg?url'
|
|
15
|
-
import folderGithubIcon from 'material-icon-theme/icons/folder-github.svg?url'
|
|
16
|
-
import folderGithubOpenIcon from 'material-icon-theme/icons/folder-github-open.svg?url'
|
|
17
|
-
import folderImagesIcon from 'material-icon-theme/icons/folder-images.svg?url'
|
|
18
|
-
import folderImagesOpenIcon from 'material-icon-theme/icons/folder-images-open.svg?url'
|
|
19
|
-
import folderLogIcon from 'material-icon-theme/icons/folder-log.svg?url'
|
|
20
|
-
import folderLogOpenIcon from 'material-icon-theme/icons/folder-log-open.svg?url'
|
|
21
|
-
import folderNodeIcon from 'material-icon-theme/icons/folder-node.svg?url'
|
|
22
|
-
import folderNodeOpenIcon from 'material-icon-theme/icons/folder-node-open.svg?url'
|
|
23
|
-
import folderPublicIcon from 'material-icon-theme/icons/folder-public.svg?url'
|
|
24
|
-
import folderPublicOpenIcon from 'material-icon-theme/icons/folder-public-open.svg?url'
|
|
25
|
-
import folderRustIcon from 'material-icon-theme/icons/folder-rust.svg?url'
|
|
26
|
-
import folderRustOpenIcon from 'material-icon-theme/icons/folder-rust-open.svg?url'
|
|
27
|
-
import folderScriptsIcon from 'material-icon-theme/icons/folder-scripts.svg?url'
|
|
28
|
-
import folderScriptsOpenIcon from 'material-icon-theme/icons/folder-scripts-open.svg?url'
|
|
29
|
-
import folderSrcIcon from 'material-icon-theme/icons/folder-src.svg?url'
|
|
30
|
-
import folderSrcOpenIcon from 'material-icon-theme/icons/folder-src-open.svg?url'
|
|
31
|
-
import folderSrcTauriIcon from 'material-icon-theme/icons/folder-src-tauri.svg?url'
|
|
32
|
-
import folderSrcTauriOpenIcon from 'material-icon-theme/icons/folder-src-tauri-open.svg?url'
|
|
33
|
-
import folderTestIcon from 'material-icon-theme/icons/folder-test.svg?url'
|
|
34
|
-
import folderTestOpenIcon from 'material-icon-theme/icons/folder-test-open.svg?url'
|
|
35
|
-
import folderUiIcon from 'material-icon-theme/icons/folder-ui.svg?url'
|
|
36
|
-
import folderUiOpenIcon from 'material-icon-theme/icons/folder-ui-open.svg?url'
|
|
37
|
-
import folderUtilsIcon from 'material-icon-theme/icons/folder-utils.svg?url'
|
|
38
|
-
import folderUtilsOpenIcon from 'material-icon-theme/icons/folder-utils-open.svg?url'
|
|
39
|
-
import cssIcon from 'material-icon-theme/icons/css.svg?url'
|
|
40
|
-
import documentIcon from 'material-icon-theme/icons/document.svg?url'
|
|
41
|
-
import htmlIcon from 'material-icon-theme/icons/html.svg?url'
|
|
42
|
-
import imageIcon from 'material-icon-theme/icons/image.svg?url'
|
|
43
|
-
import javascriptIcon from 'material-icon-theme/icons/javascript.svg?url'
|
|
44
|
-
import jsonIcon from 'material-icon-theme/icons/json.svg?url'
|
|
45
|
-
import lockIcon from 'material-icon-theme/icons/lock.svg?url'
|
|
46
|
-
import logIcon from 'material-icon-theme/icons/log.svg?url'
|
|
47
|
-
import markdownIcon from 'material-icon-theme/icons/markdown.svg?url'
|
|
48
|
-
import npmIcon from 'material-icon-theme/icons/npm.svg?url'
|
|
49
|
-
import reactIcon from 'material-icon-theme/icons/react.svg?url'
|
|
50
|
-
import reactTsIcon from 'material-icon-theme/icons/react_ts.svg?url'
|
|
51
|
-
import rustIcon from 'material-icon-theme/icons/rust.svg?url'
|
|
52
|
-
import settingsIcon from 'material-icon-theme/icons/settings.svg?url'
|
|
53
|
-
import tauriIcon from 'material-icon-theme/icons/tauri.svg?url'
|
|
54
|
-
import tomlIcon from 'material-icon-theme/icons/toml.svg?url'
|
|
55
|
-
import typescriptIcon from 'material-icon-theme/icons/typescript.svg?url'
|
|
56
|
-
import viteIcon from 'material-icon-theme/icons/vite.svg?url'
|
|
57
|
-
import yamlIcon from 'material-icon-theme/icons/yaml.svg?url'
|
|
3
|
+
import {
|
|
4
|
+
materialFolderIcon,
|
|
5
|
+
materialFileIcon,
|
|
6
|
+
getExtension as extension,
|
|
7
|
+
folderOpenIcon
|
|
8
|
+
} from '../../shared/utils/fileIcons'
|
|
9
|
+
|
|
58
10
|
|
|
59
11
|
interface WorkspacePanelProps {
|
|
60
12
|
agentMode: boolean
|
|
@@ -76,76 +28,6 @@ const FILE_LABEL: Record<string, string> = {
|
|
|
76
28
|
tsx: 'TS',
|
|
77
29
|
}
|
|
78
30
|
|
|
79
|
-
const FOLDER_ICONS: Record<string, { closed: string; open: string }> = {
|
|
80
|
-
'.cargo_home': { closed: folderRustIcon, open: folderRustOpenIcon },
|
|
81
|
-
'.github': { closed: folderGithubIcon, open: folderGithubOpenIcon },
|
|
82
|
-
'.git': { closed: folderGitIcon, open: folderGitOpenIcon },
|
|
83
|
-
'.rustup': { closed: folderRustIcon, open: folderRustOpenIcon },
|
|
84
|
-
'.rustup_copy': { closed: folderRustIcon, open: folderRustOpenIcon },
|
|
85
|
-
'.rustup_home': { closed: folderRustIcon, open: folderRustOpenIcon },
|
|
86
|
-
assets: { closed: folderImagesIcon, open: folderImagesOpenIcon },
|
|
87
|
-
components: { closed: folderComponentsIcon, open: folderComponentsOpenIcon },
|
|
88
|
-
crates: { closed: folderRustIcon, open: folderRustOpenIcon },
|
|
89
|
-
css: { closed: folderUiIcon, open: folderUiOpenIcon },
|
|
90
|
-
dist: { closed: folderDistIcon, open: folderDistOpenIcon },
|
|
91
|
-
docs: { closed: folderDocsIcon, open: folderDocsOpenIcon },
|
|
92
|
-
logs: { closed: folderLogIcon, open: folderLogOpenIcon },
|
|
93
|
-
node_modules: { closed: folderNodeIcon, open: folderNodeOpenIcon },
|
|
94
|
-
out: { closed: folderDistIcon, open: folderDistOpenIcon },
|
|
95
|
-
public: { closed: folderPublicIcon, open: folderPublicOpenIcon },
|
|
96
|
-
renderer: { closed: folderUiIcon, open: folderUiOpenIcon },
|
|
97
|
-
scripts: { closed: folderScriptsIcon, open: folderScriptsOpenIcon },
|
|
98
|
-
src: { closed: folderSrcIcon, open: folderSrcOpenIcon },
|
|
99
|
-
'src-tauri': { closed: folderSrcTauriIcon, open: folderSrcTauriOpenIcon },
|
|
100
|
-
tests: { closed: folderTestIcon, open: folderTestOpenIcon },
|
|
101
|
-
utils: { closed: folderUtilsIcon, open: folderUtilsOpenIcon },
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
const FILE_ICONS_BY_EXTENSION: Record<string, string> = {
|
|
105
|
-
css: cssIcon,
|
|
106
|
-
html: htmlIcon,
|
|
107
|
-
jpeg: imageIcon,
|
|
108
|
-
jpg: imageIcon,
|
|
109
|
-
js: javascriptIcon,
|
|
110
|
-
json: jsonIcon,
|
|
111
|
-
lock: lockIcon,
|
|
112
|
-
log: logIcon,
|
|
113
|
-
md: markdownIcon,
|
|
114
|
-
png: imageIcon,
|
|
115
|
-
rs: rustIcon,
|
|
116
|
-
svg: imageIcon,
|
|
117
|
-
toml: tomlIcon,
|
|
118
|
-
ts: typescriptIcon,
|
|
119
|
-
tsx: reactTsIcon,
|
|
120
|
-
yaml: yamlIcon,
|
|
121
|
-
yml: yamlIcon,
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const FILE_ICONS_BY_NAME: Record<string, string> = {
|
|
125
|
-
'package-lock.json': npmIcon,
|
|
126
|
-
'package.json': npmIcon,
|
|
127
|
-
'tauri.conf.json': tauriIcon,
|
|
128
|
-
'vite.config.ts': viteIcon,
|
|
129
|
-
'vite.config.web.ts': viteIcon,
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function extension(name: string) {
|
|
133
|
-
const index = name.lastIndexOf('.')
|
|
134
|
-
return index === -1 ? '' : name.slice(index + 1).toLowerCase()
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
function materialFolderIcon(name: string, open: boolean) {
|
|
138
|
-
const icon = FOLDER_ICONS[name] || FOLDER_ICONS[name.toLowerCase()]
|
|
139
|
-
if (!icon) return open ? folderOpenIcon : folderIcon
|
|
140
|
-
return open ? icon.open : icon.closed
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
function materialFileIcon(name: string, fileExtension: string) {
|
|
144
|
-
if (name.endsWith('.config.ts') || name.endsWith('.config.js')) return settingsIcon
|
|
145
|
-
if (name.endsWith('.tsx')) return reactTsIcon
|
|
146
|
-
if (name.endsWith('.jsx')) return reactIcon
|
|
147
|
-
return FILE_ICONS_BY_NAME[name.toLowerCase()] || FILE_ICONS_BY_EXTENSION[fileExtension] || documentIcon
|
|
148
|
-
}
|
|
149
31
|
|
|
150
32
|
function TreeNode({ entry, level, onRefresh, workspacePath }: { entry: WorkspaceTreeEntry; level: number; onRefresh: () => void; workspacePath: string; key?: string }) {
|
|
151
33
|
const [open, setOpen] = useState(level < 1)
|
|
@@ -731,3 +731,109 @@
|
|
|
731
731
|
left: 0 !important;
|
|
732
732
|
}
|
|
733
733
|
}
|
|
734
|
+
|
|
735
|
+
/* ── Source Image Dropzone & Preview Card ──────────────── */
|
|
736
|
+
.img-studio-dropzone {
|
|
737
|
+
display: flex;
|
|
738
|
+
flex-direction: column;
|
|
739
|
+
align-items: center;
|
|
740
|
+
justify-content: center;
|
|
741
|
+
gap: 8px;
|
|
742
|
+
padding: 18px 14px;
|
|
743
|
+
border: 1.5px dashed color-mix(in srgb, var(--accent, #10b981) 35%, rgba(255, 255, 255, 0.15));
|
|
744
|
+
border-radius: 12px;
|
|
745
|
+
background: color-mix(in srgb, var(--chrome-bg, #111827) 80%, rgba(255, 255, 255, 0.02));
|
|
746
|
+
cursor: pointer;
|
|
747
|
+
transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
|
|
748
|
+
text-align: center;
|
|
749
|
+
position: relative;
|
|
750
|
+
overflow: hidden;
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
.img-studio-dropzone:hover,
|
|
754
|
+
.img-studio-dropzone.is-dragging {
|
|
755
|
+
border-color: var(--accent, #10b981);
|
|
756
|
+
background: color-mix(in srgb, var(--accent, #10b981) 8%, var(--chrome-bg, #111827));
|
|
757
|
+
transform: translateY(-1px);
|
|
758
|
+
box-shadow: 0 4px 20px rgba(16, 185, 129, 0.12);
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
.img-studio-dropzone-icon {
|
|
762
|
+
width: 28px;
|
|
763
|
+
height: 28px;
|
|
764
|
+
color: var(--accent, #10b981);
|
|
765
|
+
transition: transform 0.2s ease;
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
.img-studio-dropzone:hover .img-studio-dropzone-icon {
|
|
769
|
+
transform: scale(1.1) translateY(-2px);
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
.img-studio-dropzone-text {
|
|
773
|
+
font-size: 0.82rem;
|
|
774
|
+
font-weight: 600;
|
|
775
|
+
color: var(--text-main, #e5e7eb);
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
.img-studio-dropzone-subtext {
|
|
779
|
+
font-size: 0.72rem;
|
|
780
|
+
color: var(--text-muted, #9ca3af);
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
.img-studio-preview-card {
|
|
784
|
+
display: flex;
|
|
785
|
+
align-items: center;
|
|
786
|
+
gap: 12px;
|
|
787
|
+
padding: 10px 14px;
|
|
788
|
+
border-radius: 12px;
|
|
789
|
+
background: color-mix(in srgb, var(--chrome-bg, #111827) 90%, rgba(255, 255, 255, 0.04));
|
|
790
|
+
border: 1px solid color-mix(in srgb, var(--accent, #10b981) 30%, rgba(255, 255, 255, 0.12));
|
|
791
|
+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
.img-studio-preview-thumb {
|
|
795
|
+
width: 48px;
|
|
796
|
+
height: 48px;
|
|
797
|
+
border-radius: 8px;
|
|
798
|
+
object-fit: cover;
|
|
799
|
+
border: 1px solid rgba(255, 255, 255, 0.15);
|
|
800
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
.img-studio-preview-info {
|
|
804
|
+
flex: 1;
|
|
805
|
+
min-width: 0;
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
.img-studio-preview-title {
|
|
809
|
+
font-size: 0.82rem;
|
|
810
|
+
font-weight: 600;
|
|
811
|
+
color: var(--text-main, #fff);
|
|
812
|
+
display: flex;
|
|
813
|
+
align-items: center;
|
|
814
|
+
gap: 6px;
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
.img-studio-preview-subtitle {
|
|
818
|
+
font-size: 0.72rem;
|
|
819
|
+
color: var(--accent, #10b981);
|
|
820
|
+
margin-top: 2px;
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
.img-studio-preview-remove {
|
|
824
|
+
background: color-mix(in srgb, #ef4444 15%, transparent);
|
|
825
|
+
border: 1px solid color-mix(in srgb, #ef4444 30%, transparent);
|
|
826
|
+
color: #f87171;
|
|
827
|
+
padding: 5px 10px;
|
|
828
|
+
border-radius: 6px;
|
|
829
|
+
font-size: 0.75rem;
|
|
830
|
+
font-weight: 600;
|
|
831
|
+
cursor: pointer;
|
|
832
|
+
transition: all 0.15s ease;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
.img-studio-preview-remove:hover {
|
|
836
|
+
background: rgba(239, 68, 68, 0.25);
|
|
837
|
+
color: #fca5a5;
|
|
838
|
+
transform: scale(1.03);
|
|
839
|
+
}
|
|
@@ -1132,5 +1132,163 @@ kbd {
|
|
|
1132
1132
|
grid-template-columns: 180px 1fr;
|
|
1133
1133
|
}
|
|
1134
1134
|
|
|
1135
|
+
/* ─── Native Channel Bridges Cards Styling ────────────────── */
|
|
1136
|
+
|
|
1137
|
+
.bridge-cards-container {
|
|
1138
|
+
display: flex;
|
|
1139
|
+
flex-direction: column;
|
|
1140
|
+
gap: 14px;
|
|
1141
|
+
margin-top: 10px;
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
.bridge-card {
|
|
1145
|
+
background: var(--surface-bg, rgba(255, 255, 255, 0.025));
|
|
1146
|
+
border: 1px solid var(--border, rgba(255, 255, 255, 0.08));
|
|
1147
|
+
border-radius: 12px;
|
|
1148
|
+
padding: 16px 18px;
|
|
1149
|
+
transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
|
|
1150
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
.bridge-card:hover {
|
|
1154
|
+
border-color: var(--border-strong, rgba(255, 255, 255, 0.18));
|
|
1155
|
+
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
.bridge-card.active {
|
|
1159
|
+
background: var(--surface-strong, rgba(16, 185, 129, 0.04));
|
|
1160
|
+
border-color: rgba(16, 185, 129, 0.3);
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1163
|
+
.bridge-card-header {
|
|
1164
|
+
display: flex;
|
|
1165
|
+
align-items: center;
|
|
1166
|
+
justify-content: space-between;
|
|
1167
|
+
gap: 12px;
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
.bridge-info {
|
|
1171
|
+
display: flex;
|
|
1172
|
+
align-items: center;
|
|
1173
|
+
gap: 12px;
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
.bridge-icon-badge {
|
|
1177
|
+
width: 38px;
|
|
1178
|
+
height: 38px;
|
|
1179
|
+
border-radius: 10px;
|
|
1180
|
+
display: flex;
|
|
1181
|
+
align-items: center;
|
|
1182
|
+
justify-content: center;
|
|
1183
|
+
font-size: 18px;
|
|
1184
|
+
color: #fff;
|
|
1185
|
+
box-shadow: 0 4px 10px rgba(0,0,0,0.25);
|
|
1186
|
+
flex-shrink: 0;
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
.bridge-icon-telegram {
|
|
1190
|
+
background: linear-gradient(135deg, #0088cc 0%, #24a1de 100%);
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
.bridge-icon-discord {
|
|
1194
|
+
background: linear-gradient(135deg, #5865F2 0%, #4752C4 100%);
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
.bridge-icon-slack {
|
|
1198
|
+
background: linear-gradient(135deg, #4A154B 0%, #611f69 100%);
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
.bridge-icon-line {
|
|
1202
|
+
background: linear-gradient(135deg, #00B900 0%, #00c300 100%);
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
.bridge-icon-whatsapp {
|
|
1206
|
+
background: linear-gradient(135deg, #25D366 0%, #128C7E 100%);
|
|
1207
|
+
}
|
|
1208
|
+
|
|
1209
|
+
.bridge-title-group {
|
|
1210
|
+
display: flex;
|
|
1211
|
+
flex-direction: column;
|
|
1212
|
+
gap: 3px;
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
.bridge-title {
|
|
1216
|
+
font-size: 14px;
|
|
1217
|
+
font-weight: 600;
|
|
1218
|
+
color: var(--text-main, #f8fafc);
|
|
1219
|
+
display: flex;
|
|
1220
|
+
align-items: center;
|
|
1221
|
+
gap: 8px;
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
.bridge-status-pill {
|
|
1225
|
+
font-size: 10px;
|
|
1226
|
+
font-weight: 600;
|
|
1227
|
+
padding: 2px 8px;
|
|
1228
|
+
border-radius: 12px;
|
|
1229
|
+
text-transform: uppercase;
|
|
1230
|
+
letter-spacing: 0.5px;
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1233
|
+
.bridge-status-pill.active {
|
|
1234
|
+
background: rgba(16, 185, 129, 0.15);
|
|
1235
|
+
color: #34d399;
|
|
1236
|
+
border: 1px solid rgba(16, 185, 129, 0.3);
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
.bridge-status-pill.inactive {
|
|
1240
|
+
background: rgba(255, 255, 255, 0.05);
|
|
1241
|
+
color: var(--text-muted, #94a3b8);
|
|
1242
|
+
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1245
|
+
.bridge-subtitle {
|
|
1246
|
+
font-size: 12px;
|
|
1247
|
+
color: var(--text-muted, #94a3b8);
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
.bridge-inputs {
|
|
1251
|
+
display: flex;
|
|
1252
|
+
flex-direction: column;
|
|
1253
|
+
gap: 10px;
|
|
1254
|
+
margin-top: 14px;
|
|
1255
|
+
padding-top: 12px;
|
|
1256
|
+
border-top: 1px dashed var(--border, rgba(255, 255, 255, 0.08));
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
.bridge-input-row {
|
|
1260
|
+
display: flex;
|
|
1261
|
+
gap: 10px;
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
.bridge-input {
|
|
1265
|
+
width: 100%;
|
|
1266
|
+
padding: 9px 12px;
|
|
1267
|
+
background: var(--input-bg, rgba(0, 0, 0, 0.35));
|
|
1268
|
+
border: 1px solid var(--border, rgba(255, 255, 255, 0.1));
|
|
1269
|
+
border-radius: 8px;
|
|
1270
|
+
color: var(--text-main, #f8fafc);
|
|
1271
|
+
font-size: 13px;
|
|
1272
|
+
transition: all 0.2s ease;
|
|
1273
|
+
}
|
|
1274
|
+
|
|
1275
|
+
.bridge-input:focus {
|
|
1276
|
+
outline: none;
|
|
1277
|
+
border-color: var(--accent, #10b981);
|
|
1278
|
+
background: var(--input-focus-bg, rgba(0, 0, 0, 0.5));
|
|
1279
|
+
box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.2);
|
|
1280
|
+
}
|
|
1281
|
+
|
|
1282
|
+
.bridge-input[type="number"] {
|
|
1283
|
+
-moz-appearance: textfield;
|
|
1284
|
+
appearance: textfield;
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
|
+
.bridge-input[type="number"]::-webkit-outer-spin-button,
|
|
1288
|
+
.bridge-input[type="number"]::-webkit-inner-spin-button {
|
|
1289
|
+
-webkit-appearance: none;
|
|
1290
|
+
margin: 0;
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1135
1293
|
|
|
1136
1294
|
|