daedalus-cli 3.75.0 → 3.76.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.
Files changed (64) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +1 -1
  3. package/dist/agents/roles.d.ts.map +1 -1
  4. package/dist/agents/roles.js +4 -1
  5. package/dist/agents/roles.js.map +1 -1
  6. package/dist/commands/webui.js +5 -5
  7. package/dist/commands/webui.js.map +1 -1
  8. package/dist/marathon/engine.js +1 -1
  9. package/dist/marathon/engine.js.map +1 -1
  10. package/dist/marathon/evaluator.d.ts +1 -0
  11. package/dist/marathon/evaluator.d.ts.map +1 -1
  12. package/dist/marathon/evaluator.js +33 -5
  13. package/dist/marathon/evaluator.js.map +1 -1
  14. package/dist/marathon/planner.d.ts.map +1 -1
  15. package/dist/marathon/planner.js +2 -1
  16. package/dist/marathon/planner.js.map +1 -1
  17. package/dist/tools/builtin/files.d.ts.map +1 -1
  18. package/dist/tools/builtin/files.js +11 -1
  19. package/dist/tools/builtin/files.js.map +1 -1
  20. package/dist/webui/install.test.d.ts +2 -0
  21. package/dist/webui/install.test.d.ts.map +1 -0
  22. package/dist/webui/install.test.js +43 -0
  23. package/dist/webui/install.test.js.map +1 -0
  24. package/dist/webui/public/apple-touch-icon.png +0 -0
  25. package/dist/webui/public/icon-192.png +0 -0
  26. package/dist/webui/public/icon-512.png +0 -0
  27. package/dist/webui/public/index.html +116 -32
  28. package/dist/webui/public/logo.png +0 -0
  29. package/dist/webui/public/manifest.json +25 -0
  30. package/dist/webui/public/script.js +387 -8
  31. package/dist/webui/public/styles.css +773 -3
  32. package/dist/webui/public/sw.js +81 -0
  33. package/dist/webui/public/types.d.ts +9 -0
  34. package/dist/webui/public/types.d.ts.map +1 -0
  35. package/dist/webui/public/types.js +2 -0
  36. package/dist/webui/public/types.js.map +1 -0
  37. package/dist/webui/public/types.ts +8 -0
  38. package/dist/webui/qr.d.ts +23 -0
  39. package/dist/webui/qr.d.ts.map +1 -0
  40. package/dist/webui/qr.js +60 -0
  41. package/dist/webui/qr.js.map +1 -0
  42. package/dist/webui/qr.test.d.ts +2 -0
  43. package/dist/webui/qr.test.d.ts.map +1 -0
  44. package/dist/webui/qr.test.js +34 -0
  45. package/dist/webui/qr.test.js.map +1 -0
  46. package/dist/webui/server.d.ts +3 -2
  47. package/dist/webui/server.d.ts.map +1 -1
  48. package/dist/webui/server.js +93 -36
  49. package/dist/webui/server.js.map +1 -1
  50. package/dist/webui/server.test.js +33 -1
  51. package/dist/webui/server.test.js.map +1 -1
  52. package/dist/webui/styles.test.d.ts +2 -0
  53. package/dist/webui/styles.test.d.ts.map +1 -0
  54. package/dist/webui/styles.test.js +19 -0
  55. package/dist/webui/styles.test.js.map +1 -0
  56. package/dist/webui/ws.d.ts +17 -0
  57. package/dist/webui/ws.d.ts.map +1 -0
  58. package/dist/webui/ws.js +57 -0
  59. package/dist/webui/ws.js.map +1 -0
  60. package/dist/webui/ws.test.d.ts +2 -0
  61. package/dist/webui/ws.test.d.ts.map +1 -0
  62. package/dist/webui/ws.test.js +66 -0
  63. package/dist/webui/ws.test.js.map +1 -0
  64. package/package.json +4 -1
@@ -92,6 +92,269 @@ body {
92
92
  width: 100%;
93
93
  }
94
94
 
