@hmduc16031996/claude-mb-bridge 2.5.5 → 2.5.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hmduc16031996/claude-mb-bridge",
3
- "version": "2.5.5",
3
+ "version": "2.5.6",
4
4
  "description": "Bridge between Claude Code CLI and your mobile app via WebView",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/public/index.html CHANGED
@@ -1,5 +1,6 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
+
3
4
  <head>
4
5
  <meta charset="UTF-8">
5
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
@@ -26,36 +27,28 @@
26
27
 
27
28
  <link rel="stylesheet" href="/styles.css">
28
29
  </head>
30
+
29
31
  <body>
30
32
  <div id="app">
31
33
  <!-- Auth Screen -->
32
34
  <div id="auth-screen" class="screen active">
33
35
  <div class="auth-container">
34
- <!-- Logo -->
35
36
  <div class="auth-logo" aria-hidden="true">
36
- <img src="/ic_logo.png" width="64" height="64" alt="Claude Code" style="border-radius:12px;">
37
+ <img src="/ic_logo.png" width="56" height="56" alt="Remote Coding">
37
38
  </div>
38
39
 
39
- <h1 id="main-title">Claude Code Remote</h1>
40
- <p id="main-subtitle" class="subtitle">Connect to your local Claude Code session from anywhere</p>
40
+ <h1 id="main-title">Remote Coding</h1>
41
+ <p id="main-subtitle" class="subtitle">Connect to your local coding session from anywhere</p>
41
42
 
42
43
  <form id="auth-form" onsubmit="return false;">
43
- <input
44
- type="text"
45
- id="token-input"
46
- placeholder="Enter auth token"
47
- autocomplete="off"
48
- autocapitalize="off"
49
- autocorrect="off"
50
- spellcheck="false"
51
- aria-label="Authentication token"
52
- >
44
+ <input type="text" id="token-input" placeholder="Enter auth token" autocomplete="off" autocapitalize="off"
45
+ autocorrect="off" spellcheck="false" aria-label="Authentication token">
53
46
  <button id="connect-btn" class="btn-primary" type="submit">
54
47
  <span class="btn-text">Connect</span>
55
48
  <span class="btn-loading" aria-hidden="true">
56
49
  <svg class="spinner" width="20" height="20" viewBox="0 0 20 20" fill="none">
57
- <circle cx="10" cy="10" r="8" stroke="currentColor" stroke-width="2" stroke-opacity="0.3"/>
58
- <path d="M10 2a8 8 0 0 1 8 8" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
50
+ <circle cx="10" cy="10" r="8" stroke="currentColor" stroke-width="2" stroke-opacity="0.3" />
51
+ <path d="M10 2a8 8 0 0 1 8 8" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
59
52
  </svg>
60
53
  </span>
61
54
  </button>
@@ -77,54 +70,68 @@
77
70
  <!-- Desktop: Tabs -->
78
71
  <div id="session-tabs" class="session-tabs desktop-only" role="tablist" aria-label="Sessions"></div>
79
72
  <div class="header-left-actions">
80
- <button id="new-session-btn" class="btn-icon-minimal" title="Create new session" aria-label="Create new session">
81
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round">
82
- <line x1="12" y1="5" x2="12" y2="19"/>
83
- <line x1="5" y1="12" x2="19" y2="12"/>
73
+ <button id="new-session-btn" class="btn-icon-minimal" title="Create new session"
74
+ aria-label="Create new session">
75
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"
76
+ stroke-linecap="round">
77
+ <line x1="12" y1="5" x2="12" y2="19" />
78
+ <line x1="5" y1="12" x2="19" y2="12" />
84
79
  </svg>
85
80
  </button>
