prreviewbuddy 0.85.0 → 0.86.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/static/shell.css CHANGED
@@ -44,6 +44,8 @@
44
44
  --brand: #9333ea;
45
45
  --brand-hover: light-dark(#7427e8, #7c3aed);
46
46
  --brand-muted: light-dark(#f3e8ff, rgba(147, 51, 234, 0.15));
47
+ /* A brand outline that marks a surface as the selection's without shouting: the bulk bar. */
48
+ --brand-border: light-dark(rgba(147, 51, 234, 0.35), rgba(167, 112, 245, 0.45));
47
49
  /* Brand-coloured words on a light or tinted ground, where #9333ea itself is too pale to read. */
48
50
  --brand-ink: light-dark(#6b21a8, #c4a5f5);
49
51
  /* Text and marks on a filled --brand control. White in both, because the fill is the same. */
@@ -1831,6 +1833,36 @@ a.prb-rail-item { text-decoration: none; }
1831
1833
  .pr-helper-explain-simply-button:disabled { opacity: 0.55; cursor: default; }
1832
1834
  .pr-helper-explain-simply-button:disabled:hover { background: transparent; }
1833
1835
 
1836
+ /* What a finished turn offers under its answer: Reconcile with findings, or a reconcile's Accept all.
1837
+ Quiet, the size of the answer's own meta, so a long conversation does not read as a column of
1838
+ buttons; the one sentence beside it says what the action is for. */
1839
+ .prb-turn-actions {
1840
+ display: flex;
1841
+ flex-wrap: wrap;
1842
+ align-items: baseline;
1843
+ gap: 4px 10px;
1844
+ margin: -2px 0 10px;
1845
+ }
1846
+ .prb-turn-reconcile,
1847
+ .prb-turn-accept-all {
1848
+ padding: 3px 10px;
1849
+ border: 1px solid var(--border);
1850
+ border-radius: 8px;
1851
+ background: transparent;
1852
+ color: var(--text-secondary);
1853
+ font: inherit;
1854
+ font-size: var(--t-micro);
1855
+ cursor: pointer;
1856
+ }
1857
+ .prb-turn-accept-all { border-color: var(--brand-hover); color: var(--text-primary); font-weight: 600; }
1858
+ .prb-turn-reconcile:hover:not(:disabled),
1859
+ .prb-turn-accept-all:hover:not(:disabled) { border-color: var(--border-strong); color: var(--text-primary); }
1860
+ .prb-turn-reconcile:focus-visible,
1861
+ .prb-turn-accept-all:focus-visible { outline: 2px solid var(--brand-hover); outline-offset: 2px; }
1862
+ .prb-turn-reconcile:disabled,
1863
+ .prb-turn-accept-all:disabled { opacity: 0.55; cursor: default; }
1864
+ .prb-turn-help { margin: 0; color: var(--text-secondary); font-size: var(--t-micro); }
1865
+
1834
1866
  /* ── The reviewer's own prompts ──
1835
1867
  A strip between the assistant's header and its conversation: reachable without scrolling the
1836
1868
  log, and out of the composer, which is already carrying the scope, the field and the button.
@@ -1903,6 +1935,8 @@ a.prb-rail-item { text-decoration: none; }
1903
1935
 
1904
1936
  /* The prompt editor is wider than the shutdown dialog: it holds a paragraph, not a sentence. */
1905
1937
  .prb-prompt-dialog { max-width: 560px; width: calc(100vw - 48px); }
1938
+ .prb-prompt-error { margin: 0; font-size: var(--t-meta); color: var(--danger-ink); }
1939
+ .prb-prompt-error[hidden] { display: none; }
1906
1940
  .prb-field { display: block; margin-bottom: 12px; }
1907
1941
  .prb-field span {
1908
1942
  display: block;
@@ -3421,69 +3455,125 @@ a.prb-guide-pick { text-decoration: none; }
3421
3455
 
3422
3456
  /* ── The bulk bar ──
3423
3457
  Sticky at the foot of the column rather than under the list, because a selection made on page one
3424
- is acted on from wherever the reader has scrolled to. On the card surface with a brand border and
3425
- a shadow, so it reads as sitting above the list rather than as the last row of it. */
3458
+ is acted on from wherever the reader has scrolled to. On the card surface with a faint brand
3459
+ border and a float shadow, so it reads as sitting above the list rather than as the last row of
3460
+ it. Two rows: what is selected, then what to do with it, the second only once something is. */
3426
3461
  .prb-bulk {
3427
3462
  position: sticky;
3428
3463
  bottom: 16px;
3429
3464
  z-index: 3;
3430
3465
  display: flex;
3431
- flex-wrap: wrap;
3432
- align-items: center;
3433
- gap: 12px;
3434
- margin-top: 16px;
3435
- padding: 12px 16px;
3436
- border: 1px solid var(--brand);
3466
+ flex-direction: column;
3467
+ gap: 10px;
3468
+ max-width: 880px;
3469
+ margin: 16px auto 0;
3470
+ padding: 10px 10px 10px 16px;
3471
+ border: 1px solid var(--brand-border);
3437
3472
  border-radius: 12px;
3438
3473
  background: var(--surface-raised);
3439
- box-shadow: 0 6px 20px var(--shadow-soft);
3474
+ box-shadow: 0 12px 32px var(--shadow-float), 0 2px 6px var(--shadow-soft);
3440
3475
  }
3441
3476
  .prb-bulk[hidden] { display: none; }
3442
- .prb-bulk-count {
3443
- margin: 0;
3444
- font-size: var(--t-meta);
3445
- color: var(--text-secondary);
3446
- }
3477
+ .prb-bulk-head { display: flex; align-items: center; gap: 8px; min-height: 32px; }
3478
+ .prb-bulk-status { flex: 1; min-width: 0; margin: 0; font-size: var(--t-meta); color: var(--text-muted); }
3479
+ .prb-bulk-count { font-size: var(--t-body); font-weight: 600; color: var(--text-primary); }
3480
+ .prb-bulk-detail { margin-left: 4px; }
3481
+ .prb-bulk-detail:empty { display: none; }
3447
3482
  /* The `display: flex` below outranks the sheet's `[hidden]` rule, so hiding this row for the
3448
3483
  confirmation needs saying here or the buttons stay under the question they replaced. */
3449
- .prb-bulk-actions[hidden] { display: none; }
3484
+ .prb-bulk-actions[hidden],
3485
+ .prb-bulk[data-empty] .prb-bulk-actions { display: none; }
3486
+ .prb-bulk-actions,
3487
+ .prb-bulk-confirm {
3488
+ padding: 10px 0 0;
3489
+ border-top: 1px solid var(--border);
3490
+ }
3450
3491
  .prb-bulk-actions {
3451
3492
  display: flex;
3452
3493
  flex-wrap: wrap;
3453
3494
  align-items: center;
3454
- gap: 6px;
3455
- margin-left: auto;
3495
+ gap: 8px;
3456
3496
  }
3457
3497
  .prb-bulk-button {
3458
- padding: 6px 12px;
3459
- border: 1px solid var(--border);
3498
+ display: inline-flex;
3499
+ align-items: center;
3500
+ gap: 6px;
3501
+ box-sizing: border-box;
3502
+ height: 32px;
3503
+ padding: 0 12px;
3504
+ border: 1px solid var(--border-strong);
3460
3505
  border-radius: 8px;
3461
3506
  background: transparent;
3462
3507
  color: var(--text-secondary);
3463
3508
  font: inherit;
3464
3509
  font-size: var(--t-meta);
3510
+ white-space: nowrap;
3465
3511
  cursor: pointer;
3466
3512
  }
3467
- .prb-bulk-button:hover:not(:disabled) { color: var(--text-primary); border-color: var(--border-strong); }
3513
+ .prb-bulk-button:hover:not(:disabled) { color: var(--text-primary); background: var(--wash); }
3468
3514
  .prb-bulk-button:disabled { opacity: 0.5; cursor: default; }
3469
- /* Separated from the marks beside it, since this bar is mostly a workflow control and occasionally
3470
- a destructive one. */
3471
- .prb-bulk-button-danger { margin-left: 6px; color: var(--danger); }
3472
- .prb-bulk-button-danger:hover:not(:disabled) { border-color: var(--danger); color: var(--danger); }
3473
- .prb-bulk-cancel { margin-left: 6px; }
3515
+ .prb-bulk-button[hidden] { display: none; }
3516
+ .prb-bulk-icon { display: inline-flex; flex: none; }
3517
+ .prb-bulk-icon svg { display: block; width: 16px; height: 16px; }
3518
+ /* The one filled control: what most selections are made for. */
3519
+ .prb-bulk-primary { border-color: var(--brand); background: var(--brand); color: var(--on-brand); font-weight: 600; }
3520
+ .prb-bulk-primary:hover:not(:disabled) { border-color: var(--brand-hover); background: var(--brand-hover); color: var(--on-brand); }
3521
+ /* The shared menu, placed as a control in the row rather than in a card's corner. Two classes,
3522
+ because the base `.prb-menu` rule is further down the sheet and would win a tie. */
3523
+ .prb-bulk .prb-bulk-more { position: relative; top: auto; right: auto; z-index: auto; }
3524
+ .prb-bulk-more .prb-menu-panel { top: 38px; right: auto; left: 0; width: 220px; }
3525
+ .prb-bulk-more .prb-menu-panel[data-menu-placement='above'] { top: auto; bottom: 38px; }
3526
+ /* Its trigger's end edge, when hanging from its start would run off the right (menu.ts). */
3527
+ .prb-bulk-more .prb-menu-panel[data-menu-align='end'] { right: 0; left: auto; }
3528
+ /* Last and apart, quiet until it is reached for: a word in the danger ink, no outline. */
3529
+ .prb-bulk-button-danger { border-color: transparent; color: var(--danger-ink); }
3530
+ .prb-bulk-button-danger:hover:not(:disabled) { background: var(--danger-subtle); color: var(--danger-ink-strong); }
3531
+ .prb-bulk-actions > [data-bulk-delete] { margin-left: auto; }
3532
+ /* The way out, with its key beside it. The `<kbd>` is the command layer's (`showHint`), appended
3533
+ after the icon and drawn before it. */
3534
+ .prb-bulk-exit {
3535
+ display: inline-flex;
3536
+ align-items: center;
3537
+ gap: 6px;
3538
+ height: 32px;
3539
+ padding: 0 6px;
3540
+ border: 0;
3541
+ border-radius: 8px;
3542
+ background: transparent;
3543
+ color: var(--text-muted);
3544
+ cursor: pointer;
3545
+ }
3546
+ .prb-bulk-exit:hover:not(:disabled) { background: var(--surface-2); color: var(--text-primary); }
3547
+ .prb-bulk-exit:disabled { opacity: 0.5; cursor: default; }
3548
+ .prb-bulk-exit .prb-bulk-icon svg { width: 18px; height: 18px; }
3549
+ .prb-bulk-exit .prb-key-hint {
3550
+ order: -1;
3551
+ margin: 0;
3552
+ padding: 1px 6px;
3553
+ border: 1px solid var(--border);
3554
+ border-radius: 5px;
3555
+ background: var(--surface-2);
3556
+ font: 500 var(--t-micro) / 1.5 ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace;
3557
+ opacity: 1;
3558
+ }
3474
3559
  /* A second state of the same bar, the way a card menu asks. */
3475
- .prb-bulk-confirm { flex: 1 0 100%; }
3476
3560
  .prb-bulk-confirm[hidden] { display: none; }
3477
3561
  .prb-bulk-question { margin: 0 0 4px; font-size: var(--t-body); color: var(--text-primary); }
3478
3562
  .prb-bulk-note { margin: 0 0 10px; font-size: var(--t-meta); color: var(--text-tertiary, var(--text-secondary)); }
3479
- .prb-bulk-confirm .prb-bulk-actions { margin-left: 0; }
3563
+ .prb-bulk-confirm-actions { display: flex; flex-wrap: wrap; gap: 8px; }
3564
+ .prb-bulk-confirm .prb-bulk-button-danger { border-color: var(--danger-border); background: var(--danger-subtle); }
3480
3565
  .prb-bulk-error {
3481
- flex: 1 0 100%;
3482
3566
  margin: 0;
3483
3567
  font-size: var(--t-meta);
3484
3568
  color: var(--danger);
3485
3569
  }
3486
3570
  .prb-bulk-error[hidden] { display: none; }
3571
+ /* A narrow column: the actions wrap, and Delete starts its own line's left edge rather than
3572
+ stranding itself at the right of a short one. */
3573
+ @media (max-width: 640px) {
3574
+ .prb-bulk { bottom: 8px; padding-left: 12px; }
3575
+ .prb-bulk-actions > [data-bulk-delete] { margin-left: 0; }
3576
+ }
3487
3577
  /* ── A branch's history, inside its card ──
3488
3578
  Below the card's link and separated by a rule, because it is a different kind of thing: the link
3489
3579
  above is this branch as it stands, and this is how it got there. Folded away by default and
@@ -6552,6 +6642,18 @@ select.prb-addreview-control { padding-right: 32px; }
6552
6642
  .prb-addreview code,
6553
6643
  .prb-addreview pre { font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace; }
6554
6644
 
6645
+ /* A finding's readable reference (I3, Q2): the name a feedback draft and the author's reply use for
6646
+ it. Quiet beside the title, monospaced so I1 and I12 read as labels rather than words, and level
6647
+ with the title's first line. */
6648
+ .prb-doc .pr-helper-finding-ref {
6649
+ flex: none;
6650
+ margin-top: 1px;
6651
+ font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace;
6652
+ font-size: var(--t-micro);
6653
+ line-height: 18px;
6654
+ color: var(--pane-ink-muted);
6655
+ }
6656
+
6555
6657
  /* ── Feedback selection ──
6556
6658
  Choosing the Issues and Questions to raise with the author. The checkboxes ship on every card
6557
6659
  and show only while the body carries the mode, so entering it is a stylesheet change, as the
@@ -5474,6 +5474,21 @@
5474
5474
  .pr-helper-reassessment-evidence .pr-helper-issue-loc { margin-top: 2px; }
5475
5475
  /* Muted, not alarming: an unverified suggestion is still a reasoned one, and can still be accepted. */
5476
5476
  .pr-helper-reassessment-unverified { margin: 2px 0 0; font-size: 11px; font-style: italic; color: #9a6700; }
5477
+ /* A status accepted from later evidence, or suggested: the answer as the evidence gives it, then the
5478
+ words it rests on, quoted as pasted, ruled like a comment's evidence because it is someone's claim. */
5479
+ .pr-helper-reassessment-answer { margin: 2px 0 0; font-size: 12px; line-height: 1.5; }
5480
+ .pr-helper-reassessment-quote {
5481
+ margin: 4px 0 0;
5482
+ padding: 2px 0 2px 8px;
5483
+ border-left: 2px solid rgba(15, 23, 42, 0.18);
5484
+ font-size: 11px;
5485
+ line-height: 1.5;
5486
+ color: var(--color-fg-muted, #57606a);
5487
+ white-space: pre-wrap;
5488
+ overflow-wrap: anywhere;
5489
+ }
5490
+ .pr-helper-reassessment-basis { margin: 4px 0 0; font-size: 11px; color: var(--color-fg-muted, #57606a); }
5491
+ .pr-helper-reassessment-contradicts { margin: 2px 0 0; font-size: 11px; font-style: italic; color: #9a6700; }
5477
5492
  /* A finding's status history reuses the grade history's disclosure and steps. The quote is the
5478
5493
  evidence as it read when the decision was made, which may no longer be what the thread says. */
5479
5494
  .pr-helper-status-step-headline { font-weight: 600; }