prreviewbuddy 0.83.3 → 0.86.1
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/CHANGELOG.md +59 -0
- package/dist/{delete_review-BED4mPxB.js → delete_review-rwn_-SnJ.js} +303 -40
- package/dist/main.js +1 -1
- package/dist/server.js +1056 -82
- package/package.json +1 -1
- package/static/help.js +1 -1
- package/static/shell.css +227 -37
- package/static/sidebar.css +36 -23
- package/static/workspace.js +90 -83
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prreviewbuddy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.86.1",
|
|
4
4
|
"description": "Understand code changes before you approve them. Local branch and pull request reviews with Claude Code or Codex.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"homepage": "https://prreviewbuddy.com",
|
package/static/help.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{at as e,d as t,f as n,ft as r,p as i,rt as a,t as o}from"./chunk-DwdwtB9r.js";a(),t(`global`,{}),document.querySelector(`[data-shortcut-table]`)?.replaceChildren(n(document,i(e(navigator)))),o(`/restart`),r(window,()=>window.location.reload());
|
|
1
|
+
import{at as e,d as t,f as n,ft as r,p as i,rt as a,t as o}from"./chunk-DwdwtB9r.js";function s(e,t){if(e.length===0)return-1;if(t)return e.length-1;let n=0;return e.forEach((e,t)=>{e<=120&&(n=t)}),n}var c=new Set([`ArrowDown`,`ArrowUp`,`PageDown`,`PageUp`,`Home`,`End`,` `]);function l(e,t){let n=[...e.querySelectorAll(`.prb-help-contents a[href^="#"]`)],r=n.map(t=>e.getElementById(decodeURIComponent(t.hash.slice(1)))),i=e.defaultView;if(n.length===0||!i)return;let a=r.findIndex(e=>e!==null&&`#${e.id}`===i.location.hash),o=e=>{n.forEach((t,n)=>{n===e?t.setAttribute(`aria-current`,`location`):t.removeAttribute(`aria-current`)})},l=()=>{if(a>=0)return o(a);let n=t.scrollHeight>t.clientHeight?t:e.scrollingElement??e.documentElement,i=Math.max(0,n===t?t.getBoundingClientRect().top:0),c=r.map(e=>e?e.getBoundingClientRect().top-i:1/0),l=n.scrollTop>0&&n.scrollTop+n.clientHeight>=n.scrollHeight-2;o(s(c,l))},u=e=>{let t=r.findIndex(t=>t!==null&&`#${t.id}`===e);t<0||(a=t,o(t))},d=()=>{a<0||(a=-1,l())};e.addEventListener(`click`,e=>{let t=e.target?.closest?.(`a[href^="#"]`);t&&u(t.hash)}),i.addEventListener(`hashchange`,()=>u(i.location.hash)),t.addEventListener(`wheel`,d,{passive:!0}),t.addEventListener(`touchmove`,d,{passive:!0}),t.addEventListener(`pointerdown`,d),e.addEventListener(`keydown`,e=>{c.has(e.key)&&d()}),e.addEventListener(`scroll`,l,{capture:!0,passive:!0}),i.addEventListener(`resize`,l),l()}a(),t(`global`,{}),document.querySelector(`[data-shortcut-table]`)?.replaceChildren(n(document,i(e(navigator)))),o(`/restart`);var u=document.querySelector(`main.prb-help`);u&&l(document,u),r(window,()=>window.location.reload());
|
package/static/shell.css
CHANGED
|
@@ -173,6 +173,8 @@
|
|
|
173
173
|
:root[data-theme='dark'] { color-scheme: dark; }
|
|
174
174
|
|
|
175
175
|
* { box-sizing: border-box; }
|
|
176
|
+
/* No link in the workspace is underlined, at rest or on hover: colour says it is a link. */
|
|
177
|
+
a { text-decoration: none; }
|
|
176
178
|
|
|
177
179
|
html, body {
|
|
178
180
|
height: 100%;
|
|
@@ -758,7 +760,7 @@ body[data-server-stopped] .prb-shell { opacity: 0.55; pointer-events: none; }
|
|
|
758
760
|
.prb-author::before { content: 'by'; color: var(--text-muted); }
|
|
759
761
|
.prb-author-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
760
762
|
.prb-author-handle { color: var(--text-muted); }
|
|
761
|
-
a.prb-author:hover .prb-author-name { color: var(--text-primary);
|
|
763
|
+
a.prb-author:hover .prb-author-name { color: var(--text-primary); }
|
|
762
764
|
|
|
763
765
|
.prb-pr-empty, .prb-pr-provenance, .prb-pr-truncated {
|
|
764
766
|
font-size: var(--t-body);
|
|
@@ -775,7 +777,7 @@ a.prb-author:hover .prb-author-name { color: var(--text-primary); text-decoratio
|
|
|
775
777
|
margin-bottom: 26px;
|
|
776
778
|
}
|
|
777
779
|
.prb-pr-provenance a { color: var(--brand); font-weight: 400; text-decoration: none; }
|
|
778
|
-
.prb-pr-provenance a:hover {
|
|
780
|
+
.prb-pr-provenance a:hover { opacity: 0.8; }
|
|
779
781
|
.prb-pr-title { color: var(--pane-ink); }
|
|
780
782
|
.prb-pr-counts, .prb-pr-provenance time { color: var(--pane-ink-faint); font-size: var(--t-meta); }
|
|
781
783
|
|
|
@@ -846,7 +848,7 @@ a.prb-author:hover .prb-author-name { color: var(--text-primary); text-decoratio
|
|
|
846
848
|
}
|
|
847
849
|
.prb-pr-comment-meta { display: flex; gap: 8px; align-items: baseline; font-size: var(--t-meta); }
|
|
848
850
|
.prb-pr-comment-meta a { color: var(--brand); font-weight: 400; text-decoration: none; }
|
|
849
|
-
.prb-pr-comment-meta a:hover {
|
|
851
|
+
.prb-pr-comment-meta a:hover { opacity: 0.8; }
|
|
850
852
|
.prb-pr-comment-meta time { color: var(--pane-ink-faint); }
|
|
851
853
|
/* Someone else's words, rendered as the Markdown they wrote rather than as one flat block. Light
|
|
852
854
|
pane, so literals throughout: see pane_palette.test.ts. */
|
|
@@ -1829,6 +1831,36 @@ a.prb-rail-item { text-decoration: none; }
|
|
|
1829
1831
|
.pr-helper-explain-simply-button:disabled { opacity: 0.55; cursor: default; }
|
|
1830
1832
|
.pr-helper-explain-simply-button:disabled:hover { background: transparent; }
|
|
1831
1833
|
|
|
1834
|
+
/* What a finished turn offers under its answer: Reconcile with findings, or a reconcile's Accept all.
|
|
1835
|
+
Quiet, the size of the answer's own meta, so a long conversation does not read as a column of
|
|
1836
|
+
buttons; the one sentence beside it says what the action is for. */
|
|
1837
|
+
.prb-turn-actions {
|
|
1838
|
+
display: flex;
|
|
1839
|
+
flex-wrap: wrap;
|
|
1840
|
+
align-items: baseline;
|
|
1841
|
+
gap: 4px 10px;
|
|
1842
|
+
margin: -2px 0 10px;
|
|
1843
|
+
}
|
|
1844
|
+
.prb-turn-reconcile,
|
|
1845
|
+
.prb-turn-accept-all {
|
|
1846
|
+
padding: 3px 10px;
|
|
1847
|
+
border: 1px solid var(--border);
|
|
1848
|
+
border-radius: 8px;
|
|
1849
|
+
background: transparent;
|
|
1850
|
+
color: var(--text-secondary);
|
|
1851
|
+
font: inherit;
|
|
1852
|
+
font-size: var(--t-micro);
|
|
1853
|
+
cursor: pointer;
|
|
1854
|
+
}
|
|
1855
|
+
.prb-turn-accept-all { border-color: var(--brand-hover); color: var(--text-primary); font-weight: 600; }
|
|
1856
|
+
.prb-turn-reconcile:hover:not(:disabled),
|
|
1857
|
+
.prb-turn-accept-all:hover:not(:disabled) { border-color: var(--border-strong); color: var(--text-primary); }
|
|
1858
|
+
.prb-turn-reconcile:focus-visible,
|
|
1859
|
+
.prb-turn-accept-all:focus-visible { outline: 2px solid var(--brand-hover); outline-offset: 2px; }
|
|
1860
|
+
.prb-turn-reconcile:disabled,
|
|
1861
|
+
.prb-turn-accept-all:disabled { opacity: 0.55; cursor: default; }
|
|
1862
|
+
.prb-turn-help { margin: 0; color: var(--text-secondary); font-size: var(--t-micro); }
|
|
1863
|
+
|
|
1832
1864
|
/* ── The reviewer's own prompts ──
|
|
1833
1865
|
A strip between the assistant's header and its conversation: reachable without scrolling the
|
|
1834
1866
|
log, and out of the composer, which is already carrying the scope, the field and the button.
|
|
@@ -2244,12 +2276,10 @@ a.prb-rail-item { text-decoration: none; }
|
|
|
2244
2276
|
color: inherit;
|
|
2245
2277
|
font: inherit;
|
|
2246
2278
|
font-weight: 400;
|
|
2247
|
-
|
|
2248
|
-
text-decoration-color: var(--brand);
|
|
2249
|
-
text-underline-offset: 3px;
|
|
2279
|
+
color: var(--pane-accent);
|
|
2250
2280
|
cursor: pointer;
|
|
2251
2281
|
}
|
|
2252
|
-
.prb-doc-note-link:hover { color: var(--pane-ink);
|
|
2282
|
+
.prb-doc-note-link:hover { color: var(--pane-ink); }
|
|
2253
2283
|
|
|
2254
2284
|
.prb-doc-note {
|
|
2255
2285
|
margin: 0 0 14px;
|
|
@@ -2396,25 +2426,21 @@ a.prb-rail-item { text-decoration: none; }
|
|
|
2396
2426
|
/* Everything that is not the primary action. Text, not a box: as bordered buttons these competed
|
|
2397
2427
|
with Update review and the panel read as four equal choices.
|
|
2398
2428
|
|
|
2399
|
-
Resting
|
|
2400
|
-
|
|
2401
|
-
|
|
2402
|
-
not restraint. Hover thickens the rule instead, so pointing at one still answers. */
|
|
2429
|
+
Resting in the link colour, not muted grey. Grey was quiet to the point of being scenery: half of
|
|
2430
|
+
these are the only way to do the thing the sentence beside them is describing, and a control
|
|
2431
|
+
nobody can see is not restraint. Hover takes them to the primary ink, so pointing at one answers. */
|
|
2403
2432
|
.prb-fresh-quiet {
|
|
2404
2433
|
padding: 2px 0;
|
|
2405
2434
|
border: 0;
|
|
2406
2435
|
background: none;
|
|
2407
|
-
color: var(--
|
|
2436
|
+
color: var(--link);
|
|
2408
2437
|
font: inherit;
|
|
2409
2438
|
font-size: var(--t-micro);
|
|
2410
|
-
text-decoration: underline;
|
|
2411
|
-
text-decoration-color: var(--brand);
|
|
2412
|
-
text-underline-offset: 3px;
|
|
2413
2439
|
/* It sits inside a sentence now, so it sits on that sentence's baseline. */
|
|
2414
2440
|
vertical-align: baseline;
|
|
2415
2441
|
cursor: pointer;
|
|
2416
2442
|
}
|
|
2417
|
-
.prb-fresh-quiet:hover:not(:disabled) { text-
|
|
2443
|
+
.prb-fresh-quiet:hover:not(:disabled) { color: var(--text-primary); }
|
|
2418
2444
|
.prb-fresh-quiet:disabled { opacity: 0.55; cursor: default; }
|
|
2419
2445
|
|
|
2420
2446
|
/* Dismissal, at the end of the row it dismisses. An icon rather than the word `Close`, because it
|
|
@@ -2601,17 +2627,14 @@ a.prb-rail-item { text-decoration: none; }
|
|
|
2601
2627
|
.prb-update-alt > summary,
|
|
2602
2628
|
.prb-fresh-more > summary {
|
|
2603
2629
|
display: inline-block;
|
|
2604
|
-
color: var(--
|
|
2605
|
-
text-decoration: underline;
|
|
2606
|
-
text-decoration-color: var(--brand);
|
|
2607
|
-
text-underline-offset: 3px;
|
|
2630
|
+
color: var(--link);
|
|
2608
2631
|
cursor: pointer;
|
|
2609
2632
|
list-style: none;
|
|
2610
2633
|
}
|
|
2611
2634
|
.prb-update-alt > summary::-webkit-details-marker,
|
|
2612
2635
|
.prb-fresh-more > summary::-webkit-details-marker { display: none; }
|
|
2613
2636
|
.prb-update-alt > summary:hover,
|
|
2614
|
-
.prb-fresh-more > summary:hover { text-
|
|
2637
|
+
.prb-fresh-more > summary:hover { color: var(--text-primary); }
|
|
2615
2638
|
/* Only this one announces itself as expandable. `Start a new review` reads as an action beside
|
|
2616
2639
|
`Check review status` and a caret would advertise the disclosure rather than the choice; `More
|
|
2617
2640
|
details` has nothing to offer except opening, so it says so. */
|
|
@@ -3092,7 +3115,7 @@ a.prb-guide-pick { text-decoration: none; }
|
|
|
3092
3115
|
opacity: 0.8;
|
|
3093
3116
|
cursor: pointer;
|
|
3094
3117
|
}
|
|
3095
|
-
.prb-code-deletion-toggle:hover { opacity: 1;
|
|
3118
|
+
.prb-code-deletion-toggle:hover { opacity: 1; }
|
|
3096
3119
|
.prb-code-deleted { background: rgba(248, 81, 73, 0.1); }
|
|
3097
3120
|
.prb-code-deleted .prb-code-num { box-shadow: inset 2px 0 0 #cf222e; color: #a40e26; }
|
|
3098
3121
|
.prb-code-deleted .prb-code-line { color: #6e7781; }
|
|
@@ -3105,7 +3128,6 @@ a.prb-guide-pick { text-decoration: none; }
|
|
|
3105
3128
|
background: none;
|
|
3106
3129
|
font: inherit;
|
|
3107
3130
|
color: #57606a;
|
|
3108
|
-
text-decoration: underline;
|
|
3109
3131
|
cursor: pointer;
|
|
3110
3132
|
}
|
|
3111
3133
|
.prb-code-long-toggle:hover { color: #1f2328; }
|
|
@@ -4380,7 +4402,7 @@ a.prb-guide-pick { text-decoration: none; }
|
|
|
4380
4402
|
.prb-arch-trail { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; min-height: 26px; font-size: var(--t-meta); color: #57606a; }
|
|
4381
4403
|
.prb-arch-crumb { padding: 3px 0; border: 0; background: none; font: inherit; color: inherit; }
|
|
4382
4404
|
button.prb-arch-crumb { color: #7e22ce; cursor: pointer; }
|
|
4383
|
-
button.prb-arch-crumb:hover {
|
|
4405
|
+
button.prb-arch-crumb:hover { opacity: 0.8; }
|
|
4384
4406
|
button.prb-arch-crumb:focus-visible { outline: 2px solid #9333ea; outline-offset: 1px; }
|
|
4385
4407
|
.prb-arch-crumb[aria-current] { font-weight: 600; color: #1f2328; }
|
|
4386
4408
|
.prb-arch-crumb-sep { color: #8c959f; }
|
|
@@ -4419,7 +4441,7 @@ button.prb-arch-crumb:focus-visible { outline: 2px solid #9333ea; outline-offset
|
|
|
4419
4441
|
cursor: pointer;
|
|
4420
4442
|
overflow-wrap: anywhere;
|
|
4421
4443
|
}
|
|
4422
|
-
.prb-arch-location:hover {
|
|
4444
|
+
.prb-arch-location:hover { opacity: 0.8; }
|
|
4423
4445
|
.prb-arch-location:focus-visible { outline: 2px solid #9333ea; outline-offset: 1px; }
|
|
4424
4446
|
span.prb-arch-location { color: #57606a; cursor: default; }
|
|
4425
4447
|
span.prb-arch-location:hover { text-decoration: none; }
|
|
@@ -4658,7 +4680,7 @@ span.prb-arch-location:hover { text-decoration: none; }
|
|
|
4658
4680
|
text-align: left;
|
|
4659
4681
|
cursor: pointer;
|
|
4660
4682
|
}
|
|
4661
|
-
.prb-map-goto:hover {
|
|
4683
|
+
.prb-map-goto:hover { opacity: 0.8; }
|
|
4662
4684
|
|
|
4663
4685
|
.prb-map-edges {
|
|
4664
4686
|
position: absolute;
|
|
@@ -5418,7 +5440,7 @@ span.prb-arch-location:hover { text-decoration: none; }
|
|
|
5418
5440
|
cursor: pointer;
|
|
5419
5441
|
}
|
|
5420
5442
|
.prb-kiss-location:hover { background: rgba(147, 51, 234, 0.14); }
|
|
5421
|
-
.prb-kiss-location:hover .pr-helper-path-name {
|
|
5443
|
+
.prb-kiss-location:hover .pr-helper-path-name { opacity: 0.8; }
|
|
5422
5444
|
/* The filename is a block, so the two markers that qualify it need a line of their own to share
|
|
5423
5445
|
with it rather than one each above and below it. Baseline-aligned: they are small caps beside
|
|
5424
5446
|
ordinary text and should sit on its line, not be centred against its box. */
|
|
@@ -5638,7 +5660,6 @@ select.prb-addreview-control {
|
|
|
5638
5660
|
/* Clear of the sticky bars when arrived at by its anchor. */
|
|
5639
5661
|
scroll-margin-top: 96px;
|
|
5640
5662
|
}
|
|
5641
|
-
.prb-help-topic:first-of-type { padding-top: 4px; }
|
|
5642
5663
|
.prb-help-topic:last-of-type { border-bottom: 0; }
|
|
5643
5664
|
.prb-help-topic h2 { margin: 0 0 12px; font-size: var(--t-section); font-weight: 600; color: var(--text-primary); }
|
|
5644
5665
|
.prb-help-topic h3 { margin: 20px 0 8px; font-size: var(--t-body); font-weight: 600; color: var(--text-primary); }
|
|
@@ -5646,13 +5667,89 @@ select.prb-addreview-control {
|
|
|
5646
5667
|
.prb-help-topic ul { margin: 0 0 10px; padding-left: 20px; }
|
|
5647
5668
|
.prb-help-topic li { margin-bottom: 4px; }
|
|
5648
5669
|
.prb-help-topic code { font-size: var(--t-code); color: var(--text-primary); }
|
|
5670
|
+
/* Welcome: a small capitalised label over the line the product stands on, and the principles as
|
|
5671
|
+
three short statements, each named in the primary ink and explained in the secondary. */
|
|
5672
|
+
.prb-help-topic .prb-help-eyebrow {
|
|
5673
|
+
margin: 0 0 6px;
|
|
5674
|
+
font-size: var(--t-micro);
|
|
5675
|
+
font-weight: 600;
|
|
5676
|
+
letter-spacing: 0.06em;
|
|
5677
|
+
text-transform: uppercase;
|
|
5678
|
+
color: var(--text-tertiary, var(--text-secondary));
|
|
5679
|
+
}
|
|
5680
|
+
.prb-help-topic h3.prb-help-eyebrow { margin-top: 24px; margin-bottom: 10px; }
|
|
5681
|
+
.prb-help-topic .prb-help-headline { margin: 0 0 14px; font-size: var(--t-title); line-height: 1.3; }
|
|
5682
|
+
.prb-help-principles { display: grid; gap: 12px; margin: 0; }
|
|
5683
|
+
.prb-help-principles dt { font-weight: 600; color: var(--text-primary); }
|
|
5684
|
+
.prb-help-principles dd { margin: 2px 0 0; }
|
|
5685
|
+
.prb-help-tour { margin-top: 20px; }
|
|
5686
|
+
/* An action, not a reference: it starts something, so it looks like the tour's own Next. */
|
|
5687
|
+
/* Through `.prb-help-topic a`, whose link colour would otherwise be drawn on the button's own purple. */
|
|
5688
|
+
.prb-help-topic a.prb-help-tour-action {
|
|
5689
|
+
display: inline-block;
|
|
5690
|
+
padding: 5px 12px;
|
|
5691
|
+
border-radius: 8px;
|
|
5692
|
+
background: var(--brand);
|
|
5693
|
+
color: var(--on-brand);
|
|
5694
|
+
font-weight: 600;
|
|
5695
|
+
}
|
|
5696
|
+
.prb-help-topic a.prb-help-tour-action:hover { background: var(--brand-hover); }
|
|
5649
5697
|
.prb-help-topic a { color: var(--link); }
|
|
5650
|
-
/*
|
|
5651
|
-
|
|
5652
|
-
.prb-
|
|
5653
|
-
|
|
5654
|
-
|
|
5655
|
-
|
|
5698
|
+
/* Wider than the 960px every other page keeps, by the index's column, so the topics keep the
|
|
5699
|
+
measure they had when the index sat above them. */
|
|
5700
|
+
.prb-shell > .prb-help {
|
|
5701
|
+
padding-inline: max(24px, calc((100% - 1200px) / 2 + 24px));
|
|
5702
|
+
container-type: inline-size;
|
|
5703
|
+
}
|
|
5704
|
+
/* The topics, and their index in a column beside them that stays in view while they scroll. The
|
|
5705
|
+
index comes first in the document and is placed second here. */
|
|
5706
|
+
.prb-help-layout {
|
|
5707
|
+
display: grid;
|
|
5708
|
+
grid-template-columns: minmax(0, 1fr) 208px;
|
|
5709
|
+
column-gap: 32px;
|
|
5710
|
+
align-items: start;
|
|
5711
|
+
}
|
|
5712
|
+
.prb-help-layout > .prb-page-panel { grid-column: 1; grid-row: 1; }
|
|
5713
|
+
.prb-help-contents {
|
|
5714
|
+
grid-column: 2;
|
|
5715
|
+
grid-row: 1;
|
|
5716
|
+
position: sticky;
|
|
5717
|
+
/* The pane's own top padding is the gap, at rest and stuck alike, so the index never jumps. */
|
|
5718
|
+
top: 0;
|
|
5719
|
+
max-height: calc(100dvh - 160px);
|
|
5720
|
+
overflow-y: auto;
|
|
5721
|
+
padding: 4px 0;
|
|
5722
|
+
}
|
|
5723
|
+
.prb-help-contents ul { margin: 0; padding: 0; list-style: none; border-left: 1px solid var(--border); }
|
|
5724
|
+
/* The rail's mark for where you are: a brand rule on the left and the tinted ground, here over the
|
|
5725
|
+
list's own rule so the mark sits on the track it moves along. */
|
|
5726
|
+
.prb-help-contents a {
|
|
5727
|
+
display: block;
|
|
5728
|
+
margin-left: -1px;
|
|
5729
|
+
padding: 5px 10px 5px 14px;
|
|
5730
|
+
border-left: 2px solid transparent;
|
|
5731
|
+
border-radius: 0 6px 6px 0;
|
|
5732
|
+
font-size: var(--t-meta);
|
|
5733
|
+
line-height: 1.4;
|
|
5734
|
+
color: var(--text-secondary);
|
|
5735
|
+
text-decoration: none;
|
|
5736
|
+
}
|
|
5737
|
+
.prb-help-contents a:hover { color: var(--text-primary); background: var(--surface-hover); }
|
|
5738
|
+
.prb-help-contents a[aria-current] {
|
|
5739
|
+
border-left-color: var(--brand);
|
|
5740
|
+
background: var(--brand-muted);
|
|
5741
|
+
color: var(--text-primary);
|
|
5742
|
+
font-weight: 500;
|
|
5743
|
+
}
|
|
5744
|
+
.prb-help-contents a:focus-visible { outline: 2px solid var(--brand-hover); outline-offset: -2px; }
|
|
5745
|
+
/* Too narrow for a column beside the prose: the index goes back above the topics, as a wrapping
|
|
5746
|
+
row, and stops following the scroll. After the rules above, which it overrides. */
|
|
5747
|
+
@container (max-width: 760px) {
|
|
5748
|
+
.prb-help-layout { display: block; }
|
|
5749
|
+
.prb-help-contents { position: static; max-height: none; margin: 0 0 16px; padding: 0; }
|
|
5750
|
+
.prb-help-contents ul { display: flex; flex-wrap: wrap; gap: 4px; border-left: 0; }
|
|
5751
|
+
.prb-help-contents a { margin-left: 0; padding: 4px 10px; border-left: 0; border-radius: 6px; }
|
|
5752
|
+
}
|
|
5656
5753
|
/* A diagram's spacing is its meaning, so it never wraps: a narrow window scrolls it instead. */
|
|
5657
5754
|
.prb-help-diagram {
|
|
5658
5755
|
margin: 0 0 12px;
|
|
@@ -5815,7 +5912,7 @@ a.prb-notification-open:focus-visible { outline: 2px solid var(--brand-hover); o
|
|
|
5815
5912
|
.prb-toast[data-kind='updated'] { border-left-color: var(--brand); }
|
|
5816
5913
|
.prb-toast-text { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
5817
5914
|
.prb-toast-open { flex: none; color: var(--wordmark-accent); font-weight: 600; text-decoration: none; }
|
|
5818
|
-
.prb-toast-open:hover {
|
|
5915
|
+
.prb-toast-open:hover { opacity: 0.8; }
|
|
5819
5916
|
.prb-toast-close {
|
|
5820
5917
|
flex: none;
|
|
5821
5918
|
width: 24px;
|
|
@@ -6474,7 +6571,6 @@ select.prb-addreview-control { padding-right: 32px; }
|
|
|
6474
6571
|
color: var(--link);
|
|
6475
6572
|
font: inherit;
|
|
6476
6573
|
font-size: var(--t-micro);
|
|
6477
|
-
text-decoration: underline;
|
|
6478
6574
|
cursor: pointer;
|
|
6479
6575
|
}
|
|
6480
6576
|
.prb-addreview-retry { margin-left: calc(1em + 8px); }
|
|
@@ -6486,6 +6582,18 @@ select.prb-addreview-control { padding-right: 32px; }
|
|
|
6486
6582
|
.prb-addreview code,
|
|
6487
6583
|
.prb-addreview pre { font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace; }
|
|
6488
6584
|
|
|
6585
|
+
/* A finding's readable reference (I3, Q2): the name a feedback draft and the author's reply use for
|
|
6586
|
+
it. Quiet beside the title, monospaced so I1 and I12 read as labels rather than words, and level
|
|
6587
|
+
with the title's first line. */
|
|
6588
|
+
.prb-doc .pr-helper-finding-ref {
|
|
6589
|
+
flex: none;
|
|
6590
|
+
margin-top: 1px;
|
|
6591
|
+
font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace;
|
|
6592
|
+
font-size: var(--t-micro);
|
|
6593
|
+
line-height: 18px;
|
|
6594
|
+
color: var(--pane-ink-muted);
|
|
6595
|
+
}
|
|
6596
|
+
|
|
6489
6597
|
/* ── Feedback selection ──
|
|
6490
6598
|
Choosing the Issues and Questions to raise with the author. The checkboxes ship on every card
|
|
6491
6599
|
and show only while the body carries the mode, so entering it is a stylesheet change, as the
|
|
@@ -6562,7 +6670,7 @@ select.prb-addreview-control { padding-right: 32px; }
|
|
|
6562
6670
|
}
|
|
6563
6671
|
.prb-selection-goto[hidden] { display: none; }
|
|
6564
6672
|
.prb-selection-sep { color: var(--pane-ink-faint); white-space: pre; }
|
|
6565
|
-
.prb-selection-goto:hover [data-feedback-goto-label] {
|
|
6673
|
+
.prb-selection-goto:hover [data-feedback-goto-label] { opacity: 0.8; }
|
|
6566
6674
|
.prb-selection-spacer { flex: 1; }
|
|
6567
6675
|
.prb-selection-button {
|
|
6568
6676
|
padding: 6px 12px;
|
|
@@ -6739,3 +6847,85 @@ select.prb-addreview-control { padding-right: 32px; }
|
|
|
6739
6847
|
.prb-runs-count { padding: 8px 10px; }
|
|
6740
6848
|
.prb-runs-count dd { font-size: var(--t-section); }
|
|
6741
6849
|
}
|
|
6850
|
+
|
|
6851
|
+
|
|
6852
|
+
/* ── Guided tour ──
|
|
6853
|
+
A modal dialog as big as the window, so everything under it is inert; the spotlight's shadow is
|
|
6854
|
+
the dim, and the card sits beside whatever the spotlight is on. Positions are set by tour.ts. */
|
|
6855
|
+
.prb-tour {
|
|
6856
|
+
position: fixed;
|
|
6857
|
+
inset: 0;
|
|
6858
|
+
width: 100%;
|
|
6859
|
+
height: 100%;
|
|
6860
|
+
max-width: none;
|
|
6861
|
+
max-height: none;
|
|
6862
|
+
margin: 0;
|
|
6863
|
+
padding: 0;
|
|
6864
|
+
border: 0;
|
|
6865
|
+
background: transparent;
|
|
6866
|
+
overflow: hidden;
|
|
6867
|
+
color: var(--text-primary);
|
|
6868
|
+
font: inherit;
|
|
6869
|
+
}
|
|
6870
|
+
.prb-tour::backdrop { background: transparent; }
|
|
6871
|
+
/* No target to light: the welcome, or a stop this layout does not draw. The whole page dims. */
|
|
6872
|
+
.prb-tour[data-spotless] { background: var(--backdrop); }
|
|
6873
|
+
.prb-tour-spot {
|
|
6874
|
+
position: fixed;
|
|
6875
|
+
border-radius: 10px;
|
|
6876
|
+
outline: 2px solid var(--brand);
|
|
6877
|
+
outline-offset: 0;
|
|
6878
|
+
box-shadow: 0 0 0 200vmax var(--backdrop);
|
|
6879
|
+
pointer-events: none;
|
|
6880
|
+
}
|
|
6881
|
+
.prb-tour-card {
|
|
6882
|
+
position: fixed;
|
|
6883
|
+
box-sizing: border-box;
|
|
6884
|
+
padding: 20px 22px 18px;
|
|
6885
|
+
border: 1px solid var(--border);
|
|
6886
|
+
border-radius: 12px;
|
|
6887
|
+
background: var(--surface-raised);
|
|
6888
|
+
box-shadow: 0 12px 32px var(--shadow-float);
|
|
6889
|
+
}
|
|
6890
|
+
.prb-tour[data-welcome] .prb-tour-card { padding: 26px 28px 22px; }
|
|
6891
|
+
.prb-tour-count {
|
|
6892
|
+
margin: 0 0 8px;
|
|
6893
|
+
font-size: var(--t-meta);
|
|
6894
|
+
font-weight: 600;
|
|
6895
|
+
letter-spacing: 0.04em;
|
|
6896
|
+
text-transform: uppercase;
|
|
6897
|
+
color: var(--brand-hover);
|
|
6898
|
+
}
|
|
6899
|
+
.prb-tour-title { margin: 0 0 8px; font-size: var(--t-section); font-weight: 650; line-height: 1.3; }
|
|
6900
|
+
.prb-tour[data-welcome] .prb-tour-title { font-size: 20px; }
|
|
6901
|
+
.prb-tour-text p { margin: 0 0 8px; font-size: var(--t-body); line-height: var(--lh-body); color: var(--text-secondary); }
|
|
6902
|
+
.prb-tour-actions { display: flex; align-items: center; gap: 8px; margin-top: 16px; }
|
|
6903
|
+
.prb-tour-actions button {
|
|
6904
|
+
padding: 7px 14px;
|
|
6905
|
+
border-radius: 8px;
|
|
6906
|
+
border: 1px solid var(--border);
|
|
6907
|
+
background: var(--surface-2);
|
|
6908
|
+
color: var(--text-primary);
|
|
6909
|
+
font: inherit;
|
|
6910
|
+
font-size: var(--t-body);
|
|
6911
|
+
cursor: pointer;
|
|
6912
|
+
}
|
|
6913
|
+
.prb-tour-actions button:hover { border-color: var(--border-strong); }
|
|
6914
|
+
.prb-tour-actions button:focus-visible { outline: 2px solid var(--brand-hover); outline-offset: 2px; }
|
|
6915
|
+
.prb-tour-actions .prb-tour-skip {
|
|
6916
|
+
margin-right: auto;
|
|
6917
|
+
padding-left: 0;
|
|
6918
|
+
padding-right: 0;
|
|
6919
|
+
border-color: transparent;
|
|
6920
|
+
background: transparent;
|
|
6921
|
+
color: var(--text-secondary);
|
|
6922
|
+
}
|
|
6923
|
+
.prb-tour-actions .prb-tour-skip:hover { border-color: transparent; color: var(--text-primary); }
|
|
6924
|
+
.prb-tour-actions .prb-tour-next {
|
|
6925
|
+
border-color: var(--brand);
|
|
6926
|
+
background: var(--brand);
|
|
6927
|
+
color: var(--on-brand);
|
|
6928
|
+
font-weight: 600;
|
|
6929
|
+
}
|
|
6930
|
+
.prb-tour-actions .prb-tour-next:hover { border-color: var(--brand-hover); background: var(--brand-hover); }
|
|
6931
|
+
.prb-tour-actions button[hidden] { display: none; }
|
package/static/sidebar.css
CHANGED
|
@@ -218,7 +218,7 @@
|
|
|
218
218
|
cursor: pointer;
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
-
.pr-helper-cancel-button:hover { color: #cf222e;
|
|
221
|
+
.pr-helper-cancel-button:hover { color: #cf222e; }
|
|
222
222
|
|
|
223
223
|
/* ── Brand mark + thinking dots (waiting/finalizing phase) ── */
|
|
224
224
|
.pr-helper-brand-mark {
|
|
@@ -809,7 +809,7 @@
|
|
|
809
809
|
cursor: pointer;
|
|
810
810
|
}
|
|
811
811
|
|
|
812
|
-
.pr-helper-author-context-toggle:hover {
|
|
812
|
+
.pr-helper-author-context-toggle:hover { opacity: 0.8; }
|
|
813
813
|
|
|
814
814
|
/* The heading and, once the description is open, its Show less. While open the row sticks to the
|
|
815
815
|
top of whatever the review scrolls in, so a long description never has to be read to its end to
|
|
@@ -838,7 +838,7 @@
|
|
|
838
838
|
color: #9333ea;
|
|
839
839
|
text-decoration: none;
|
|
840
840
|
}
|
|
841
|
-
.pr-helper-author-context-github:hover {
|
|
841
|
+
.pr-helper-author-context-github:hover { opacity: 0.8; }
|
|
842
842
|
.pr-helper-author-context[data-expanded] .pr-helper-author-context-head {
|
|
843
843
|
position: sticky;
|
|
844
844
|
/* A sticky element stops at its scroller's padding edge, leaving that padding as a strip the
|
|
@@ -936,7 +936,7 @@
|
|
|
936
936
|
cursor: pointer;
|
|
937
937
|
}
|
|
938
938
|
|
|
939
|
-
.pr-helper-why-link:hover {
|
|
939
|
+
.pr-helper-why-link:hover { opacity: 0.8; }
|
|
940
940
|
|
|
941
941
|
/* The author's words behind a stated motive, closed: the summary above usually says the same. */
|
|
942
942
|
.pr-helper-why-source { margin: 4px 0 0; }
|
|
@@ -949,7 +949,7 @@
|
|
|
949
949
|
width: fit-content;
|
|
950
950
|
}
|
|
951
951
|
|
|
952
|
-
.pr-helper-why-source > summary:hover {
|
|
952
|
+
.pr-helper-why-source > summary:hover { opacity: 0.8; }
|
|
953
953
|
|
|
954
954
|
/* The three narrative sections end here; the verdict and the path are a different kind of block,
|
|
955
955
|
so the gap before each is wider than the gaps between the sections. */
|
|
@@ -1404,7 +1404,7 @@
|
|
|
1404
1404
|
text-decoration: none;
|
|
1405
1405
|
}
|
|
1406
1406
|
|
|
1407
|
-
.pr-helper-issue-discussion-link:hover {
|
|
1407
|
+
.pr-helper-issue-discussion-link:hover { opacity: 0.8; }
|
|
1408
1408
|
|
|
1409
1409
|
.pr-helper-issue-loc {
|
|
1410
1410
|
display: block;
|
|
@@ -1412,7 +1412,7 @@
|
|
|
1412
1412
|
margin-top: 6px;
|
|
1413
1413
|
}
|
|
1414
1414
|
|
|
1415
|
-
.pr-helper-issue-loc:hover .pr-helper-path-name {
|
|
1415
|
+
.pr-helper-issue-loc:hover .pr-helper-path-name { opacity: 0.8; }
|
|
1416
1416
|
|
|
1417
1417
|
/* A file the finding rests on that this change does not touch. Sits under the anchored location
|
|
1418
1418
|
and must not be mistaken for one: no line number, and the words are on the row.
|
|
@@ -1426,7 +1426,7 @@
|
|
|
1426
1426
|
font-size: 11.5px;
|
|
1427
1427
|
opacity: 0.75;
|
|
1428
1428
|
}
|
|
1429
|
-
.prb-file-related:hover .pr-helper-path-name {
|
|
1429
|
+
.prb-file-related:hover .pr-helper-path-name { opacity: 0.8; }
|
|
1430
1430
|
|
|
1431
1431
|
/* ── Questions tab ── */
|
|
1432
1432
|
/* Deliberately reuses .pr-helper-issue-header/-title/-badges/-desc/-loc from the Issues tab
|
|
@@ -1501,7 +1501,7 @@
|
|
|
1501
1501
|
cursor: pointer;
|
|
1502
1502
|
white-space: nowrap;
|
|
1503
1503
|
}
|
|
1504
|
-
.pr-helper-simple-explanation-more:hover {
|
|
1504
|
+
.pr-helper-simple-explanation-more:hover { opacity: 0.8; }
|
|
1505
1505
|
.pr-helper-simple-explanation-more:focus-visible { outline: 2px solid #9333ea; outline-offset: 2px; border-radius: 2px; }
|
|
1506
1506
|
|
|
1507
1507
|
.pr-helper-question-importance-badge {
|
|
@@ -1613,7 +1613,7 @@
|
|
|
1613
1613
|
}
|
|
1614
1614
|
|
|
1615
1615
|
.pr-helper-question-jump { text-decoration: none; }
|
|
1616
|
-
.pr-helper-question-jump:hover { color: #7c3aed;
|
|
1616
|
+
.pr-helper-question-jump:hover { color: #7c3aed; }
|
|
1617
1617
|
|
|
1618
1618
|
/* Same button geometry as .pr-helper-explain-simply-button (the sidebar's existing outlined
|
|
1619
1619
|
secondary), but neutral rather than purple: purple is spoken for by the primary action
|
|
@@ -1978,7 +1978,7 @@
|
|
|
1978
1978
|
text-align: left;
|
|
1979
1979
|
}
|
|
1980
1980
|
|
|
1981
|
-
.pr-helper-guide-start-cta:hover { color: #7c3aed;
|
|
1981
|
+
.pr-helper-guide-start-cta:hover { color: #7c3aed; }
|
|
1982
1982
|
|
|
1983
1983
|
.pr-helper-guide-section-actions {
|
|
1984
1984
|
display: flex;
|
|
@@ -2000,7 +2000,7 @@
|
|
|
2000
2000
|
cursor: pointer;
|
|
2001
2001
|
}
|
|
2002
2002
|
|
|
2003
|
-
.pr-helper-guide-uncomplete:hover { color: var(--color-fg-default, #24292f);
|
|
2003
|
+
.pr-helper-guide-uncomplete:hover { color: var(--color-fg-default, #24292f); }
|
|
2004
2004
|
|
|
2005
2005
|
.pr-helper-guide-summary {
|
|
2006
2006
|
font-size: 14px;
|
|
@@ -2048,9 +2048,9 @@
|
|
|
2048
2048
|
margin: 0 -8px;
|
|
2049
2049
|
}
|
|
2050
2050
|
|
|
2051
|
-
/*
|
|
2052
|
-
|
|
2053
|
-
.pr-helper-guide-file:hover .pr-helper-path-name {
|
|
2051
|
+
/* Dim only the filename on hover: dimming the directory and focus prose too would make the whole
|
|
2052
|
+
three-line row look like one long link. */
|
|
2053
|
+
.pr-helper-guide-file:hover .pr-helper-path-name { opacity: 0.8; }
|
|
2054
2054
|
|
|
2055
2055
|
.pr-helper-guide-file-focus {
|
|
2056
2056
|
font-size: 12px;
|
|
@@ -2497,7 +2497,7 @@
|
|
|
2497
2497
|
text-decoration: none;
|
|
2498
2498
|
}
|
|
2499
2499
|
|
|
2500
|
-
.pr-helper-markdown a:hover {
|
|
2500
|
+
.pr-helper-markdown a:hover { opacity: 0.8; }
|
|
2501
2501
|
|
|
2502
2502
|
/* GitHub's HTML in a description (github_html.ts). A table scrolls on its own, as on GitHub, so a
|
|
2503
2503
|
bot's wide walkthrough never pushes the sidebar sideways. */
|
|
@@ -2541,7 +2541,7 @@
|
|
|
2541
2541
|
padding: 2px 0 6px;
|
|
2542
2542
|
cursor: pointer;
|
|
2543
2543
|
}
|
|
2544
|
-
.prb-md-mermaid-toggle:hover {
|
|
2544
|
+
.prb-md-mermaid-toggle:hover { opacity: 0.8; }
|
|
2545
2545
|
.prb-md-mermaid-error {
|
|
2546
2546
|
margin: 0 0 6px;
|
|
2547
2547
|
font-size: 12px;
|
|
@@ -3782,7 +3782,7 @@
|
|
|
3782
3782
|
white-space: nowrap;
|
|
3783
3783
|
}
|
|
3784
3784
|
|
|
3785
|
-
.pr-helper-nav-overlay-close:hover { color: #1f2328;
|
|
3785
|
+
.pr-helper-nav-overlay-close:hover { color: #1f2328; }
|
|
3786
3786
|
|
|
3787
3787
|
.pr-helper-nav-overlay-progress {
|
|
3788
3788
|
margin-top: 2px;
|
|
@@ -4374,7 +4374,7 @@
|
|
|
4374
4374
|
cursor: pointer;
|
|
4375
4375
|
}
|
|
4376
4376
|
|
|
4377
|
-
.pr-helper-save-bar-label-done:hover {
|
|
4377
|
+
.pr-helper-save-bar-label-done:hover { opacity: 0.8; }
|
|
4378
4378
|
|
|
4379
4379
|
/* ── Selected-text → Assistant ──
|
|
4380
4380
|
Mounted on document.body, not inside the sidebar: the sidebar is a scrolling, clipped
|
|
@@ -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; }
|
|
@@ -5521,7 +5536,7 @@
|
|
|
5521
5536
|
color: #6b21a8;
|
|
5522
5537
|
cursor: pointer;
|
|
5523
5538
|
}
|
|
5524
|
-
.pr-helper-reassessment-more:hover {
|
|
5539
|
+
.pr-helper-reassessment-more:hover { opacity: 0.8; }
|
|
5525
5540
|
.pr-helper-reassessment-accept:focus-visible,
|
|
5526
5541
|
.pr-helper-reassessment-keep:focus-visible,
|
|
5527
5542
|
.pr-helper-reassessment-more:focus-visible { outline: 2px solid #9333ea; outline-offset: 2px; }
|
|
@@ -5574,7 +5589,6 @@
|
|
|
5574
5589
|
font-size: 10px;
|
|
5575
5590
|
color: var(--color-accent-fg, #0969da);
|
|
5576
5591
|
cursor: pointer;
|
|
5577
|
-
text-decoration: underline;
|
|
5578
5592
|
}
|
|
5579
5593
|
|
|
5580
5594
|
/* History row. Same geometry as .pr-helper-history-delta, and for the same reason it carries no
|
|
@@ -5671,7 +5685,6 @@
|
|
|
5671
5685
|
font-size: 11px;
|
|
5672
5686
|
color: var(--color-accent-fg, #0969da);
|
|
5673
5687
|
cursor: pointer;
|
|
5674
|
-
text-decoration: underline;
|
|
5675
5688
|
}
|
|
5676
5689
|
|
|
5677
5690
|
/*
|
|
@@ -5929,7 +5942,7 @@
|
|
|
5929
5942
|
.pr-helper-extension .prb-selection-count { margin: 0; font-size: 12px; font-weight: 600; color: #1f2328; }
|
|
5930
5943
|
.pr-helper-extension .prb-selection-goto { padding: 0; border: 0; background: none; color: #7e22ce; font: inherit; font-weight: 400; cursor: pointer; }
|
|
5931
5944
|
.pr-helper-extension .prb-selection-goto[hidden] { display: none; }
|
|
5932
|
-
.pr-helper-extension .prb-selection-goto:hover [data-feedback-goto-label] {
|
|
5945
|
+
.pr-helper-extension .prb-selection-goto:hover [data-feedback-goto-label] { opacity: 0.8; }
|
|
5933
5946
|
.pr-helper-extension .prb-selection-sep { color: #8c959f; white-space: pre; }
|
|
5934
5947
|
.pr-helper-extension .prb-selection-spacer { flex: 1; }
|
|
5935
5948
|
.pr-helper-extension .prb-selection-button {
|