86
- <button id="close-session-btn" class="btn-icon-minimal mobile-only" title="Close current session" aria-label="Close current session">
87
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round">
88
- <line x1="18" y1="6" x2="6" y2="18"/>
89
- <line x1="6" y1="6" x2="18" y2="18"/>
81
+ <button id="close-session-btn" class="btn-icon-minimal mobile-only" title="Close current session"
82
+ aria-label="Close current session">
83
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"
84
+ stroke-linecap="round">
85
+ <line x1="18" y1="6" x2="6" y2="18" />
86
+ <line x1="6" y1="6" x2="18" y2="18" />
90
87
  </svg>
91
88
  </button>
92
89
  </div>
93
90
  </div>
94
91
  <div class="header-right">
95
92
  <div id="reconnect-indicator" class="reconnect-indicator hidden" title="Reconnecting...">
96
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
97
- <path d="M21 12a9 9 0 1 1-9-9"/>
98
- <polyline points="21 3 21 9 15 9"/>
93
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
94
+ stroke-linecap="round" stroke-linejoin="round">
95
+ <path d="M21 12a9 9 0 1 1-9-9" />
96
+ <polyline points="21 3 21 9 15 9" />
99
97
  </svg>
100
98
  </div>
101
99
  <button id="attach-btn" class="btn-icon" title="Attach image" aria-label="Attach image">
102
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
103
- <path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"/>
100
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
101
+ stroke-linecap="round" stroke-linejoin="round">
102
+ <path
103
+ d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" />
104
104
  </svg>
105
105
  </button>
106
106
  <input type="file" id="image-input" accept="image/*" class="hidden" aria-hidden="true">
107
107
  <button id="preview-btn" class="btn-icon" title="Port preview" aria-label="Open port preview">
108
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
109
- <rect x="2" y="3" width="20" height="14" rx="2"/>
110
- <line x1="8" y1="21" x2="16" y2="21"/>
111
- <line x1="12" y1="17" x2="12" y2="21"/>
108
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
109
+ stroke-linecap="round" stroke-linejoin="round">
110
+ <rect x="2" y="3" width="20" height="14" rx="2" />
111
+ <line x1="8" y1="21" x2="16" y2="21" />
112
+ <line x1="12" y1="17" x2="12" y2="21" />
112
113
  </svg>
113
114
  </button>
114
115
  <button id="settings-btn" class="btn-icon" title="Settings" aria-label="Settings">
115
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
116
- <circle cx="12" cy="12" r="3"/>
117
- <path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09a1.65 1.65 0 0 0-1-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09a1.65 1.65 0 0 0 1.51-1 1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/>
116
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
117
+ stroke-linecap="round" stroke-linejoin="round">
118
+ <circle cx="12" cy="12" r="3" />
119
+ <path
120
+ d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09a1.65 1.65 0 0 0-1-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09a1.65 1.65 0 0 0 1.51-1 1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z" />
118
121
  </svg>
119
122
  </button>
120
- <button id="toggle-header-btn-desktop" class="btn-icon desktop-only" title="Toggle header" aria-label="Toggle header visibility" aria-expanded="true">
121
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="chevron-icon">
122
- <polyline points="18 15 12 9 6 15"/>
123
+ <button id="toggle-header-btn-desktop" class="btn-icon desktop-only" title="Toggle header"
124
+ aria-label="Toggle header visibility" aria-expanded="true">
125
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
126
+ stroke-linecap="round" stroke-linejoin="round" class="chevron-icon">
127
+ <polyline points="18 15 12 9 6 15" />
123
128
  </svg>
124
129
  </button>
125
- <button id="toggle-header-btn" class="btn-icon mobile-only" title="Toggle header" aria-label="Toggle header visibility" aria-expanded="true">
126
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="chevron-icon">
127
- <polyline points="18 15 12 9 6 15"/>
130
+ <button id="toggle-header-btn" class="btn-icon mobile-only" title="Toggle header"
131
+ aria-label="Toggle header visibility" aria-expanded="true">
132
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
133
+ stroke-linecap="round" stroke-linejoin="round" class="chevron-icon">
134
+ <polyline points="18 15 12 9 6 15" />
128
135
  </svg>
129
136
  </button>
130
137
  </div>
