v0.1.0 3f267b5

60-proposal.css RawHistoryFolder

1@layer components {
2  /* proposals: the decision gate. Hue only where it carries a verdict:
3     check state (pass teal, fail red) and open high/medium findings (red). */
4  .criteria {
5    margin-top: calc(var(--lh) / 2); max-width: var(--measure);
6    & li { padding-left: 4ch; text-indent: -4ch; }
7    & .ck { color: var(--teal); font-weight: bold; }
8    & li[data-met="false"] .ck { color: var(--red); }
9    & .mute { font-size: var(--fs-s); overflow-wrap: anywhere; }
10  }
11  .prop-h .show-kv { margin-top: 0; }
12  .prop-h + .rule-h { margin-top: var(--lh); }
13
14  .since {
15    display: flex; flex-wrap: wrap; column-gap: 3ch; margin-top: var(--lh);
16    & a { text-decoration: none; color: var(--ink-dim); }
17    & a:hover { color: var(--ink); text-decoration: underline; }
18    & a[aria-current] { color: var(--ink-hi); font-weight: bold; }
19    & a[aria-current]::before { content: "▸ "; }
20    & .mute { font-weight: normal; }
21  }
22
23  /* decision block: first thing in the rail */
24  .decide {
25    & .d-state { font-weight: bold; color: var(--ink-hi); text-transform: uppercase; letter-spacing: .1ch; }
26    &[data-state="ready"] .d-state::before { content: "● "; color: var(--teal); }
27    &[data-state="accepted"] .d-state::before { content: "✓ "; color: var(--teal); }
28    &[data-state="refused"] .d-state::before { content: "✗ "; color: var(--red); }
29    & p + p { margin-top: 0; }
30    & .kv { grid-template-columns: 9ch minmax(0, 1fr); }
31    & .kv dd { white-space: normal; }
32    & .d-acts { margin-top: calc(var(--lh) / 2); }
33    & textarea {
34      display: block; width: 100%; resize: vertical; font: inherit; color: inherit;
35      background: var(--paper-alt); border: 1px solid var(--rule); padding: 0 1ch;
36    }
37    & textarea::placeholder { color: var(--ink-mute); opacity: 1; }
38    & .d-btns { display: flex; gap: 2ch; margin-top: 4px; }
39    & .d-btns button { color: var(--ink-dim); }
40    & .d-btns button:hover { color: var(--ink); text-decoration: underline; }
41    & .d-btns .d-main { background: var(--ink); color: var(--paper); font-weight: bold; padding: 0 1ch; }
42    & .d-btns .d-main:hover { background: var(--ink-hi); text-decoration: none; }
43    & .d-or { margin-top: calc(var(--lh) / 2); }
44    & .clone { margin-top: 0; }
45    & .clone code { white-space: pre-wrap; overflow-wrap: anywhere; }
46  }
47  .closed { margin-top: calc(var(--lh) / 2); & > summary { color: var(--ink-dim); } }
48
49  .checks li { display: grid; grid-template-columns: 5ch minmax(0, 1fr) auto; column-gap: 1ch; }
50  .checks .c-n { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
51  .checks .c-st { font-weight: bold; color: var(--teal); }
52  .checks [data-state="fail"] .c-st { color: var(--red); }
53  .checks [data-state="run"] .c-st { color: var(--ink-dim); }
54
55  .pcommits li { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
56  .pcommits li[data-new] { background: var(--row); }
57  .pcommits .s { color: var(--ink); }
58
59  /* a finding: a ruled note, in the rail and under its line in the diff */
60  .finding {
61    border-left: 2px solid var(--ink); padding-left: 1ch; margin-top: calc(var(--lh) / 2);
62    & p { white-space: normal; }
63    & .f-sev { font-weight: bold; text-transform: uppercase; }
64    & .f-state { color: var(--ink-dim); }
65    & .f-where { font-size: var(--fs-s); overflow-wrap: anywhere; }
66    & .f-reason { color: var(--ink-dim); }
67    &[data-state="open"][data-sev="high"], &[data-state="open"][data-sev="medium"] { border-left-color: var(--red); }
68    &[data-state="open"][data-sev="high"] .f-sev, &[data-state="open"][data-sev="medium"] .f-sev { color: var(--red); }
69    &[data-state="fixed"], &[data-state="dismissed"] { border-left-color: var(--rule); }
70    &[data-state="fixed"] .f-text, &[data-state="dismissed"] .f-text { color: var(--ink-dim); }
71    &[data-state="fixed"] .f-sev, &[data-state="dismissed"] .f-sev { font-weight: normal; color: var(--ink-mute); }
72  }
73  .dt .fnote td { background: var(--paper-alt); padding: 2px 0 4px; white-space: normal; }
74  .dt .fnote .finding { margin: 0; max-width: var(--measure); font-size: var(--fs); line-height: var(--lh); }
75  .dfile .fcount { color: var(--red); font-weight: bold; }
76
77  .list.props {
78    & .c-n { width: 5ch; }
79    & .c-state { width: 18ch; }
80    & .c-subject { overflow: hidden; text-overflow: ellipsis; }
81    & .c-chk { width: 6ch; }
82    & .c-fnd { width: 9ch; }
83    & .c-who { width: 12ch; }
84    & .c-when { width: 9ch; }
85    & tr[data-state="ready"] .c-state { font-weight: bold; }
86    & tr[data-state="ready"] .c-state::before { content: "● "; color: var(--teal); }
87  }
88  .rail code { border-bottom: 1px dotted var(--ink-mute); }
89
90  @media (max-width: 700px) {
91    .list.props .c-chk, .list.props .c-fnd { display: none; }
92  }
93}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 4

Tags 45

↑↓ moveenter openesc close