@macle-community/simulator-web 0.0.0-stage → 1.0.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.
@@ -0,0 +1,526 @@
1
+ :root {
2
+ --bg-primary: #0f172a;
3
+ --bg-secondary: #1e293b;
4
+ --bg-tertiary: #334155;
5
+ --text-primary: #f8fafc;
6
+ --text-secondary: #94a3b8;
7
+ --text-muted: #64748b;
8
+ --border-color: #334155;
9
+ --accent-color: #3b82f6;
10
+ --accent-hover: #2563eb;
11
+ --success-color: #10b981;
12
+ --warning-color: #f59e0b;
13
+ --danger-color: #ef4444;
14
+ }
15
+
16
+ * {
17
+ box-sizing: border-box;
18
+ margin: 0;
19
+ padding: 0;
20
+ }
21
+
22
+ body {
23
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
24
+ background-color: #0b0f19;
25
+ color: var(--text-primary);
26
+ height: 100vh;
27
+ display: flex;
28
+ flex-direction: column;
29
+ overflow: hidden;
30
+ user-select: none;
31
+ }
32
+
33
+ /* Header / Toolbar */
34
+ .toolbar {
35
+ height: 52px;
36
+ background: var(--bg-secondary);
37
+ border-bottom: 1px solid var(--border-color);
38
+ display: flex;
39
+ align-items: center;
40
+ justify-content: space-between;
41
+ padding: 0 16px;
42
+ z-index: 100;
43
+ flex-shrink: 0;
44
+ }
45
+
46
+ .toolbar-left, .toolbar-center, .toolbar-right {
47
+ display: flex;
48
+ align-items: center;
49
+ gap: 10px;
50
+ }
51
+
52
+ .logo-badge {
53
+ display: flex;
54
+ align-items: center;
55
+ gap: 8px;
56
+ font-weight: 700;
57
+ font-size: 14px;
58
+ letter-spacing: -0.2px;
59
+ color: #fff;
60
+ }
61
+
62
+ .logo-icon {
63
+ width: 24px;
64
+ height: 24px;
65
+ background: linear-gradient(135deg, #3b82f6, #8b5cf6);
66
+ border-radius: 6px;
67
+ display: flex;
68
+ align-items: center;
69
+ justify-content: center;
70
+ font-size: 13px;
71
+ font-weight: 800;
72
+ }
73
+
74
+ .logo-tag {
75
+ background: rgba(59, 130, 246, 0.15);
76
+ color: #60a5fa;
77
+ font-size: 10px;
78
+ font-weight: 600;
79
+ padding: 2px 6px;
80
+ border-radius: 4px;
81
+ text-transform: uppercase;
82
+ }
83
+
84
+ /* Form Controls */
85
+ .control-group {
86
+ display: flex;
87
+ align-items: center;
88
+ background: var(--bg-primary);
89
+ border: 1px solid var(--border-color);
90
+ border-radius: 6px;
91
+ overflow: hidden;
92
+ }
93
+
94
+ .control-label {
95
+ font-size: 11px;
96
+ color: var(--text-secondary);
97
+ padding: 0 8px;
98
+ border-right: 1px solid var(--border-color);
99
+ }
100
+
101
+ select.control-select {
102
+ background: transparent;
103
+ color: var(--text-primary);
104
+ border: none;
105
+ outline: none;
106
+ font-size: 12px;
107
+ padding: 6px 10px;
108
+ cursor: pointer;
109
+ }
110
+
111
+ select.control-select option {
112
+ background: var(--bg-secondary);
113
+ color: var(--text-primary);
114
+ }
115
+
116
+ .tool-btn {
117
+ background: var(--bg-primary);
118
+ border: 1px solid var(--border-color);
119
+ color: var(--text-secondary);
120
+ padding: 6px 12px;
121
+ border-radius: 6px;
122
+ font-size: 12px;
123
+ display: flex;
124
+ align-items: center;
125
+ gap: 6px;
126
+ cursor: pointer;
127
+ transition: all 0.15s ease;
128
+ }
129
+
130
+ .tool-btn:hover {
131
+ background: var(--bg-tertiary);
132
+ color: var(--text-primary);
133
+ border-color: #475569;
134
+ }
135
+
136
+ .tool-btn.active {
137
+ background: rgba(59, 130, 246, 0.2);
138
+ color: #60a5fa;
139
+ border-color: #3b82f6;
140
+ }
141
+
142
+ .tool-btn svg {
143
+ width: 15px;
144
+ height: 15px;
145
+ fill: currentColor;
146
+ }
147
+
148
+ /* Workspace Canvas */
149
+ .canvas {
150
+ flex: 1;
151
+ display: flex;
152
+ justify-content: center;
153
+ align-items: center;
154
+ background: radial-gradient(circle at center, #1e293b 0%, #0b0f19 100%);
155
+ position: relative;
156
+ overflow: auto;
157
+ padding: 20px;
158
+ }
159
+
160
+ /* Mobile Device Mockup */
161
+ .device-wrapper {
162
+ transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
163
+ transform-origin: center center;
164
+ }
165
+
166
+ .device-frame {
167
+ background: #18181b;
168
+ border-radius: 44px;
169
+ padding: 12px;
170
+ box-shadow: 0 25px 60px -15px rgba(0, 0, 0, 0.7),
171
+ 0 0 0 1px rgba(255, 255, 255, 0.1),
172
+ inset 0 0 0 2px #27272a,
173
+ inset 0 0 0 6px #09090b;
174
+ position: relative;
175
+ display: flex;
176
+ flex-direction: column;
177
+ transition: width 0.25s ease, height 0.25s ease;
178
+ }
179
+
180
+ .device-screen {
181
+ background: #ffffff;
182
+ border-radius: 34px;
183
+ overflow: hidden;
184
+ position: relative;
185
+ width: 100%;
186
+ height: 100%;
187
+ }
188
+
189
+ .device-notch {
190
+ position: absolute;
191
+ top: 8px;
192
+ left: 50%;
193
+ transform: translateX(-50%);
194
+ width: 110px;
195
+ height: 26px;
196
+ background: #000000;
197
+ border-radius: 20px;
198
+ z-index: 50;
199
+ display: flex;
200
+ align-items: center;
201
+ justify-content: space-between;
202
+ padding: 0 10px;
203
+ box-shadow: 0 0 4px rgba(0, 0, 0, 0.4);
204
+ }
205
+
206
+ .notch-camera {
207
+ width: 11px;
208
+ height: 11px;
209
+ background: #0d121c;
210
+ border-radius: 50%;
211
+ border: 1px solid #1e293b;
212
+ }
213
+
214
+ .notch-sensor {
215
+ width: 7px;
216
+ height: 7px;
217
+ background: #101726;
218
+ border-radius: 50%;
219
+ }
220
+
221
+ iframe.simulator-iframe {
222
+ width: 100%;
223
+ height: 100%;
224
+ border: none;
225
+ background: #ffffff;
226
+ }
227
+
228
+ /* Touch Simulation Overlay */
229
+ .touch-overlay {
230
+ position: absolute;
231
+ top: 0;
232
+ left: 0;
233
+ right: 0;
234
+ bottom: 0;
235
+ z-index: 40;
236
+ pointer-events: none;
237
+ }
238
+
239
+ .touch-cursor {
240
+ position: fixed;
241
+ width: 32px;
242
+ height: 32px;
243
+ border: 2px solid rgba(59, 130, 246, 0.6);
244
+ background: rgba(59, 130, 246, 0.25);
245
+ border-radius: 50%;
246
+ pointer-events: none;
247
+ transform: translate(-50%, -50%);
248
+ z-index: 9999;
249
+ display: none;
250
+ transition: transform 0.05s linear;
251
+ }
252
+
253
+ .touch-ripple {
254
+ position: fixed;
255
+ width: 10px;
256
+ height: 10px;
257
+ border-radius: 50%;
258
+ background: rgba(59, 130, 246, 0.4);
259
+ pointer-events: none;
260
+ transform: translate(-50%, -50%) scale(1);
261
+ animation: ripple 0.4s ease-out forwards;
262
+ z-index: 9998;
263
+ }
264
+
265
+ @keyframes ripple {
266
+ to {
267
+ transform: translate(-50%, -50%) scale(4);
268
+ opacity: 0;
269
+ }
270
+ }
271
+
272
+ /* Footer status bar */
273
+ .statusbar {
274
+ height: 30px;
275
+ background: var(--bg-secondary);
276
+ border-top: 1px solid var(--border-color);
277
+ display: flex;
278
+ align-items: center;
279
+ justify-content: space-between;
280
+ padding: 0 16px;
281
+ font-size: 11px;
282
+ color: var(--text-secondary);
283
+ z-index: 100;
284
+ flex-shrink: 0;
285
+ }
286
+
287
+ .statusbar-left, .statusbar-right {
288
+ display: flex;
289
+ align-items: center;
290
+ gap: 12px;
291
+ }
292
+
293
+ .status-badge {
294
+ display: flex;
295
+ align-items: center;
296
+ gap: 5px;
297
+ }
298
+
299
+ .status-dot {
300
+ width: 6px;
301
+ height: 6px;
302
+ border-radius: 50%;
303
+ background: var(--success-color);
304
+ }
305
+
306
+ .path-display {
307
+ display: flex;
308
+ align-items: center;
309
+ gap: 6px;
310
+ background: var(--bg-primary);
311
+ padding: 2px 8px;
312
+ border-radius: 4px;
313
+ border: 1px solid var(--border-color);
314
+ }
315
+
316
+ .copy-btn {
317
+ background: transparent;
318
+ border: none;
319
+ color: var(--text-muted);
320
+ cursor: pointer;
321
+ display: flex;
322
+ align-items: center;
323
+ }
324
+
325
+ .copy-btn:hover {
326
+ color: var(--text-primary);
327
+ }
328
+
329
+ /* DevTools Console Drawer */
330
+ .devtools-drawer {
331
+ position: absolute;
332
+ bottom: 30px;
333
+ left: 0;
334
+ right: 0;
335
+ height: 280px;
336
+ background: #0f172a;
337
+ border-top: 2px solid var(--accent-color);
338
+ display: flex;
339
+ flex-direction: column;
340
+ z-index: 90;
341
+ transform: translateY(100%);
342
+ transition: transform 0.25s ease;
343
+ box-shadow: 0 -10px 25px rgba(0, 0, 0, 0.5);
344
+ }
345
+
346
+ .devtools-drawer.open {
347
+ transform: translateY(0);
348
+ }
349
+
350
+ .devtools-header {
351
+ height: 36px;
352
+ background: var(--bg-secondary);
353
+ border-bottom: 1px solid var(--border-color);
354
+ display: flex;
355
+ align-items: center;
356
+ justify-content: space-between;
357
+ padding: 0 12px;
358
+ }
359
+
360
+ .devtools-tabs {
361
+ display: flex;
362
+ gap: 2px;
363
+ }
364
+
365
+ .devtools-tab {
366
+ padding: 6px 12px;
367
+ font-size: 12px;
368
+ color: var(--text-secondary);
369
+ cursor: pointer;
370
+ border-bottom: 2px solid transparent;
371
+ }
372
+
373
+ .devtools-tab.active {
374
+ color: var(--text-primary);
375
+ border-bottom-color: var(--accent-color);
376
+ font-weight: 600;
377
+ }
378
+
379
+ .devtools-actions {
380
+ display: flex;
381
+ align-items: center;
382
+ gap: 8px;
383
+ }
384
+
385
+ .filter-input {
386
+ background: var(--bg-primary);
387
+ border: 1px solid var(--border-color);
388
+ color: var(--text-primary);
389
+ padding: 4px 8px;
390
+ font-size: 11px;
391
+ border-radius: 4px;
392
+ outline: none;
393
+ }
394
+
395
+ .devtools-content {
396
+ flex: 1;
397
+ overflow-y: auto;
398
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
399
+ font-size: 12px;
400
+ padding: 8px;
401
+ background: #090d16;
402
+ }
403
+
404
+ .log-entry {
405
+ display: flex;
406
+ align-items: flex-start;
407
+ gap: 8px;
408
+ padding: 3px 6px;
409
+ border-radius: 3px;
410
+ margin-bottom: 2px;
411
+ line-height: 1.4;
412
+ word-break: break-all;
413
+ }
414
+
415
+ .log-entry:hover {
416
+ background: rgba(255, 255, 255, 0.03);
417
+ }
418
+
419
+ .log-time {
420
+ color: var(--text-muted);
421
+ font-size: 10px;
422
+ flex-shrink: 0;
423
+ }
424
+
425
+ .log-level {
426
+ font-size: 9px;
427
+ font-weight: 700;
428
+ padding: 1px 4px;
429
+ border-radius: 2px;
430
+ text-transform: uppercase;
431
+ flex-shrink: 0;
432
+ }
433
+
434
+ .log-level.log { background: #334155; color: #94a3b8; }
435
+ .log-level.info { background: rgba(59, 130, 246, 0.2); color: #60a5fa; }
436
+ .log-level.warn { background: rgba(245, 158, 11, 0.2); color: #fbbf24; }
437
+ .log-level.error { background: rgba(239, 68, 68, 0.2); color: #f87171; }
438
+
439
+ .log-msg {
440
+ color: #e2e8f0;
441
+ }
442
+
443
+ .devtools-eval {
444
+ height: 32px;
445
+ background: #0f172a;
446
+ border-top: 1px solid var(--border-color);
447
+ display: flex;
448
+ align-items: center;
449
+ padding: 0 8px;
450
+ gap: 6px;
451
+ }
452
+
453
+ .eval-prompt {
454
+ color: #3b82f6;
455
+ font-weight: 700;
456
+ }
457
+
458
+ .eval-input {
459
+ flex: 1;
460
+ background: transparent;
461
+ border: none;
462
+ outline: none;
463
+ color: #fff;
464
+ font-family: inherit;
465
+ font-size: 12px;
466
+ }
467
+
468
+ /* Modal styles */
469
+ .modal-backdrop {
470
+ position: fixed;
471
+ top: 0; left: 0; right: 0; bottom: 0;
472
+ background: rgba(0, 0, 0, 0.7);
473
+ display: none;
474
+ align-items: center;
475
+ justify-content: center;
476
+ z-index: 1000;
477
+ backdrop-filter: blur(4px);
478
+ }
479
+
480
+ .modal-backdrop.open {
481
+ display: flex;
482
+ }
483
+
484
+ .modal-dialog {
485
+ background: var(--bg-secondary);
486
+ border: 1px solid var(--border-color);
487
+ border-radius: 12px;
488
+ padding: 24px;
489
+ width: 380px;
490
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.5);
491
+ display: flex;
492
+ flex-direction: column;
493
+ align-items: center;
494
+ text-align: center;
495
+ }
496
+
497
+ .modal-title {
498
+ font-size: 16px;
499
+ font-weight: 600;
500
+ margin-bottom: 8px;
501
+ }
502
+
503
+ .modal-subtitle {
504
+ font-size: 12px;
505
+ color: var(--text-secondary);
506
+ margin-bottom: 16px;
507
+ }
508
+
509
+ .qrcode-box {
510
+ background: #fff;
511
+ padding: 12px;
512
+ border-radius: 8px;
513
+ margin-bottom: 16px;
514
+ }
515
+
516
+ .url-box {
517
+ background: var(--bg-primary);
518
+ border: 1px solid var(--border-color);
519
+ padding: 8px 12px;
520
+ border-radius: 6px;
521
+ font-size: 12px;
522
+ color: #60a5fa;
523
+ word-break: break-all;
524
+ margin-bottom: 16px;
525
+ width: 100%;
526
+ }