@@ -133,8 +140,10 @@
133
140
  <!-- Mobile Control Keys Toolbar (visible on mobile only) -->
134
141
  <div id="mobile-keys" class="mobile-keys" role="toolbar" aria-label="Control keys">
135
142
  <button type="button" class="mobile-key" data-key="enter" aria-label="Enter">Ent</button>
136
- <button type="button" class="mobile-key mobile-key-modifier" data-key="ctrl" aria-label="Control modifier" aria-pressed="false">Ctrl</button>
137
- <button type="button" class="mobile-key mobile-key-modifier" data-key="shift" aria-label="Shift modifier" aria-pressed="false">Shift</button>
143
+ <button type="button" class="mobile-key mobile-key-modifier" data-key="ctrl" aria-label="Control modifier"
144
+ aria-pressed="false">Ctrl</button>
145
+ <button type="button" class="mobile-key mobile-key-modifier" data-key="shift" aria-label="Shift modifier"
146
+ aria-pressed="false">Shift</button>
138
147
  <button type="button" class="mobile-key" data-key="tab" aria-label="Tab">Tab</button>
139
148
  <button type="button" class="mobile-key" data-key="slash" aria-label="Slash">/</button>
140
149
  <button type="button" class="mobile-key" data-key="left" aria-label="Arrow left">←</button>
@@ -147,17 +156,20 @@
147
156
  <div id="terminal-container" role="application" aria-label="Terminal"></div>
148
157
 
149
158
  <!-- Scroll to bottom button (visible when terminal is scrolled up) -->
150
- <button id="scroll-bottom-btn" class="scroll-bottom-btn hidden" title="Scroll to bottom" aria-label="Scroll to bottom">
151
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
152
- <polyline points="6 9 12 15 18 9"/>
159
+ <button id="scroll-bottom-btn" class="scroll-bottom-btn hidden" title="Scroll to bottom"
160
+ aria-label="Scroll to bottom">
161
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"
162
+ stroke-linecap="round" stroke-linejoin="round">
163
+ <polyline points="6 9 12 15 18 9" />
153
164
  </svg>
154
165
  </button>
155
166
 
156
167
 
157
168
  <!-- Floating expand button (visible when header collapsed) -->
158
169
  <button id="expand-header-btn" class="btn-icon floating-btn hidden" title="Show header" aria-label="Show header">
159
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
160
- <polyline points="6 9 12 15 18 9"/>
170
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
171
+ stroke-linecap="round" stroke-linejoin="round">
172
+ <polyline points="6 9 12 15 18 9" />
161
173
  </svg>
162
174
  </button>
163
175
 
@@ -167,51 +179,40 @@
167
179
  <div id="preview-screen" class="screen">
168
180
  <header role="toolbar" aria-label="Preview controls">
169
181
  <button id="back-btn" class="btn-icon" title="Back to terminal" aria-label="Back to terminal">
170
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
171
- <line x1="19" y1="12" x2="5" y2="12"/>
172
- <polyline points="12 19 5 12 12 5"/>
182
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
183
+ stroke-linecap="round" stroke-linejoin="round">
184
+ <line x1="19" y1="12" x2="5" y2="12" />
185
+ <polyline points="12 19 5 12 12 5" />
173
186
  </svg>
174
187
  </button>
175
188
  <select id="port-select" aria-label="Select port to preview">
176
189
  <option value="">Select port...</option>
177
190
  </select>
178
- <input
179
- type="number"
180
- id="port-input"
181
- placeholder="Port"
182
- min="1"
183
- max="65535"
184
- aria-label="Enter port number"
185
- >
191
+ <input type="number" id="port-input" placeholder="Port" min="1" max="65535" aria-label="Enter port number">
186
192
  <button id="go-port-btn" class="btn-icon" title="Go to port" aria-label="Go to port">
