@jtalk22/slack-mcp 2.0.0 → 3.1.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/README.md +118 -67
- package/docs/CLOUDFLARE-BROWSER-TOOLKIT.md +67 -0
- package/docs/DEPLOYMENT-MODES.md +10 -3
- package/docs/HN-LAUNCH.md +47 -36
- package/docs/INDEX.md +9 -5
- package/docs/INSTALL-PROOF.md +5 -5
- package/docs/LAUNCH-COPY-v3.0.0.md +101 -0
- package/docs/LAUNCH-MATRIX.md +4 -2
- package/docs/LAUNCH-OPS.md +25 -24
- package/docs/RELEASE-HEALTH.md +44 -48
- package/docs/TROUBLESHOOTING.md +27 -0
- package/docs/WEB-API.md +13 -4
- package/docs/images/demo-channel-messages.png +0 -0
- package/docs/images/demo-channels.png +0 -0
- package/docs/images/demo-claude-mobile-360x800.png +0 -0
- package/docs/images/demo-claude-mobile-390x844.png +0 -0
- package/docs/images/demo-claude-mobile-poster.png +0 -0
- package/docs/images/demo-main-mobile-360x800.png +0 -0
- package/docs/images/demo-main-mobile-390x844.png +0 -0
- package/docs/images/demo-main.png +0 -0
- package/docs/images/demo-poster.png +0 -0
- package/docs/images/demo-sidebar.png +0 -0
- package/docs/images/social-preview-v3.png +0 -0
- package/docs/images/web-api-mobile-360x800.png +0 -0
- package/docs/images/web-api-mobile-390x844.png +0 -0
- package/package.json +31 -31
- package/public/demo-claude.html +100 -11
- package/public/demo-video.html +45 -7
- package/public/demo.html +138 -4
- package/public/index.html +132 -69
- package/public/share.html +127 -0
- package/scripts/build-mobile-demo.js +168 -0
- package/scripts/build-release-health-delta.js +2 -2
- package/scripts/build-social-preview.js +189 -0
- package/scripts/capture-screenshots.js +109 -53
- package/scripts/check-owner-attribution.sh +53 -2
- package/scripts/check-public-language.sh +1 -0
- package/scripts/check-version-parity.js +70 -14
- package/scripts/cloudflare-browser-tool.js +237 -0
- package/scripts/collect-release-health.js +14 -2
- package/scripts/impact-push-v3.js +781 -0
- package/scripts/record-demo.js +26 -12
- package/scripts/release-preflight.js +247 -0
- package/scripts/setup-wizard.js +1 -1
- package/scripts/update-github-social-preview.js +208 -0
- package/scripts/verify-install-flow.js +2 -1
- package/scripts/verify-web.js +53 -1
- package/server.json +47 -0
- package/smithery.yaml +34 -0
- package/src/server-http.js +98 -5
- package/src/server.js +18 -6
- package/src/web-server.js +7 -3
- package/docs/LAUNCH-COPY-v2.0.0.md +0 -59
- package/docs/images/demo-claude-v1.2.gif +0 -0
- package/docs/images/demo-readme.gif +0 -0
- package/docs/release-health/2026-02-25.md +0 -33
- package/docs/release-health/2026-02-26.md +0 -33
- package/docs/release-health/24h-delta.md +0 -21
- package/docs/release-health/24h-end.md +0 -33
- package/docs/release-health/24h-start.md +0 -33
- package/docs/release-health/latest.md +0 -33
- package/docs/release-health/launch-log-template.md +0 -21
- package/docs/release-health/version-parity.md +0 -21
- package/docs/videos/.gitkeep +0 -0
- package/docs/videos/demo-claude-v1.2.webm +0 -0
package/public/demo-claude.html
CHANGED
|
@@ -19,22 +19,27 @@
|
|
|
19
19
|
<meta property="og:description" content="Session-based Slack access for Claude with your existing workspace permissions. Search, thread, and messaging workflows.">
|
|
20
20
|
<meta property="og:type" content="website">
|
|
21
21
|
<meta property="og:url" content="https://jtalk22.github.io/slack-mcp-server/public/demo-claude.html">
|
|
22
|
-
<meta property="og:image" content="https://
|
|
22
|
+
<meta property="og:image" content="https://jtalk22.github.io/slack-mcp-server/docs/images/social-preview-v3.png">
|
|
23
23
|
|
|
24
24
|
<!-- Twitter Card -->
|
|
25
25
|
<meta name="twitter:card" content="summary_large_image">
|
|
26
26
|
<meta name="twitter:title" content="Slack MCP Server - Session-Based Slack Access Demo">
|
|
27
27
|
<meta name="twitter:description" content="Session-based Slack access for Claude with your existing workspace permissions. Search, thread, and messaging workflows.">
|
|
28
|
-
<meta name="twitter:image" content="https://
|
|
28
|
+
<meta name="twitter:image" content="https://jtalk22.github.io/slack-mcp-server/docs/images/social-preview-v3.png">
|
|
29
29
|
|
|
30
30
|
<!-- Theme -->
|
|
31
31
|
<meta name="theme-color" content="#1a1a1a">
|
|
32
32
|
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>💬</text></svg>">
|
|
33
33
|
<style>
|
|
34
|
+
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=Space+Grotesk:wght@500;600;700&display=swap');
|
|
35
|
+
|
|
34
36
|
/* ═══════════════════════════════════════════════════════════════
|
|
35
37
|
Claude Desktop Color Palette (Dark Mode)
|
|
36
38
|
═══════════════════════════════════════════════════════════════ */
|
|
37
39
|
:root {
|
|
40
|
+
--font-heading: "Space Grotesk", "Avenir Next", "Segoe UI", sans-serif;
|
|
41
|
+
--font-body: "IBM Plex Sans", "Inter", "Segoe UI", sans-serif;
|
|
42
|
+
|
|
38
43
|
/* Window chrome */
|
|
39
44
|
--window-bg: #1a1a1a;
|
|
40
45
|
--window-chrome: #2d2d2d;
|
|
@@ -83,7 +88,7 @@
|
|
|
83
88
|
}
|
|
84
89
|
|
|
85
90
|
body {
|
|
86
|
-
font-family: -
|
|
91
|
+
font-family: var(--font-body);
|
|
87
92
|
font-size: 15px;
|
|
88
93
|
line-height: 1.5;
|
|
89
94
|
-webkit-font-smoothing: antialiased;
|
|
@@ -118,6 +123,8 @@
|
|
|
118
123
|
align-items: center;
|
|
119
124
|
justify-content: center;
|
|
120
125
|
gap: 12px;
|
|
126
|
+
font-family: var(--font-heading);
|
|
127
|
+
letter-spacing: -0.02em;
|
|
121
128
|
}
|
|
122
129
|
|
|
123
130
|
.page-header p {
|
|
@@ -127,11 +134,11 @@
|
|
|
127
134
|
.cta-strip {
|
|
128
135
|
width: 100%;
|
|
129
136
|
max-width: 960px;
|
|
130
|
-
margin-bottom:
|
|
137
|
+
margin-bottom: 14px;
|
|
131
138
|
background: rgba(15, 52, 96, 0.72);
|
|
132
139
|
border: 1px solid rgba(255, 255, 255, 0.15);
|
|
133
140
|
border-radius: 12px;
|
|
134
|
-
padding: 10px
|
|
141
|
+
padding: 10px 12px;
|
|
135
142
|
display: flex;
|
|
136
143
|
justify-content: space-between;
|
|
137
144
|
align-items: center;
|
|
@@ -183,6 +190,7 @@
|
|
|
183
190
|
margin-bottom: 24px;
|
|
184
191
|
flex-wrap: wrap;
|
|
185
192
|
justify-content: center;
|
|
193
|
+
width: min(100%, 960px);
|
|
186
194
|
}
|
|
187
195
|
|
|
188
196
|
.scenario-btn {
|
|
@@ -257,6 +265,9 @@
|
|
|
257
265
|
gap: 12px;
|
|
258
266
|
margin-bottom: 16px;
|
|
259
267
|
align-items: center;
|
|
268
|
+
flex-wrap: wrap;
|
|
269
|
+
justify-content: center;
|
|
270
|
+
width: min(100%, 920px);
|
|
260
271
|
}
|
|
261
272
|
|
|
262
273
|
.speed-control {
|
|
@@ -346,6 +357,7 @@
|
|
|
346
357
|
box-shadow: var(--shadow-lg);
|
|
347
358
|
overflow: hidden;
|
|
348
359
|
border: 1px solid var(--window-border);
|
|
360
|
+
position: relative;
|
|
349
361
|
}
|
|
350
362
|
|
|
351
363
|
.window-chrome {
|
|
@@ -911,6 +923,11 @@
|
|
|
911
923
|
display: none !important;
|
|
912
924
|
}
|
|
913
925
|
|
|
926
|
+
body.fullscreen-mode .cta-strip,
|
|
927
|
+
body.fullscreen-mode .scenario-caption {
|
|
928
|
+
display: none !important;
|
|
929
|
+
}
|
|
930
|
+
|
|
914
931
|
body.fullscreen-mode .claude-window {
|
|
915
932
|
max-width: 100%;
|
|
916
933
|
height: 100vh;
|
|
@@ -967,31 +984,93 @@
|
|
|
967
984
|
/* ═══════════════════════════════════════════════════════════════
|
|
968
985
|
Responsive
|
|
969
986
|
═══════════════════════════════════════════════════════════════ */
|
|
987
|
+
@media (max-width: 900px) {
|
|
988
|
+
body {
|
|
989
|
+
padding: 14px;
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
.page-header {
|
|
993
|
+
margin-bottom: 16px;
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
.page-header h1 {
|
|
997
|
+
font-size: 24px;
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
.scenario-btn {
|
|
1001
|
+
padding: 10px 14px;
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
.controls-bar {
|
|
1005
|
+
gap: 10px;
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
.claude-window {
|
|
1009
|
+
max-width: 100%;
|
|
1010
|
+
}
|
|
1011
|
+
}
|
|
1012
|
+
|
|
970
1013
|
@media (max-width: 600px) {
|
|
971
1014
|
body {
|
|
972
1015
|
padding: 12px;
|
|
973
1016
|
}
|
|
974
1017
|
|
|
1018
|
+
.cta-strip {
|
|
1019
|
+
padding: 10px;
|
|
1020
|
+
gap: 8px;
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
.cta-strip .links {
|
|
1024
|
+
width: 100%;
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
.cta-strip .note {
|
|
1028
|
+
font-size: 12px;
|
|
1029
|
+
}
|
|
1030
|
+
|
|
975
1031
|
.page-header h1 {
|
|
976
1032
|
font-size: 22px;
|
|
1033
|
+
flex-wrap: wrap;
|
|
1034
|
+
gap: 8px;
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
.page-header p {
|
|
1038
|
+
font-size: 14px;
|
|
977
1039
|
}
|
|
978
1040
|
|
|
979
1041
|
.scenario-bar {
|
|
980
1042
|
gap: 8px;
|
|
1043
|
+
margin-bottom: 14px;
|
|
981
1044
|
}
|
|
982
1045
|
|
|
983
1046
|
.scenario-btn {
|
|
984
|
-
padding:
|
|
1047
|
+
padding: 9px 12px;
|
|
985
1048
|
font-size: 13px;
|
|
1049
|
+
border-radius: 10px;
|
|
986
1050
|
}
|
|
987
1051
|
|
|
988
1052
|
.scenario-btn .label {
|
|
989
1053
|
display: none;
|
|
990
1054
|
}
|
|
991
1055
|
|
|
1056
|
+
.controls-bar {
|
|
1057
|
+
gap: 8px;
|
|
1058
|
+
margin-bottom: 12px;
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
.replay-btn,
|
|
1062
|
+
.share-btn {
|
|
1063
|
+
padding: 8px 12px;
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
.speed-control {
|
|
1067
|
+
width: 100%;
|
|
1068
|
+
justify-content: space-between;
|
|
1069
|
+
}
|
|
1070
|
+
|
|
992
1071
|
.chat-container {
|
|
993
|
-
height: 450px;
|
|
994
|
-
padding:
|
|
1072
|
+
height: min(55vh, 450px);
|
|
1073
|
+
padding: 14px;
|
|
995
1074
|
}
|
|
996
1075
|
|
|
997
1076
|
.tools-dropdown {
|
|
@@ -1005,6 +1084,12 @@
|
|
|
1005
1084
|
.tools-dropdown:hover {
|
|
1006
1085
|
transform: translateX(-50%) translateY(0);
|
|
1007
1086
|
}
|
|
1087
|
+
|
|
1088
|
+
.scenario-caption {
|
|
1089
|
+
top: 56px;
|
|
1090
|
+
font-size: 12px;
|
|
1091
|
+
padding: 7px 14px;
|
|
1092
|
+
}
|
|
1008
1093
|
}
|
|
1009
1094
|
|
|
1010
1095
|
/* ═══════════════════════════════════════════════════════════════
|
|
@@ -1046,7 +1131,7 @@
|
|
|
1046
1131
|
/* Scenario Caption Overlay */
|
|
1047
1132
|
.scenario-caption {
|
|
1048
1133
|
position: absolute;
|
|
1049
|
-
top:
|
|
1134
|
+
top: 60px;
|
|
1050
1135
|
left: 50%;
|
|
1051
1136
|
transform: translateX(-50%);
|
|
1052
1137
|
background: rgba(0, 0, 0, 0.75);
|
|
@@ -1059,6 +1144,10 @@
|
|
|
1059
1144
|
transition: opacity 0.3s ease;
|
|
1060
1145
|
z-index: 50;
|
|
1061
1146
|
pointer-events: none;
|
|
1147
|
+
max-width: calc(100% - 24px);
|
|
1148
|
+
white-space: nowrap;
|
|
1149
|
+
overflow: hidden;
|
|
1150
|
+
text-overflow: ellipsis;
|
|
1062
1151
|
}
|
|
1063
1152
|
|
|
1064
1153
|
.scenario-caption.visible {
|
|
@@ -1161,7 +1250,7 @@
|
|
|
1161
1250
|
<header class="page-header">
|
|
1162
1251
|
<h1>
|
|
1163
1252
|
<span>Slack MCP Server</span>
|
|
1164
|
-
<span class="badge">🔧 MCP Demo
|
|
1253
|
+
<span class="badge">🔧 MCP Demo v3.0.0</span>
|
|
1165
1254
|
</h1>
|
|
1166
1255
|
<p>See how Claude uses MCP tools to access your Slack workspace</p>
|
|
1167
1256
|
</header>
|
|
@@ -1233,7 +1322,7 @@
|
|
|
1233
1322
|
<div class="title-logo">💬</div>
|
|
1234
1323
|
<h1>Slack MCP Server</h1>
|
|
1235
1324
|
<p class="title-tagline">Full Slack access for Claude Desktop</p>
|
|
1236
|
-
<p class="title-version">
|
|
1325
|
+
<p class="title-version">v3.0.0 • @jtalk22</p>
|
|
1237
1326
|
</div>
|
|
1238
1327
|
|
|
1239
1328
|
<!-- Scenario Caption Overlay -->
|
package/public/demo-video.html
CHANGED
|
@@ -9,19 +9,27 @@
|
|
|
9
9
|
<meta property="og:title" content="Slack MCP Server - Session-Based Slack Access Demo">
|
|
10
10
|
<meta property="og:description" content="Session-based Slack access for Claude with your existing workspace permissions. Video walkthrough for Slack workflows.">
|
|
11
11
|
<meta property="og:url" content="https://jtalk22.github.io/slack-mcp-server/public/demo-video.html">
|
|
12
|
-
<meta property="og:image" content="https://
|
|
12
|
+
<meta property="og:image" content="https://jtalk22.github.io/slack-mcp-server/docs/images/demo-poster.png">
|
|
13
13
|
<meta name="twitter:card" content="summary_large_image">
|
|
14
14
|
<meta name="twitter:title" content="Slack MCP Server - Session-Based Slack Access Demo">
|
|
15
15
|
<meta name="twitter:description" content="Session-based Slack access for Claude with your existing workspace permissions. Video walkthrough for Slack workflows.">
|
|
16
|
-
<meta name="twitter:image" content="https://
|
|
16
|
+
<meta name="twitter:image" content="https://jtalk22.github.io/slack-mcp-server/docs/images/demo-poster.png">
|
|
17
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
18
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
19
|
+
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=Space+Grotesk:wght@500;600;700&display=swap" rel="stylesheet">
|
|
17
20
|
<style>
|
|
21
|
+
:root {
|
|
22
|
+
--font-heading: "Space Grotesk", "Avenir Next", "Segoe UI", sans-serif;
|
|
23
|
+
--font-body: "IBM Plex Sans", "Inter", "Segoe UI", sans-serif;
|
|
24
|
+
}
|
|
25
|
+
|
|
18
26
|
* {
|
|
19
27
|
margin: 0;
|
|
20
28
|
padding: 0;
|
|
21
29
|
box-sizing: border-box;
|
|
22
30
|
}
|
|
23
31
|
body {
|
|
24
|
-
font-family:
|
|
32
|
+
font-family: var(--font-body);
|
|
25
33
|
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
|
|
26
34
|
min-height: 100vh;
|
|
27
35
|
display: flex;
|
|
@@ -40,6 +48,8 @@
|
|
|
40
48
|
font-weight: 600;
|
|
41
49
|
text-align: center;
|
|
42
50
|
margin-bottom: 0.5rem;
|
|
51
|
+
font-family: var(--font-heading);
|
|
52
|
+
letter-spacing: -0.02em;
|
|
43
53
|
}
|
|
44
54
|
.subtitle {
|
|
45
55
|
color: #94a3b8;
|
|
@@ -137,6 +147,26 @@
|
|
|
137
147
|
.back-link a:hover {
|
|
138
148
|
color: #ffffff;
|
|
139
149
|
}
|
|
150
|
+
|
|
151
|
+
@media (max-width: 640px) {
|
|
152
|
+
body {
|
|
153
|
+
padding: 1rem 0.75rem;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.cta-strip .links {
|
|
157
|
+
width: 100%;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.controls {
|
|
161
|
+
gap: 0.75rem;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.btn {
|
|
165
|
+
flex: 1;
|
|
166
|
+
min-width: 0;
|
|
167
|
+
padding: 0.72rem 0.95rem;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
140
170
|
</style>
|
|
141
171
|
</head>
|
|
142
172
|
<body>
|
|
@@ -156,8 +186,8 @@
|
|
|
156
186
|
|
|
157
187
|
<div class="video-wrapper">
|
|
158
188
|
<video id="demo" poster="../docs/images/demo-poster.png" playsinline>
|
|
159
|
-
<source src="../docs/videos/demo-claude
|
|
160
|
-
<source src="
|
|
189
|
+
<source src="../docs/videos/demo-claude.webm" type="video/webm">
|
|
190
|
+
<source src="https://jtalk22.github.io/slack-mcp-server/docs/videos/demo-claude.webm" type="video/webm">
|
|
161
191
|
Your browser does not support the video tag.
|
|
162
192
|
</video>
|
|
163
193
|
</div>
|
|
@@ -174,10 +204,18 @@
|
|
|
174
204
|
|
|
175
205
|
<script>
|
|
176
206
|
const video = document.getElementById('demo');
|
|
207
|
+
const HIGHLIGHT_START_SECONDS = 6;
|
|
208
|
+
|
|
209
|
+
function playFromHighlight() {
|
|
210
|
+
if (video.duration && video.duration > HIGHLIGHT_START_SECONDS + 1) {
|
|
211
|
+
video.currentTime = HIGHLIGHT_START_SECONDS;
|
|
212
|
+
}
|
|
213
|
+
return video.play();
|
|
214
|
+
}
|
|
177
215
|
|
|
178
216
|
// Autoplay with 1 second delay
|
|
179
217
|
setTimeout(() => {
|
|
180
|
-
|
|
218
|
+
playFromHighlight().catch(() => {
|
|
181
219
|
// Autoplay blocked, user will need to click
|
|
182
220
|
console.log('Autoplay blocked, click to play');
|
|
183
221
|
});
|
|
@@ -198,7 +236,7 @@
|
|
|
198
236
|
|
|
199
237
|
// Loop the video
|
|
200
238
|
video.addEventListener('ended', () => {
|
|
201
|
-
video.currentTime =
|
|
239
|
+
video.currentTime = HIGHLIGHT_START_SECONDS;
|
|
202
240
|
video.play();
|
|
203
241
|
});
|
|
204
242
|
</script>
|
package/public/demo.html
CHANGED
|
@@ -10,21 +10,23 @@
|
|
|
10
10
|
<meta property="og:url" content="https://jtalk22.github.io/slack-mcp-server/public/demo.html">
|
|
11
11
|
<meta property="og:title" content="Slack MCP Server - Session-Based Slack Access Demo">
|
|
12
12
|
<meta property="og:description" content="Session-based Slack access for Claude with your existing workspace permissions. DMs, channels, search, and threads.">
|
|
13
|
-
<meta property="og:image" content="https://
|
|
13
|
+
<meta property="og:image" content="https://jtalk22.github.io/slack-mcp-server/docs/images/demo-main.png">
|
|
14
14
|
|
|
15
15
|
<!-- Twitter Card -->
|
|
16
16
|
<meta name="twitter:card" content="summary_large_image">
|
|
17
17
|
<meta name="twitter:title" content="Slack MCP Server - Session-Based Slack Access Demo">
|
|
18
18
|
<meta name="twitter:description" content="Session-based Slack access for Claude with your existing workspace permissions. DMs, channels, search, and threads.">
|
|
19
|
-
<meta name="twitter:image" content="https://
|
|
19
|
+
<meta name="twitter:image" content="https://jtalk22.github.io/slack-mcp-server/docs/images/demo-main.png">
|
|
20
20
|
|
|
21
21
|
<!-- SEO -->
|
|
22
22
|
<meta name="description" content="Session-based Slack access for Claude with your existing workspace permissions. Interactive demo for DMs, channels, search, and thread workflows.">
|
|
23
23
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
24
24
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
25
|
-
<link href="https://fonts.googleapis.com/css2?family=
|
|
25
|
+
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=Space+Grotesk:wght@500;600;700&display=swap" rel="stylesheet">
|
|
26
26
|
<style>
|
|
27
27
|
:root {
|
|
28
|
+
--font-heading: "Space Grotesk", "Avenir Next", "Segoe UI", sans-serif;
|
|
29
|
+
--font-body: "IBM Plex Sans", "Inter", "Segoe UI", sans-serif;
|
|
28
30
|
--bg-primary: #0f0f1a;
|
|
29
31
|
--bg-secondary: #1a1a2e;
|
|
30
32
|
--bg-tertiary: #16213e;
|
|
@@ -45,7 +47,7 @@
|
|
|
45
47
|
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
46
48
|
|
|
47
49
|
body {
|
|
48
|
-
font-family:
|
|
50
|
+
font-family: var(--font-body);
|
|
49
51
|
background: var(--bg-primary);
|
|
50
52
|
color: var(--text-primary);
|
|
51
53
|
min-height: 100vh;
|
|
@@ -150,6 +152,7 @@
|
|
|
150
152
|
font-size: 16px;
|
|
151
153
|
font-weight: 600;
|
|
152
154
|
color: var(--text-primary);
|
|
155
|
+
font-family: var(--font-heading);
|
|
153
156
|
}
|
|
154
157
|
.claude-header .subtitle {
|
|
155
158
|
font-size: 12px;
|
|
@@ -276,6 +279,7 @@
|
|
|
276
279
|
letter-spacing: 1px;
|
|
277
280
|
color: var(--text-muted);
|
|
278
281
|
margin-bottom: 12px;
|
|
282
|
+
font-family: var(--font-heading);
|
|
279
283
|
}
|
|
280
284
|
|
|
281
285
|
.try-buttons .scenarios {
|
|
@@ -352,6 +356,7 @@
|
|
|
352
356
|
.dashboard-title h2 {
|
|
353
357
|
font-size: 18px;
|
|
354
358
|
font-weight: 600;
|
|
359
|
+
font-family: var(--font-heading);
|
|
355
360
|
}
|
|
356
361
|
|
|
357
362
|
.status-badge {
|
|
@@ -475,6 +480,7 @@
|
|
|
475
480
|
display: flex;
|
|
476
481
|
align-items: center;
|
|
477
482
|
gap: 8px;
|
|
483
|
+
font-family: var(--font-heading);
|
|
478
484
|
}
|
|
479
485
|
|
|
480
486
|
.online-dot {
|
|
@@ -490,6 +496,75 @@
|
|
|
490
496
|
padding: 20px 24px;
|
|
491
497
|
}
|
|
492
498
|
|
|
499
|
+
.mobile-scenario-rail {
|
|
500
|
+
display: none;
|
|
501
|
+
padding: 14px 16px;
|
|
502
|
+
background: rgba(15, 52, 96, 0.55);
|
|
503
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
.mobile-rail-head {
|
|
507
|
+
display: flex;
|
|
508
|
+
align-items: center;
|
|
509
|
+
justify-content: space-between;
|
|
510
|
+
gap: 10px;
|
|
511
|
+
margin-bottom: 10px;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
.mobile-rail-head h4 {
|
|
515
|
+
font-size: 12px;
|
|
516
|
+
letter-spacing: 0.08em;
|
|
517
|
+
text-transform: uppercase;
|
|
518
|
+
color: var(--text-muted);
|
|
519
|
+
font-family: var(--font-heading);
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
.mobile-scenario-buttons {
|
|
523
|
+
display: grid;
|
|
524
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
525
|
+
gap: 8px;
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
.mobile-scenario-btn {
|
|
529
|
+
background: rgba(255, 255, 255, 0.06);
|
|
530
|
+
color: var(--text-primary);
|
|
531
|
+
border: 1px solid rgba(255, 255, 255, 0.12);
|
|
532
|
+
border-radius: 10px;
|
|
533
|
+
padding: 10px 8px;
|
|
534
|
+
font-size: 12px;
|
|
535
|
+
font-weight: 600;
|
|
536
|
+
display: flex;
|
|
537
|
+
flex-direction: column;
|
|
538
|
+
align-items: center;
|
|
539
|
+
justify-content: center;
|
|
540
|
+
gap: 3px;
|
|
541
|
+
cursor: pointer;
|
|
542
|
+
transition: var(--transition);
|
|
543
|
+
text-align: center;
|
|
544
|
+
font-family: var(--font-body);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
.mobile-scenario-btn:hover {
|
|
548
|
+
border-color: var(--accent);
|
|
549
|
+
background: rgba(78, 205, 196, 0.15);
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
.mobile-scenario-btn .icon {
|
|
553
|
+
font-size: 16px;
|
|
554
|
+
line-height: 1;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
.mobile-cta {
|
|
558
|
+
margin-top: 10px;
|
|
559
|
+
font-size: 12px;
|
|
560
|
+
color: var(--text-secondary);
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
.mobile-reset {
|
|
564
|
+
padding: 4px 10px;
|
|
565
|
+
font-size: 11px;
|
|
566
|
+
}
|
|
567
|
+
|
|
493
568
|
.message {
|
|
494
569
|
display: flex;
|
|
495
570
|
gap: 14px;
|
|
@@ -614,16 +689,53 @@
|
|
|
614
689
|
@media (max-width: 1000px) {
|
|
615
690
|
.split-container {
|
|
616
691
|
grid-template-columns: 1fr;
|
|
692
|
+
height: auto;
|
|
693
|
+
min-height: calc(100vh - 88px);
|
|
617
694
|
}
|
|
618
695
|
.claude-panel {
|
|
619
696
|
display: none;
|
|
620
697
|
}
|
|
698
|
+
.mobile-scenario-rail {
|
|
699
|
+
display: block;
|
|
700
|
+
}
|
|
621
701
|
.dashboard-content {
|
|
622
702
|
grid-template-columns: 1fr;
|
|
623
703
|
}
|
|
624
704
|
.sidebar {
|
|
625
705
|
display: none;
|
|
626
706
|
}
|
|
707
|
+
.main-header {
|
|
708
|
+
padding: 14px 16px;
|
|
709
|
+
}
|
|
710
|
+
.messages-container {
|
|
711
|
+
padding: 16px;
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
@media (max-width: 640px) {
|
|
716
|
+
.cta-strip {
|
|
717
|
+
gap: 8px;
|
|
718
|
+
padding: 10px 12px;
|
|
719
|
+
}
|
|
720
|
+
.mobile-scenario-buttons {
|
|
721
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
722
|
+
}
|
|
723
|
+
.mobile-scenario-btn {
|
|
724
|
+
padding: 10px 6px;
|
|
725
|
+
}
|
|
726
|
+
.dashboard-header {
|
|
727
|
+
padding: 14px 12px;
|
|
728
|
+
}
|
|
729
|
+
.dashboard-title h2 {
|
|
730
|
+
font-size: 16px;
|
|
731
|
+
}
|
|
732
|
+
.status-badge {
|
|
733
|
+
font-size: 11px;
|
|
734
|
+
padding: 3px 10px;
|
|
735
|
+
}
|
|
736
|
+
.messages-container {
|
|
737
|
+
min-height: 48vh;
|
|
738
|
+
}
|
|
627
739
|
}
|
|
628
740
|
</style>
|
|
629
741
|
</head>
|
|
@@ -706,6 +818,28 @@
|
|
|
706
818
|
</div>
|
|
707
819
|
</div>
|
|
708
820
|
|
|
821
|
+
<div class="mobile-scenario-rail" aria-label="Scenario shortcuts">
|
|
822
|
+
<div class="mobile-rail-head">
|
|
823
|
+
<h4>Try a Scenario</h4>
|
|
824
|
+
<button class="reset-btn mobile-reset" onclick="resetDemo()">Reset Demo</button>
|
|
825
|
+
</div>
|
|
826
|
+
<div class="mobile-scenario-buttons">
|
|
827
|
+
<button class="mobile-scenario-btn" onclick="runScenario('findKey')">
|
|
828
|
+
<span class="icon">🔑</span>
|
|
829
|
+
<span>Find Key</span>
|
|
830
|
+
</button>
|
|
831
|
+
<button class="mobile-scenario-btn" onclick="runScenario('listChannels')">
|
|
832
|
+
<span class="icon">📋</span>
|
|
833
|
+
<span>Channels</span>
|
|
834
|
+
</button>
|
|
835
|
+
<button class="mobile-scenario-btn" onclick="runScenario('whoIsAlex')">
|
|
836
|
+
<span class="icon">👤</span>
|
|
837
|
+
<span>Who is Alex?</span>
|
|
838
|
+
</button>
|
|
839
|
+
</div>
|
|
840
|
+
<p class="mobile-cta">Tap a scenario to drive the live preview with one click.</p>
|
|
841
|
+
</div>
|
|
842
|
+
|
|
709
843
|
<div class="dashboard-content">
|
|
710
844
|
<aside class="sidebar">
|
|
711
845
|
<div class="sidebar-section">
|