nanoshell 1.2.3 → 1.7.2
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/README.md +58 -22
- package/cli/bundler.zig +63 -15
- package/cli/dev_server.zig +176 -5
- package/cli/installer.zig +25 -15
- package/cli/main.zig +10 -21
- package/example_app/app.js +421 -79
- package/example_app/index.html +126 -36
- package/example_app/styles.css +184 -86
- package/package.json +1 -1
- package/zig-out/bin/example_app.exe +0 -0
- package/zig-out/bin/nanoshell.exe +0 -0
- package/zig-out/bin/msvcp140.dll +0 -0
- package/zig-out/bin/vcruntime140.dll +0 -0
- package/zig-out/bin/vcruntime140_1.dll +0 -0
package/example_app/index.html
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
|
-
<
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>NanoShell Master Control Center (38 Genuine Win32 APIs)</title>
|
|
6
7
|
<link rel="stylesheet" href="styles.css">
|
|
7
8
|
</head>
|
|
8
9
|
<body>
|
|
@@ -10,15 +11,17 @@
|
|
|
10
11
|
<!-- Sidebar Navigation -->
|
|
11
12
|
<aside class="sidebar">
|
|
12
13
|
<div class="logo-box">
|
|
13
|
-
<h1 class="logo-title">
|
|
14
|
-
<p class="tagline">
|
|
14
|
+
<h1 class="logo-title">Nano<span>Shell</span></h1>
|
|
15
|
+
<p class="tagline">v1.7.1 Master Engine</p>
|
|
15
16
|
</div>
|
|
16
17
|
|
|
17
18
|
<nav class="nav-menu">
|
|
18
|
-
<button class="nav-btn active"
|
|
19
|
-
<button class="nav-btn"
|
|
20
|
-
<button class="nav-btn"
|
|
21
|
-
<button class="nav-btn"
|
|
19
|
+
<button class="nav-btn active" data-tab="tab-overview">⚡ Overview & Telemetry</button>
|
|
20
|
+
<button class="nav-btn" data-tab="tab-window">🪟 Window & Effects</button>
|
|
21
|
+
<button class="nav-btn" data-tab="tab-fs">📁 FileSystem & Dialogs</button>
|
|
22
|
+
<button class="nav-btn" data-tab="tab-process">⚙️ Process & Shell</button>
|
|
23
|
+
<button class="nav-btn" data-tab="tab-system">🖥️ System & Hardware</button>
|
|
24
|
+
<button class="nav-btn" data-tab="tab-engines">🔥 Exclusive Engines</button>
|
|
22
25
|
</nav>
|
|
23
26
|
|
|
24
27
|
<div class="status-badge">
|
|
@@ -32,51 +35,138 @@
|
|
|
32
35
|
<!-- Glassmorphic Header Card -->
|
|
33
36
|
<header class="glass-card header-card">
|
|
34
37
|
<div class="header-text">
|
|
35
|
-
<h2 id="view-title">
|
|
36
|
-
<p id="view-desc">
|
|
38
|
+
<h2 id="view-title">NanoShell Master Control Center</h2>
|
|
39
|
+
<p id="view-desc">100% Genuine Win32 System APIs (< 1ms Boot, ~17MB RAM, 120 FPS Native C/Zig)</p>
|
|
37
40
|
</div>
|
|
38
|
-
<button class="action-btn" id="btn-refresh"
|
|
41
|
+
<button class="action-btn" id="btn-refresh-telemetry">🔄 Refresh Diagnostics</button>
|
|
39
42
|
</header>
|
|
40
43
|
|
|
41
|
-
<!--
|
|
42
|
-
<section class="
|
|
43
|
-
<div class="
|
|
44
|
-
<
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
<!-- TAB 1: OVERVIEW & TELEMETRY -->
|
|
45
|
+
<section id="tab-overview" class="tab-content active">
|
|
46
|
+
<div class="metrics-grid">
|
|
47
|
+
<div class="glass-card metric-card">
|
|
48
|
+
<span class="card-label">CPU Cores</span>
|
|
49
|
+
<span class="card-value" id="val-cores">--</span>
|
|
50
|
+
<span class="card-sub">Win32 GetSystemInfo</span>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<div class="glass-card metric-card">
|
|
54
|
+
<span class="card-label">Available RAM</span>
|
|
55
|
+
<span class="card-value" id="val-free-ram">-- MB</span>
|
|
56
|
+
<span class="card-sub">GlobalMemoryStatusEx</span>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<div class="glass-card metric-card">
|
|
60
|
+
<span class="card-label">Battery Level</span>
|
|
61
|
+
<span class="card-value" id="val-battery">-- %</span>
|
|
62
|
+
<span class="card-sub">GetSystemPowerStatus</span>
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
<div class="glass-card metric-card">
|
|
66
|
+
<span class="card-label">Mouse Cursor</span>
|
|
67
|
+
<span class="card-value" id="val-cursor">disabled</span>
|
|
68
|
+
<span class="card-sub">Win32 GetCursorPos</span>
|
|
69
|
+
<button id="btn-cursor-toggle" style="margin-top:6px;font-size:10px;padding:3px 8px;border-radius:6px;border:1px solid #555;background:#1a1a2e;color:#888;cursor:pointer;">Enable Tracking</button>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
<div class="glass-card action-panel">
|
|
74
|
+
<h3>⚡ All 38 Genuine Win32 System APIs Live Tester</h3>
|
|
75
|
+
<p class="panel-desc">Click any category tab on the left sidebar to execute real Win32 kernel calls with zero mock data!</p>
|
|
76
|
+
<div class="quick-actions">
|
|
77
|
+
<button class="btn-primary" id="btn-quick-os">Query OS Info</button>
|
|
78
|
+
<button class="btn-secondary" id="btn-quick-battery">Battery Telemetry</button>
|
|
79
|
+
<button class="btn-accent" id="btn-quick-gpu">GPU Hardware Info</button>
|
|
80
|
+
<button class="btn-primary" id="btn-quick-procs">List OS Processes</button>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</section>
|
|
84
|
+
|
|
85
|
+
<!-- TAB 2: WINDOW & EFFECTS -->
|
|
86
|
+
<section id="tab-window" class="tab-content">
|
|
87
|
+
<div class="glass-card action-panel">
|
|
88
|
+
<h3>🪟 Native Window & Glassmorphism Backdrop Controls</h3>
|
|
89
|
+
<div class="button-group">
|
|
90
|
+
<button class="btn-primary" id="btn-win-mica">✨ Set Mica Backdrop (Win 11)</button>
|
|
91
|
+
<button class="btn-accent" id="btn-win-acrylic">🧊 Set Acrylic Blur (Win 10/11)</button>
|
|
92
|
+
<button class="btn-secondary" id="btn-win-title">Update Title Bar</button>
|
|
93
|
+
<button class="btn-secondary" id="btn-win-center">Center Window</button>
|
|
94
|
+
<button class="btn-primary" id="btn-win-fullscreen">Toggle Fullscreen</button>
|
|
95
|
+
<button class="btn-secondary" id="btn-win-min">Minimize Window</button>
|
|
96
|
+
<button class="btn-accent" id="btn-win-max">Maximize Window</button>
|
|
97
|
+
</div>
|
|
47
98
|
</div>
|
|
99
|
+
</section>
|
|
48
100
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
<
|
|
101
|
+
<!-- TAB 3: FILESYSTEM & DIALOGS -->
|
|
102
|
+
<section id="tab-fs" class="tab-content">
|
|
103
|
+
<div class="glass-card action-panel">
|
|
104
|
+
<h3>📁 Native FileSystem & OS File Picker Dialogs</h3>
|
|
105
|
+
<div class="button-group">
|
|
106
|
+
<button class="btn-primary" id="btn-dlg-open">📂 Open File Dialog</button>
|
|
107
|
+
<button class="btn-primary" id="btn-dlg-save">💾 Save File Dialog</button>
|
|
108
|
+
<button class="btn-secondary" id="btn-fs-read">Read File (fs.readFile)</button>
|
|
109
|
+
<button class="btn-secondary" id="btn-fs-write">Write File (fs.writeFile)</button>
|
|
110
|
+
<button class="btn-accent" id="btn-fs-readdir">List Directory (fs.readDir)</button>
|
|
111
|
+
<button class="btn-secondary" id="btn-fs-mkdir">Create Folder (fs.mkdir)</button>
|
|
112
|
+
<button class="btn-primary" id="btn-dlg-msg">Trigger OS Alert Box</button>
|
|
113
|
+
</div>
|
|
53
114
|
</div>
|
|
115
|
+
</section>
|
|
54
116
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
<
|
|
117
|
+
<!-- TAB 4: PROCESS & SHELL -->
|
|
118
|
+
<section id="tab-process" class="tab-content">
|
|
119
|
+
<div class="glass-card action-panel">
|
|
120
|
+
<h3>⚙️ Win32 Task Manager, Process Spawner & Shell Exec</h3>
|
|
121
|
+
<div class="button-group">
|
|
122
|
+
<button class="btn-primary" id="btn-proc-list">📋 List Running Processes</button>
|
|
123
|
+
<button class="btn-accent" id="btn-proc-spawn">🚀 Spawn Sub-Process (notepad.exe)</button>
|
|
124
|
+
<button class="btn-secondary" id="btn-shell-exec">⚡ Run CLI Exec (dir)</button>
|
|
125
|
+
<button class="btn-primary" id="btn-shell-url">🌐 Open External URL</button>
|
|
126
|
+
</div>
|
|
59
127
|
</div>
|
|
128
|
+
</section>
|
|
129
|
+
|
|
130
|
+
<!-- TAB 5: SYSTEM & HARDWARE -->
|
|
131
|
+
<section id="tab-system" class="tab-content">
|
|
132
|
+
<div class="glass-card action-panel">
|
|
133
|
+
<h3>🖥️ Hardware Telemetry, Clipboard & Toast Notifications</h3>
|
|
134
|
+
<div class="button-group">
|
|
135
|
+
<button class="btn-primary" id="btn-sys-info">💻 Full System Spec</button>
|
|
136
|
+
<button class="btn-secondary" id="btn-clip-write">📋 Copy Text to Clipboard</button>
|
|
137
|
+
<button class="btn-secondary" id="btn-clip-read">📥 Read Text from Clipboard</button>
|
|
138
|
+
<button class="btn-accent" id="btn-screen-monitors">🖥️ Monitor Resolution</button>
|
|
139
|
+
<button class="btn-primary" id="btn-notif-show">🔔 OS Toast Notification</button>
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
</section>
|
|
60
143
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
<
|
|
144
|
+
<!-- TAB 6: EXCLUSIVE ENGINES -->
|
|
145
|
+
<section id="tab-engines" class="tab-content">
|
|
146
|
+
<div class="glass-card action-panel">
|
|
147
|
+
<h3>🔥 Exclusive Engines: Zero-Copy SHM, Snapshot Thaw & GPU Cap</h3>
|
|
148
|
+
<div class="button-group">
|
|
149
|
+
<button class="btn-accent" id="btn-shm-test">⚡ Test Shared Memory Matrix (< 0.01ms)</button>
|
|
150
|
+
<button class="btn-primary" id="btn-snap-freeze">❄️ Freeze State (snapshot.freezeState)</button>
|
|
151
|
+
<button class="btn-primary" id="btn-snap-thaw">🧊 Thaw State (< 1ms Cold Start)</button>
|
|
152
|
+
<button class="btn-secondary" id="btn-gpu-info">🎮 DXGI GPU Hardware Info</button>
|
|
153
|
+
<button class="btn-accent" id="btn-gpu-fps120">⚡ Cap FPS to 120</button>
|
|
154
|
+
<button class="btn-secondary" id="btn-gpu-fps60">🔋 Cap FPS to 60</button>
|
|
155
|
+
</div>
|
|
65
156
|
</div>
|
|
66
157
|
</section>
|
|
67
158
|
|
|
68
|
-
<!--
|
|
69
|
-
<section class="glass-card
|
|
70
|
-
<
|
|
71
|
-
|
|
72
|
-
<button class="btn-
|
|
73
|
-
<button class="btn-secondary" id="btn-progress">Set Taskbar Progress (85%)</button>
|
|
74
|
-
<button class="btn-accent" id="btn-open-settings">Open Child Settings Window</button>
|
|
159
|
+
<!-- Global Console Output Panel -->
|
|
160
|
+
<section class="glass-card output-panel">
|
|
161
|
+
<div class="output-header">
|
|
162
|
+
<span>🖥️ Live Win32 API Output Stream</span>
|
|
163
|
+
<button class="btn-clear" id="btn-clear-output">Clear</button>
|
|
75
164
|
</div>
|
|
165
|
+
<pre id="api-output">// Click any API button above to inspect live Win32 system output...</pre>
|
|
76
166
|
</section>
|
|
77
167
|
</main>
|
|
78
168
|
</div>
|
|
79
169
|
|
|
80
|
-
|
|
170
|
+
<!-- app.js is injected inline by the NanoShell engine at load time -->
|
|
81
171
|
</body>
|
|
82
172
|
</html>
|
package/example_app/styles.css
CHANGED
|
@@ -1,131 +1,150 @@
|
|
|
1
|
-
/* ZeroUI
|
|
1
|
+
/* ZeroUI / NanoShell Master Cyber Dashboard Stylesheet */
|
|
2
|
+
|
|
3
|
+
:root {
|
|
4
|
+
--bg-dark: #090d16;
|
|
5
|
+
--panel-bg: rgba(15, 23, 42, 0.75);
|
|
6
|
+
--border-color: rgba(56, 189, 248, 0.2);
|
|
7
|
+
--primary-cyan: #38bdf8;
|
|
8
|
+
--accent-purple: #a855f7;
|
|
9
|
+
--accent-emerald: #10b981;
|
|
10
|
+
--text-main: #f8fafc;
|
|
11
|
+
--text-muted: #94a3b8;
|
|
12
|
+
}
|
|
2
13
|
|
|
3
14
|
* {
|
|
4
15
|
box-sizing: border-box;
|
|
5
16
|
margin: 0;
|
|
6
17
|
padding: 0;
|
|
7
|
-
font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, Roboto, sans-serif;
|
|
8
18
|
}
|
|
9
19
|
|
|
10
20
|
body {
|
|
11
|
-
|
|
12
|
-
color:
|
|
21
|
+
font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
|
|
22
|
+
background-color: var(--bg-dark);
|
|
23
|
+
background-image:
|
|
24
|
+
radial-gradient(at 0% 0%, rgba(56, 189, 248, 0.12) 0px, transparent 50%),
|
|
25
|
+
radial-gradient(at 100% 100%, rgba(168, 85, 247, 0.12) 0px, transparent 50%);
|
|
26
|
+
color: var(--text-main);
|
|
13
27
|
height: 100vh;
|
|
14
28
|
overflow: hidden;
|
|
15
29
|
}
|
|
16
30
|
|
|
31
|
+
button, .nav-btn, .action-btn, .btn-primary, .btn-secondary, .btn-accent, .btn-clear {
|
|
32
|
+
pointer-events: auto !important;
|
|
33
|
+
cursor: pointer !important;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* App Layout Grid */
|
|
17
37
|
.dashboard-container {
|
|
18
38
|
display: flex;
|
|
19
|
-
width: 100%;
|
|
20
39
|
height: 100vh;
|
|
40
|
+
width: 100vw;
|
|
21
41
|
}
|
|
22
42
|
|
|
23
43
|
/* Sidebar */
|
|
24
44
|
.sidebar {
|
|
25
45
|
width: 260px;
|
|
26
|
-
background: rgba(
|
|
27
|
-
|
|
46
|
+
background: rgba(10, 15, 29, 0.85);
|
|
47
|
+
backdrop-filter: blur(16px);
|
|
48
|
+
border-right: 1px solid var(--border-color);
|
|
28
49
|
display: flex;
|
|
29
50
|
flex-direction: column;
|
|
30
|
-
padding:
|
|
51
|
+
padding: 1.5rem 1rem;
|
|
31
52
|
}
|
|
32
53
|
|
|
33
54
|
.logo-box {
|
|
34
|
-
margin-bottom:
|
|
35
|
-
|
|
55
|
+
margin-bottom: 2rem;
|
|
56
|
+
padding-left: 0.5rem;
|
|
36
57
|
}
|
|
37
58
|
|
|
38
59
|
.logo-title {
|
|
39
|
-
font-size:
|
|
60
|
+
font-size: 1.5rem;
|
|
40
61
|
font-weight: 800;
|
|
41
|
-
line-height: 1.2;
|
|
42
62
|
letter-spacing: -0.5px;
|
|
43
|
-
color: #ffffff;
|
|
44
|
-
display: block;
|
|
45
|
-
margin: 0;
|
|
46
|
-
padding: 0;
|
|
47
63
|
}
|
|
48
64
|
|
|
49
65
|
.logo-title span {
|
|
50
|
-
color:
|
|
66
|
+
color: var(--primary-cyan);
|
|
51
67
|
}
|
|
52
68
|
|
|
53
69
|
.tagline {
|
|
54
|
-
font-size:
|
|
55
|
-
color:
|
|
70
|
+
font-size: 0.75rem;
|
|
71
|
+
color: var(--text-muted);
|
|
56
72
|
text-transform: uppercase;
|
|
57
73
|
letter-spacing: 1px;
|
|
58
|
-
margin-top:
|
|
59
|
-
display: block;
|
|
60
|
-
clear: both;
|
|
74
|
+
margin-top: 0.2rem;
|
|
61
75
|
}
|
|
62
76
|
|
|
63
77
|
.nav-menu {
|
|
64
78
|
display: flex;
|
|
65
79
|
flex-direction: column;
|
|
66
|
-
gap:
|
|
80
|
+
gap: 0.5rem;
|
|
67
81
|
flex: 1;
|
|
68
82
|
}
|
|
69
83
|
|
|
70
84
|
.nav-btn {
|
|
71
85
|
background: transparent;
|
|
72
86
|
border: 1px solid transparent;
|
|
73
|
-
color:
|
|
74
|
-
padding:
|
|
75
|
-
border-radius:
|
|
87
|
+
color: var(--text-muted);
|
|
88
|
+
padding: 0.75rem 1rem;
|
|
89
|
+
border-radius: 0.5rem;
|
|
76
90
|
text-align: left;
|
|
77
|
-
font-size:
|
|
78
|
-
font-weight:
|
|
91
|
+
font-size: 0.85rem;
|
|
92
|
+
font-weight: 600;
|
|
79
93
|
cursor: pointer;
|
|
94
|
+
transition: all 0.2s ease;
|
|
80
95
|
}
|
|
81
96
|
|
|
82
97
|
.nav-btn:hover {
|
|
83
|
-
background: rgba(
|
|
84
|
-
color:
|
|
98
|
+
background: rgba(56, 189, 248, 0.08);
|
|
99
|
+
color: var(--primary-cyan);
|
|
85
100
|
}
|
|
86
101
|
|
|
87
102
|
.nav-btn.active {
|
|
88
|
-
background:
|
|
89
|
-
border:
|
|
90
|
-
color:
|
|
103
|
+
background: rgba(56, 189, 248, 0.15);
|
|
104
|
+
border-color: rgba(56, 189, 248, 0.4);
|
|
105
|
+
color: var(--primary-cyan);
|
|
106
|
+
box-shadow: 0 0 15px rgba(56, 189, 248, 0.15);
|
|
91
107
|
}
|
|
92
108
|
|
|
93
109
|
.status-badge {
|
|
94
110
|
display: flex;
|
|
95
111
|
align-items: center;
|
|
96
|
-
gap:
|
|
97
|
-
padding:
|
|
98
|
-
background: rgba(
|
|
99
|
-
border
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
font-weight:
|
|
112
|
+
gap: 0.5rem;
|
|
113
|
+
padding: 0.6rem 0.8rem;
|
|
114
|
+
background: rgba(16, 185, 129, 0.1);
|
|
115
|
+
border: 1px solid rgba(16, 185, 129, 0.3);
|
|
116
|
+
border-radius: 20px;
|
|
117
|
+
font-size: 0.75rem;
|
|
118
|
+
font-weight: bold;
|
|
119
|
+
color: var(--accent-emerald);
|
|
103
120
|
}
|
|
104
121
|
|
|
105
122
|
.pulse-dot {
|
|
106
123
|
width: 8px;
|
|
107
124
|
height: 8px;
|
|
108
|
-
background:
|
|
125
|
+
background-color: var(--accent-emerald);
|
|
109
126
|
border-radius: 50%;
|
|
110
|
-
box-shadow: 0 0
|
|
127
|
+
box-shadow: 0 0 8px var(--accent-emerald);
|
|
111
128
|
}
|
|
112
129
|
|
|
113
130
|
/* Content Area */
|
|
114
131
|
.content-area {
|
|
115
132
|
flex: 1;
|
|
116
|
-
padding:
|
|
133
|
+
padding: 1.5rem;
|
|
134
|
+
overflow-y: auto;
|
|
117
135
|
display: flex;
|
|
118
136
|
flex-direction: column;
|
|
119
|
-
gap:
|
|
120
|
-
overflow-y: auto;
|
|
137
|
+
gap: 1.25rem;
|
|
121
138
|
}
|
|
122
139
|
|
|
140
|
+
/* Glassmorphism Card Utility */
|
|
123
141
|
.glass-card {
|
|
124
|
-
background:
|
|
125
|
-
|
|
126
|
-
border
|
|
127
|
-
|
|
128
|
-
padding:
|
|
142
|
+
background: var(--panel-bg);
|
|
143
|
+
backdrop-filter: blur(12px);
|
|
144
|
+
border: 1px solid var(--border-color);
|
|
145
|
+
border-radius: 0.75rem;
|
|
146
|
+
padding: 1.25rem;
|
|
147
|
+
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
|
|
129
148
|
}
|
|
130
149
|
|
|
131
150
|
.header-card {
|
|
@@ -135,89 +154,168 @@ body {
|
|
|
135
154
|
}
|
|
136
155
|
|
|
137
156
|
.header-text h2 {
|
|
138
|
-
font-size:
|
|
157
|
+
font-size: 1.25rem;
|
|
139
158
|
font-weight: 700;
|
|
159
|
+
color: var(--text-main);
|
|
140
160
|
}
|
|
141
161
|
|
|
142
162
|
.header-text p {
|
|
143
|
-
font-size:
|
|
144
|
-
color:
|
|
145
|
-
margin-top:
|
|
163
|
+
font-size: 0.8rem;
|
|
164
|
+
color: var(--text-muted);
|
|
165
|
+
margin-top: 0.25rem;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.action-btn {
|
|
169
|
+
background: rgba(56, 189, 248, 0.15);
|
|
170
|
+
border: 1px solid var(--primary-cyan);
|
|
171
|
+
color: var(--primary-cyan);
|
|
172
|
+
padding: 0.5rem 1rem;
|
|
173
|
+
border-radius: 0.5rem;
|
|
174
|
+
font-weight: 600;
|
|
175
|
+
font-size: 0.8rem;
|
|
176
|
+
cursor: pointer;
|
|
177
|
+
transition: background 0.2s;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.action-btn:hover {
|
|
181
|
+
background: var(--primary-cyan);
|
|
182
|
+
color: var(--bg-dark);
|
|
146
183
|
}
|
|
147
184
|
|
|
148
185
|
/* Metrics Grid */
|
|
149
186
|
.metrics-grid {
|
|
150
187
|
display: grid;
|
|
151
188
|
grid-template-columns: repeat(4, 1fr);
|
|
152
|
-
gap:
|
|
189
|
+
gap: 1rem;
|
|
153
190
|
}
|
|
154
191
|
|
|
155
192
|
.metric-card {
|
|
156
193
|
display: flex;
|
|
157
194
|
flex-direction: column;
|
|
158
|
-
gap: 8px;
|
|
159
195
|
}
|
|
160
196
|
|
|
161
197
|
.card-label {
|
|
162
|
-
font-size:
|
|
198
|
+
font-size: 0.75rem;
|
|
199
|
+
color: var(--text-muted);
|
|
163
200
|
text-transform: uppercase;
|
|
164
|
-
letter-spacing:
|
|
165
|
-
color: #94a3b8;
|
|
166
|
-
font-weight: 600;
|
|
201
|
+
letter-spacing: 0.5px;
|
|
167
202
|
}
|
|
168
203
|
|
|
169
204
|
.card-value {
|
|
170
|
-
font-size:
|
|
205
|
+
font-size: 1.5rem;
|
|
171
206
|
font-weight: 800;
|
|
172
|
-
color:
|
|
207
|
+
color: var(--primary-cyan);
|
|
208
|
+
margin: 0.3rem 0;
|
|
173
209
|
}
|
|
174
210
|
|
|
175
211
|
.card-sub {
|
|
176
|
-
font-size:
|
|
212
|
+
font-size: 0.7rem;
|
|
177
213
|
color: #64748b;
|
|
178
214
|
}
|
|
179
215
|
|
|
180
|
-
/* Action
|
|
216
|
+
/* Action Panels & Buttons */
|
|
181
217
|
.action-panel h3 {
|
|
182
|
-
font-size:
|
|
218
|
+
font-size: 1rem;
|
|
183
219
|
font-weight: 600;
|
|
184
|
-
margin-bottom:
|
|
220
|
+
margin-bottom: 0.8rem;
|
|
221
|
+
color: var(--primary-cyan);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.panel-desc {
|
|
225
|
+
font-size: 0.8rem;
|
|
226
|
+
color: var(--text-muted);
|
|
227
|
+
margin-bottom: 1rem;
|
|
185
228
|
}
|
|
186
229
|
|
|
187
|
-
.button-group {
|
|
230
|
+
.button-group, .quick-actions {
|
|
188
231
|
display: flex;
|
|
189
|
-
|
|
232
|
+
flex-wrap: wrap;
|
|
233
|
+
gap: 0.75rem;
|
|
190
234
|
}
|
|
191
235
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
border-radius: 12px;
|
|
198
|
-
font-size: 14px;
|
|
236
|
+
.btn-primary, .btn-secondary, .btn-accent {
|
|
237
|
+
border: none;
|
|
238
|
+
padding: 0.6rem 1.1rem;
|
|
239
|
+
border-radius: 0.4rem;
|
|
240
|
+
font-size: 0.8rem;
|
|
199
241
|
font-weight: 600;
|
|
200
242
|
cursor: pointer;
|
|
201
|
-
|
|
243
|
+
transition: transform 0.15s, opacity 0.15s;
|
|
202
244
|
}
|
|
203
245
|
|
|
204
|
-
|
|
205
|
-
background:
|
|
206
|
-
color: #
|
|
246
|
+
.btn-primary {
|
|
247
|
+
background: var(--primary-cyan);
|
|
248
|
+
color: #0f172a;
|
|
207
249
|
}
|
|
208
250
|
|
|
209
|
-
|
|
251
|
+
.btn-secondary {
|
|
210
252
|
background: rgba(255, 255, 255, 0.08);
|
|
211
|
-
color: #f0f4f8;
|
|
212
253
|
border: 1px solid rgba(255, 255, 255, 0.15);
|
|
254
|
+
color: var(--text-main);
|
|
213
255
|
}
|
|
214
256
|
|
|
215
|
-
|
|
216
|
-
background:
|
|
257
|
+
.btn-accent {
|
|
258
|
+
background: var(--accent-purple);
|
|
217
259
|
color: #ffffff;
|
|
218
260
|
}
|
|
219
261
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
262
|
+
.btn-primary:hover, .btn-secondary:hover, .btn-accent:hover {
|
|
263
|
+
transform: translateY(-1px);
|
|
264
|
+
opacity: 0.9;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/* Tab Switching */
|
|
268
|
+
.tab-content {
|
|
269
|
+
display: none;
|
|
270
|
+
flex-direction: column;
|
|
271
|
+
gap: 1rem;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.tab-content.active {
|
|
275
|
+
display: flex;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/* Console Output Stream */
|
|
279
|
+
.output-panel {
|
|
280
|
+
display: flex;
|
|
281
|
+
flex-direction: column;
|
|
282
|
+
flex: 1;
|
|
283
|
+
min-height: 200px;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.output-header {
|
|
287
|
+
display: flex;
|
|
288
|
+
justify-content: space-between;
|
|
289
|
+
align-items: center;
|
|
290
|
+
font-size: 0.8rem;
|
|
291
|
+
font-weight: 700;
|
|
292
|
+
color: var(--primary-cyan);
|
|
293
|
+
margin-bottom: 0.5rem;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
.btn-clear {
|
|
297
|
+
background: transparent;
|
|
298
|
+
border: none;
|
|
299
|
+
color: var(--text-muted);
|
|
300
|
+
font-size: 0.75rem;
|
|
301
|
+
cursor: pointer;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.btn-clear:hover {
|
|
305
|
+
color: #ef4444;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
#api-output {
|
|
309
|
+
flex: 1;
|
|
310
|
+
background: rgba(0, 0, 0, 0.4);
|
|
311
|
+
border: 1px solid rgba(255, 255, 255, 0.05);
|
|
312
|
+
border-radius: 0.5rem;
|
|
313
|
+
padding: 0.75rem;
|
|
314
|
+
font-family: 'Consolas', 'Courier New', monospace;
|
|
315
|
+
font-size: 0.8rem;
|
|
316
|
+
color: #38bdf8;
|
|
317
|
+
white-space: pre-wrap;
|
|
318
|
+
word-break: break-word;
|
|
319
|
+
overflow-y: auto;
|
|
320
|
+
max-height: 250px;
|
|
223
321
|
}
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
package/zig-out/bin/msvcp140.dll
DELETED
|
Binary file
|
|
Binary file
|
|
Binary file
|