187
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
188
- <line x1="5" y1="12" x2="19" y2="12"/>
189
- <polyline points="12 5 19 12 12 19"/>
193
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
194
+ stroke-linecap="round" stroke-linejoin="round">
195
+ <line x1="5" y1="12" x2="19" y2="12" />
196
+ <polyline points="12 5 19 12 12 19" />
190
197
  </svg>
191
198
  </button>
192
199
  <button id="refresh-preview-btn" class="btn-icon" title="Refresh preview" aria-label="Refresh preview">
193
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
194
- <polyline points="23 4 23 10 17 10"/>
195
- <polyline points="1 20 1 14 7 14"/>
196
- <path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"/>
200
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
201
+ stroke-linecap="round" stroke-linejoin="round">
202
+ <polyline points="23 4 23 10 17 10" />
203
+ <polyline points="1 20 1 14 7 14" />
204
+ <path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15" />
197
205
  </svg>
198
206
  </button>
199
207
  </header>
200
208
  <div id="preview-address-bar" class="preview-address-bar">
201
- <input
202
- type="text"
203
- id="address-input"
204
- placeholder="Enter path (e.g., /dashboard)"
205
- autocomplete="off"
206
- autocapitalize="off"
207
- autocorrect="off"
208
- spellcheck="false"
209
- aria-label="URL path"
210
- >
209
+ <input type="text" id="address-input" placeholder="Enter path (e.g., /dashboard)" autocomplete="off"
210
+ autocapitalize="off" autocorrect="off" spellcheck="false" aria-label="URL path">
211
211
  <button id="address-go-btn" class="btn-icon" title="Navigate" aria-label="Navigate to path">
212
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
213
- <line x1="5" y1="12" x2="19" y2="12"/>
214
- <polyline points="12 5 19 12 12 19"/>
212
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
213
+ stroke-linecap="round" stroke-linejoin="round">
214
+ <line x1="5" y1="12" x2="19" y2="12" />
215
+ <polyline points="12 5 19 12 12 19" />
215
216
  </svg>
216
217
  </button>
217
218
  </div>
@@ -222,9 +223,10 @@
222
223
  <div id="schedules-screen" class="screen">
223
224
  <header class="schedules-header" role="toolbar" aria-label="Schedule controls">
224
225
  <button id="schedules-back-btn" class="btn-icon" title="Back to terminal" aria-label="Back to terminal">
225
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
226
- <line x1="19" y1="12" x2="5" y2="12"/>
227
- <polyline points="12 19 5 12 12 5"/>
226
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
227
+ stroke-linecap="round" stroke-linejoin="round">
228
+ <line x1="19" y1="12" x2="5" y2="12" />
229
+ <polyline points="12 19 5 12 12 5" />
228
230
  </svg>
229
231
  </button>
230
232
  <h2 class="schedules-title">Scheduled Tasks</h2>
@@ -234,9 +236,10 @@
234
236
  </header>
235
237
  <div id="schedules-list" class="schedules-list">
236
238
  <div id="schedules-empty" class="empty-state">
237
- <svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
238
- <circle cx="12" cy="12" r="10"/>
239
- <polyline points="12 6 12 12 16 14"/>
239
+ <svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"
240
+ stroke-linecap="round" stroke-linejoin="round">
241
+ <circle cx="12" cy="12" r="10" />
242
+ <polyline points="12 6 12 12 16 14" />
240
243
  </svg>
241
244
  <p>No scheduled tasks yet. Create one to run Claude on a recurring schedule.</p>
242
245
  </div>
@@ -244,54 +247,25 @@
244
247
  </div>
245
248
 
246
249
  <!-- New Schedule Modal -->
247
- <div id="new-schedule-modal" class="modal hidden" role="dialog" aria-labelledby="new-schedule-title" aria-modal="true">
250
+ <div id="new-schedule-modal" class="modal hidden" role="dialog" aria-labelledby="new-schedule-title"
251
+ aria-modal="true">
248
252
  <div class="modal-content">
249
253
  <h2 id="new-schedule-title">New Scheduled Task</h2>
250
254
  <p class="modal-description">Create a recurring task that runs Claude headlessly.</p>