95
+ @media (max-width: 900px) {
96
+ .dashboard {
97
+ max-width: 100%;
98
+ padding: 20px 24px 32px;
99
+ }
100
+
101
+ .header {
102
+ flex-direction: column;
103
+ align-items: flex-start;
104
+ gap: 16px;
105
+ }
106
+
107
+ .brand {
108
+ flex-direction: column;
109
+ align-items: flex-start;
110
+ gap: 12px;
111
+ }
112
+
113
+ .status-bar {
114
+ width: 100%;
115
+ justify-content: space-between;
116
+ }
117
+
118
+ .grid {
119
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
120
+ gap: 16px;
121
+ }
122
+
123
+ .panel {
124
+ padding: 16px 18px;
125
+ }
126
+ }
127
+
128
+ @media (max-width: 600px) {
129
+ .dashboard {
130
+ padding: 12px 14px 24px;
131
+ }
132
+
133
+ .header {
134
+ flex-direction: column;
135
+ align-items: center;
136
+ text-align: center;
137
+ gap: 14px;
138
+ padding-bottom: 16px;
139
+ margin-bottom: 20px;
140
+ }
141
+
142
+ .header::after {
143
+ left: 50%;
144
+ transform: translateX(-50%);
145
+ }
146
+
147
+ .brand {
148
+ flex-direction: column;
149
+ align-items: center;
150
+ text-align: center;
151
+ gap: 8px;
152
+ width: 100%;
153
+ }
154
+
155
+ .brand-titles {
156
+ align-items: center;
157
+ text-align: center;
158
+ width: 100%;
159
+ }
160
+
161
+ .logo-crest {
162
+ width: 44px;
163
+ height: 44px;
164
+ min-width: 44px;
165
+ min-height: 44px;
166
+ margin: 0 auto;
167
+ }
168
+
169
+ .brand-main {
170
+ justify-content: center;
171
+ align-items: baseline;
172
+ text-align: center;
173
+ width: 100%;
174
+ }
175
+
176
+ .brand-name {
177
+ font-size: 20px;
178
+ letter-spacing: 3px;
179
+ }
180
+
181
+ .brand-greek {
182
+ font-size: 11px;
183
+ }
184
+
185
+ .brand-sub {
186
+ font-size: 8px;
187
+ letter-spacing: 1px;
188
+ text-align: center;
189
+ }
190
+
191
+ .status-bar {
192
+ width: 100%;
193
+ display: flex;
194
+ flex-direction: column;
195
+ align-items: center;
196
+ gap: 8px;
197
+ }
198
+
199
+ .model-pill-wrapper {
200
+ width: 100%;
201
+ display: flex;
202
+ justify-content: center;
203
+ }
204
+
205
+ .model-pill {
206
+ max-width: 100%;
207
+ overflow: hidden;
208
+ text-overflow: ellipsis;
209
+ white-space: nowrap;
210
+ text-align: center;
211
+ font-size: 9.5px;
212
+ padding: 6px 14px;
213
+ justify-content: center;
214
+ }
215
+
216
+ .status-bar-subrow {
217
+ display: flex;
218
+ align-items: center;
219
+ justify-content: center;
220
+ gap: 10px;
221
+ width: 100%;
222
+ }
223
+
224
+ .qr-pill-wrapper,
225
+ .status-pill-wrapper {
226
+ display: inline-flex;
227
+ justify-content: center;
228
+ }
229
+
230
+ .qr-pair-btn {
231
+ padding: 5px 12px;
232
+ font-size: 9.5px;
233
+ }
234
+
235
+ .status {
236
+ padding: 5px 12px;
237
+ font-size: 9.5px;
238
+ }
239
+
240
+ .oracle-clock {
241
+ width: 100%;
242
+ align-items: center;
243
+ margin-top: 2px;
244
+ }
245
+
246
+ .oracle-label {
247
+ font-size: 8px;
248
+ }
249
+
250
+ .timestamp {
251
+ font-size: 10.5px;
252
+ }
253
+
254
+ .grid {
255
+ grid-template-columns: 1fr;
256
+ gap: 10px;
257
+ }
258
+
259
+ .panel {
260
+ padding: 12px 14px;
261
+ }
262
+
263
+ .panel-header {
264
+ flex-direction: row;
265
+ justify-content: space-between;
266
+ align-items: center;
267
+ gap: 8px;
268
+ margin-bottom: 8px;
269
+ }
270
+
271
+ .chat-header {
272
+ flex-wrap: wrap;
273
+ }
274
+
275
+ .panel-title {
276
+ font-size: 13px;
277
+ }
278
+
279
+ .panel-meta {
280
+ font-size: 10px;
281
+ }
282
+
283
+ .oracle-glyph {
284
+ font-size: 14px;
285
+ }
286
+
287
+ .metric-name {
288
+ font-size: 9.5px;
289
+ letter-spacing: 1px;
290
+ }
291
+
292
+ .metric-value {
293
+ font-size: 20px;
294
+ }
295
+
296
+ .metric-label {
297
+ font-size: 8.5px;
298
+ }
299
+
300
+ .chat-messages {
301
+ min-height: 380px;
302
+ max-height: 55vh;
303
+ padding: 12px 14px;
304
+ gap: 12px;
305
+ }
306
+
307
+ .chat-msg {
308
+ padding: 10px 12px;
309
+ font-size: 13px;
310
+ width: 100%;
311
+ max-width: 100%;
312
+ }
313
+
314
+ .msg-body {
315
+ font-size: 13px;
316
+ line-height: 1.55;
317
+ }
318
+
319
+ .chat-form {
320
+ display: flex;
321
+ flex-direction: row;
322
+ align-items: flex-end;
323
+ gap: 6px;
324
+ }
325
+
326
+ .chat-form textarea {
327
+ font-size: 12px;
328
+ padding: 8px 10px;
329
+ min-height: 38px;
330
+ }
331
+
332
+ .attach-btn {
333
+ width: 38px;
334
+ height: 38px;
335
+ min-width: 38px;
336
+ min-height: 38px;
337
+ padding: 0;
338
+ display: flex;
339
+ align-items: center;
340
+ justify-content: center;
341
+ flex-shrink: 0;
342
+ }
343
+
344
+ .send-btn {
345
+ padding: 8px 12px;
346
+ font-size: 10px;
347
+ letter-spacing: 0.8px;
348
+ height: 38px;
349
+ min-height: 38px;
350
+ display: flex;
351
+ align-items: center;
352
+ justify-content: center;
353
+ flex-shrink: 0;
354
+ white-space: nowrap;
355
+ }
356
+ }
357
+
95
358
  .header {
96
359
  display: flex;
97
360
  justify-content: space-between;
@@ -125,8 +388,16 @@ body {
125
388
  justify-content: center;
126
389
  width: 44px;
127
390
  height: 44px;
391
+ min-width: 44px;
392
+ min-height: 44px;
393
+ max-width: 44px;
394
+ max-height: 44px;
395
+ flex-shrink: 0;
396
+ overflow: hidden;
397
+ border-radius: 10px;
128
398
  filter: drop-shadow(0 0 8px rgba(229, 169, 60, 0.35));
129
399
  transition: transform 0.3s ease, filter 0.3s ease;
400
+ box-sizing: border-box;
130
401
  }
131
402
 
132
403
  .logo-crest:hover {
@@ -134,9 +405,17 @@ body {
134
405
  filter: drop-shadow(0 0 14px rgba(229, 169, 60, 0.6));
135
406
  }
136
407
 
137
- .crest-svg {
408
+ .crest-svg,
409
+ .crest-img {
138
410
  width: 100%;
139
411
  height: 100%;
412
+ max-width: 100%;
413
+ max-height: 100%;
414
+ object-fit: cover;
415
+ border-radius: 8px;
416
+ border: 1px solid rgba(56, 189, 248, 0.35);
417
+ box-shadow: 0 0 14px rgba(56, 189, 248, 0.25);
418
+ display: block;
140
419
  }
141
420
 
142
421
  .brand-titles {
@@ -186,6 +465,12 @@ body {
186
465
  gap: 20px;
187
466
  }
188
467
 
468
+ .status-bar-subrow {
469
+ display: flex;
470
+ align-items: center;
471
+ gap: 16px;
472
+ }
473
+
189
474
  .status-pill-wrapper {
190
475
  display: flex;
191
476
  align-items: center;
@@ -196,6 +481,60 @@ body {
196
481
  align-items: center;
197
482
  }
198
483
 
484
+ /* ──────────────────────────────────────────────────────────
485
+ Touch-Optimized UI — M-4: Minimum tap targets & touch-action
486
+ ────────────────────────────────────────────────────────── */
487
+ @media (pointer: coarse) or (hover: none) {
488
+ button,
489
+ a {
490
+ min-width: 48px;
491
+ min-height: 48px;
492
+ touch-action: manipulation;
493
+ }
494
+
495
+ .model-pill {
496
+ min-width: 44px;
497
+ min-height: 44px;
498
+ padding: 4px 8px;
499
+ }
500
+
501
+ .clear-btn {
502
+ min-width: 48px;
503
+ min-height: 48px;
504
+ padding: 8px;
505
+ }
506
+
507
+ .chat-header-btn {
508
+ min-width: 48px;
509
+ min-height: 48px;
510
+ padding: 8px;
511
+ }
512
+
513
+ .attach-btn {
514
+ min-width: 44px;
515
+ min-height: 44px;
516
+ padding: 4px 8px;
517
+ }
518
+
519
+ #send-btn {
520
+ min-width: 48px;
521
+ min-height: 48px;
522
+ padding: 8px;
523
+ }
524
+
525
+ .model-option-card {
526
+ min-width: 48px;
527
+ min-height: 48px;
528
+ padding: 12px;
529
+ }
530
+
531
+ .code-copy-btn {
532
+ min-width: 36px;
533
+ min-height: 36px;
534
+ padding: 4px;
535
+ }
536
+ }
537
+
199
538
  .model-pill {
200
539
  display: inline-flex;
201
540
  align-items: center;
@@ -356,8 +695,36 @@ body {
356
695
  }
357
696
 
358
697
  .oracle-glyph {
359
- font-size: 13px;
360
- filter: drop-shadow(0 0 4px var(--gold-glow));
698
+ display: inline-flex;
699
+ align-items: center;
700
+ justify-content: center;
701
+ width: 16px;
702
+ height: 16px;
703
+ flex-shrink: 0;
704
+ color: var(--gold-bright);
705
+ filter: drop-shadow(0 0 6px var(--gold-glow));
706
+ }
707
+
708
+ .oracle-glyph svg,
709
+ .oracle-icon-svg {
710
+ width: 100%;
711
+ height: 100%;
712
+ display: block;
713
+ }
714
+
715
+ .model-icon {
716
+ display: inline-flex;
717
+ align-items: center;
718
+ justify-content: center;
719
+ width: 13px;
720
+ height: 13px;
721
+ flex-shrink: 0;
722
+ }
723
+
724
+ .model-icon svg {
725
+ width: 100%;
726
+ height: 100%;
727
+ display: block;
361
728
  }
362
729
 
363
730
  .metric-name {
@@ -1959,3 +2326,406 @@ body {
1959
2326
  font-size: 11px;
1960
2327
  color: var(--text-dim);
1961
2328
  }
2329
+
2330
+ /* ==========================================================================
2331
+ Responsive & Mobile-First Breakpoints (PWA Companion)
2332
+ ========================================================================== */
2333
+
2334
+ /* Tablet / Narrow Desktop breakpoint */
2335
+ @media (max-width: 900px) {
2336
+ .dashboard {
2337
+ padding: 16px 16px 32px;
2338
+ max-width: 100%;
2339
+ }
2340
+
2341
+ .header {
2342
+ flex-direction: column;
2343
+ align-items: flex-start;
2344
+ gap: 16px;
2345
+ padding-bottom: 18px;
2346
+ margin-bottom: 20px;
2347
+ }
2348
+
2349
+ .status-bar {
2350
+ width: 100%;
2351
+ justify-content: space-between;
2352
+ flex-wrap: wrap;
2353
+ gap: 10px;
2354
+ }
2355
+
2356
+ .grid {
2357
+ grid-template-columns: repeat(2, 1fr);
2358
+ gap: 14px;
2359
+ }
2360
+
2361
+ .chat-section-wrapper {
2362
+ grid-template-columns: 1fr;
2363
+ gap: 16px;
2364
+ }
2365
+
2366
+ .cheatsheet-panel {
2367
+ max-height: 480px;
2368
+ }
2369
+ }
2370
+
2371
+ /* Mobile viewport breakpoint */
2372
+ @media (max-width: 600px) {
2373
+ html, body {
2374
+ overflow-x: hidden;
2375
+ width: 100%;
2376
+ }
2377
+
2378
+ .dashboard {
2379
+ padding: 12px 10px 24px;
2380
+ width: 100%;
2381
+ max-width: 100vw;
2382
+ box-sizing: border-box;
2383
+ overflow-x: hidden;
2384
+ }
2385
+
2386
+ .header {
2387
+ gap: 12px;
2388
+ padding-bottom: 14px;
2389
+ margin-bottom: 16px;
2390
+ }
2391
+
2392
+ .brand {
2393
+ gap: 10px;
2394
+ }
2395
+
2396
+ .brand-name {
2397
+ font-size: 20px;
2398
+ letter-spacing: 2px;
2399
+ }
2400
+
2401
+ .brand-greek {
2402
+ font-size: 11px;
2403
+ }
2404
+
2405
+ .brand-sub {
2406
+ font-size: 8.5px;
2407
+ letter-spacing: 0.8px;
2408
+ }
2409
+
2410
+ .status-bar {
2411
+ display: flex;
2412
+ flex-wrap: wrap;
2413
+ gap: 8px;
2414
+ align-items: center;
2415
+ width: 100%;
2416
+ }
2417
+
2418
+ .model-pill {
2419
+ padding: 6px 10px;
2420
+ font-size: 10.5px;
2421
+ }
2422
+
2423
+ .status {
2424
+ padding: 5px 8px;
2425
+ font-size: 10px;
2426
+ }
2427
+
2428
+ .oracle-clock {
2429
+ align-items: flex-start;
2430
+ }
2431
+
2432
+ .grid {
2433
+ grid-template-columns: 1fr;
2434
+ gap: 12px;
2435
+ }
2436
+
2437
+ .panel {
2438
+ padding: 14px 12px;
2439
+ max-width: 100%;
2440
+ box-sizing: border-box;
2441
+ }
2442
+
2443
+ .metric-value {
2444
+ font-size: 22px;
2445
+ }
2446
+
2447
+ .sparkline {
2448
+ height: 28px;
2449
+ }
2450
+
2451
+ .log-container {
2452
+ max-height: 200px;
2453
+ font-size: 11px;
2454
+ overflow-x: auto;
2455
+ }
2456
+
2457
+ .chat-panel {
2458
+ min-height: 380px;
2459
+ }
2460
+
2461
+ .chat-messages {
2462
+ max-height: 360px;
2463
+ padding: 10px 8px;
2464
+ gap: 10px;
2465
+ }
2466
+
2467
+ .chat-msg {
2468
+ max-width: 100%;
2469
+ padding: 10px 10px;
2470
+ font-size: 13px;
2471
+ word-break: break-word;
2472
+ overflow-wrap: anywhere;
2473
+ }
2474
+
2475
+ .chat-form {
2476
+ padding: 8px;
2477
+ gap: 6px;
2478
+ }
2479
+
2480
+ #chat-input {
2481
+ font-size: 13px;
2482
+ padding: 8px;
2483
+ min-height: 40px;
2484
+ }
2485
+
2486
+ .send-btn {
2487
+ padding: 8px 12px;
2488
+ font-size: 11px;
2489
+ min-height: 44px;
2490
+ white-space: nowrap;
2491
+ }
2492
+
2493
+ .attach-btn {
2494
+ min-height: 44px;
2495
+ min-width: 44px;
2496
+ }
2497
+
2498
+ .sidebar-tabs {
2499
+ display: grid;
2500
+ grid-template-columns: repeat(2, 1fr);
2501
+ gap: 4px;
2502
+ }
2503
+
2504
+ .sidebar-tab {
2505
+ font-size: 9.5px;
2506
+ padding: 8px 4px;
2507
+ min-height: 36px;
2508
+ white-space: normal;
2509
+ }
2510
+
2511
+ .modal-card {
2512
+ width: calc(100vw - 24px);
2513
+ max-width: calc(100vw - 24px);
2514
+ margin: 8px auto;
2515
+ padding: 14px;
2516
+ }
2517
+ }
2518
+
2519
+ /* Install Banner Styles */
2520
+ .install-banner {
2521
+ position: fixed;
2522
+ bottom: 24px;
2523
+ left: 50%;
2524
+ transform: translateX(-50%);
2525
+ width: 90%;
2526
+ max-width: 520px;
2527
+ background: linear-gradient(135deg, rgba(20, 24, 33, 0.96), rgba(12, 14, 20, 0.98));
2528
+ border-radius: 14px;
2529
+ padding: 20px 22px;
2530
+ box-shadow: 0 16px 48px rgba(0, 0, 0, 0.65), 0 0 24px rgba(229, 169, 60, 0.15);
2531
+ display: flex;
2532
+ flex-direction: column;
2533
+ gap: 14px;
2534
+ z-index: 1000;
2535
+ border: 1px solid var(--bronze-border-strong);
2536
+ backdrop-filter: blur(16px);
2537
+ animation: pwaSlideUp 0.35s cubic-bezier(0.16, 1, 0.3, 1);
2538
+ }
2539
+
2540
+ @keyframes pwaSlideUp {
2541
+ from {
2542
+ opacity: 0;
2543
+ transform: translate(-50%, 20px) scale(0.97);
2544
+ }
2545
+ to {
2546
+ opacity: 1;
2547
+ transform: translate(-50%, 0) scale(1);
2548
+ }
2549
+ }
2550
+
2551
+ .install-banner.hidden {
2552
+ display: none;
2553
+ }
2554
+
2555
+ .install-banner-header {
2556
+ display: flex;
2557
+ align-items: center;
2558
+ gap: 14px;
2559
+ }
2560
+
2561
+ .install-banner-crest {
2562
+ width: 48px;
2563
+ height: 48px;
2564
+ min-width: 48px;
2565
+ min-height: 48px;
2566
+ max-width: 48px;
2567
+ max-height: 48px;
2568
+ flex-shrink: 0;
2569
+ display: flex;
2570
+ align-items: center;
2571
+ justify-content: center;
2572
+ background: rgba(14, 21, 37, 0.8);
2573
+ border: 1px solid var(--bronze-border-strong);
2574
+ border-radius: 12px;
2575
+ overflow: hidden;
2576
+ box-shadow: 0 0 16px rgba(56, 189, 248, 0.25);
2577
+ box-sizing: border-box;
2578
+ }
2579
+
2580
+ .install-crest-img {
2581
+ width: 100%;
2582
+ height: 100%;
2583
+ max-width: 100%;
2584
+ max-height: 100%;
2585
+ object-fit: cover;
2586
+ border-radius: 10px;
2587
+ display: block;
2588
+ }
2589
+
2590
+ .install-banner-headings {
2591
+ display: flex;
2592
+ flex-direction: column;
2593
+ gap: 2px;
2594
+ }
2595
+
2596
+ .install-banner-title {
2597
+ font-family: var(--font-mythic);
2598
+ font-size: 15px;
2599
+ font-weight: 700;
2600
+ letter-spacing: 0.08em;
2601
+ color: var(--gold-bright);
2602
+ margin: 0;
2603
+ }
2604
+
2605
+ .install-banner-subtitle {
2606
+ font-family: var(--font-mono);
2607
+ font-size: 11px;
2608
+ color: var(--text-dim);
2609
+ letter-spacing: 0.04em;
2610
+ }
2611
+
2612
+ .install-banner-message {
2613
+ font-size: 13px;
2614
+ line-height: 1.5;
2615
+ color: var(--text-parchment);
2616
+ margin: 0;
2617
+ }
2618
+
2619
+ .install-banner-features {
2620
+ display: flex;
2621
+ flex-wrap: wrap;
2622
+ gap: 6px;
2623
+ }
2624
+
2625
+ .install-feature-pill {
2626
+ font-family: var(--font-mono);
2627
+ font-size: 10.5px;
2628
+ padding: 3px 8px;
2629
+ background: rgba(56, 189, 248, 0.08);
2630
+ border: 1px solid rgba(56, 189, 248, 0.2);
2631
+ color: #7dd3fc;
2632
+ border-radius: 6px;
2633
+ white-space: nowrap;
2634
+ }
2635
+
2636
+ .install-banner-actions {
2637
+ display: flex;
2638
+ align-items: center;
2639
+ gap: 10px;
2640
+ margin-top: 2px;
2641
+ }
2642
+
2643
+ .install-banner-button {
2644
+ background: linear-gradient(135deg, var(--gold-bright), var(--gold-aurum));
2645
+ color: var(--bg-void);
2646
+ border: none;
2647
+ border-radius: 8px;
2648
+ padding: 10px 18px;
2649
+ font-family: var(--font-sans);
2650
+ font-weight: 700;
2651
+ font-size: 13px;
2652
+ letter-spacing: 0.04em;
2653
+ cursor: pointer;
2654
+ transition: all 0.25s ease;
2655
+ display: inline-flex;
2656
+ align-items: center;
2657
+ gap: 8px;
2658
+ box-shadow: 0 0 12px rgba(229, 169, 60, 0.2);
2659
+ }
2660
+
2661
+ .install-banner-button:hover {
2662
+ background: linear-gradient(135deg, var(--gold-aurum), var(--gold-deep));
2663
+ box-shadow: 0 0 20px var(--gold-glow);
2664
+ transform: translateY(-1px);
2665
+ }
2666
+
2667
+ .install-banner-dismiss-btn {
2668
+ background: transparent;
2669
+ color: var(--text-dim);
2670
+ border: 1px solid var(--bronze-border);
2671
+ border-radius: 8px;
2672
+ padding: 10px 14px;
2673
+ font-family: var(--font-mono);
2674
+ font-size: 11.5px;
2675
+ cursor: pointer;
2676
+ transition: all 0.2s ease;
2677
+ }
2678
+
2679
+ .install-banner-dismiss-btn:hover {
2680
+ color: var(--text-marble);
2681
+ border-color: var(--bronze-border-strong);
2682
+ background: rgba(255, 255, 255, 0.03);
2683
+ }
2684
+
2685
+ .install-banner-close {
2686
+ position: absolute;
2687
+ top: 14px;
2688
+ right: 14px;
2689
+ background: none;
2690
+ border: none;
2691
+ color: var(--text-dim);
2692
+ font-size: 18px;
2693
+ cursor: pointer;
2694
+ padding: 4px;
2695
+ line-height: 1;
2696
+ transition: color 0.2s ease;
2697
+ }
2698
+
2699
+ .install-banner-close:hover {
2700
+ color: var(--gold-bright);
2701
+ }
2702
+
2703
+ @media (max-width: 600px) {
2704
+ .install-banner {
2705
+ width: 95%;
2706
+ padding: 14px 16px;
2707
+ bottom: 16px;
2708
+ gap: 10px;
2709
+ }
2710
+
2711
+ .install-banner-title {
2712
+ font-size: 14px;
2713
+ }
2714
+
2715
+ .install-banner-message {
2716
+ font-size: 12.5px;
2717
+ }
2718
+
2719
+ .install-banner-actions {
2720
+ flex-direction: column;
2721
+ align-items: stretch;
2722
+ }
2723
+
2724
+ .install-banner-button,
2725
+ .install-banner-dismiss-btn {
2726
+ width: 100%;
2727
+ justify-content: center;
2728
+ padding: 10px 12px;
2729
+ }
2730
+ }
2731
+