@brainpilot/web 0.0.10 → 0.0.11

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.
@@ -807,6 +807,17 @@ button {
807
807
  letter-spacing: -0.01em;
808
808
  }
809
809
 
810
+ .workspace-panel__title-icon {
811
+ display: inline-flex;
812
+ align-items: center;
813
+ gap: 9px;
814
+ }
815
+
816
+ .workspace-panel__title-icon svg {
817
+ color: var(--color-text-subtle);
818
+ flex: 0 0 auto;
819
+ }
820
+
810
821
  .workspace-panel__eyebrow {
811
822
  color: var(--color-text-muted);
812
823
  font-size: 12px;
@@ -2807,6 +2818,88 @@ button {
2807
2818
  cursor: pointer;
2808
2819
  }
2809
2820
 
2821
+ /* #219 — expert-agent activity group: one more disclosure level that folds a
2822
+ run of specialist-agent items behind the PI narrative. Reuses the activity
2823
+ summary idiom (chevron rotate, pulse dot) with its own slightly stronger
2824
+ framing so it reads as a distinct grouping, not just another thinking fold. */
2825
+ .expert-group {
2826
+ max-width: 760px;
2827
+ }
2828
+
2829
+ .expert-group > details > summary {
2830
+ display: flex;
2831
+ align-items: center;
2832
+ gap: 8px;
2833
+ cursor: pointer;
2834
+ list-style: none;
2835
+ font-size: 12px;
2836
+ color: var(--color-text-muted);
2837
+ padding: 5px 10px;
2838
+ border: 1px solid var(--color-border);
2839
+ border-radius: var(--radius-sm);
2840
+ background: var(--color-surface-soft);
2841
+ transition: background var(--ease-standard), color var(--ease-standard), border-color var(--ease-standard);
2842
+ }
2843
+
2844
+ .expert-group > details > summary::-webkit-details-marker {
2845
+ display: none;
2846
+ }
2847
+
2848
+ .expert-group > details > summary:hover {
2849
+ background: var(--color-hover);
2850
+ color: var(--color-text);
2851
+ border-color: var(--color-border-strong);
2852
+ }
2853
+
2854
+ .expert-group__icon {
2855
+ flex: none;
2856
+ color: var(--color-text-subtle);
2857
+ }
2858
+
2859
+ .expert-group > details[open] > summary .activity-summary__chevron {
2860
+ transform: rotate(180deg);
2861
+ }
2862
+
2863
+ /* Nested items keep their own indentation; the left rule ties them to the
2864
+ group header so the hierarchy (PI timeline → specialist group → reasoning/
2865
+ tool folds) stays legible. */
2866
+ .expert-group__body {
2867
+ display: grid;
2868
+ gap: 12px;
2869
+ margin: 10px 0 4px 6px;
2870
+ padding-left: 14px;
2871
+ border-left: 2px solid var(--color-border);
2872
+ }
2873
+
2874
+ /* Audit-mode toggle in the stream toolbar — quiet until hovered/active. */
2875
+ .message-stack__audit-toggle {
2876
+ display: inline-flex;
2877
+ align-items: center;
2878
+ gap: 6px;
2879
+ border: 1px solid var(--color-border);
2880
+ border-radius: var(--radius-pill);
2881
+ background: var(--color-surface);
2882
+ color: var(--color-text-muted);
2883
+ padding: 3px 10px;
2884
+ font-size: 12px;
2885
+ cursor: pointer;
2886
+ transition: background var(--ease-standard), color var(--ease-standard), border-color var(--ease-standard);
2887
+ }
2888
+
2889
+ .message-stack__audit-toggle:hover,
2890
+ .message-stack__audit-toggle:focus-visible {
2891
+ border-color: var(--color-border-strong);
2892
+ background: var(--color-hover);
2893
+ color: var(--color-text);
2894
+ outline: none;
2895
+ }
2896
+
2897
+ .message-stack__audit-toggle.is-active {
2898
+ border-color: var(--color-accent);
2899
+ background: var(--color-accent-soft);
2900
+ color: var(--color-accent-strong);
2901
+ }
2902
+
2810
2903
  /* Expand animations — the activity body slides in when opened, its steps
2811
2904
  stagger, and nested tool/hook bodies reveal on their own [open] toggle. */
2812
2905
  @media (prefers-reduced-motion: no-preference) {
@@ -3313,135 +3406,239 @@ button {
3313
3406
  pointer-events: auto;
3314
3407
  }
3315
3408
 
3316
- .sandbox-status__header {
3409
+ /* Small muted eyebrow — also reused by the app-bootstrapping splash. */
3410
+ .sandbox-status__eyebrow {
3411
+ color: var(--color-text-muted);
3412
+ font-size: 12px;
3413
+ }
3414
+
3415
+ /* Status hero: one colored dot + a primary state word + a small subtitle. */
3416
+ .sandbox-status__hero {
3317
3417
  display: flex;
3318
- align-items: baseline;
3319
- justify-content: space-between;
3320
- gap: 12px;
3418
+ align-items: flex-start;
3419
+ gap: 10px;
3321
3420
  padding-bottom: 12px;
3322
3421
  border-bottom: 1px solid var(--color-border);
3323
3422
  }
3324
3423
 
3325
- .sandbox-status__eyebrow {
3326
- color: var(--color-text-muted);
3327
- font-size: 12px;
3424
+ .sandbox-status__hero-dot {
3425
+ width: 9px;
3426
+ height: 9px;
3427
+ margin-top: 5px;
3428
+ flex: 0 0 9px;
3429
+ border-radius: 999px;
3430
+ background: var(--color-text-subtle);
3431
+ }
3432
+
3433
+ .sandbox-status__hero--connected .sandbox-status__hero-dot {
3434
+ background: var(--color-success);
3435
+ }
3436
+
3437
+ .sandbox-status__hero--disconnected .sandbox-status__hero-dot {
3438
+ background: var(--color-danger);
3439
+ }
3440
+
3441
+ .sandbox-status__hero--connecting .sandbox-status__hero-dot {
3442
+ background: var(--color-info);
3443
+ animation: sandbox-status-pulse 1.4s ease-in-out infinite;
3444
+ }
3445
+
3446
+ .sandbox-status__hero--creating .sandbox-status__hero-dot {
3447
+ background: var(--color-warning);
3448
+ animation: sandbox-status-pulse 1.4s ease-in-out infinite;
3449
+ }
3450
+
3451
+ .sandbox-status__hero-text {
3452
+ display: grid;
3453
+ gap: 2px;
3454
+ min-width: 0;
3328
3455
  }
3329
3456
 
3330
- .sandbox-status__header strong {
3457
+ .sandbox-status__hero-text strong {
3331
3458
  color: var(--color-text);
3332
3459
  font-size: 14px;
3333
3460
  }
3334
3461
 
3335
- .sandbox-status__notice {
3336
- margin: 12px 0 0;
3337
- border: 1px solid var(--color-border);
3338
- border-radius: 10px;
3339
- background: var(--color-surface-soft);
3462
+ .sandbox-status__hero-text span {
3340
3463
  color: var(--color-text-muted);
3341
- padding: 9px 10px;
3342
3464
  font-size: 12px;
3465
+ line-height: 1.45;
3343
3466
  }
3344
3467
 
3345
- .sandbox-status__notice.is-loading::before {
3468
+ .sandbox-status__hero-text span.is-loading::before {
3346
3469
  display: inline-block;
3347
- width: 7px;
3348
- height: 7px;
3349
- margin-right: 7px;
3470
+ width: 6px;
3471
+ height: 6px;
3472
+ margin-right: 6px;
3350
3473
  border-radius: 999px;
3351
3474
  background: var(--color-info);
3352
3475
  content: "";
3476
+ animation: sandbox-status-pulse 1.4s ease-in-out infinite;
3353
3477
  }
3354
3478
 
3355
- .sandbox-status__grid {
3479
+ /* Resource meters: three thin horizontal bars (memory / disk / cpu). */
3480
+ .sandbox-status__meters {
3356
3481
  display: grid;
3357
- gap: 8px;
3358
- margin: 12px 0;
3482
+ gap: 12px;
3483
+ margin: 14px 0;
3359
3484
  }
3360
3485
 
3361
- .sandbox-status__grid div {
3486
+ .sandbox-meter {
3362
3487
  display: grid;
3363
- min-width: 0;
3364
- grid-template-columns: 76px minmax(0, 1fr);
3365
- gap: 10px;
3488
+ gap: 5px;
3366
3489
  }
3367
3490
 
3368
- .sandbox-status__grid dt,
3369
- .sandbox-status__metrics span,
3370
- .sandbox-status__metrics small {
3491
+ .sandbox-meter__head {
3492
+ display: flex;
3493
+ align-items: baseline;
3494
+ justify-content: space-between;
3495
+ gap: 8px;
3496
+ }
3497
+
3498
+ .sandbox-meter__head span {
3371
3499
  color: var(--color-text-muted);
3500
+ font-size: 12px;
3372
3501
  }
3373
3502
 
3374
- .sandbox-status__grid dt,
3375
- .sandbox-status__grid dd {
3376
- min-width: 0;
3377
- margin: 0;
3503
+ .sandbox-meter__head strong {
3504
+ color: var(--color-text);
3378
3505
  font-size: 12px;
3506
+ font-weight: 560;
3507
+ font-variant-numeric: tabular-nums;
3379
3508
  }
3380
3509
 
3381
- .sandbox-status__grid dd {
3510
+ .sandbox-meter__track {
3511
+ height: 6px;
3382
3512
  overflow: hidden;
3383
- color: var(--color-text);
3384
- text-overflow: ellipsis;
3385
- white-space: nowrap;
3513
+ border-radius: 999px;
3514
+ background: var(--color-surface-soft);
3386
3515
  }
3387
3516
 
3388
- .sandbox-status__metrics {
3389
- display: grid;
3390
- grid-template-columns: repeat(2, minmax(0, 1fr));
3517
+ .sandbox-meter__fill {
3518
+ display: block;
3519
+ height: 100%;
3520
+ border-radius: 999px;
3521
+ background: var(--color-accent);
3522
+ transition: width var(--ease-layout);
3523
+ }
3524
+
3525
+ .sandbox-meter__fill--warning {
3526
+ background: var(--color-warning);
3527
+ }
3528
+
3529
+ .sandbox-meter__fill--critical {
3530
+ background: var(--color-danger);
3531
+ }
3532
+
3533
+ .sandbox-meter small {
3534
+ color: var(--color-text-subtle);
3535
+ font-size: 11px;
3536
+ }
3537
+
3538
+ /* Health chips: icon + label + status dot, color-coded. */
3539
+ .sandbox-status__chips {
3540
+ display: flex;
3541
+ flex-wrap: wrap;
3391
3542
  gap: 8px;
3392
3543
  }
3393
3544
 
3394
- .sandbox-status__metrics div {
3395
- display: grid;
3396
- min-width: 0;
3397
- gap: 2px;
3545
+ .sandbox-chip {
3546
+ display: inline-flex;
3547
+ align-items: center;
3548
+ gap: 6px;
3398
3549
  border: 1px solid var(--color-border);
3399
- border-radius: 10px;
3550
+ border-radius: 999px;
3400
3551
  background: var(--color-surface-soft);
3401
- padding: 9px 10px;
3552
+ color: var(--color-text-muted);
3553
+ padding: 4px 10px;
3554
+ font-size: 12px;
3402
3555
  }
3403
3556
 
3404
- .sandbox-status__metrics span,
3405
- .sandbox-status__metrics small {
3406
- font-size: 11px;
3557
+ .sandbox-chip svg {
3558
+ color: var(--color-text-subtle);
3407
3559
  }
3408
3560
 
3409
- .sandbox-status__metrics strong {
3410
- overflow: hidden;
3411
- color: var(--color-text);
3561
+ .sandbox-chip__dot {
3562
+ width: 7px;
3563
+ height: 7px;
3564
+ border-radius: 999px;
3565
+ background: var(--color-text-subtle);
3566
+ }
3567
+
3568
+ .sandbox-chip--ok .sandbox-chip__dot {
3569
+ background: var(--color-success);
3570
+ }
3571
+
3572
+ .sandbox-chip--off .sandbox-chip__dot {
3573
+ background: var(--color-danger);
3574
+ }
3575
+
3576
+ .sandbox-chip--unknown .sandbox-chip__dot {
3577
+ background: var(--color-text-subtle);
3578
+ }
3579
+
3580
+ /* Collapsible identity details. */
3581
+ .sandbox-status__details {
3582
+ margin-top: 12px;
3583
+ }
3584
+
3585
+ .sandbox-status__details > summary {
3586
+ cursor: pointer;
3587
+ color: var(--color-text-muted);
3412
3588
  font-size: 12px;
3413
- font-weight: 560;
3414
- text-overflow: ellipsis;
3415
- white-space: nowrap;
3589
+ list-style: none;
3590
+ user-select: none;
3591
+ }
3592
+
3593
+ .sandbox-status__details > summary::-webkit-details-marker {
3594
+ display: none;
3595
+ }
3596
+
3597
+ .sandbox-status__details > summary::before {
3598
+ display: inline-block;
3599
+ margin-right: 6px;
3600
+ content: "▸";
3601
+ color: var(--color-text-subtle);
3602
+ transition: transform var(--ease-standard);
3416
3603
  }
3417
3604
 
3418
- .sandbox-status__health {
3605
+ .sandbox-status__details[open] > summary::before {
3606
+ transform: rotate(90deg);
3607
+ }
3608
+
3609
+ .sandbox-status__details > summary:hover,
3610
+ .sandbox-status__details > summary:focus-visible {
3611
+ color: var(--color-text);
3612
+ outline: none;
3613
+ }
3614
+
3615
+ .sandbox-status__grid {
3419
3616
  display: grid;
3420
- grid-template-columns: repeat(3, minmax(0, 1fr));
3421
3617
  gap: 8px;
3422
- margin-top: 8px;
3618
+ margin: 10px 0 0;
3423
3619
  }
3424
3620
 
3425
- .sandbox-status__health div {
3621
+ .sandbox-status__grid div {
3426
3622
  display: grid;
3427
3623
  min-width: 0;
3428
- gap: 2px;
3429
- border: 1px solid var(--color-border);
3430
- border-radius: 10px;
3431
- background: var(--color-surface);
3432
- padding: 8px 9px;
3624
+ grid-template-columns: 76px minmax(0, 1fr);
3625
+ gap: 10px;
3433
3626
  }
3434
3627
 
3435
- .sandbox-status__health span {
3628
+ .sandbox-status__grid dt {
3436
3629
  color: var(--color-text-muted);
3437
- font-size: 11px;
3438
3630
  }
3439
3631
 
3440
- .sandbox-status__health strong {
3632
+ .sandbox-status__grid dt,
3633
+ .sandbox-status__grid dd {
3634
+ min-width: 0;
3635
+ margin: 0;
3636
+ font-size: 12px;
3637
+ }
3638
+
3639
+ .sandbox-status__grid dd {
3441
3640
  overflow: hidden;
3442
3641
  color: var(--color-text);
3443
- font-size: 12px;
3444
- font-weight: 560;
3445
3642
  text-overflow: ellipsis;
3446
3643
  white-space: nowrap;
3447
3644
  }
@@ -3494,6 +3691,12 @@ button {
3494
3691
  outline: none;
3495
3692
  }
3496
3693
 
3694
+ .sandbox-status__actions button.is-active {
3695
+ border-color: var(--color-border-strong);
3696
+ background: var(--color-active);
3697
+ color: var(--color-text);
3698
+ }
3699
+
3497
3700
  .sandbox-status__actions button:disabled {
3498
3701
  color: var(--color-text-subtle);
3499
3702
  opacity: 0.65;
@@ -4494,7 +4697,7 @@ button {
4494
4697
  width: min(1040px, calc(100vw - 64px));
4495
4698
  height: min(585px, calc(100vh - 64px));
4496
4699
  aspect-ratio: 16 / 9;
4497
- grid-template-rows: auto minmax(0, 1fr);
4700
+ grid-template-rows: auto minmax(0, 1fr) auto;
4498
4701
  overflow: hidden;
4499
4702
  transform: translate(-50%, -50%);
4500
4703
  border: 1px solid var(--color-border);
@@ -5185,6 +5388,17 @@ button {
5185
5388
  font-family: var(--font-mono);
5186
5389
  }
5187
5390
 
5391
+ .settings-modal__footer {
5392
+ display: flex;
5393
+ justify-content: flex-end;
5394
+ align-items: center;
5395
+ border-top: 1px solid var(--color-border);
5396
+ background: var(--color-surface-soft);
5397
+ padding: 8px 18px;
5398
+ }
5399
+
5400
+ /* Inline checkbox row — used by the Knowledge Base panel (reuse-agent-key,
5401
+ per-stage toggles). Preferences uses .settings-toggle-row instead. */
5188
5402
  .settings-check {
5189
5403
  display: flex !important;
5190
5404
  grid-template-columns: none !important;
@@ -5220,6 +5434,544 @@ button {
5220
5434
  transform: rotate(45deg);
5221
5435
  }
5222
5436
 
5437
+ /* ── Settings: empty states, preference groups, toggle rows ─────── */
5438
+
5439
+ .settings-empty {
5440
+ display: grid;
5441
+ justify-items: center;
5442
+ gap: 8px;
5443
+ border: 1px dashed var(--color-border-strong);
5444
+ border-radius: var(--radius-md);
5445
+ background: var(--color-surface-soft);
5446
+ padding: 32px 24px;
5447
+ text-align: center;
5448
+ }
5449
+
5450
+ .settings-empty svg {
5451
+ color: var(--color-text-subtle);
5452
+ }
5453
+
5454
+ .settings-empty strong {
5455
+ color: var(--color-text);
5456
+ font-size: 14px;
5457
+ }
5458
+
5459
+ .settings-empty p {
5460
+ max-width: 360px;
5461
+ margin: 0;
5462
+ color: var(--color-text-muted);
5463
+ font-size: 12px;
5464
+ line-height: 1.5;
5465
+ }
5466
+
5467
+ .settings-empty .settings-button {
5468
+ margin-top: 4px;
5469
+ }
5470
+
5471
+ .settings-group {
5472
+ display: grid;
5473
+ gap: 10px;
5474
+ }
5475
+
5476
+ .settings-group__title {
5477
+ margin: 0;
5478
+ color: var(--color-text-muted);
5479
+ font-size: 12px;
5480
+ font-weight: 600;
5481
+ text-transform: uppercase;
5482
+ letter-spacing: 0.4px;
5483
+ }
5484
+
5485
+ .settings-field--split {
5486
+ grid-template-columns: minmax(0, 1fr) 200px;
5487
+ align-items: center;
5488
+ gap: 16px;
5489
+ }
5490
+
5491
+ .settings-field__label {
5492
+ display: grid;
5493
+ gap: 2px;
5494
+ min-width: 0;
5495
+ }
5496
+
5497
+ .settings-field__label span {
5498
+ color: var(--color-text);
5499
+ font-size: 13px;
5500
+ }
5501
+
5502
+ .settings-field__label small {
5503
+ color: var(--color-text-muted);
5504
+ font-size: 12px;
5505
+ line-height: 1.45;
5506
+ }
5507
+
5508
+ .settings-toggle-row {
5509
+ display: flex !important;
5510
+ align-items: center;
5511
+ justify-content: space-between;
5512
+ gap: 16px;
5513
+ border: 1px solid var(--color-border);
5514
+ border-radius: var(--radius-md);
5515
+ background: var(--color-surface);
5516
+ padding: 12px;
5517
+ cursor: pointer;
5518
+ }
5519
+
5520
+ .settings-toggle-row:hover {
5521
+ border-color: var(--color-border-strong);
5522
+ }
5523
+
5524
+ .settings-toggle-row__text {
5525
+ display: grid;
5526
+ gap: 2px;
5527
+ min-width: 0;
5528
+ }
5529
+
5530
+ .settings-toggle-row__text span {
5531
+ color: var(--color-text);
5532
+ font-size: 13px;
5533
+ }
5534
+
5535
+ .settings-toggle-row__text small {
5536
+ color: var(--color-text-muted);
5537
+ font-size: 12px;
5538
+ line-height: 1.45;
5539
+ }
5540
+
5541
+ .settings-toggle-row input {
5542
+ flex: 0 0 16px;
5543
+ width: 16px;
5544
+ height: 16px;
5545
+ position: relative;
5546
+ appearance: none;
5547
+ border: 1px solid var(--color-border-strong);
5548
+ border-radius: 4px;
5549
+ background: var(--color-surface);
5550
+ padding: 0;
5551
+ cursor: pointer;
5552
+ }
5553
+
5554
+ .settings-toggle-row input:checked {
5555
+ border-color: var(--color-text);
5556
+ background: var(--color-text);
5557
+ }
5558
+
5559
+ .settings-toggle-row input:checked::after {
5560
+ position: absolute;
5561
+ top: 1px;
5562
+ left: 4px;
5563
+ width: 5px;
5564
+ height: 9px;
5565
+ border: solid var(--color-canvas);
5566
+ border-width: 0 2px 2px 0;
5567
+ content: "";
5568
+ transform: rotate(45deg);
5569
+ }
5570
+
5571
+ /* MCP transport chip — small colored label beside a server name. */
5572
+ .mcp-transport-chip {
5573
+ flex: 0 0 auto;
5574
+ border: 1px solid var(--color-border);
5575
+ border-radius: 999px;
5576
+ background: var(--color-surface-soft);
5577
+ color: var(--color-text-muted);
5578
+ padding: 1px 8px;
5579
+ font-size: 11px;
5580
+ font-weight: 500;
5581
+ letter-spacing: 0.2px;
5582
+ text-transform: uppercase;
5583
+ }
5584
+
5585
+ .mcp-transport-chip--stdio {
5586
+ border-color: var(--color-accent-soft);
5587
+ background: var(--color-accent-soft);
5588
+ color: var(--color-accent-strong);
5589
+ }
5590
+
5591
+ .mcp-transport-chip--http {
5592
+ border-color: var(--color-success-soft);
5593
+ background: var(--color-success-soft);
5594
+ color: var(--color-success);
5595
+ }
5596
+
5597
+ .mcp-transport-chip--sse {
5598
+ border-color: var(--color-warning-soft);
5599
+ background: var(--color-warning-soft);
5600
+ color: var(--color-warning);
5601
+ }
5602
+
5603
+ /* ── Knowledge Base panel (Settings › Knowledge Base) ───────────── */
5604
+
5605
+ .kb-panel__title {
5606
+ display: flex;
5607
+ align-items: center;
5608
+ gap: 8px;
5609
+ }
5610
+
5611
+ .kb-panel__title svg {
5612
+ color: var(--color-text-subtle);
5613
+ }
5614
+
5615
+ /* Environment status card. */
5616
+ .kb-env {
5617
+ display: grid;
5618
+ gap: 10px;
5619
+ border: 1px solid var(--color-border);
5620
+ border-radius: var(--radius-md);
5621
+ background: var(--color-surface-soft);
5622
+ padding: 12px;
5623
+ }
5624
+
5625
+ .kb-env--missing {
5626
+ border-color: var(--color-warning-soft);
5627
+ }
5628
+
5629
+ .kb-env__head {
5630
+ display: flex;
5631
+ }
5632
+
5633
+ .kb-env__facts {
5634
+ display: grid;
5635
+ gap: 6px;
5636
+ margin: 0;
5637
+ }
5638
+
5639
+ .kb-env__facts div {
5640
+ display: grid;
5641
+ grid-template-columns: 84px minmax(0, 1fr);
5642
+ gap: 10px;
5643
+ min-width: 0;
5644
+ }
5645
+
5646
+ .kb-env__facts dt {
5647
+ margin: 0;
5648
+ color: var(--color-text-muted);
5649
+ font-size: 12px;
5650
+ }
5651
+
5652
+ .kb-env__facts dd {
5653
+ margin: 0;
5654
+ overflow: hidden;
5655
+ color: var(--color-text);
5656
+ font-family: var(--font-mono);
5657
+ font-size: 12px;
5658
+ text-overflow: ellipsis;
5659
+ white-space: nowrap;
5660
+ }
5661
+
5662
+ .kb-env__action {
5663
+ display: grid;
5664
+ gap: 8px;
5665
+ }
5666
+
5667
+ .kb-env__note {
5668
+ margin: 0;
5669
+ color: var(--color-text-muted);
5670
+ font-size: 12px;
5671
+ line-height: 1.5;
5672
+ }
5673
+
5674
+ .kb-env__buttons {
5675
+ display: flex;
5676
+ align-items: center;
5677
+ flex-wrap: wrap;
5678
+ gap: 8px;
5679
+ }
5680
+
5681
+ .kb-env__fallback > summary {
5682
+ cursor: pointer;
5683
+ color: var(--color-text-muted);
5684
+ font-size: 12px;
5685
+ list-style: none;
5686
+ user-select: none;
5687
+ }
5688
+
5689
+ .kb-env__fallback > summary::-webkit-details-marker {
5690
+ display: none;
5691
+ }
5692
+
5693
+ .kb-env__fallback > summary::before {
5694
+ display: inline-block;
5695
+ margin-right: 6px;
5696
+ content: "▸";
5697
+ color: var(--color-text-subtle);
5698
+ transition: transform var(--ease-standard);
5699
+ }
5700
+
5701
+ .kb-env__fallback[open] > summary::before {
5702
+ transform: rotate(90deg);
5703
+ }
5704
+
5705
+ .kb-env__fallback > summary:hover {
5706
+ color: var(--color-text);
5707
+ }
5708
+
5709
+ /* Shared mono code block (CLI fallback). */
5710
+ .kb-code {
5711
+ margin: 8px 0 6px;
5712
+ overflow-x: auto;
5713
+ border: 1px solid var(--color-border);
5714
+ border-radius: var(--radius-sm);
5715
+ background: var(--color-code-bg);
5716
+ color: var(--color-text);
5717
+ padding: 9px 10px;
5718
+ font-family: var(--font-mono);
5719
+ font-size: 12px;
5720
+ }
5721
+
5722
+ /* Key inputs + stages. */
5723
+ .kb-fields {
5724
+ display: grid;
5725
+ gap: 14px;
5726
+ margin-top: 14px;
5727
+ }
5728
+
5729
+ .kb-stages {
5730
+ margin: 0;
5731
+ border: 0;
5732
+ padding: 0;
5733
+ }
5734
+
5735
+ .kb-stages > legend {
5736
+ margin-bottom: 8px;
5737
+ padding: 0;
5738
+ color: var(--color-text-muted);
5739
+ font-size: 12px;
5740
+ }
5741
+
5742
+ .kb-stages__row {
5743
+ display: flex;
5744
+ flex-wrap: wrap;
5745
+ gap: 8px;
5746
+ }
5747
+
5748
+ .kb-stages__item {
5749
+ margin: 0 !important;
5750
+ border: 1px solid var(--color-border);
5751
+ border-radius: var(--radius-sm);
5752
+ background: var(--color-surface);
5753
+ padding: 7px 10px;
5754
+ cursor: pointer;
5755
+ }
5756
+
5757
+ .kb-stages__item:hover {
5758
+ border-color: var(--color-border-strong);
5759
+ }
5760
+
5761
+ .kb-actions {
5762
+ display: flex;
5763
+ align-items: center;
5764
+ gap: 8px;
5765
+ margin-top: 14px;
5766
+ }
5767
+
5768
+ .kb-error {
5769
+ margin-top: 10px;
5770
+ }
5771
+
5772
+ /* Blocks: progress + log. */
5773
+ .kb-block {
5774
+ margin-top: 18px;
5775
+ }
5776
+
5777
+ .kb-block__title {
5778
+ margin: 0 0 10px;
5779
+ color: var(--color-text);
5780
+ font-size: 13px;
5781
+ font-weight: 600;
5782
+ }
5783
+
5784
+ /* Stage progress strip. */
5785
+ .kb-progress {
5786
+ display: grid;
5787
+ gap: 10px;
5788
+ }
5789
+
5790
+ .kb-progress__row {
5791
+ display: grid;
5792
+ grid-template-columns: 88px minmax(0, 1fr) 44px;
5793
+ align-items: center;
5794
+ gap: 10px;
5795
+ }
5796
+
5797
+ .kb-progress__label {
5798
+ color: var(--color-text);
5799
+ font-size: 12px;
5800
+ font-weight: 560;
5801
+ }
5802
+
5803
+ .kb-progress__track {
5804
+ height: 6px;
5805
+ overflow: hidden;
5806
+ border-radius: 999px;
5807
+ background: var(--color-surface-soft);
5808
+ }
5809
+
5810
+ .kb-progress__fill {
5811
+ display: block;
5812
+ height: 100%;
5813
+ border-radius: 999px;
5814
+ background: var(--color-border-strong);
5815
+ transition: width var(--ease-standard);
5816
+ }
5817
+
5818
+ .kb-progress__fill--running {
5819
+ background: var(--color-accent);
5820
+ }
5821
+
5822
+ .kb-progress__fill--done {
5823
+ background: var(--color-success);
5824
+ }
5825
+
5826
+ .kb-progress__fill--error {
5827
+ background: var(--color-danger);
5828
+ }
5829
+
5830
+ .kb-progress__pct {
5831
+ color: var(--color-text-muted);
5832
+ font-size: 12px;
5833
+ font-variant-numeric: tabular-nums;
5834
+ text-align: right;
5835
+ }
5836
+
5837
+ .kb-progress__msg {
5838
+ grid-column: 2 / -1;
5839
+ color: var(--color-text-subtle);
5840
+ font-size: 12px;
5841
+ }
5842
+
5843
+ /* Live log — mono terminal block using code-surface tokens. */
5844
+ .kb-log {
5845
+ max-height: 220px;
5846
+ overflow-y: auto;
5847
+ border: 1px solid var(--color-border);
5848
+ border-radius: var(--radius-sm);
5849
+ background: var(--color-code-bg);
5850
+ color: var(--color-text);
5851
+ padding: 9px 10px;
5852
+ font-family: var(--font-mono);
5853
+ font-size: 12px;
5854
+ line-height: 1.55;
5855
+ white-space: pre-wrap;
5856
+ word-break: break-word;
5857
+ }
5858
+
5859
+ .kb-log__empty {
5860
+ color: var(--color-text-subtle);
5861
+ }
5862
+
5863
+ .kb-log__line--error {
5864
+ color: var(--color-danger);
5865
+ }
5866
+
5867
+ .kb-log__line--warn {
5868
+ color: var(--color-warning);
5869
+ }
5870
+
5871
+ .kb-log__line--done {
5872
+ color: var(--color-success);
5873
+ }
5874
+
5875
+ .kb-log__line--progress {
5876
+ color: var(--color-accent);
5877
+ }
5878
+
5879
+ /* #236 KB hardening surfaces, re-tokenized (dark-mode safe). */
5880
+
5881
+ /* Setup progress rows (venv + model download) in the env card. */
5882
+ .kb-setup-rows {
5883
+ display: flex;
5884
+ flex-direction: column;
5885
+ gap: 10px;
5886
+ margin-top: 12px;
5887
+ }
5888
+
5889
+ .kb-setup-row__head {
5890
+ display: flex;
5891
+ justify-content: space-between;
5892
+ align-items: baseline;
5893
+ gap: 8px;
5894
+ margin-bottom: 4px;
5895
+ }
5896
+
5897
+ .kb-setup-row__label {
5898
+ color: var(--color-text);
5899
+ font-size: 12px;
5900
+ font-weight: 560;
5901
+ }
5902
+
5903
+ .kb-setup-row__pct {
5904
+ color: var(--color-text-muted);
5905
+ font-size: 12px;
5906
+ font-variant-numeric: tabular-nums;
5907
+ }
5908
+
5909
+ .kb-setup-row__track {
5910
+ height: 6px;
5911
+ overflow: hidden;
5912
+ border-radius: 999px;
5913
+ background: var(--color-surface-soft);
5914
+ }
5915
+
5916
+ .kb-setup-row__fill {
5917
+ display: block;
5918
+ height: 100%;
5919
+ border-radius: 999px;
5920
+ background: var(--color-accent);
5921
+ transition: width 250ms var(--ease-out);
5922
+ }
5923
+
5924
+ .kb-setup-row__fill--done {
5925
+ background: var(--color-success);
5926
+ }
5927
+
5928
+ .kb-setup-row__fill--error {
5929
+ background: var(--color-danger);
5930
+ }
5931
+
5932
+ .kb-setup-row__msg {
5933
+ margin-top: 3px;
5934
+ overflow: hidden;
5935
+ color: var(--color-text-subtle);
5936
+ font-size: 11px;
5937
+ text-overflow: ellipsis;
5938
+ white-space: nowrap;
5939
+ }
5940
+
5941
+ .kb-setup-row__msg--error {
5942
+ color: var(--color-danger);
5943
+ }
5944
+
5945
+ /* Persisted OCR key: masked-preview box + Change button. */
5946
+ .kb-key-saved-row {
5947
+ display: flex;
5948
+ align-items: center;
5949
+ gap: 8px;
5950
+ }
5951
+
5952
+ .kb-key-saved {
5953
+ flex: 1;
5954
+ min-width: 0;
5955
+ overflow: hidden;
5956
+ border: 1px solid var(--color-success-soft);
5957
+ border-radius: var(--radius-sm);
5958
+ background: var(--color-success-soft);
5959
+ color: var(--color-success);
5960
+ padding: 6px 10px;
5961
+ font-family: var(--font-mono);
5962
+ font-size: 13px;
5963
+ text-overflow: ellipsis;
5964
+ white-space: nowrap;
5965
+ }
5966
+
5967
+ /* Inline field hint (e.g. HF mirror explanation). */
5968
+ .kb-field-hint {
5969
+ margin: -4px 0 8px 24px;
5970
+ color: var(--color-text-muted);
5971
+ font-size: 12px;
5972
+ line-height: 1.45;
5973
+ }
5974
+
5223
5975
  @media (max-width: 860px) {
5224
5976
  .search-dialog {
5225
5977
  width: calc(100vw - 28px);