251
255
  <div class="schedule-form">
252
- <input
253
- type="text"
254
- id="schedule-name-input"
255
- placeholder="Task name (e.g. Daily code review)"
256
- autocomplete="off"
257
- autocapitalize="off"
258
- spellcheck="false"
259
- aria-label="Schedule name"
260
- >
261
- <textarea
262
- id="schedule-prompt-input"
263
- placeholder="Prompt (e.g. Review open TODOs and summarize)"
264
- rows="3"
265
- autocomplete="off"
266
- autocapitalize="off"
267
- spellcheck="false"
268
- aria-label="Schedule prompt"
269
- ></textarea>
256
+ <input type="text" id="schedule-name-input" placeholder="Task name (e.g. Daily code review)"
257
+ autocomplete="off" autocapitalize="off" spellcheck="false" aria-label="Schedule name">
258
+ <textarea id="schedule-prompt-input" placeholder="Prompt (e.g. Review open TODOs and summarize)" rows="3"
259
+ autocomplete="off" autocapitalize="off" spellcheck="false" aria-label="Schedule prompt"></textarea>
270
260
  <div class="autocomplete-wrapper">
271
- <input
272
- type="text"
273
- id="schedule-cwd-input"
274
- placeholder="Working directory (absolute path)"
275
- autocomplete="off"
276
- autocapitalize="off"
277
- autocorrect="off"
278
- spellcheck="false"
279
- aria-label="Working directory path"
280
- aria-autocomplete="list"
281
- aria-controls="schedule-cwd-suggestions"
282
- >
261
+ <input type="text" id="schedule-cwd-input" placeholder="Working directory (absolute path)"
262
+ autocomplete="off" autocapitalize="off" autocorrect="off" spellcheck="false"
263
+ aria-label="Working directory path" aria-autocomplete="list" aria-controls="schedule-cwd-suggestions">
283
264
  <ul id="schedule-cwd-suggestions" class="suggestions hidden" role="listbox"></ul>
284
265
  </div>
285
- <input
286
- type="text"
287
- id="schedule-text-input"
288
- placeholder="e.g. every weekday at 9am, twice a week, daily at 3pm..."
289
- autocomplete="off"
290
- autocapitalize="off"
291
- autocorrect="off"
292
- spellcheck="false"
293
- aria-label="Schedule frequency"
294
- >
266
+ <input type="text" id="schedule-text-input"
267
+ placeholder="e.g. every weekday at 9am, twice a week, daily at 3pm..." autocomplete="off"
268
+ autocapitalize="off" autocorrect="off" spellcheck="false" aria-label="Schedule frequency">
295
269
  </div>
296
270
  <div class="modal-actions">
297
271
  <button id="cancel-schedule-btn" class="btn-secondary">Cancel</button>
@@ -306,9 +280,10 @@
306
280
  <div class="modal-header">
307
281
  <h2 id="run-log-title">Run Log</h2>
308
282
  <button id="close-run-log-btn" class="btn-icon" aria-label="Close">
309
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
310
- <line x1="18" y1="6" x2="6" y2="18"/>
311
- <line x1="6" y1="6" x2="18" y2="18"/>
283
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
284
+ stroke-linecap="round" stroke-linejoin="round">
285
+ <line x1="18" y1="6" x2="6" y2="18" />
286
+ <line x1="6" y1="6" x2="18" y2="18" />
312
287
  </svg>
313
288
  </button>
314
289
  </div>
@@ -322,18 +297,9 @@
322
297
  <h2 id="modal-title">New Session</h2>
323
298
  <p class="modal-description">Create a new terminal session with optional working directory.</p>
324
299
  <div class="autocomplete-wrapper">
