@xingjisoft/neutrino 0.4.0 → 0.5.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/web/style.css CHANGED
@@ -549,13 +549,28 @@ svg {
549
549
  color: var(--text-tertiary);
550
550
  }
551
551
 
552
- .dot {
552
+ /* Sidebar row status: a finished turn, a turn in flight, or a pending approval. */
553
+ .session-state {
553
554
  flex: none;
554
555
  width: 6px;
555
556
  height: 6px;
556
557
  border-radius: 50%;
557
558
  background: var(--accent);
558
- animation: pulse 2s var(--ease) infinite;
559
+ }
560
+
561
+ .session-state.approval {
562
+ background: var(--amber);
563
+ animation: pulse-amber 1.6s ease-out infinite;
564
+ }
565
+
566
+ /* A running turn is a ring that keeps turning, never a coloured dot. */
567
+ .session-state.running {
568
+ width: 9px;
569
+ height: 9px;
570
+ background: none;
571
+ border: 1.5px solid rgba(122, 170, 255, 0.25);
572
+ border-top-color: var(--accent);
573
+ animation: spin 0.8s linear infinite;
559
574
  }
560
575
 
561
576
  .more {
@@ -597,6 +612,16 @@ svg {
597
612
  border-bottom: 1px solid var(--border-soft);
598
613
  }
599
614
 
615
+ /* Match the CLI's 500ms thinking phases across the full title bar. */
616
+ .main-header.is-thinking {
617
+ background-color: #28393d;
618
+ animation: header-thinking 1s steps(1, end) infinite;
619
+ }
620
+
621
+ .main-header.is-thinking .main-title h1 {
622
+ color: #99d9ea;
623
+ }
624
+
600
625
  .main-title {
601
626
  flex: 1;
602
627
  min-width: 0;
@@ -1372,6 +1397,26 @@ svg {
1372
1397
 
1373
1398
  /* --------------------------------------------------------------- composer */
1374
1399
 
1400
+ .agent-actions {
1401
+ display: flex;
1402
+ flex-shrink: 0;
1403
+ align-items: center;
1404
+ justify-content: flex-end;
1405
+ gap: 12px;
1406
+ padding: 12px clamp(16px, 4vw, 40px) max(18px, env(safe-area-inset-bottom));
1407
+ }
1408
+
1409
+ .agent-actions .form-feedback {
1410
+ flex: 1;
1411
+ min-width: 0;
1412
+ margin: 0;
1413
+ overflow-wrap: anywhere;
1414
+ }
1415
+
1416
+ .agent-actions button {
1417
+ flex-shrink: 0;
1418
+ }
1419
+
1375
1420
  .composer {
1376
1421
  flex-shrink: 0;
1377
1422
  padding: 0 clamp(16px, 4vw, 40px) 18px;
@@ -1386,6 +1431,7 @@ svg {
1386
1431
 
1387
1432
  .composer-card {
1388
1433
  display: flex;
1434
+ flex-wrap: wrap;
1389
1435
  align-items: flex-end;
1390
1436
  gap: 8px;
1391
1437
  padding: 8px 8px 8px 16px;
@@ -1404,7 +1450,7 @@ svg {
1404
1450
  }
1405
1451
 
1406
1452
  .composer textarea {
1407
- flex: 1;
1453
+ flex: 1 0 100%;
1408
1454
  min-width: 0;
1409
1455
  min-height: 36px;
1410
1456
  max-height: 240px;
@@ -1428,8 +1474,6 @@ svg {
1428
1474
  outline: none;
1429
1475
  }
1430
1476
 
1431
- .pro-mode .composer-card { flex-wrap: wrap; }
1432
- .pro-mode .composer textarea { flex: 1 0 100%; }
1433
1477
  .pro-preset-control { position: relative; margin-left: auto; align-self: center; }
1434
1478
  .pro-preset-control > summary {
1435
1479
  display: flex; align-items: center; gap: 10px; padding: 7px 10px;
@@ -1466,20 +1510,20 @@ svg {
1466
1510
  border-radius: 50%; background: rgba(255, 255, 255, .18);
1467
1511
  }
1468
1512
  .pro-slider-stop.is-filled { background: rgba(255, 255, 255, .35); }
1469
- #pro-preset-range {
1513
+ #pro-preset-range, #model-intensity {
1470
1514
  position: relative; display: block; width: 100%; height: 40px; margin: 0; padding: 0;
1471
1515
  -webkit-appearance: none; appearance: none; border: 0; border-radius: 999px; background: transparent; cursor: pointer;
1472
1516
  }
1473
- #pro-preset-range::-webkit-slider-runnable-track { height: 24px; border: 0; background: transparent; }
1474
- #pro-preset-range::-webkit-slider-thumb {
1517
+ #pro-preset-range::-webkit-slider-runnable-track, #model-intensity::-webkit-slider-runnable-track { height: 24px; border: 0; background: transparent; }
1518
+ #pro-preset-range::-webkit-slider-thumb, #model-intensity::-webkit-slider-thumb {
1475
1519
  -webkit-appearance: none; appearance: none; width: 28px; height: 28px; margin-top: -2px;
1476
1520
  border: 0; border-radius: 50%; background: #fff;
1477
1521
  }
1478
- #pro-preset-range::-moz-range-track { height: 24px; border: 0; background: transparent; }
1479
- #pro-preset-range::-moz-range-progress { background: transparent; }
1480
- #pro-preset-range::-moz-range-thumb { width: 28px; height: 28px; border: 0; border-radius: 50%; background: #fff; }
1481
- #pro-preset-range:focus-visible { outline-offset: 2px; }
1482
- #pro-preset-range:disabled { cursor: default; }
1522
+ #pro-preset-range::-moz-range-track, #model-intensity::-moz-range-track { height: 24px; border: 0; background: transparent; }
1523
+ #pro-preset-range::-moz-range-progress, #model-intensity::-moz-range-progress { background: transparent; }
1524
+ #pro-preset-range::-moz-range-thumb, #model-intensity::-moz-range-thumb { width: 28px; height: 28px; border: 0; border-radius: 50%; background: #fff; }
1525
+ #pro-preset-range:focus-visible, #model-intensity:focus-visible { outline-offset: 2px; }
1526
+ #pro-preset-range:disabled, #model-intensity:disabled { cursor: default; }
1483
1527
  .pro-preset-ticks { position: relative; height: 24px; margin: 6px 14px 16px; }
1484
1528
  .pro-preset-ticks button {
1485
1529
  position: absolute; transform: translateX(-50%); border: 0; background: transparent;
@@ -1554,6 +1598,15 @@ svg {
1554
1598
  height: 18px;
1555
1599
  }
1556
1600
 
1601
+ #send .pause-icon,
1602
+ #send.is-pause .send-icon {
1603
+ display: none;
1604
+ }
1605
+
1606
+ #send.is-pause .pause-icon {
1607
+ display: block;
1608
+ }
1609
+
1557
1610
  #send:hover {
1558
1611
  background: var(--primary-hover);
1559
1612
  }
@@ -1892,40 +1945,18 @@ svg {
1892
1945
 
1893
1946
  /* ----------------------------------------------------- model and settings */
1894
1947
 
1895
- .model-picker {
1896
- display: flex;
1897
- flex-shrink: 0;
1898
- flex-wrap: wrap;
1899
- align-items: flex-end;
1900
- gap: 10px;
1901
- padding: 10px clamp(16px, 4vw, 32px) 12px;
1902
- border-bottom: 1px solid var(--border-soft);
1903
- }
1904
-
1905
- .model-picker label {
1948
+ .model-picker { min-width: 0; max-width: min(75%, 340px); }
1949
+ .model-picker > summary span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1950
+ .model-picker-fields { display: grid; gap: 12px; margin-bottom: 18px; }
1951
+ .model-picker-fields label {
1906
1952
  display: flex;
1907
1953
  flex-direction: column;
1908
1954
  gap: 5px;
1909
- flex: 0 1 170px;
1910
1955
  min-width: 0;
1911
- color: var(--text-caption);
1956
+ color: var(--text-tertiary);
1912
1957
  font-size: 11px;
1913
1958
  }
1914
-
1915
- .model-picker label:nth-child(2) {
1916
- flex-grow: 1;
1917
- max-width: 300px;
1918
- }
1919
-
1920
- .model-picker .control {
1921
- height: 34px;
1922
- }
1923
-
1924
- .model-picker .form-feedback {
1925
- flex: 1 1 200px;
1926
- align-self: center;
1927
- margin: 0;
1928
- }
1959
+ .model-picker-card .form-feedback { margin: 0; }
1929
1960
 
1930
1961
  select,
1931
1962
  .settings-fields input[type="password"],
@@ -1942,10 +1973,6 @@ select,
1942
1973
  transition: border-color var(--fast), background-color var(--fast);
1943
1974
  }
1944
1975
 
1945
- .model-picker select {
1946
- height: 34px;
1947
- }
1948
-
1949
1976
  select {
1950
1977
  appearance: none;
1951
1978
  padding-right: 32px;
@@ -2302,11 +2329,6 @@ select option {
2302
2329
  display: none;
2303
2330
  }
2304
2331
 
2305
- /* Sit below the model row instead of covering it. */
2306
- #model-picker:not(.hidden) + #plan-card {
2307
- top: 138px;
2308
- }
2309
-
2310
2332
  .plan-card-head {
2311
2333
  display: flex;
2312
2334
  align-items: center;
@@ -2659,6 +2681,56 @@ select option {
2659
2681
  flex: 1;
2660
2682
  }
2661
2683
 
2684
+ /* One-time background-residency invitation. The orbit badge is the regular
2685
+ console's own mark, so the offer reads as part of the same product. */
2686
+ .background-dialog {
2687
+ width: min(460px, calc(100vw - 24px));
2688
+ }
2689
+
2690
+ .background-header {
2691
+ align-items: center;
2692
+ justify-content: flex-start;
2693
+ gap: 14px;
2694
+ border-bottom: 0;
2695
+ padding-bottom: 18px;
2696
+ }
2697
+
2698
+ .background-mark {
2699
+ display: flex;
2700
+ flex: none;
2701
+ align-items: center;
2702
+ justify-content: center;
2703
+ width: 46px;
2704
+ height: 46px;
2705
+ color: var(--accent);
2706
+ background: var(--surface-1);
2707
+ border: 1px solid var(--border-soft);
2708
+ border-radius: 13px;
2709
+ }
2710
+
2711
+ .background-mark svg {
2712
+ width: 24px;
2713
+ height: 24px;
2714
+ }
2715
+
2716
+ .background-copy {
2717
+ min-width: 0;
2718
+ }
2719
+
2720
+ .background-copy h2 {
2721
+ font-size: 15px;
2722
+ line-height: 1.55;
2723
+ font-weight: 600;
2724
+ }
2725
+
2726
+ .background-feedback:empty {
2727
+ display: none;
2728
+ }
2729
+
2730
+ .background-actions {
2731
+ border-top: 1px solid var(--border-soft);
2732
+ }
2733
+
2662
2734
  /* Folder picker */
2663
2735
  .folder-sheet {
2664
2736
  max-height: calc(100vh - 32px);
@@ -3032,6 +3104,18 @@ html.pro-transitioning body::before {
3032
3104
 
3033
3105
  /* -------------------------------------------------------------- animations */
3034
3106
 
3107
+ @keyframes header-thinking {
3108
+ 0%,
3109
+ 100% {
3110
+ background-color: #28393d;
3111
+ border-bottom-color: rgba(153, 217, 234, 0.45);
3112
+ }
3113
+ 50% {
3114
+ background-color: var(--bg);
3115
+ border-bottom-color: var(--border-soft);
3116
+ }
3117
+ }
3118
+
3035
3119
  @keyframes blink {
3036
3120
  0%,
3037
3121
  49% {
@@ -3067,6 +3151,12 @@ html.pro-transitioning body::before {
3067
3151
  }
3068
3152
  }
3069
3153
 
3154
+ @keyframes spin {
3155
+ to {
3156
+ transform: rotate(360deg);
3157
+ }
3158
+ }
3159
+
3070
3160
  @media (prefers-reduced-motion: reduce) {
3071
3161
  .pro-slider-meteors { display: none; }
3072
3162
  *,
@@ -3195,27 +3285,6 @@ html.pro-transitioning body::before {
3195
3285
  height: 34px;
3196
3286
  }
3197
3287
 
3198
- .model-picker {
3199
- gap: 8px;
3200
- padding: 10px 12px;
3201
- max-height: 30vh;
3202
- max-height: 30dvh;
3203
- overflow: auto;
3204
- }
3205
-
3206
- .model-picker label {
3207
- flex: 1 1 calc(50% - 8px);
3208
- }
3209
-
3210
- .model-picker label:nth-child(2) {
3211
- max-width: none;
3212
- }
3213
-
3214
- .model-picker .control {
3215
- flex: 1 1 calc(50% - 8px);
3216
- height: 38px;
3217
- }
3218
-
3219
3288
  .messages {
3220
3289
  padding: 16px 14px 20px;
3221
3290
  }
@@ -3237,6 +3306,11 @@ html.pro-transitioning body::before {
3237
3306
  border-radius: 20px;
3238
3307
  }
3239
3308
 
3309
+ .model-picker-card {
3310
+ right: -48px;
3311
+ width: min(390px, calc(100vw - 32px));
3312
+ }
3313
+
3240
3314
  .composer textarea {
3241
3315
  max-height: min(220px, 25dvh);
3242
3316
  }
@@ -3382,13 +3456,6 @@ html.pro-transitioning body::before {
3382
3456
  overflow-y: auto;
3383
3457
  }
3384
3458
 
3385
- .model-picker {
3386
- flex-shrink: 1;
3387
- min-height: 44px;
3388
- padding-top: 6px;
3389
- padding-bottom: 6px;
3390
- }
3391
-
3392
3459
  .messages {
3393
3460
  min-height: 40px;
3394
3461
  padding-top: 8px;