325
- <input
326
- type="text"
327
- id="cwd-input"
328
- placeholder="Working directory (leave empty for current)"
329
- autocomplete="off"
330
- autocapitalize="off"
331
- autocorrect="off"
332
- spellcheck="false"
333
- aria-label="Working directory path"
334
- aria-autocomplete="list"
335
- aria-controls="cwd-suggestions"
336
- >
300
+ <input type="text" id="cwd-input" placeholder="Working directory (leave empty for current)" autocomplete="off"
301
+ autocapitalize="off" autocorrect="off" spellcheck="false" aria-label="Working directory path"
302
+ aria-autocomplete="list" aria-controls="cwd-suggestions">
337
303
  <ul id="cwd-suggestions" class="suggestions hidden" role="listbox"></ul>
338
304
  </div>
339
305
  <div class="modal-actions">
@@ -349,9 +315,10 @@
349
315
  <div class="modal-header">
350
316
  <h2 id="settings-title">Settings</h2>
351
317
  <button id="close-settings-btn" class="btn-icon" aria-label="Close settings">
352
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
353
- <line x1="18" y1="6" x2="6" y2="18"/>
354
- <line x1="6" y1="6" x2="18" y2="18"/>
318
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
319
+ stroke-linecap="round" stroke-linejoin="round">
320
+ <line x1="18" y1="6" x2="6" y2="18" />
321
+ <line x1="6" y1="6" x2="18" y2="18" />
355
322
  </svg>
356
323
  </button>
357
324
  </div>
@@ -371,4 +338,5 @@
371
338
 
372
339
  <script src="/app.js"></script>
373
340
  </body>
374
- </html>
341
+
342
+ </html>
package/public/styles.css CHANGED
@@ -15,10 +15,11 @@
15
15
  --text-secondary: #a0a0a0;
16
16
  --text-muted: #6b6b6b;
17
17
 
18
- /* Accent - Claude orange */
19
- --accent: #d97706;
20
- --accent-hover: #f0a500;
21
- --accent-soft: rgba(217, 119, 6, 0.15);
18
+ /* Accent - Claude terracotta orange (from ic_logo.png) */
19
+ --accent: #d17e5e;
20
+ --accent-hover: #e19171;
21
+ --accent-soft: rgba(209, 126, 94, 0.12);
22
+ --accent-pale: #eec6b4;
22
23
 
23
24
  /* Semantic colors */
24
25
  --success: #3fb950;
@@ -91,7 +92,9 @@ body {
91
92
  align-items: center;
92
93
  min-height: 100vh;
93
94
  padding: 1.5rem;
94
- background: var(--bg-deep);
95
+ background: radial-gradient(circle at top right, var(--accent-soft) 0%, transparent 60%),
96
+ radial-gradient(circle at bottom left, rgba(209, 126, 94, 0.05) 0%, var(--bg-deep) 70%),
97
+ var(--bg-deep);
95
98
  }
96
99
 
97
100
  .auth-container {
@@ -102,7 +105,13 @@ body {
102
105
 
103
106
  /* Auth Logo */
104
107
  .auth-logo {
105
- margin-bottom: 1.5rem;
108
+ margin-bottom: 2rem;
109
+ display: inline-block;
110
+ padding: 12px;
111
+ background: linear-gradient(135deg, var(--bg-elevated) 0%, var(--bg-primary) 100%);
112
+ border-radius: 20px;
113
+ border: 1px solid var(--border);
114
+ box-shadow: var(--shadow), 0 0 20px var(--accent-soft);
106
115
  }
107
116
 
108
117
  .auth-container h1 {
@@ -733,6 +742,7 @@ body {
733
742
  cursor: pointer;
734
743
  transition: border-color var(--transition);
735
744
  appearance: none;
745
+ -webkit-appearance: none;
736
746
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%238b949e' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
737
747
  background-repeat: no-repeat;
738
748
  background-position: right 0.625rem center;
@@ -758,6 +768,8 @@ body {
758
768
  border: 1px solid var(--border);
759
769
  border-radius: var(--radius);
760
770
  transition: border-color var(--transition);
771
+ appearance: none;
772
+ -webkit-appearance: none;
761
773
  -moz-appearance: textfield;
762
774
  }
763
775