@skillcdn/console 0.3.1 → 0.4.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.
Files changed (179) hide show
  1. package/README.md +4 -4
  2. package/dist/api.d.ts +4 -4
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +4 -4
  5. package/dist/api.js.map +1 -1
  6. package/dist/cli/cli.d.ts +4 -0
  7. package/dist/cli/cli.d.ts.map +1 -1
  8. package/dist/cli/cli.js +201 -25
  9. package/dist/cli/cli.js.map +1 -1
  10. package/dist/cli/format.d.ts.map +1 -1
  11. package/dist/cli/format.js +15 -11
  12. package/dist/cli/format.js.map +1 -1
  13. package/dist/cli/help.d.ts.map +1 -1
  14. package/dist/cli/help.js +59 -26
  15. package/dist/cli/help.js.map +1 -1
  16. package/dist/cli/main.js +1 -0
  17. package/dist/cli/main.js.map +1 -1
  18. package/dist/cli/pack.d.ts +7 -2
  19. package/dist/cli/pack.d.ts.map +1 -1
  20. package/dist/cli/pack.js +16 -2
  21. package/dist/cli/pack.js.map +1 -1
  22. package/dist/client.d.ts +20 -10
  23. package/dist/client.d.ts.map +1 -1
  24. package/dist/client.js +17 -3
  25. package/dist/client.js.map +1 -1
  26. package/dist/compat.d.ts +28 -6
  27. package/dist/compat.d.ts.map +1 -1
  28. package/dist/compat.js +55 -14
  29. package/dist/compat.js.map +1 -1
  30. package/dist/components/board.d.ts +12 -1
  31. package/dist/components/board.d.ts.map +1 -1
  32. package/dist/components/board.js +57 -7
  33. package/dist/components/board.js.map +1 -1
  34. package/dist/components/calendar.d.ts +17 -7
  35. package/dist/components/calendar.d.ts.map +1 -1
  36. package/dist/components/calendar.js +89 -38
  37. package/dist/components/calendar.js.map +1 -1
  38. package/dist/components/decision-form.d.ts +12 -4
  39. package/dist/components/decision-form.d.ts.map +1 -1
  40. package/dist/components/decision-form.js +24 -6
  41. package/dist/components/decision-form.js.map +1 -1
  42. package/dist/components/decision-list.d.ts +4 -0
  43. package/dist/components/decision-list.d.ts.map +1 -1
  44. package/dist/components/decision-list.js +9 -6
  45. package/dist/components/decision-list.js.map +1 -1
  46. package/dist/components/documents.d.ts.map +1 -1
  47. package/dist/components/documents.js +3 -3
  48. package/dist/components/documents.js.map +1 -1
  49. package/dist/components/event-feed.d.ts.map +1 -1
  50. package/dist/components/event-feed.js +63 -8
  51. package/dist/components/event-feed.js.map +1 -1
  52. package/dist/components/my-decisions.d.ts +20 -0
  53. package/dist/components/my-decisions.d.ts.map +1 -0
  54. package/dist/components/my-decisions.js +36 -0
  55. package/dist/components/my-decisions.js.map +1 -0
  56. package/dist/components/people.d.ts.map +1 -1
  57. package/dist/components/people.js +1 -1
  58. package/dist/components/people.js.map +1 -1
  59. package/dist/components/picker.d.ts +39 -0
  60. package/dist/components/picker.d.ts.map +1 -0
  61. package/dist/components/picker.js +155 -0
  62. package/dist/components/picker.js.map +1 -0
  63. package/dist/components/projects.d.ts.map +1 -1
  64. package/dist/components/projects.js +3 -3
  65. package/dist/components/projects.js.map +1 -1
  66. package/dist/components/roadmap.js +1 -1
  67. package/dist/components/roadmap.js.map +1 -1
  68. package/dist/components/runs.d.ts.map +1 -1
  69. package/dist/components/runs.js +1 -1
  70. package/dist/components/runs.js.map +1 -1
  71. package/dist/components/shell.d.ts.map +1 -1
  72. package/dist/components/shell.js +36 -1
  73. package/dist/components/shell.js.map +1 -1
  74. package/dist/components/task-form.d.ts +18 -4
  75. package/dist/components/task-form.d.ts.map +1 -1
  76. package/dist/components/task-form.js +56 -13
  77. package/dist/components/task-form.js.map +1 -1
  78. package/dist/components/task-list.js +2 -2
  79. package/dist/components/task-list.js.map +1 -1
  80. package/dist/components/task-view.d.ts +7 -1
  81. package/dist/components/task-view.d.ts.map +1 -1
  82. package/dist/components/task-view.js +7 -6
  83. package/dist/components/task-view.js.map +1 -1
  84. package/dist/components/ui.d.ts +17 -0
  85. package/dist/components/ui.d.ts.map +1 -1
  86. package/dist/components/ui.js +26 -11
  87. package/dist/components/ui.js.map +1 -1
  88. package/dist/components/work.d.ts.map +1 -1
  89. package/dist/components/work.js +5 -3
  90. package/dist/components/work.js.map +1 -1
  91. package/dist/console.css +1794 -433
  92. package/dist/console.d.ts.map +1 -1
  93. package/dist/console.js +93 -10
  94. package/dist/console.js.map +1 -1
  95. package/dist/data.d.ts +21 -1
  96. package/dist/data.d.ts.map +1 -1
  97. package/dist/data.js +24 -1
  98. package/dist/data.js.map +1 -1
  99. package/dist/i18n/en.d.ts +45 -3
  100. package/dist/i18n/en.d.ts.map +1 -1
  101. package/dist/i18n/en.js +52 -10
  102. package/dist/i18n/en.js.map +1 -1
  103. package/dist/i18n/ko.d.ts.map +1 -1
  104. package/dist/i18n/ko.js +54 -12
  105. package/dist/i18n/ko.js.map +1 -1
  106. package/dist/index.d.ts +5 -3
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +5 -3
  109. package/dist/index.js.map +1 -1
  110. package/dist/limits.d.ts +2 -0
  111. package/dist/limits.d.ts.map +1 -1
  112. package/dist/limits.js +2 -0
  113. package/dist/limits.js.map +1 -1
  114. package/dist/router.d.ts +9 -1
  115. package/dist/router.d.ts.map +1 -1
  116. package/dist/router.js +12 -0
  117. package/dist/router.js.map +1 -1
  118. package/dist/routes.d.ts +3 -1
  119. package/dist/routes.d.ts.map +1 -1
  120. package/dist/routes.js +3 -1
  121. package/dist/routes.js.map +1 -1
  122. package/dist/rules.js +1 -1
  123. package/dist/rules.js.map +1 -1
  124. package/dist/schemas.d.ts +252 -12
  125. package/dist/schemas.d.ts.map +1 -1
  126. package/dist/schemas.js +27 -10
  127. package/dist/schemas.js.map +1 -1
  128. package/dist/vocabulary.d.ts +2 -0
  129. package/dist/vocabulary.d.ts.map +1 -1
  130. package/dist/vocabulary.js +2 -0
  131. package/dist/vocabulary.js.map +1 -1
  132. package/docs/specs/cli.md +14 -13
  133. package/docs/specs/rest.md +24 -19
  134. package/package.json +2 -2
  135. package/skills/building-a-console/SKILL.md +4 -4
  136. package/skills/building-a-console/references/the-default-console.md +4 -4
  137. package/skills/building-a-console/references/the-look-from-a-website.md +5 -5
  138. package/skills/deploying-a-console/SKILL.md +2 -2
  139. package/skills/deploying-a-console/references/resources.md +1 -1
  140. package/skills/working-the-board/SKILL.md +8 -6
  141. package/skills/working-the-board/references/terms.md +3 -3
  142. package/src/api.ts +7 -0
  143. package/src/cli/cli.ts +254 -25
  144. package/src/cli/format.ts +22 -11
  145. package/src/cli/help.ts +63 -26
  146. package/src/cli/main.ts +1 -0
  147. package/src/cli/pack.ts +17 -1
  148. package/src/client.ts +44 -11
  149. package/src/compat.ts +63 -14
  150. package/src/components/board.tsx +124 -25
  151. package/src/components/calendar.tsx +258 -117
  152. package/src/components/decision-form.tsx +71 -23
  153. package/src/components/decision-list.tsx +30 -3
  154. package/src/components/documents.tsx +27 -11
  155. package/src/components/event-feed.tsx +116 -33
  156. package/src/components/my-decisions.tsx +138 -0
  157. package/src/components/people.tsx +3 -1
  158. package/src/components/picker.tsx +297 -0
  159. package/src/components/projects.tsx +7 -5
  160. package/src/components/roadmap.tsx +1 -1
  161. package/src/components/runs.tsx +5 -1
  162. package/src/components/shell.tsx +36 -1
  163. package/src/components/task-form.tsx +149 -63
  164. package/src/components/task-list.tsx +3 -3
  165. package/src/components/task-view.tsx +71 -56
  166. package/src/components/ui.tsx +89 -11
  167. package/src/components/work.tsx +6 -4
  168. package/src/console.tsx +157 -29
  169. package/src/data.ts +61 -1
  170. package/src/i18n/en.ts +54 -10
  171. package/src/i18n/ko.ts +56 -12
  172. package/src/index.ts +19 -1
  173. package/src/limits.ts +2 -0
  174. package/src/router.ts +18 -1
  175. package/src/routes.ts +3 -1
  176. package/src/rules.ts +1 -1
  177. package/src/schemas.ts +29 -9
  178. package/src/styles/console.css +1794 -433
  179. package/src/vocabulary.ts +3 -0
@@ -3,98 +3,77 @@
3
3
  * per building block, all prefixed `sc-` so that a custom console's own styles never collide
4
4
  * with them. Re-skinning starts and mostly ends with the tokens.
5
5
  *
6
- * The look is SkillCDN's own: dark only, one blue accent and one warm point colour, the page a
7
- * dark field with a soft light high in it, and the surfaces panes of glass over that field, so
8
- * that the console reads as part of the same product as the site it is built for.
6
+ * The look is SkillCDN's own, on a light ground: one blue accent and one warm point colour, the
7
+ * page a pale field, and the surfaces panes of frosted glass over it, so that the console reads as
8
+ * part of the same product as the site it is built for (ADR-0040).
9
9
  */
10
10
 
11
11
  :root {
12
- color-scheme: dark;
12
+ color-scheme: light;
13
13
 
14
- /* Surfaces: the page's own dark, and the steps above it. */
15
- --sc-color-bg: #0b1019;
16
- --sc-color-bg-subtle: #0f1520;
17
- --sc-color-bg-inset: #151d2b;
18
- --sc-color-bg-raised: #192232;
19
- --sc-color-border: #263042;
20
- --sc-color-border-strong: #3b4960;
14
+ /* Surfaces: the page's own pale ground, the step into it, and white above it. */
15
+ --sc-color-bg: #f7f8fc;
16
+ --sc-color-bg-inset: #edf0f6;
17
+ --sc-color-bg-raised: #ffffff;
18
+ --sc-color-border: #e4e8ef;
19
+ --sc-color-border-strong: #7d899e;
21
20
 
22
- /* Text. */
23
- --sc-color-text: #e8ebf0;
24
- --sc-color-text-muted: #9aa4b2;
25
- --sc-color-text-faint: #8b97a9;
21
+ /* Text: the site's own ink on white. */
22
+ --sc-color-text: #14141a;
23
+ --sc-color-text-muted: #4b5563;
24
+ --sc-color-text-faint: #666c7c;
26
25
 
27
26
  /* The one accent: the blue that text and lines are drawn in, and the deeper blue a surface
28
- is filled with so that a white label reads on it. */
29
- --sc-color-accent: #6ea1ff;
30
- --sc-color-accent-hover: #8fb6ff;
27
+ is filled with so that a white label reads on it. Under the pointer each is mixed a little
28
+ towards black where it is drawn. */
29
+ --sc-color-accent: #2c5bc4;
31
30
  --sc-color-accent-solid: #3b6fd4;
32
- --sc-color-accent-solid-hover: #4171d8;
33
31
  --sc-color-accent-contrast: #ffffff;
34
- --sc-color-accent-subtle: #111a2b;
32
+ --sc-color-accent-subtle: #dbe6ff;
35
33
  /* The point: the only warm colour, for what should be looked at first, never for a control. */
36
- --sc-color-point: #ffb13a;
37
- --sc-color-point-subtle: #2a1a0e;
38
- --sc-color-selection: color-mix(in srgb, var(--sc-color-accent-solid) 60%, transparent);
34
+ --sc-color-point: #c2410c;
35
+ --sc-color-point-subtle: #fff1e6;
39
36
 
40
37
  /* Status. */
41
- --sc-color-success: #4cc38a;
42
- --sc-color-success-subtle: #0d1a13;
43
- --sc-color-warning: #e3b341;
44
- --sc-color-warning-subtle: #201a0c;
45
- --sc-color-danger: #ff7b85;
46
- --sc-color-danger-subtle: #230f12;
47
-
48
- /* The ground: a dark field with two lights in it, a far one low and wide and a near one high
49
- and soft, and the corners taken down, so the field has distance in it. The default UI
50
- provides the field's face (the shell); a custom console may paint its own. */
51
- --sc-color-sky: #0d1730;
52
- --sc-color-far: #2b4d9455;
53
- --sc-color-far-turn: #3c3f8e3d;
54
- --sc-color-vignette: #04071199;
55
- --sc-color-light-core: #dbe7ff;
56
- --sc-color-light-body: #93b4f2;
57
- --sc-color-light-mid: #7f7ae8b8;
58
- --sc-color-light-halo: #3a5fd488;
59
- --sc-light-strength: 0.3;
60
- --sc-light-top: -18rem;
61
- --sc-light-height: 34rem;
62
- --sc-light-inset: 8%;
63
- --sc-light-blur: 4rem;
64
-
65
- /* Glass: what a pane over the field is made of. A wide blur with the colour behind pushed, an
66
- even veil of the page's own dark, a thin lit edge, and a soft stand-off from the field. */
67
- --sc-glass-backdrop: blur(24px) saturate(1.8);
68
- --sc-color-glass: #111a2e66;
69
- --sc-color-glass-hover: #18243f73;
70
- --sc-color-glass-edge: #ffffff1c;
71
- --sc-glass-surface: linear-gradient(var(--sc-color-glass), var(--sc-color-glass)) padding-box;
72
- --sc-glass-surface-hover: linear-gradient(
73
- var(--sc-color-glass-hover),
74
- var(--sc-color-glass-hover)
75
- )
76
- padding-box;
77
- --sc-glass-sheen: inset 0 1px 0 #ffffff4d, inset 0 0 0 1px #ffffff10, inset 0 3px 6px #ffffff12;
78
- --sc-glass-lift: 0 0.75rem 2rem -0.75rem #00000059;
79
- --sc-glass-lens: blur(4px) brightness(1.4) saturate(1.5) hue-rotate(-6deg);
80
- --sc-glass-lens-width: 2px;
81
- --sc-glass-lens-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
82
- /* A surface inside a pane: no blur of its own, a little of the page's dark let through. */
83
- --sc-color-sheet: color-mix(in srgb, var(--sc-color-bg) 72%, transparent);
84
- --sc-color-sheet-hover: color-mix(in srgb, var(--sc-color-bg-raised) 80%, transparent);
85
- --sc-color-field: color-mix(in srgb, var(--sc-color-bg) 78%, transparent);
86
-
87
- /* Light falls from above: a lit thing spills downward, in the accent's own colour, in layers
88
- that fall off the way brightness does. */
38
+ --sc-color-success: #146b44;
39
+ --sc-color-success-subtle: #d4efe1;
40
+ --sc-color-warning: #8f6100;
41
+ --sc-color-warning-subtle: #fff4cc;
42
+ --sc-color-danger: #b0273a;
43
+ --sc-color-danger-subtle: #fadadf;
44
+
45
+ /* The ground: a pale field, one gradient from the top. The default UI provides the field's
46
+ face (the shell); a custom console may paint its own. */
47
+ --sc-field-gradient: linear-gradient(160deg, #e3e9f7 0%, #eef1f9 42%, #f9fafd 100%);
48
+
49
+ /* Glass: what a pane over the field is made of. A wide blur with the colour behind pushed, a
50
+ white veil, a bright edge, and a soft stand-off from the field. */
51
+ --sc-glass-backdrop: blur(20px) saturate(1.6);
52
+ --sc-color-glass: #ffffff99;
53
+ --sc-color-glass-hover: #ffffffbf;
54
+ /* The rim: a hair of white along a pane's edge, its border. */
55
+ --sc-color-glass-edge: #ffffff;
56
+ /* The light that falls down a pane's face, from its top edge. */
57
+ --sc-glass-highlight: #ffffffb3;
58
+ --sc-glass-surface:
59
+ linear-gradient(170deg, var(--sc-glass-highlight), transparent 38%) padding-box,
60
+ linear-gradient(var(--sc-color-glass), var(--sc-color-glass)) padding-box;
61
+ --sc-glass-surface-hover:
62
+ linear-gradient(170deg, var(--sc-glass-highlight), transparent 38%) padding-box,
63
+ linear-gradient(var(--sc-color-glass-hover), var(--sc-color-glass-hover)) padding-box;
64
+ --sc-glass-sheen: inset 0 1px 0 #ffffff;
65
+ --sc-glass-lift: 0 0.5rem 1.5rem #1f268714, 0 1px 2px #1f26870f;
66
+ /* A surface inside a pane: no blur of its own, white with a little of the pane let through. */
67
+ --sc-color-sheet: color-mix(in srgb, var(--sc-color-bg-raised) 82%, transparent);
68
+ --sc-color-sheet-hover: color-mix(in srgb, var(--sc-color-bg-raised) 96%, transparent);
69
+
70
+ /* A lit thing casts the accent's own colour downward, in layers that fall off the way
71
+ brightness does. */
89
72
  --sc-glow:
90
- 0 0.125rem 0.5rem -0.25rem color-mix(in srgb, var(--sc-color-accent-hover) 38%, transparent),
91
- 0 0.5rem 1.25rem -0.5rem color-mix(in srgb, var(--sc-color-accent) 22%, transparent),
92
- 0 1.25rem 3rem -1rem color-mix(in srgb, var(--sc-color-accent) 11%, transparent);
93
- --sc-glow-bright:
94
- 0 0.125rem 0.5rem -0.25rem color-mix(in srgb, var(--sc-color-accent-hover) 70%, transparent),
95
- 0 0.5rem 1.25rem -0.5rem color-mix(in srgb, var(--sc-color-accent) 45%, transparent),
96
- 0 1.25rem 3rem -1rem color-mix(in srgb, var(--sc-color-accent) 24%, transparent);
97
- --sc-shadow-stage: 0 1.5rem 5rem #00000033;
73
+ 0 0.125rem 0.5rem -0.25rem color-mix(in srgb, var(--sc-color-accent-solid) 40%, transparent),
74
+ 0 0.5rem 1.25rem -0.5rem color-mix(in srgb, var(--sc-color-accent-solid) 22%, transparent),
75
+ 0 1.25rem 3rem -1rem color-mix(in srgb, var(--sc-color-accent-solid) 11%, transparent);
76
+ --sc-shadow-stage: 0 1.25rem 3.5rem #1a2b552e;
98
77
 
99
78
  /* Type. The Korean face comes first where the page provides it; the Latin stays with the
100
79
  system's faces. */
@@ -105,8 +84,8 @@
105
84
  ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, "Liberation Mono", "D2Coding",
106
85
  monospace;
107
86
 
108
- --sc-text-xs: 0.75rem;
109
- --sc-text-sm: 0.875rem;
87
+ --sc-text-xs: 0.8125rem;
88
+ --sc-text-sm: 0.9375rem;
110
89
  --sc-text-md: 1rem;
111
90
  --sc-text-lg: 1.125rem;
112
91
  --sc-text-xl: 1.375rem;
@@ -114,6 +93,10 @@
114
93
  --sc-leading-tight: 1.2;
115
94
  --sc-leading-normal: 1.6;
116
95
  --sc-leading-code: 1.7;
96
+ --sc-leading-snug: 1.45;
97
+ --sc-tracking-tight: -0.02em;
98
+ --sc-tracking-wide: 0.04em;
99
+ --sc-tracking-code: 0.12em;
117
100
  --sc-weight-normal: 400;
118
101
  --sc-weight-medium: 500;
119
102
  --sc-weight-bold: 650;
@@ -139,20 +122,39 @@
139
122
  --sc-radius-xl: 20px;
140
123
  --sc-radius-full: 999px;
141
124
  --sc-border: 1px solid var(--sc-color-border);
125
+ --sc-hairline: 1px solid color-mix(in srgb, var(--sc-color-border) 70%, transparent);
126
+ --sc-border-strong: 1px solid var(--sc-color-border-strong);
142
127
 
143
128
  /* Layout. */
144
- --sc-width-page: 84rem;
129
+ --sc-gutter: var(--sc-space-7);
145
130
  --sc-width-prose: 46rem;
146
131
  --sc-width-aside: 18rem;
147
132
  --sc-column-width: 13.5rem;
148
133
  --sc-header-height: 3.75rem;
149
- --sc-brand-size: 1rem;
150
- --sc-brand-size-compact: 0.875rem;
134
+ /* The lockup: the symbol's size, and the wordmark's height and the room between them as
135
+ fractions of it, the fractions those of the brand's lockup file (the wordmark 73.77 tall
136
+ on a symbol of 100, 31.98 between them). */
137
+ --sc-brand-size: 1.375rem;
138
+ --sc-brand-size-compact: 1.25rem;
139
+ --sc-brand-wordmark-ratio: 0.7377;
140
+ --sc-brand-gap-ratio: 0.3198;
151
141
  --sc-control-size: 2.5rem;
152
142
  --sc-focus-ring: 2px solid var(--sc-color-accent);
143
+ /* A scrollbar's thumb: a light grey, there when it is needed and quiet otherwise. */
144
+ --sc-scrollbar-thumb: color-mix(in srgb, var(--sc-color-border-strong) 45%, transparent);
145
+ /* A select's chevron: a thin stroke in a grey that reads on a light field and a dark one. */
146
+ --sc-select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%235a6371' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
153
147
  --sc-transition: 120ms ease-out;
154
148
  }
155
149
 
150
+ /* A page in Korean (the pages say their language on <html>): Hangul fills more of its box than
151
+ Latin capitals and sits higher in it, so a label is lifted less, and the tracking is off. */
152
+ :root:lang(ko) {
153
+ --sc-label-lift: -0.083em;
154
+ --sc-tracking-tight: 0;
155
+ --sc-tracking-wide: 0;
156
+ }
157
+
156
158
  /* Reset: only what the pages need. */
157
159
 
158
160
  *,
@@ -164,6 +166,10 @@
164
166
  html {
165
167
  -webkit-text-size-adjust: 100%;
166
168
  text-size-adjust: 100%;
169
+ /* The room for a scrollbar is kept on every page, so that a page that scrolls and one that does
170
+ not put the header and the page at the same place. */
171
+ scrollbar-gutter: stable;
172
+ scrollbar-color: var(--sc-scrollbar-thumb) transparent;
167
173
  scroll-padding-top: calc(var(--sc-header-height) + var(--sc-space-6));
168
174
  }
169
175
 
@@ -205,7 +211,7 @@ h3,
205
211
  h4 {
206
212
  line-height: var(--sc-leading-tight);
207
213
  font-weight: var(--sc-weight-bold);
208
- letter-spacing: -0.01em;
214
+ letter-spacing: var(--sc-tracking-tight);
209
215
  text-wrap: balance;
210
216
  }
211
217
 
@@ -222,7 +228,7 @@ a {
222
228
  }
223
229
 
224
230
  a:hover {
225
- color: var(--sc-color-accent-hover);
231
+ color: color-mix(in srgb, var(--sc-color-accent) 85%, #000);
226
232
  }
227
233
 
228
234
  code,
@@ -262,7 +268,7 @@ table {
262
268
  }
263
269
 
264
270
  ::selection {
265
- background: var(--sc-color-selection);
271
+ background: color-mix(in srgb, var(--sc-color-accent-solid) 25%, transparent);
266
272
  color: var(--sc-color-accent-contrast);
267
273
  }
268
274
 
@@ -319,53 +325,12 @@ table {
319
325
  flex-direction: column;
320
326
  min-height: 100dvh;
321
327
  overflow-x: clip;
322
- background-color: var(--sc-color-sky);
323
- /* The far light: low, wide and vague, which is what distance does to a light. */
324
- background-image: radial-gradient(
325
- ellipse 120% 64% at 50% 92%,
326
- var(--sc-color-far),
327
- var(--sc-color-far-turn) 48%,
328
- transparent 72%
329
- );
328
+ background-color: var(--sc-color-bg);
329
+ /* Fixed to the window, so that the page travels over the field and the field stays. */
330
+ background-image: var(--sc-field-gradient);
330
331
  background-attachment: fixed;
331
332
  }
332
333
 
333
- /* The near light, high behind the header: an ellipse that is blurred rather than a gradient,
334
- because a blur falls off the way light does. Fixed to the window, so that the page travels
335
- through the light and the light stays where it is. */
336
- .sc-shell::before {
337
- content: "";
338
- position: fixed;
339
- z-index: -1;
340
- top: var(--sc-light-top);
341
- left: var(--sc-light-inset);
342
- right: var(--sc-light-inset);
343
- height: var(--sc-light-height);
344
- background: radial-gradient(
345
- ellipse closest-side,
346
- var(--sc-color-light-core) 0%,
347
- var(--sc-color-light-body) 14%,
348
- var(--sc-color-light-mid) 42%,
349
- var(--sc-color-light-halo) 70%,
350
- transparent 100%
351
- );
352
- filter: blur(var(--sc-light-blur));
353
- opacity: var(--sc-light-strength);
354
- pointer-events: none;
355
- }
356
-
357
- /* The air over both lights: the corners and the foot of the window taken down. */
358
- .sc-shell::after {
359
- content: "";
360
- position: fixed;
361
- z-index: -1;
362
- inset: 0;
363
- background-image:
364
- linear-gradient(to bottom, transparent 60%, var(--sc-color-vignette)),
365
- radial-gradient(ellipse 130% 110% at 50% 30%, transparent 36%, var(--sc-color-vignette) 100%);
366
- pointer-events: none;
367
- }
368
-
369
334
  .sc-skip {
370
335
  position: absolute;
371
336
  top: var(--sc-space-2);
@@ -388,8 +353,8 @@ table {
388
353
  top: 0;
389
354
  z-index: 10;
390
355
  border-bottom: var(--sc-border);
391
- background: color-mix(in srgb, var(--sc-color-bg) 82%, transparent);
392
- backdrop-filter: blur(12px) saturate(1.4);
356
+ background: color-mix(in srgb, var(--sc-color-bg) 70%, transparent);
357
+ backdrop-filter: var(--sc-glass-backdrop);
393
358
  }
394
359
 
395
360
  .sc-header-inner {
@@ -397,22 +362,21 @@ table {
397
362
  align-items: center;
398
363
  gap: var(--sc-space-4);
399
364
  width: 100%;
400
- max-width: var(--sc-width-page);
401
365
  height: var(--sc-header-height);
402
- margin-inline: auto;
403
- padding-inline: var(--sc-space-5);
366
+ padding-inline: var(--sc-gutter);
404
367
  }
405
368
 
406
369
  /* The brand: the lockup of the symbol and the wordmark where the console has marks, the name
407
- of the workspace where it has none. The lockup stands as tall as the words beside it. */
370
+ of the workspace where it has none. The symbol, the wordmark and the room between them keep
371
+ the proportions of the brand's lockup file. */
408
372
  .sc-brand {
409
373
  display: inline-flex;
410
374
  flex: none;
411
375
  align-items: center;
412
- gap: var(--sc-space-2);
376
+ gap: calc(var(--sc-brand-size) * var(--sc-brand-gap-ratio));
413
377
  color: var(--sc-color-text);
414
378
  font-weight: var(--sc-weight-bold);
415
- letter-spacing: -0.01em;
379
+ letter-spacing: var(--sc-tracking-tight);
416
380
  text-decoration: none;
417
381
  white-space: nowrap;
418
382
  }
@@ -428,7 +392,7 @@ table {
428
392
 
429
393
  .sc-brand-wordmark {
430
394
  width: auto;
431
- height: var(--sc-brand-size);
395
+ height: calc(var(--sc-brand-size) * var(--sc-brand-wordmark-ratio));
432
396
  }
433
397
 
434
398
  .sc-brand-name {
@@ -473,10 +437,8 @@ table {
473
437
  the tabs scroll sideways where they do not fit, and nothing in the bar ever scrolls down. */
474
438
  .sc-tabs {
475
439
  width: 100%;
476
- max-width: var(--sc-width-page);
477
- margin-inline: auto;
478
440
  margin-bottom: -1px;
479
- padding-inline: var(--sc-space-5);
441
+ padding-inline: var(--sc-gutter);
480
442
  overflow: auto hidden;
481
443
  scrollbar-width: none;
482
444
  }
@@ -531,7 +493,7 @@ table {
531
493
  display: flex;
532
494
  flex: none;
533
495
  align-items: center;
534
- gap: var(--sc-space-3);
496
+ gap: 0;
535
497
  margin-left: auto;
536
498
  }
537
499
 
@@ -543,9 +505,9 @@ table {
543
505
  .sc-menu-summary {
544
506
  display: flex;
545
507
  align-items: center;
546
- gap: var(--sc-space-2);
508
+ gap: 0.375rem;
547
509
  min-height: var(--sc-control-size);
548
- padding-inline: var(--sc-space-2);
510
+ padding-inline: var(--sc-space-1) var(--sc-space-2);
549
511
  border-radius: var(--sc-radius-md);
550
512
  color: var(--sc-color-text-muted);
551
513
  list-style: none;
@@ -641,16 +603,32 @@ table {
641
603
  border-top: var(--sc-border);
642
604
  }
643
605
 
644
- .sc-menu-heading {
645
- display: block;
646
- padding: var(--sc-space-1) var(--sc-space-3);
606
+ /* The small capitals over a group: a menu's heading, a field's label, a fact's name, a day of the
607
+ feed, a table's head. `.sc-eyebrow` is the class for a label of your own. */
608
+ .sc-eyebrow,
609
+ .sc-menu-heading,
610
+ .sc-field-label,
611
+ .sc-facts dt,
612
+ .sc-feed-day-title,
613
+ .sc-report > .sc-time,
614
+ .sc-task-aside .sc-section-title,
615
+ .sc-decision-label,
616
+ .sc-calendar-grid th,
617
+ .sc-workload thead th,
618
+ .sc-goal-tasks-state,
619
+ .sc-facts-row dt {
647
620
  color: var(--sc-color-text-faint);
648
621
  font-size: var(--sc-text-xs);
649
622
  font-weight: var(--sc-weight-medium);
650
- letter-spacing: 0.04em;
623
+ letter-spacing: var(--sc-tracking-wide);
651
624
  text-transform: uppercase;
652
625
  }
653
626
 
627
+ .sc-menu-heading {
628
+ display: block;
629
+ padding: var(--sc-space-1) var(--sc-space-3);
630
+ }
631
+
654
632
  .sc-menu-chosen {
655
633
  color: var(--sc-color-accent);
656
634
  font-weight: var(--sc-weight-medium);
@@ -667,13 +645,12 @@ table {
667
645
  .sc-live {
668
646
  width: 0.5rem;
669
647
  height: 0.5rem;
670
- border-radius: 50%;
648
+ border-radius: var(--sc-radius-full);
671
649
  background: var(--sc-color-text-faint);
672
650
  }
673
651
 
674
652
  .sc-live-on {
675
653
  background: var(--sc-color-success);
676
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--sc-color-success) 25%, transparent);
677
654
  }
678
655
 
679
656
  /* The page. */
@@ -685,29 +662,32 @@ table {
685
662
  flex: 1;
686
663
  flex-direction: column;
687
664
  width: 100%;
688
- max-width: var(--sc-width-page);
689
- margin-inline: auto;
690
- padding: var(--sc-space-6) var(--sc-space-5) var(--sc-space-8);
665
+ padding: var(--sc-space-6) var(--sc-gutter) var(--sc-space-8);
691
666
  }
692
667
 
693
- /* A page as wide as the window: the board, whose columns want every bit of it. */
668
+ /* A page as wide as the window: the board, whose columns want every bit of it. It starts at the
669
+ same height as the other pages and, being as tall as the window, ends with the same room. */
694
670
  .sc-main-wide {
695
671
  max-width: none;
696
- padding: var(--sc-space-5) var(--sc-space-4) var(--sc-space-4);
672
+ padding: var(--sc-space-6) var(--sc-gutter);
697
673
  }
698
674
 
675
+ /* A page that takes the whole window takes the header with it, so that the lockup, the tabs and
676
+ the page start on one line, as they do on every other page. */
699
677
  .sc-page-head {
700
678
  display: flex;
701
679
  flex-wrap: wrap;
702
- align-items: center;
680
+ align-items: baseline;
703
681
  justify-content: space-between;
704
682
  gap: var(--sc-space-3);
705
- margin-bottom: var(--sc-space-4);
683
+ margin-bottom: var(--sc-space-5);
684
+ padding-bottom: var(--sc-space-4);
685
+ border-bottom: var(--sc-hairline);
706
686
  }
707
687
 
708
688
  .sc-page-title {
709
689
  font-size: var(--sc-text-2xl);
710
- letter-spacing: -0.02em;
690
+ letter-spacing: var(--sc-tracking-tight);
711
691
  }
712
692
 
713
693
  /* The ways a page offers at its head, side by side. */
@@ -755,6 +735,8 @@ table {
755
735
  /* On the wide page the head and the lead keep out of the board's way. */
756
736
  .sc-main-wide .sc-page-head {
757
737
  margin-bottom: var(--sc-space-3);
738
+ padding-bottom: 0;
739
+ border-bottom: 0;
758
740
  }
759
741
 
760
742
  .sc-main-wide .sc-lead {
@@ -770,6 +752,15 @@ table {
770
752
  font-size: var(--sc-text-lg);
771
753
  }
772
754
 
755
+ /* After the name of a section a line runs to the end: the section starts here. */
756
+ .sc-section-title::after {
757
+ content: "";
758
+ flex: 1;
759
+ height: 1px;
760
+ margin-inline-start: var(--sc-space-2);
761
+ background: var(--sc-color-border);
762
+ }
763
+
773
764
  /*
774
765
  * Panes: the surfaces of the page are glass over the field. A pane is a veil of the page's own
775
766
  * dark over a blur of what is behind it, with a thin lit edge; two panes differ only in what
@@ -787,37 +778,17 @@ table {
787
778
  .sc-facts {
788
779
  position: relative;
789
780
  isolation: isolate;
790
- border: 1px solid transparent;
781
+ border: 1px solid var(--sc-color-glass-edge);
791
782
  background: var(--sc-glass-surface);
792
783
  backdrop-filter: var(--sc-glass-backdrop);
793
784
  box-shadow: var(--sc-glass-sheen), var(--sc-glass-lift);
794
785
  }
795
786
 
796
- .sc-panel::before,
797
- .sc-column::before,
798
- .sc-project::before,
799
- .sc-decision::before,
800
- .sc-run::before,
801
- .sc-comment::before,
802
- .sc-sign-in::before,
803
- .sc-facts::before {
804
- content: "";
805
- position: absolute;
806
- inset: 0;
807
- z-index: -1;
808
- padding: var(--sc-glass-lens-width);
809
- border-radius: inherit;
810
- background: var(--sc-color-glass-edge);
811
- backdrop-filter: var(--sc-glass-lens);
812
- mask: var(--sc-glass-lens-mask);
813
- mask-composite: exclude;
814
- pointer-events: none;
815
- }
816
-
817
- /* A column's frame stands in front of what scrolls within it: a card scrolling out goes under
818
- the lit edge, never over it. The other panes do not scroll, and keep the rim under the content. */
819
- .sc-column::before {
820
- z-index: 1;
787
+ /* A column of the board has no rim and no lift: its glass alone parts it from the field, so that
788
+ no line runs down its sides and the gaps between columns stay as light as the field. */
789
+ .sc-column {
790
+ border-color: transparent;
791
+ box-shadow: var(--sc-glass-sheen);
821
792
  }
822
793
 
823
794
  .sc-panel {
@@ -836,13 +807,13 @@ table {
836
807
  .sc-person-row,
837
808
  .sc-skill,
838
809
  .sc-doc-row,
839
- .sc-feed-item,
840
810
  .sc-card,
841
811
  .sc-option,
842
812
  .sc-answer,
843
813
  .sc-report-list {
844
814
  border: var(--sc-border);
845
815
  background: var(--sc-color-sheet);
816
+ box-shadow: 0 1px 2px #1f26870f;
846
817
  }
847
818
 
848
819
  .sc-loading {
@@ -894,18 +865,19 @@ table {
894
865
  }
895
866
 
896
867
  .sc-button-primary:hover:not(:disabled) {
897
- background: var(--sc-color-accent-solid-hover);
868
+ background: color-mix(in srgb, var(--sc-color-accent-solid) 90%, #000);
898
869
  color: var(--sc-color-accent-contrast);
899
- box-shadow: var(--sc-glow-bright);
870
+ box-shadow: var(--sc-glow);
900
871
  }
901
872
 
902
873
  .sc-button-secondary {
903
- background: var(--sc-color-field);
904
- border-color: var(--sc-color-border-strong);
874
+ background: var(--sc-color-bg-raised);
875
+ border-color: var(--sc-color-border);
905
876
  color: var(--sc-color-text);
906
877
  }
907
878
 
908
879
  .sc-button-secondary:hover:not(:disabled) {
880
+ border-color: var(--sc-color-border-strong);
909
881
  background: var(--sc-color-bg-raised);
910
882
  color: var(--sc-color-text);
911
883
  }
@@ -933,24 +905,45 @@ table {
933
905
 
934
906
  /* Badges: a pill on the grid, its label lifted to the middle of it. */
935
907
 
908
+ /* A badge is a small pill: a hair of room above and below its word, a little more at its sides,
909
+ so that a row of them on a card stays low. */
936
910
  .sc-badge {
937
911
  display: inline-flex;
938
912
  align-items: center;
939
913
  gap: var(--sc-space-1);
940
- padding-inline: var(--sc-space-2);
941
- padding-block: calc(var(--sc-space-1) - var(--sc-label-lift))
942
- calc(var(--sc-space-1) + var(--sc-label-lift));
943
- border: 1px solid var(--sc-color-border);
914
+ padding-inline: calc(var(--sc-space-1) * 1.5);
915
+ padding-block: calc(var(--sc-space-1) / 2 - var(--sc-label-lift))
916
+ calc(var(--sc-space-1) / 2 + var(--sc-label-lift));
917
+ border: var(--sc-border);
944
918
  border-radius: var(--sc-radius-full);
945
919
  font-size: var(--sc-text-xs);
946
920
  font-weight: var(--sc-weight-medium);
947
- line-height: 1.25;
921
+ line-height: var(--sc-leading-snug);
948
922
  white-space: nowrap;
949
923
  }
950
924
 
925
+ /* Where the browser can fit a line box to the glyphs, a badge's words are centred on their
926
+ cap height and baseline, whatever script they are in; the lift above is for where it cannot. */
927
+ @supports (text-box: trim-both cap alphabetic) {
928
+ .sc-badge {
929
+ padding-block: var(--sc-space-1) calc(var(--sc-space-1) - 1px);
930
+ line-height: 1;
931
+ text-box: trim-both cap alphabetic;
932
+ }
933
+ }
934
+
935
+ /*
936
+ * The tones of a badge, each a meaning: neutral for what merely is; accent (blue) for what is at
937
+ * work; success (green) for what is done; warning (amber) for what wants attention soon; point
938
+ * (orange) for what presses now, or is someone's; danger (red) for what is late or has failed.
939
+ * Each is a soft fill with its words in the same hue and no line around it, the categories
940
+ * alike, so that every badge on a page is one kind of pill; the fills are deep enough to stand
941
+ * off the sheet on their own.
942
+ */
951
943
  .sc-badge-neutral {
952
- background: var(--sc-color-bg-subtle);
953
- color: var(--sc-color-text-muted);
944
+ border-color: transparent;
945
+ background: #dfe3eb;
946
+ color: #3f4756;
954
947
  }
955
948
 
956
949
  .sc-badge-accent {
@@ -972,11 +965,11 @@ table {
972
965
  color: var(--sc-color-success);
973
966
  }
974
967
 
975
- /* A state and not a fill: the warm colour is on the words and the line stays a line. */
968
+ /* Words on a yellow fill are a warm charcoal: a dark yellow reads as a muddy brown. */
976
969
  .sc-badge-warning {
977
- background: var(--sc-color-bg-subtle);
978
- border-color: var(--sc-color-border-strong);
979
- color: var(--sc-color-warning);
970
+ background: var(--sc-color-warning-subtle);
971
+ border-color: transparent;
972
+ color: #44403c;
980
973
  }
981
974
 
982
975
  .sc-badge-danger {
@@ -992,7 +985,7 @@ table {
992
985
  aspect-ratio: 1;
993
986
  object-fit: cover;
994
987
  border: var(--sc-border);
995
- border-radius: 22%;
988
+ border-radius: var(--sc-radius-full);
996
989
  background: var(--sc-color-bg-inset);
997
990
  }
998
991
 
@@ -1037,6 +1030,12 @@ table {
1037
1030
  font-weight: var(--sc-weight-medium);
1038
1031
  }
1039
1032
 
1033
+ /* The picture in the menu's label sits in the control with a little room around it. */
1034
+ .sc-menu-summary .sc-avatar {
1035
+ width: 1.75rem;
1036
+ height: 1.75rem;
1037
+ }
1038
+
1040
1039
  /* In the menu's label a long name gives way before the header runs out of room. */
1041
1040
  .sc-menu-summary .sc-person-login {
1042
1041
  max-width: 11rem;
@@ -1053,7 +1052,7 @@ table {
1053
1052
  gap: var(--sc-space-4);
1054
1053
  margin-bottom: var(--sc-space-4);
1055
1054
  padding: var(--sc-space-4);
1056
- border: 1px solid var(--sc-color-border-strong);
1055
+ border: var(--sc-border);
1057
1056
  border-radius: var(--sc-radius-md);
1058
1057
  background: var(--sc-color-sheet);
1059
1058
  font-size: var(--sc-text-sm);
@@ -1087,7 +1086,7 @@ table {
1087
1086
 
1088
1087
  .sc-empty {
1089
1088
  padding: var(--sc-space-7) var(--sc-space-5);
1090
- border: 1px dashed var(--sc-color-border-strong);
1089
+ border: 1px dashed var(--sc-color-border);
1091
1090
  border-radius: var(--sc-radius-lg);
1092
1091
  text-align: center;
1093
1092
  }
@@ -1116,7 +1115,7 @@ table {
1116
1115
  height: 1.25rem;
1117
1116
  border: 2px solid var(--sc-color-border-strong);
1118
1117
  border-top-color: var(--sc-color-accent);
1119
- border-radius: 50%;
1118
+ border-radius: var(--sc-radius-full);
1120
1119
  }
1121
1120
 
1122
1121
  /* The ring turns whatever the motion preference: it says that the page still waits, and a ring
@@ -1167,10 +1166,6 @@ table {
1167
1166
 
1168
1167
  .sc-field-label {
1169
1168
  color: var(--sc-color-text-muted);
1170
- font-size: var(--sc-text-xs);
1171
- font-weight: var(--sc-weight-medium);
1172
- letter-spacing: 0.04em;
1173
- text-transform: uppercase;
1174
1169
  }
1175
1170
 
1176
1171
  .sc-field-row {
@@ -1184,9 +1179,9 @@ table {
1184
1179
  width: 100%;
1185
1180
  min-height: var(--sc-control-size);
1186
1181
  padding: var(--sc-space-2) var(--sc-space-3);
1187
- border: 1px solid var(--sc-color-border-strong);
1182
+ border: var(--sc-border-strong);
1188
1183
  border-radius: var(--sc-radius-md);
1189
- background: var(--sc-color-field);
1184
+ background: var(--sc-color-bg-raised);
1190
1185
  color: var(--sc-color-text);
1191
1186
  font-size: var(--sc-text-sm);
1192
1187
  transition:
@@ -1198,6 +1193,38 @@ table {
1198
1193
  color: var(--sc-color-text-faint);
1199
1194
  }
1200
1195
 
1196
+ /* A file field: as tall as any other field, what it holds on one line with its button, and
1197
+ the button the browser gives it drawn as a small button of the console's own. */
1198
+ .sc-input[type="file"] {
1199
+ display: flex;
1200
+ align-items: center;
1201
+ padding-block: 0;
1202
+ color: var(--sc-color-text-muted);
1203
+ line-height: var(--sc-leading-snug);
1204
+ cursor: pointer;
1205
+ }
1206
+
1207
+ .sc-input[type="file"]::file-selector-button {
1208
+ margin-inline-end: var(--sc-space-3);
1209
+ padding: calc(var(--sc-space-1) + 1px) var(--sc-space-3);
1210
+ border: var(--sc-border);
1211
+ border-radius: var(--sc-radius-sm);
1212
+ background: var(--sc-color-sheet);
1213
+ color: var(--sc-color-text);
1214
+ font: inherit;
1215
+ font-size: var(--sc-text-xs);
1216
+ font-weight: var(--sc-weight-medium);
1217
+ cursor: pointer;
1218
+ transition:
1219
+ background var(--sc-transition),
1220
+ border-color var(--sc-transition);
1221
+ }
1222
+
1223
+ .sc-input[type="file"]:hover::file-selector-button {
1224
+ border-color: var(--sc-color-border-strong);
1225
+ background: var(--sc-color-sheet-hover);
1226
+ }
1227
+
1201
1228
  .sc-input:hover:not(:disabled) {
1202
1229
  border-color: color-mix(in srgb, var(--sc-color-border-strong) 60%, var(--sc-color-accent));
1203
1230
  }
@@ -1209,10 +1236,22 @@ table {
1209
1236
  }
1210
1237
 
1211
1238
  .sc-input:disabled {
1212
- opacity: 0.6;
1239
+ opacity: 0.55;
1213
1240
  cursor: not-allowed;
1214
1241
  }
1215
1242
 
1243
+ /* A select draws the browser's chevron itself, a thin stroke, as far from the edge as the words
1244
+ are from the other one: the browser's own arrow sits on the border and takes no padding. The
1245
+ chevron is a picture held in a token, so that a console of its own may draw its own. */
1246
+ select.sc-input {
1247
+ appearance: none;
1248
+ padding-right: calc(var(--sc-space-3) * 2 + 0.625rem);
1249
+ background-image: var(--sc-select-chevron);
1250
+ background-position: right var(--sc-space-3) center;
1251
+ background-size: 0.625rem 0.375rem;
1252
+ background-repeat: no-repeat;
1253
+ }
1254
+
1216
1255
  /* What people write is prose first, so the box they write in is set in the page's own face. */
1217
1256
  .sc-textarea {
1218
1257
  min-height: 6rem;
@@ -1238,6 +1277,150 @@ table {
1238
1277
  justify-self: start;
1239
1278
  }
1240
1279
 
1280
+ /* The workers of a task on its form: each a chip with the way to take them off, and the way to add one. */
1281
+ .sc-chips {
1282
+ display: flex;
1283
+ flex-wrap: wrap;
1284
+ align-items: center;
1285
+ gap: var(--sc-space-2);
1286
+ }
1287
+
1288
+ .sc-chip {
1289
+ display: inline-flex;
1290
+ align-items: center;
1291
+ gap: var(--sc-space-1);
1292
+ min-height: var(--sc-control-size);
1293
+ padding: 0 var(--sc-space-1) 0 var(--sc-space-2);
1294
+ border: var(--sc-border);
1295
+ border-radius: var(--sc-radius-md);
1296
+ background: var(--sc-color-bg-inset);
1297
+ font-size: var(--sc-text-sm);
1298
+ }
1299
+
1300
+ .sc-chip-remove,
1301
+ .sc-picker-clear {
1302
+ display: inline-grid;
1303
+ flex: none;
1304
+ place-items: center;
1305
+ width: 1.5rem;
1306
+ height: 1.5rem;
1307
+ border: 0;
1308
+ border-radius: var(--sc-radius-sm);
1309
+ background: transparent;
1310
+ color: var(--sc-color-text-muted);
1311
+ font-size: var(--sc-text-md);
1312
+ line-height: 1;
1313
+ cursor: pointer;
1314
+ }
1315
+
1316
+ .sc-chip-remove:hover:not(:disabled),
1317
+ .sc-picker-clear:hover:not(:disabled) {
1318
+ background: var(--sc-color-bg-raised);
1319
+ color: var(--sc-color-text);
1320
+ }
1321
+
1322
+ .sc-chip-remove:focus-visible,
1323
+ .sc-picker-clear:focus-visible {
1324
+ outline: var(--sc-focus-ring);
1325
+ }
1326
+
1327
+ .sc-chips .sc-chip-add {
1328
+ width: auto;
1329
+ min-width: 10rem;
1330
+ }
1331
+
1332
+ /* A picker: the field that searches a listing, its page of results under it, and the choice in its place. */
1333
+ .sc-picker {
1334
+ position: relative;
1335
+ min-width: 0;
1336
+ }
1337
+
1338
+ .sc-picker-chosen {
1339
+ display: flex;
1340
+ align-items: center;
1341
+ gap: var(--sc-space-2);
1342
+ min-height: var(--sc-control-size);
1343
+ padding: var(--sc-space-1) var(--sc-space-1) var(--sc-space-1) var(--sc-space-3);
1344
+ border: var(--sc-border);
1345
+ border-radius: var(--sc-radius-md);
1346
+ background: var(--sc-color-bg-raised);
1347
+ font-size: var(--sc-text-sm);
1348
+ }
1349
+
1350
+ .sc-picker-value {
1351
+ flex: 1;
1352
+ min-width: 0;
1353
+ overflow: hidden;
1354
+ text-overflow: ellipsis;
1355
+ white-space: nowrap;
1356
+ }
1357
+
1358
+ .sc-picker-list {
1359
+ position: absolute;
1360
+ z-index: 40;
1361
+ top: calc(100% + var(--sc-space-1));
1362
+ right: 0;
1363
+ left: 0;
1364
+ max-height: 18rem;
1365
+ margin: 0;
1366
+ padding: var(--sc-space-1);
1367
+ overflow-y: auto;
1368
+ list-style: none;
1369
+ border: var(--sc-border);
1370
+ border-radius: var(--sc-radius-md);
1371
+ background: var(--sc-color-bg-inset);
1372
+ box-shadow: var(--sc-shadow-stage);
1373
+ font-size: var(--sc-text-sm);
1374
+ }
1375
+
1376
+ /* Where the window has no room below the field, and more above, the list stands above it. */
1377
+ .sc-picker-list-above {
1378
+ top: auto;
1379
+ bottom: calc(100% + var(--sc-space-1));
1380
+ }
1381
+
1382
+ .sc-picker-option {
1383
+ padding: var(--sc-space-2);
1384
+ overflow: hidden;
1385
+ border-radius: var(--sc-radius-sm);
1386
+ text-overflow: ellipsis;
1387
+ white-space: nowrap;
1388
+ cursor: pointer;
1389
+ }
1390
+
1391
+ .sc-picker-option-active {
1392
+ background: var(--sc-color-bg-raised);
1393
+ }
1394
+
1395
+ .sc-picker-note {
1396
+ padding: var(--sc-space-2);
1397
+ }
1398
+
1399
+ /* The workers of a task on a card or a row: pictures side by side, and how many more. */
1400
+ .sc-workers {
1401
+ display: inline-flex;
1402
+ align-items: center;
1403
+ }
1404
+
1405
+ .sc-workers > * + * {
1406
+ margin-left: -0.375rem;
1407
+ }
1408
+
1409
+ .sc-workers-more {
1410
+ margin-inline: var(--sc-space-1);
1411
+ color: var(--sc-color-text-muted);
1412
+ font-size: var(--sc-text-xs);
1413
+ font-weight: var(--sc-weight-medium);
1414
+ }
1415
+
1416
+ .sc-worker-list {
1417
+ display: grid;
1418
+ gap: var(--sc-space-1);
1419
+ margin: 0;
1420
+ padding: 0;
1421
+ list-style: none;
1422
+ }
1423
+
1241
1424
  .sc-form-actions {
1242
1425
  display: flex;
1243
1426
  flex-wrap: wrap;
@@ -1254,22 +1437,22 @@ table {
1254
1437
  scroll sideways when it is not, and each column scrolls within itself. */
1255
1438
 
1256
1439
  .sc-board {
1257
- display: grid;
1440
+ display: flex;
1258
1441
  flex: 1 1 0;
1259
- grid-auto-flow: column;
1260
- grid-auto-columns: minmax(var(--sc-column-width), 1fr);
1261
- grid-template-rows: minmax(0, 1fr);
1442
+ align-items: stretch;
1262
1443
  gap: var(--sc-space-3);
1263
1444
  min-height: 24rem;
1264
1445
  overflow-x: auto;
1265
1446
  scroll-snap-type: x proximity;
1266
1447
  scrollbar-width: thin;
1267
- scrollbar-color: var(--sc-color-border-strong) transparent;
1448
+ scrollbar-color: var(--sc-scrollbar-thumb) transparent;
1268
1449
  }
1269
1450
 
1270
1451
  .sc-column {
1271
1452
  display: flex;
1453
+ flex: 1 0 var(--sc-column-width);
1272
1454
  flex-direction: column;
1455
+ min-width: 0;
1273
1456
  min-height: 0;
1274
1457
  /* The body scrolls; the column clips, so that nothing of it reaches the board's own scrolling. */
1275
1458
  overflow: hidden;
@@ -1287,27 +1470,76 @@ table {
1287
1470
  }
1288
1471
 
1289
1472
  .sc-column-header h2 {
1290
- font-size: var(--sc-text-xs);
1473
+ font-size: var(--sc-text-sm);
1291
1474
  font-weight: var(--sc-weight-bold);
1292
- letter-spacing: 0.06em;
1293
- text-transform: uppercase;
1294
1475
  }
1295
1476
 
1296
- .sc-column-count {
1297
- display: inline-flex;
1298
- align-items: center;
1299
- justify-content: center;
1300
- min-width: 1.5rem;
1301
- padding-inline: var(--sc-space-2);
1302
- border-radius: var(--sc-radius-full);
1303
- background: var(--sc-color-bg-inset);
1477
+ /* The name of a column stands first; its count and the way to fold it keep to the end. */
1478
+ .sc-column-header > .sc-column-title {
1479
+ margin-inline-end: auto;
1480
+ }
1481
+
1482
+ /* The way to fold a column of finished work, or to open it again. */
1483
+ .sc-column-toggle {
1484
+ display: inline-grid;
1485
+ flex: none;
1486
+ place-items: center;
1487
+ width: 1.5rem;
1488
+ height: 1.5rem;
1489
+ padding: 0;
1490
+ border: 0;
1491
+ border-radius: var(--sc-radius-sm);
1492
+ background: transparent;
1304
1493
  color: var(--sc-color-text-muted);
1305
- font-size: var(--sc-text-xs);
1306
- font-weight: var(--sc-weight-medium);
1307
- line-height: 1.5rem;
1494
+ transition:
1495
+ background var(--sc-transition),
1496
+ color var(--sc-transition);
1308
1497
  }
1309
1498
 
1310
- .sc-column-in_progress .sc-column-title,
1499
+ .sc-column-toggle:hover {
1500
+ background: var(--sc-color-bg-inset);
1501
+ color: var(--sc-color-text);
1502
+ }
1503
+
1504
+ .sc-column-toggle svg {
1505
+ width: 1rem;
1506
+ height: 1rem;
1507
+ }
1508
+
1509
+ /* A folded column is a strip: the way to open it on top, its name down its length, its count. */
1510
+ /* A folded column is its header alone, the height of a header and as wide as its name: the way
1511
+ to open it, the name and the count in a row, at the top of the board. */
1512
+ .sc-column-folded {
1513
+ flex: 0 0 auto;
1514
+ align-self: flex-start;
1515
+ width: auto;
1516
+ }
1517
+
1518
+ .sc-column-folded .sc-column-header {
1519
+ gap: var(--sc-space-2);
1520
+ padding: var(--sc-space-3) var(--sc-space-4) var(--sc-space-3) var(--sc-space-3);
1521
+ border-bottom: 0;
1522
+ }
1523
+
1524
+ .sc-column-folded .sc-column-toggle {
1525
+ order: -1;
1526
+ }
1527
+
1528
+ .sc-column-count {
1529
+ display: inline-flex;
1530
+ align-items: center;
1531
+ justify-content: center;
1532
+ min-width: 1.5rem;
1533
+ padding-inline: var(--sc-space-2);
1534
+ border-radius: var(--sc-radius-full);
1535
+ background: color-mix(in srgb, var(--sc-color-text-muted) 12%, transparent);
1536
+ color: var(--sc-color-text-muted);
1537
+ font-size: var(--sc-text-xs);
1538
+ font-weight: var(--sc-weight-medium);
1539
+ line-height: 1.5rem;
1540
+ }
1541
+
1542
+ .sc-column-in_progress .sc-column-title,
1311
1543
  .sc-column-in_review .sc-column-title {
1312
1544
  color: var(--sc-color-accent);
1313
1545
  }
@@ -1320,22 +1552,38 @@ table {
1320
1552
  color: var(--sc-color-text-faint);
1321
1553
  }
1322
1554
 
1555
+ .sc-column-folded .sc-column-header > .sc-column-title {
1556
+ margin-inline-end: 0;
1557
+ }
1558
+
1559
+ /* The cards of a column scroll within it; where more of them are below, the last one in view
1560
+ fades at the foot rather than being cut, the room below the cards keeping a whole one clear. */
1323
1561
  .sc-column-body {
1324
1562
  display: grid;
1325
1563
  flex: 1;
1326
1564
  align-content: start;
1327
1565
  gap: var(--sc-space-2);
1328
1566
  min-height: 0;
1329
- padding: var(--sc-space-2);
1567
+ padding: var(--sc-space-2) var(--sc-space-2) var(--sc-space-6);
1330
1568
  overflow-y: auto;
1569
+ mask-image: linear-gradient(to bottom, #000 calc(100% - var(--sc-space-6)), transparent);
1331
1570
  scrollbar-width: thin;
1332
- scrollbar-color: var(--sc-color-border-strong) transparent;
1571
+ scrollbar-color: transparent transparent;
1572
+ }
1573
+
1574
+ /* The scrollbar of a column shows only while the pointer is over the column; the fade at the foot
1575
+ says there is more. */
1576
+ .sc-column:hover .sc-column-body,
1577
+ .sc-column-body:focus-within {
1578
+ scrollbar-color: var(--sc-scrollbar-thumb) transparent;
1333
1579
  }
1334
1580
 
1581
+ /* A card is compact, since a column holds many: the number, the title and one row of badges, with
1582
+ the people at its end, and no line between them; what is due reads from the badges as before. */
1335
1583
  .sc-card {
1336
1584
  display: grid;
1337
1585
  gap: var(--sc-space-1);
1338
- padding: var(--sc-space-3);
1586
+ padding: var(--sc-space-2) var(--sc-space-3);
1339
1587
  border-radius: var(--sc-radius-lg);
1340
1588
  transition:
1341
1589
  border-color var(--sc-transition),
@@ -1354,7 +1602,7 @@ table {
1354
1602
  color: var(--sc-color-text);
1355
1603
  font-size: var(--sc-text-sm);
1356
1604
  font-weight: var(--sc-weight-medium);
1357
- line-height: 1.4;
1605
+ line-height: var(--sc-leading-snug);
1358
1606
  text-decoration: none;
1359
1607
  overflow-wrap: anywhere;
1360
1608
  }
@@ -1366,10 +1614,17 @@ table {
1366
1614
  .sc-card-number {
1367
1615
  color: var(--sc-color-text-faint);
1368
1616
  font-family: var(--sc-font-mono);
1369
- font-size: 0.9em;
1617
+ font-size: var(--sc-text-xs);
1370
1618
  font-weight: var(--sc-weight-normal);
1371
1619
  }
1372
1620
 
1621
+ /* On a card the number stands on a line of its own above the title, rather than in its run. */
1622
+ .sc-card-title .sc-card-number {
1623
+ display: block;
1624
+ margin-bottom: var(--sc-space-1);
1625
+ line-height: 1;
1626
+ }
1627
+
1373
1628
  .sc-card-meta {
1374
1629
  display: flex;
1375
1630
  flex-wrap: wrap;
@@ -1386,6 +1641,12 @@ table {
1386
1641
  flex: 1;
1387
1642
  }
1388
1643
 
1644
+ /* The people at work stay at the end of the row, also when the badges push them onto a line of
1645
+ their own. */
1646
+ .sc-card-meta .sc-workers {
1647
+ margin-inline-start: auto;
1648
+ }
1649
+
1389
1650
  /* One task, and a page of the documents: the text in a column for reading, the facts beside it
1390
1651
  where the window is wide enough, under it where it is not. */
1391
1652
 
@@ -1432,8 +1693,20 @@ table {
1432
1693
  }
1433
1694
 
1434
1695
  .sc-task-header {
1696
+ display: flex;
1697
+ flex-wrap: wrap;
1698
+ align-items: flex-start;
1699
+ justify-content: space-between;
1700
+ gap: var(--sc-space-3) var(--sc-space-5);
1701
+ padding-bottom: var(--sc-space-4);
1702
+ border-bottom: var(--sc-hairline);
1703
+ }
1704
+
1705
+ .sc-task-heading {
1435
1706
  display: grid;
1707
+ flex: 1 1 28rem;
1436
1708
  gap: var(--sc-space-2);
1709
+ min-width: 0;
1437
1710
  }
1438
1711
 
1439
1712
  .sc-task-parent {
@@ -1443,12 +1716,12 @@ table {
1443
1716
 
1444
1717
  .sc-task-title {
1445
1718
  font-size: var(--sc-text-2xl);
1446
- letter-spacing: -0.02em;
1719
+ letter-spacing: var(--sc-tracking-tight);
1447
1720
  overflow-wrap: anywhere;
1448
1721
  }
1449
1722
 
1450
1723
  .sc-task-title .sc-card-number {
1451
- font-size: 0.8em;
1724
+ font-size: var(--sc-text-xl);
1452
1725
  }
1453
1726
 
1454
1727
  .sc-task-badges {
@@ -1467,14 +1740,6 @@ table {
1467
1740
  font-size: var(--sc-text-sm);
1468
1741
  }
1469
1742
 
1470
- .sc-facts dt {
1471
- color: var(--sc-color-text-faint);
1472
- font-size: var(--sc-text-xs);
1473
- font-weight: var(--sc-weight-medium);
1474
- letter-spacing: 0.04em;
1475
- text-transform: uppercase;
1476
- }
1477
-
1478
1743
  .sc-facts dd {
1479
1744
  margin-top: var(--sc-space-1);
1480
1745
  }
@@ -1486,18 +1751,47 @@ table {
1486
1751
  gap: var(--sc-space-2);
1487
1752
  }
1488
1753
 
1754
+ .sc-task-header > .sc-task-actions {
1755
+ flex: none;
1756
+ }
1757
+
1489
1758
  .sc-task-section {
1490
1759
  display: grid;
1491
1760
  gap: var(--sc-space-3);
1492
1761
  }
1493
1762
 
1494
- .sc-link-list li + li,
1495
- .sc-subtasks li + li {
1496
- margin-top: var(--sc-space-2);
1763
+ .sc-link-list,
1764
+ .sc-subtasks {
1765
+ display: grid;
1766
+ gap: var(--sc-space-2);
1767
+ margin: 0;
1768
+ padding: 0;
1769
+ list-style: none;
1770
+ }
1771
+
1772
+ .sc-link-list > li,
1773
+ .sc-subtasks > li {
1774
+ display: flex;
1775
+ flex-wrap: wrap;
1776
+ align-items: center;
1777
+ gap: var(--sc-space-2) var(--sc-space-3);
1778
+ padding: var(--sc-space-3) var(--sc-space-4);
1779
+ border: var(--sc-border);
1780
+ border-radius: var(--sc-radius-md);
1781
+ background: var(--sc-color-sheet);
1782
+ font-size: var(--sc-text-sm);
1783
+ overflow-wrap: anywhere;
1784
+ }
1785
+
1786
+ .sc-subtasks .sc-badge {
1787
+ margin-inline-start: auto;
1497
1788
  }
1498
1789
 
1499
1790
  .sc-subtasks a {
1791
+ flex: 1 1 14rem;
1792
+ min-width: 0;
1500
1793
  color: var(--sc-color-text);
1794
+ font-weight: var(--sc-weight-medium);
1501
1795
  text-decoration: none;
1502
1796
  }
1503
1797
 
@@ -1510,7 +1804,20 @@ table {
1510
1804
  .sc-decisions {
1511
1805
  display: grid;
1512
1806
  gap: var(--sc-space-6);
1513
- max-width: var(--sc-width-prose);
1807
+ align-items: start;
1808
+ }
1809
+
1810
+ @media (min-width: 64rem) {
1811
+ .sc-decisions {
1812
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1813
+ }
1814
+ }
1815
+
1816
+ /* A person's own decisions: the sections of what waits, stacked in the first column. */
1817
+ .sc-decisions-waiting {
1818
+ display: grid;
1819
+ gap: var(--sc-space-6);
1820
+ align-content: start;
1514
1821
  }
1515
1822
 
1516
1823
  .sc-decision {
@@ -1545,9 +1852,8 @@ table {
1545
1852
  width: 0.5rem;
1546
1853
  height: 0.5rem;
1547
1854
  margin-right: var(--sc-space-2);
1548
- border-radius: 50%;
1855
+ border-radius: var(--sc-radius-full);
1549
1856
  background: var(--sc-color-point);
1550
- box-shadow: 0 0 0.75rem color-mix(in srgb, var(--sc-color-point) 60%, transparent);
1551
1857
  vertical-align: 0.1em;
1552
1858
  }
1553
1859
 
@@ -1561,6 +1867,29 @@ table {
1561
1867
  font-size: var(--sc-text-sm);
1562
1868
  }
1563
1869
 
1870
+ /* The task a decision is about: a chip in the line, cut short where it is long. */
1871
+ .sc-decision-meta > a {
1872
+ display: inline-block;
1873
+ max-width: 100%;
1874
+ padding: 0 var(--sc-space-2);
1875
+ border: var(--sc-border);
1876
+ border-radius: var(--sc-radius-full);
1877
+ background: var(--sc-color-sheet);
1878
+ color: var(--sc-color-text);
1879
+ font-size: var(--sc-text-xs);
1880
+ font-weight: var(--sc-weight-medium);
1881
+ line-height: 1.5rem;
1882
+ text-decoration: none;
1883
+ white-space: nowrap;
1884
+ overflow: hidden;
1885
+ text-overflow: ellipsis;
1886
+ }
1887
+
1888
+ .sc-decision-meta > a:hover {
1889
+ border-color: var(--sc-color-accent);
1890
+ color: var(--sc-color-accent);
1891
+ }
1892
+
1564
1893
  .sc-decision-waiting {
1565
1894
  color: var(--sc-color-warning);
1566
1895
  font-size: var(--sc-text-sm);
@@ -1570,7 +1899,7 @@ table {
1570
1899
  display: grid;
1571
1900
  gap: var(--sc-space-1);
1572
1901
  padding: var(--sc-space-3) var(--sc-space-4);
1573
- border-left: 3px solid var(--sc-color-success);
1902
+ border-left: 2px solid var(--sc-color-accent);
1574
1903
  border-radius: 0 var(--sc-radius-md) var(--sc-radius-md) 0;
1575
1904
  }
1576
1905
 
@@ -1638,38 +1967,107 @@ table {
1638
1967
 
1639
1968
  /* The feed: a line per event, newest first. */
1640
1969
 
1970
+ /* The feed by days: a heading per day with a line after it; under it, runs of events by the
1971
+ same hands, each headed once by the person and the agent, with a row per event under the name,
1972
+ the hour and the sentence, parted by hairlines rather than boxed. */
1641
1973
  .sc-feed {
1974
+ display: grid;
1975
+ gap: var(--sc-space-5);
1976
+ }
1977
+
1978
+ .sc-feed-day {
1642
1979
  display: grid;
1643
1980
  gap: var(--sc-space-2);
1644
- max-width: var(--sc-width-prose);
1645
1981
  }
1646
1982
 
1647
- .sc-feed-item {
1983
+ .sc-feed-day-title {
1984
+ display: flex;
1985
+ align-items: center;
1986
+ gap: var(--sc-space-3);
1987
+ margin: 0;
1988
+ color: var(--sc-color-text-muted);
1989
+ }
1990
+
1991
+ .sc-feed-day-title::after {
1992
+ content: "";
1993
+ flex: 1;
1994
+ height: 1px;
1995
+ background: var(--sc-color-border);
1996
+ }
1997
+
1998
+ .sc-feed-day-list,
1999
+ .sc-feed-run-list {
2000
+ display: grid;
2001
+ margin: 0;
2002
+ padding: 0;
2003
+ list-style: none;
2004
+ }
2005
+
2006
+ .sc-feed-day-list {
2007
+ gap: var(--sc-space-3);
2008
+ }
2009
+
2010
+ .sc-feed-run {
1648
2011
  display: grid;
1649
- grid-template-columns: auto minmax(0, 1fr) auto;
2012
+ gap: var(--sc-space-1);
2013
+ }
2014
+
2015
+ /* The rows of a run line up under the name, past the picture of the person. */
2016
+ .sc-feed-run-list {
2017
+ padding-inline-start: calc(1.5rem + var(--sc-space-2));
2018
+ }
2019
+
2020
+ .sc-feed-actor {
2021
+ display: inline-flex;
1650
2022
  align-items: center;
2023
+ gap: var(--sc-space-2);
2024
+ min-width: 0;
2025
+ }
2026
+
2027
+ .sc-feed-agent {
2028
+ margin-inline-start: var(--sc-space-2);
2029
+ color: var(--sc-color-text-faint);
2030
+ font-size: var(--sc-text-xs);
2031
+ }
2032
+
2033
+ /* Where the agent is laid out beside the name by a gap, it needs no margin of its own. */
2034
+ .sc-feed-actor .sc-feed-agent,
2035
+ .sc-doc-meta .sc-feed-agent {
2036
+ margin-inline-start: 0;
2037
+ }
2038
+
2039
+ .sc-feed-item {
2040
+ display: grid;
2041
+ grid-template-columns: auto minmax(0, 1fr);
2042
+ align-items: baseline;
1651
2043
  gap: var(--sc-space-3);
1652
- padding: var(--sc-space-2) var(--sc-space-3);
1653
- border-radius: var(--sc-radius-md);
2044
+ padding: var(--sc-space-1) 0;
2045
+ border-bottom: 1px solid color-mix(in srgb, var(--sc-color-border) 60%, transparent);
1654
2046
  font-size: var(--sc-text-sm);
1655
2047
  }
1656
2048
 
2049
+ .sc-feed-item:last-child {
2050
+ border-bottom: 0;
2051
+ }
2052
+
2053
+ .sc-feed-clock {
2054
+ color: var(--sc-color-text-faint);
2055
+ font-size: var(--sc-text-xs);
2056
+ font-variant-numeric: tabular-nums;
2057
+ }
2058
+
1657
2059
  .sc-feed-words {
1658
2060
  overflow-wrap: anywhere;
1659
2061
  }
1660
2062
 
1661
2063
  .sc-feed-words a {
1662
2064
  color: var(--sc-color-text);
2065
+ text-decoration: none;
1663
2066
  }
1664
2067
 
1665
2068
  .sc-feed-words a:hover {
1666
2069
  color: var(--sc-color-accent);
1667
- }
1668
-
1669
- .sc-feed-agent {
1670
- margin-left: var(--sc-space-2);
1671
- color: var(--sc-color-text-muted);
1672
- font-size: var(--sc-text-sm);
2070
+ text-decoration: underline;
1673
2071
  }
1674
2072
 
1675
2073
  /* Signing in: one pane in the light, with the mark on a small stage of its own. */
@@ -1697,7 +2095,7 @@ table {
1697
2095
  position: absolute;
1698
2096
  width: 14rem;
1699
2097
  height: 14rem;
1700
- border-radius: 50%;
2098
+ border-radius: var(--sc-radius-full);
1701
2099
  background: radial-gradient(
1702
2100
  circle,
1703
2101
  color-mix(in srgb, var(--sc-color-accent) 35%, transparent),
@@ -1712,17 +2110,17 @@ table {
1712
2110
  place-items: center;
1713
2111
  width: 3.5rem;
1714
2112
  height: 3.5rem;
1715
- border: 1px solid var(--sc-color-border-strong);
1716
- border-radius: 28%;
2113
+ border: var(--sc-border);
2114
+ border-radius: var(--sc-radius-xl);
1717
2115
  background: var(--sc-color-bg);
1718
- box-shadow: 0 0.5rem 2rem -0.25rem color-mix(in srgb, var(--sc-color-accent) 55%, transparent);
2116
+ box-shadow: var(--sc-glass-lift);
1719
2117
  }
1720
2118
 
1721
2119
  .sc-sign-in-badge::after {
1722
2120
  content: "";
1723
2121
  position: absolute;
1724
2122
  inset: 0;
1725
- border: 1px solid var(--sc-color-accent);
2123
+ border: 2px solid var(--sc-color-accent);
1726
2124
  border-radius: inherit;
1727
2125
  opacity: 0;
1728
2126
  pointer-events: none;
@@ -1737,7 +2135,7 @@ table {
1737
2135
  @keyframes sc-ring {
1738
2136
  0% {
1739
2137
  transform: scale(1);
1740
- opacity: 0.6;
2138
+ opacity: 0.55;
1741
2139
  }
1742
2140
  100% {
1743
2141
  transform: scale(2.6);
@@ -1788,6 +2186,11 @@ table {
1788
2186
  overflow-wrap: anywhere;
1789
2187
  }
1790
2188
 
2189
+ /* The text of a task and of a page is read at length: at the size of reading. */
2190
+ .sc-task-main > .sc-prose {
2191
+ font-size: var(--sc-text-md);
2192
+ }
2193
+
1791
2194
  .sc-prose > * + * {
1792
2195
  margin-top: var(--sc-space-4);
1793
2196
  }
@@ -1923,12 +2326,24 @@ table {
1923
2326
  .sc-token-meta {
1924
2327
  display: flex;
1925
2328
  flex-wrap: wrap;
1926
- gap: var(--sc-space-3);
2329
+ gap: var(--sc-space-1) var(--sc-space-3);
1927
2330
  margin-top: var(--sc-space-1);
1928
2331
  color: var(--sc-color-text-muted);
1929
2332
  font-size: var(--sc-text-sm);
1930
2333
  }
1931
2334
 
2335
+ .sc-token-meta > span {
2336
+ display: inline-flex;
2337
+ flex-wrap: wrap;
2338
+ align-items: center;
2339
+ gap: var(--sc-space-1);
2340
+ }
2341
+
2342
+ .sc-token-meta > span + span {
2343
+ padding-inline-start: var(--sc-space-3);
2344
+ border-inline-start: var(--sc-hairline);
2345
+ }
2346
+
1932
2347
  .sc-secret {
1933
2348
  display: flex;
1934
2349
  flex-wrap: wrap;
@@ -1947,24 +2362,40 @@ table {
1947
2362
  user-select: all;
1948
2363
  }
1949
2364
 
1950
- /* People: everyone of the board, with what each may do. */
2365
+ /* People: everyone of the board, with what each may do, as cards in a grid: the person on the
2366
+ first line, the account and where it came from on the second, what they are and the ways to
2367
+ their work on the third. */
1951
2368
 
1952
2369
  .sc-people {
1953
2370
  display: grid;
1954
- gap: var(--sc-space-2);
2371
+ grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));
2372
+ gap: var(--sc-space-3);
1955
2373
  }
1956
2374
 
1957
2375
  .sc-person-row {
1958
2376
  display: flex;
1959
2377
  flex-wrap: wrap;
1960
2378
  align-items: center;
1961
- gap: var(--sc-space-3);
1962
- padding: var(--sc-space-3) var(--sc-space-4);
2379
+ gap: var(--sc-space-2) var(--sc-space-3);
2380
+ padding: var(--sc-space-4);
1963
2381
  border-radius: var(--sc-radius-lg);
1964
2382
  }
1965
2383
 
2384
+ .sc-person-row > .sc-person {
2385
+ flex: 0 1 auto;
2386
+ min-width: 0;
2387
+ }
2388
+
2389
+ /* That this person is the reader: beside the name on the first line. */
2390
+ .sc-person-you {
2391
+ margin-inline-start: calc(var(--sc-space-1) - var(--sc-space-3));
2392
+ color: var(--sc-color-text-faint);
2393
+ font-size: var(--sc-text-xs);
2394
+ }
2395
+
1966
2396
  .sc-person-name {
1967
- flex: 1;
2397
+ flex: 1 1 100%;
2398
+ min-width: 0;
1968
2399
  color: var(--sc-color-text-muted);
1969
2400
  font-size: var(--sc-text-sm);
1970
2401
  }
@@ -1974,13 +2405,19 @@ table {
1974
2405
  font-size: var(--sc-text-xs);
1975
2406
  }
1976
2407
 
2408
+ /* What a person is, or the way to change it: the last line, a step under the account. */
2409
+ .sc-person-row > .sc-badge,
2410
+ .sc-person-row > .sc-field-inline {
2411
+ margin-top: var(--sc-space-1);
2412
+ }
2413
+
1977
2414
  /* Those let in and not signed in yet, and those deactivated: sections below everyone in. */
1978
2415
  .sc-people-section {
1979
2416
  margin-top: var(--sc-space-6);
1980
2417
  }
1981
2418
 
1982
2419
  .sc-person-row-out .sc-person {
1983
- opacity: 0.7;
2420
+ opacity: 0.55;
1984
2421
  }
1985
2422
 
1986
2423
  .sc-listing-form .sc-field-row {
@@ -2020,19 +2457,38 @@ table {
2020
2457
  box-shadow: var(--sc-glass-sheen), var(--sc-glass-lift), var(--sc-glow);
2021
2458
  }
2022
2459
 
2460
+ /* The head of a project reads on three lines: the mark with the name beside it, the key under
2461
+ the name, and the badges on a line of their own; the mark floats so that the name and the key
2462
+ stack beside it without a box around them. */
2023
2463
  .sc-project-head {
2024
- display: flex;
2025
- flex-wrap: wrap;
2026
- align-items: center;
2027
- gap: var(--sc-space-2) var(--sc-space-3);
2464
+ display: block;
2465
+ }
2466
+
2467
+ .sc-project-head::after {
2468
+ content: "";
2469
+ display: block;
2470
+ clear: both;
2471
+ }
2472
+
2473
+ .sc-project-head > :first-child {
2474
+ float: left;
2475
+ margin-inline-end: var(--sc-space-3);
2476
+ }
2477
+
2478
+ .sc-project-head > .sc-badge {
2479
+ margin-top: var(--sc-space-3);
2480
+ margin-inline-end: var(--sc-space-1);
2028
2481
  }
2029
2482
 
2030
2483
  /* The whole pane is the way in: the name's link stretches over it. */
2031
2484
  .sc-project-name {
2485
+ display: block;
2032
2486
  color: var(--sc-color-text);
2033
2487
  font-size: var(--sc-text-lg);
2034
2488
  font-weight: var(--sc-weight-bold);
2489
+ line-height: var(--sc-leading-snug);
2035
2490
  text-decoration: none;
2491
+ overflow-wrap: anywhere;
2036
2492
  }
2037
2493
 
2038
2494
  .sc-project-name::after {
@@ -2054,7 +2510,21 @@ table {
2054
2510
  font-size: var(--sc-text-xs);
2055
2511
  }
2056
2512
 
2513
+ /* Under the name, and past the mark: the key ends below the mark, so that the badges after it
2514
+ start at the edge. */
2515
+ .sc-project-head > .sc-project-key {
2516
+ display: block;
2517
+ margin-top: var(--sc-space-1);
2518
+ }
2519
+
2520
+ .sc-project-head > .sc-project-key::after {
2521
+ content: "";
2522
+ display: block;
2523
+ clear: both;
2524
+ }
2525
+
2057
2526
  .sc-project-description {
2527
+ margin-top: var(--sc-space-1);
2058
2528
  color: var(--sc-color-text-muted);
2059
2529
  font-size: var(--sc-text-sm);
2060
2530
  }
@@ -2064,7 +2534,8 @@ table {
2064
2534
  flex-wrap: wrap;
2065
2535
  gap: var(--sc-space-2);
2066
2536
  margin-top: auto;
2067
- padding-top: var(--sc-space-2);
2537
+ padding-top: var(--sc-space-3);
2538
+ border-top: var(--sc-hairline);
2068
2539
  }
2069
2540
 
2070
2541
  .sc-project-meta:empty {
@@ -2076,6 +2547,14 @@ table {
2076
2547
  gap: var(--sc-space-4);
2077
2548
  }
2078
2549
 
2550
+ /* What a member is in the project, and their office in the organization beside it, small. */
2551
+ .sc-member-role {
2552
+ display: inline-flex;
2553
+ align-items: center;
2554
+ gap: var(--sc-space-2);
2555
+ font-size: var(--sc-text-sm);
2556
+ }
2557
+
2079
2558
  .sc-member-form .sc-field-row {
2080
2559
  align-items: end;
2081
2560
  }
@@ -2084,11 +2563,14 @@ table {
2084
2563
 
2085
2564
  .sc-skills {
2086
2565
  display: grid;
2087
- gap: var(--sc-space-2);
2566
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 26rem), 1fr));
2567
+ gap: var(--sc-space-3);
2088
2568
  }
2089
2569
 
2090
2570
  .sc-skill {
2091
- padding: var(--sc-space-3) var(--sc-space-4);
2571
+ display: grid;
2572
+ align-content: start;
2573
+ padding: var(--sc-space-4) var(--sc-space-5);
2092
2574
  border-radius: var(--sc-radius-lg);
2093
2575
  }
2094
2576
 
@@ -2101,8 +2583,16 @@ table {
2101
2583
  }
2102
2584
 
2103
2585
  .sc-skill-name {
2104
- font-weight: var(--sc-weight-medium);
2105
- }
2586
+ font-size: var(--sc-text-md);
2587
+ font-weight: var(--sc-weight-bold);
2588
+ }
2589
+
2590
+ /* The folder a skill is in: a line of its own under the name, in the code face. */
2591
+ .sc-skill-head > .sc-muted {
2592
+ flex: 1 1 100%;
2593
+ font-family: var(--sc-font-mono);
2594
+ font-size: var(--sc-text-xs);
2595
+ }
2106
2596
 
2107
2597
  .sc-skill-description {
2108
2598
  margin: var(--sc-space-2) 0 0;
@@ -2112,7 +2602,9 @@ table {
2112
2602
 
2113
2603
  .sc-skill-uri {
2114
2604
  display: block;
2115
- margin-top: var(--sc-space-2);
2605
+ margin-top: var(--sc-space-3);
2606
+ padding-top: var(--sc-space-2);
2607
+ border-top: var(--sc-hairline);
2116
2608
  color: var(--sc-color-text-faint);
2117
2609
  font-size: var(--sc-text-xs);
2118
2610
  word-break: break-all;
@@ -2136,18 +2628,30 @@ table {
2136
2628
  display: flex;
2137
2629
  flex-wrap: wrap;
2138
2630
  align-items: center;
2139
- gap: var(--sc-space-2);
2631
+ gap: var(--sc-space-1) var(--sc-space-2);
2632
+ padding-bottom: var(--sc-space-3);
2633
+ border-bottom: var(--sc-hairline);
2140
2634
  }
2141
2635
 
2142
2636
  .sc-run-agent {
2143
- font-weight: var(--sc-weight-medium);
2637
+ font-size: var(--sc-text-md);
2638
+ font-weight: var(--sc-weight-bold);
2639
+ }
2640
+
2641
+ /* The way to end a run stands at the end of the first line. */
2642
+ .sc-run-header > .sc-button {
2643
+ order: 1;
2644
+ margin-inline-start: auto;
2144
2645
  }
2145
2646
 
2647
+ /* Who the run is for and since when: the second line of the head. */
2146
2648
  .sc-run-meta {
2147
- display: inline-flex;
2649
+ display: flex;
2650
+ flex: 1 1 100%;
2148
2651
  flex-wrap: wrap;
2652
+ order: 2;
2149
2653
  align-items: center;
2150
- gap: var(--sc-space-1);
2654
+ gap: var(--sc-space-1) var(--sc-space-2);
2151
2655
  color: var(--sc-color-text-muted);
2152
2656
  font-size: var(--sc-text-sm);
2153
2657
  }
@@ -2168,10 +2672,11 @@ table {
2168
2672
  display: grid;
2169
2673
  gap: var(--sc-space-1);
2170
2674
  padding-left: var(--sc-space-3);
2171
- border-left: 2px solid var(--sc-color-border-strong);
2675
+ border-left: 2px solid var(--sc-color-accent);
2172
2676
  font-size: var(--sc-text-sm);
2173
2677
  }
2174
2678
 
2679
+ /* The hour of a report heads it, small and apart from its words. */
2175
2680
  .sc-run-summary {
2176
2681
  padding-top: var(--sc-space-3);
2177
2682
  border-top: var(--sc-border);
@@ -2199,6 +2704,7 @@ table {
2199
2704
  }
2200
2705
 
2201
2706
  .sc-comment-meta {
2707
+ margin-inline-start: auto;
2202
2708
  color: var(--sc-color-text-muted);
2203
2709
  font-size: var(--sc-text-sm);
2204
2710
  }
@@ -2217,7 +2723,7 @@ table {
2217
2723
  }
2218
2724
 
2219
2725
  .sc-picture-thumb:focus-visible {
2220
- outline: 2px solid var(--sc-color-accent);
2726
+ outline: var(--sc-focus-ring);
2221
2727
  outline-offset: 2px;
2222
2728
  }
2223
2729
 
@@ -2245,7 +2751,7 @@ table {
2245
2751
  grid-template-rows: auto minmax(0, 1fr) auto;
2246
2752
  inset: 0;
2247
2753
  background: color-mix(in srgb, var(--sc-color-bg) 90%, transparent);
2248
- backdrop-filter: blur(12px);
2754
+ backdrop-filter: var(--sc-glass-backdrop);
2249
2755
  }
2250
2756
 
2251
2757
  .sc-overlay-bar {
@@ -2391,7 +2897,7 @@ table {
2391
2897
  padding: var(--sc-space-3) var(--sc-space-4);
2392
2898
  border: var(--sc-border);
2393
2899
  border-radius: var(--sc-radius-md);
2394
- background: var(--sc-color-field);
2900
+ background: var(--sc-color-bg-raised);
2395
2901
  font-family: var(--sc-font-mono);
2396
2902
  font-size: var(--sc-text-sm);
2397
2903
  line-height: var(--sc-leading-code);
@@ -2418,13 +2924,13 @@ table {
2418
2924
  max-width: 12rem;
2419
2925
  font-family: var(--sc-font-mono);
2420
2926
  font-size: var(--sc-text-lg);
2421
- letter-spacing: 0.12em;
2927
+ letter-spacing: var(--sc-tracking-code);
2422
2928
  text-transform: uppercase;
2423
2929
  }
2424
2930
 
2425
2931
  .sc-code-shown {
2426
2932
  font-size: var(--sc-text-md);
2427
- letter-spacing: 0.1em;
2933
+ letter-spacing: var(--sc-tracking-code);
2428
2934
  }
2429
2935
 
2430
2936
  /* Documents: a folder's pages, one page with its versions, its links both ways and its files. */
@@ -2511,11 +3017,13 @@ table {
2511
3017
  list-style: none;
2512
3018
  }
2513
3019
 
3020
+ /* A page in a list reads on two lines: its title, with a mark if it is archived, and under it
3021
+ where it lives, its version, who wrote it last and when, each a step apart. */
2514
3022
  .sc-doc-row {
2515
3023
  display: flex;
2516
3024
  flex-wrap: wrap;
2517
- align-items: baseline;
2518
- gap: var(--sc-space-2) var(--sc-space-3);
3025
+ align-items: center;
3026
+ gap: var(--sc-space-1) var(--sc-space-2);
2519
3027
  padding: var(--sc-space-3) var(--sc-space-4);
2520
3028
  border-radius: var(--sc-radius-lg);
2521
3029
  transition: border-color var(--sc-transition);
@@ -2527,7 +3035,9 @@ table {
2527
3035
 
2528
3036
  .sc-doc-title {
2529
3037
  color: var(--sc-color-text);
2530
- font-weight: var(--sc-weight-medium);
3038
+ font-size: var(--sc-text-md);
3039
+ font-weight: var(--sc-weight-bold);
3040
+ line-height: var(--sc-leading-snug);
2531
3041
  text-decoration: none;
2532
3042
  }
2533
3043
 
@@ -2536,8 +3046,17 @@ table {
2536
3046
  }
2537
3047
 
2538
3048
  .sc-doc-meta {
3049
+ display: flex;
3050
+ flex: 1 1 100%;
3051
+ flex-wrap: wrap;
3052
+ align-items: center;
3053
+ gap: var(--sc-space-1) var(--sc-space-2);
2539
3054
  color: var(--sc-color-text-muted);
2540
- font-size: var(--sc-text-sm);
3055
+ font-size: var(--sc-text-xs);
3056
+ }
3057
+
3058
+ .sc-doc-meta .sc-person-login {
3059
+ font-weight: var(--sc-weight-normal);
2541
3060
  }
2542
3061
 
2543
3062
  .sc-doc-path {
@@ -2560,7 +3079,7 @@ table {
2560
3079
  }
2561
3080
 
2562
3081
  .sc-doc-archived .sc-prose {
2563
- opacity: 0.85;
3082
+ opacity: 0.55;
2564
3083
  }
2565
3084
 
2566
3085
  /* The pictures for a page, under its body: the way to add one, and what becomes of it. */
@@ -2571,30 +3090,86 @@ table {
2571
3090
  gap: var(--sc-space-2);
2572
3091
  }
2573
3092
 
3093
+ /* The attach form: a button to choose the file with the chosen file's name beside it, the
3094
+ name to call it under that, and the attach button across the bottom, all one height. */
2574
3095
  .sc-doc-attach {
2575
- display: flex;
2576
- flex-wrap: wrap;
3096
+ display: grid;
2577
3097
  gap: var(--sc-space-2);
2578
3098
  margin-top: var(--sc-space-3);
2579
3099
  }
2580
3100
 
3101
+ .sc-doc-attach-file {
3102
+ display: flex;
3103
+ align-items: center;
3104
+ gap: var(--sc-space-3);
3105
+ min-width: 0;
3106
+ }
3107
+
3108
+ .sc-doc-attach-file > .sc-button {
3109
+ flex: none;
3110
+ }
3111
+
3112
+ .sc-doc-attach-chosen {
3113
+ min-width: 0;
3114
+ overflow: hidden;
3115
+ font-size: var(--sc-text-sm);
3116
+ white-space: nowrap;
3117
+ text-overflow: ellipsis;
3118
+ }
3119
+
3120
+ .sc-doc-attach > .sc-button {
3121
+ width: 100%;
3122
+ }
3123
+
2581
3124
  .sc-versions {
2582
3125
  margin: 0;
2583
3126
  padding: 0;
2584
3127
  list-style: none;
2585
3128
  }
2586
3129
 
3130
+ .sc-version {
3131
+ display: grid;
3132
+ grid-template-columns: auto minmax(0, 1fr);
3133
+ column-gap: var(--sc-space-3);
3134
+ row-gap: var(--sc-space-1);
3135
+ align-items: baseline;
3136
+ padding-block: var(--sc-space-2);
3137
+ font-size: var(--sc-text-sm);
3138
+ }
3139
+
2587
3140
  .sc-version + .sc-version {
2588
- margin-top: var(--sc-space-2);
3141
+ border-top: var(--sc-hairline);
2589
3142
  }
2590
3143
 
2591
3144
  .sc-version-number {
2592
- display: inline-block;
2593
- min-width: 2.5rem;
3145
+ min-width: 2rem;
2594
3146
  font-family: var(--sc-font-mono);
2595
3147
  font-size: var(--sc-text-sm);
2596
3148
  }
2597
3149
 
3150
+ .sc-version-title {
3151
+ font-weight: var(--sc-weight-medium);
3152
+ overflow-wrap: anywhere;
3153
+ }
3154
+
3155
+ .sc-version-meta {
3156
+ display: flex;
3157
+ flex-wrap: wrap;
3158
+ align-items: center;
3159
+ gap: var(--sc-space-1) var(--sc-space-2);
3160
+ grid-column: 2;
3161
+ color: var(--sc-color-text-muted);
3162
+ font-size: var(--sc-text-xs);
3163
+ }
3164
+
3165
+ .sc-version-meta .sc-person-login {
3166
+ font-weight: var(--sc-weight-normal);
3167
+ }
3168
+
3169
+ .sc-version-meta .sc-feed-agent {
3170
+ margin-inline-start: 0;
3171
+ }
3172
+
2598
3173
  /* In the aside of a task or a page, the facts stack and the sections are small. */
2599
3174
 
2600
3175
  .sc-task-aside .sc-facts {
@@ -2603,11 +3178,6 @@ table {
2603
3178
 
2604
3179
  .sc-task-aside .sc-section-title {
2605
3180
  margin-bottom: var(--sc-space-1);
2606
- color: var(--sc-color-text-faint);
2607
- font-size: var(--sc-text-xs);
2608
- font-weight: var(--sc-weight-medium);
2609
- letter-spacing: 0.04em;
2610
- text-transform: uppercase;
2611
3181
  }
2612
3182
 
2613
3183
  .sc-task-aside .sc-task-section {
@@ -2627,11 +3197,6 @@ table {
2627
3197
 
2628
3198
  .sc-decision-label {
2629
3199
  margin: 0 0 var(--sc-space-1);
2630
- color: var(--sc-color-text-faint);
2631
- font-size: var(--sc-text-xs);
2632
- font-weight: var(--sc-weight-medium);
2633
- letter-spacing: 0.04em;
2634
- text-transform: uppercase;
2635
3200
  }
2636
3201
 
2637
3202
  .sc-outcome-form {
@@ -2639,11 +3204,20 @@ table {
2639
3204
  gap: var(--sc-space-2);
2640
3205
  }
2641
3206
 
2642
- /* Under the wide layout a task's facts come first: changing its state and reaching its forms is
2643
- what a phone is opened for, and two to a row they stay short. A document keeps its text first. */
3207
+ /* Under the wide layout a task reads its text first, then its facts and the ways to its forms, two
3208
+ to a row so that they stay short, then the discussion and what happened: the text says what the
3209
+ task is, and its state is changed right under it. A document keeps its text first. */
2644
3210
  @media (max-width: 63.99rem) {
3211
+ .sc-task .sc-task-main {
3212
+ display: contents;
3213
+ }
3214
+
2645
3215
  .sc-task .sc-task-aside {
2646
- order: -1;
3216
+ order: 1;
3217
+ }
3218
+
3219
+ .sc-task .sc-task-main > .sc-task-section {
3220
+ order: 2;
2647
3221
  }
2648
3222
 
2649
3223
  .sc-task .sc-task-aside .sc-facts {
@@ -2654,61 +3228,158 @@ table {
2654
3228
  /* The schedule, the roadmap and the categories (ADR-0019). */
2655
3229
 
2656
3230
  /* The colours a category may be shown in: names, painted here and nowhere else. Each is a
2657
- dark fill with a light line and text, so that a badge reads on the glass. */
3231
+ light fill with its words dark in the same hue, and a mark, a clear mid-tone of the hue, for
3232
+ the dots, flags and bars where the colour stands alone; the eight hues spread around the
3233
+ wheel so that no two are taken for each other at a glance. A console that sets only the line
3234
+ and the fill gets its line where the mark would be. */
2658
3235
  .sc-category-gray {
2659
- --sc-category-line: #aeb7c4;
2660
- --sc-category-fill: #2a3240;
3236
+ --sc-category-line: #4a5468;
3237
+ --sc-category-fill: #e0e4eb;
3238
+ --sc-category-mark: #7b8597;
2661
3239
  }
2662
3240
 
2663
3241
  .sc-category-blue {
2664
- --sc-category-line: #8fb6ff;
2665
- --sc-category-fill: #1a2d52;
3242
+ --sc-category-line: #1d4fcb;
3243
+ --sc-category-fill: #d2e0ff;
3244
+ --sc-category-mark: #2f6ae8;
2666
3245
  }
2667
3246
 
2668
3247
  .sc-category-green {
2669
- --sc-category-line: #6fd3a0;
2670
- --sc-category-fill: #143326;
3248
+ --sc-category-line: #176d26;
3249
+ --sc-category-fill: #cdf0cc;
3250
+ --sc-category-mark: #22a04a;
2671
3251
  }
2672
3252
 
2673
3253
  .sc-category-orange {
2674
- --sc-category-line: #ffb77a;
2675
- --sc-category-fill: #3a2414;
3254
+ --sc-category-line: #b83c00;
3255
+ --sc-category-fill: #ffe6d1;
3256
+ --sc-category-mark: #f0731a;
2676
3257
  }
2677
3258
 
2678
3259
  .sc-category-pink {
2679
- --sc-category-line: #ff9ac2;
2680
- --sc-category-fill: #3b1a2b;
3260
+ --sc-category-line: #b2176a;
3261
+ --sc-category-fill: #fdd2e5;
3262
+ --sc-category-mark: #e63d94;
2681
3263
  }
2682
3264
 
2683
3265
  .sc-category-purple {
2684
- --sc-category-line: #c4a4ff;
2685
- --sc-category-fill: #2b1f4a;
3266
+ --sc-category-line: #6434c2;
3267
+ --sc-category-fill: #e6d8fc;
3268
+ --sc-category-mark: #8457e6;
2686
3269
  }
2687
3270
 
2688
3271
  .sc-category-teal {
2689
- --sc-category-line: #7ad7d4;
2690
- --sc-category-fill: #10343a;
3272
+ --sc-category-line: #08667a;
3273
+ --sc-category-fill: #c6edf4;
3274
+ --sc-category-mark: #0f9bb0;
2691
3275
  }
2692
3276
 
2693
3277
  .sc-category-yellow {
2694
- --sc-category-line: #f0d36a;
2695
- --sc-category-fill: #3a3012;
3278
+ --sc-category-line: #44403c;
3279
+ --sc-category-fill: #fbe9b2;
3280
+ --sc-category-mark: #e6b42c;
2696
3281
  }
2697
3282
 
2698
3283
  .sc-badge-category {
2699
- border-color: color-mix(in srgb, var(--sc-category-line) 45%, transparent);
3284
+ border-color: transparent;
2700
3285
  background: var(--sc-category-fill);
2701
3286
  color: var(--sc-category-line);
2702
3287
  }
2703
3288
 
3289
+ /* A badge's kind in how it is filled, so that a plain badge, a category, a state, a priority
3290
+ and a due day beside each other are kinds and not five of one thing; the pill is the shape
3291
+ of them all and nothing stands before the words:
3292
+ - a plain badge (a role, a count, public or private): a soft fill with a line of its hue;
3293
+ - a category and a state: a soft fill, no line;
3294
+ - a priority: a soft fill with dark words of its hue, low a grey, high an orange, urgent a red;
3295
+ - a due day: a line, a very light fill and bold words, all in the hue of how near the day
3296
+ is. */
3297
+ .sc-badge:not(.sc-badge-category) {
3298
+ border-color: color-mix(in srgb, currentColor 40%, transparent);
3299
+ }
3300
+
3301
+ .sc-badge.sc-badge-kind-state {
3302
+ border-color: transparent;
3303
+ }
3304
+
3305
+ .sc-badge.sc-badge-kind-priority {
3306
+ border-color: transparent;
3307
+ background: #e1e6ee;
3308
+ color: #3a4558;
3309
+ }
3310
+
3311
+ .sc-badge.sc-badge-kind-priority.sc-badge-point {
3312
+ background: #ffd4a8;
3313
+ color: #7a3300;
3314
+ }
3315
+
3316
+ .sc-badge.sc-badge-kind-priority.sc-badge-danger {
3317
+ background: #fdbcc3;
3318
+ color: #7d0e1d;
3319
+ }
3320
+
3321
+ /* A due day: one line weight for every one; the line, a very light fill and the words are
3322
+ all in the hue of how near the day is. */
3323
+ .sc-badge.sc-badge-kind-due {
3324
+ border: 1.5px solid #a3acba;
3325
+ background: #f4f6f9;
3326
+ color: #4b5563;
3327
+ font-weight: var(--sc-weight-bold);
3328
+ font-variant-numeric: tabular-nums;
3329
+ }
3330
+
3331
+ .sc-badge.sc-badge-kind-due.sc-badge-accent {
3332
+ border-color: #6f93e8;
3333
+ background: #f0f5ff;
3334
+ color: #1d4ed8;
3335
+ }
3336
+
3337
+ .sc-badge.sc-badge-kind-due.sc-badge-success {
3338
+ border-color: #5fb488;
3339
+ background: #effaf4;
3340
+ color: #146b44;
3341
+ }
3342
+
3343
+ /* Within the week. */
3344
+ .sc-badge.sc-badge-kind-due.sc-badge-warning {
3345
+ border-color: #e0b100;
3346
+ background: #fffae6;
3347
+ color: #8a6500;
3348
+ }
3349
+
3350
+ /* Tomorrow. */
3351
+ .sc-badge.sc-badge-kind-due.sc-badge-point {
3352
+ border-color: #f59e3c;
3353
+ background: #fff4ea;
3354
+ color: #b45309;
3355
+ }
3356
+
3357
+ /* Today. */
3358
+ .sc-badge.sc-badge-kind-due.sc-badge-due-today {
3359
+ border-color: #f26b4a;
3360
+ background: #fff1ec;
3361
+ color: #c2330f;
3362
+ }
3363
+
3364
+ /* Late. */
3365
+ .sc-badge.sc-badge-kind-due.sc-badge-danger {
3366
+ border-color: #d33a47;
3367
+ background: #fff0f1;
3368
+ color: #c0262f;
3369
+ }
3370
+
3371
+ .sc-badge-kind-count {
3372
+ font-variant-numeric: tabular-nums;
3373
+ }
3374
+
2704
3375
  .sc-category-swatch,
2705
3376
  .sc-calendar-dot {
2706
3377
  display: inline-block;
2707
3378
  flex: none;
2708
3379
  width: 0.625rem;
2709
3380
  height: 0.625rem;
2710
- border-radius: 50%;
2711
- background: var(--sc-category-line, var(--sc-color-text-faint));
3381
+ border-radius: var(--sc-radius-full);
3382
+ background: var(--sc-category-mark, var(--sc-category-line, var(--sc-color-text-faint)));
2712
3383
  }
2713
3384
 
2714
3385
  /* The filters above the board: a quiet row of controls, as wide as its words. */
@@ -2730,10 +3401,38 @@ table {
2730
3401
  font-size: var(--sc-text-sm);
2731
3402
  }
2732
3403
 
3404
+ /* The words the board is narrowed by: a field that takes what room the row has, up to a point. */
3405
+ .sc-filters-words {
3406
+ flex: 1 1 12rem;
3407
+ max-width: 22rem;
3408
+ }
3409
+
3410
+ .sc-filters-words .sc-input {
3411
+ width: 100%;
3412
+ }
3413
+
2733
3414
  .sc-filters-count {
2734
3415
  font-size: var(--sc-text-sm);
2735
3416
  }
2736
3417
 
3418
+ @media (max-width: 40rem) {
3419
+ .sc-filters {
3420
+ flex-wrap: nowrap;
3421
+ margin-inline: calc(-1 * var(--sc-space-4));
3422
+ padding-inline: var(--sc-space-4);
3423
+ overflow-x: auto;
3424
+ scrollbar-width: none;
3425
+ }
3426
+
3427
+ .sc-filters > * {
3428
+ flex: none;
3429
+ }
3430
+
3431
+ .sc-filters-count {
3432
+ white-space: nowrap;
3433
+ }
3434
+ }
3435
+
2737
3436
  /* Tasks as rows, where the columns are not the point. */
2738
3437
  .sc-task-rows {
2739
3438
  display: grid;
@@ -2744,11 +3443,11 @@ table {
2744
3443
  }
2745
3444
 
2746
3445
  .sc-task-row {
2747
- display: flex;
2748
- flex-wrap: wrap;
3446
+ display: grid;
3447
+ grid-template-columns: minmax(0, 1fr) auto;
2749
3448
  align-items: center;
2750
- gap: var(--sc-space-2) var(--sc-space-3);
2751
- padding: var(--sc-space-2) var(--sc-space-3);
3449
+ gap: var(--sc-space-1) var(--sc-space-3);
3450
+ padding: var(--sc-space-3) var(--sc-space-4);
2752
3451
  border: var(--sc-border);
2753
3452
  border-radius: var(--sc-radius-md);
2754
3453
  background: var(--sc-color-sheet);
@@ -2756,7 +3455,7 @@ table {
2756
3455
  }
2757
3456
 
2758
3457
  .sc-task-row-title {
2759
- flex: 1 1 14rem;
3458
+ grid-column: 1;
2760
3459
  min-width: 0;
2761
3460
  color: var(--sc-color-text);
2762
3461
  font-weight: var(--sc-weight-medium);
@@ -2769,6 +3468,7 @@ table {
2769
3468
  }
2770
3469
 
2771
3470
  .sc-task-row-project {
3471
+ grid-column: 1;
2772
3472
  color: var(--sc-color-text-faint);
2773
3473
  font-size: var(--sc-text-xs);
2774
3474
  }
@@ -2776,11 +3476,27 @@ table {
2776
3476
  .sc-task-row-meta {
2777
3477
  display: flex;
2778
3478
  flex-wrap: wrap;
3479
+ grid-row: 1 / span 2;
3480
+ grid-column: 2;
2779
3481
  align-items: center;
3482
+ justify-content: flex-end;
2780
3483
  gap: var(--sc-space-1);
2781
3484
  margin-left: auto;
2782
3485
  }
2783
3486
 
3487
+ @media (max-width: 40rem) {
3488
+ .sc-task-row {
3489
+ grid-template-columns: minmax(0, 1fr);
3490
+ }
3491
+
3492
+ .sc-task-row-meta {
3493
+ grid-row: auto;
3494
+ grid-column: 1;
3495
+ justify-content: flex-start;
3496
+ margin-left: 0;
3497
+ }
3498
+ }
3499
+
2784
3500
  /* The calendar: the month as a table, a cell a day, the tasks due in it one line each. */
2785
3501
  .sc-calendar {
2786
3502
  display: grid;
@@ -2813,12 +3529,7 @@ table {
2813
3529
 
2814
3530
  .sc-calendar-grid th {
2815
3531
  padding: var(--sc-space-1);
2816
- color: var(--sc-color-text-faint);
2817
- font-size: var(--sc-text-xs);
2818
- font-weight: var(--sc-weight-medium);
2819
- letter-spacing: 0.04em;
2820
3532
  text-align: left;
2821
- text-transform: uppercase;
2822
3533
  }
2823
3534
 
2824
3535
  .sc-calendar-cell {
@@ -2837,7 +3548,6 @@ table {
2837
3548
 
2838
3549
  .sc-calendar-cell-today {
2839
3550
  border-color: var(--sc-color-accent);
2840
- box-shadow: inset 0 0 0 1px var(--sc-color-accent);
2841
3551
  }
2842
3552
 
2843
3553
  .sc-calendar-day {
@@ -2851,6 +3561,26 @@ table {
2851
3561
  color: var(--sc-color-accent);
2852
3562
  }
2853
3563
 
3564
+ .sc-calendar-more {
3565
+ display: block;
3566
+ width: 100%;
3567
+ margin-top: 2px;
3568
+ padding: 1px var(--sc-space-1);
3569
+ border: 0;
3570
+ border-radius: var(--sc-radius-sm);
3571
+ background: transparent;
3572
+ color: var(--sc-color-text-muted);
3573
+ font-size: var(--sc-text-xs);
3574
+ font-weight: var(--sc-weight-medium);
3575
+ line-height: var(--sc-leading-snug);
3576
+ text-align: start;
3577
+ }
3578
+
3579
+ .sc-calendar-more:hover {
3580
+ background: var(--sc-color-bg-inset);
3581
+ color: var(--sc-color-text);
3582
+ }
3583
+
2854
3584
  .sc-calendar-task {
2855
3585
  display: flex;
2856
3586
  align-items: center;
@@ -2860,7 +3590,7 @@ table {
2860
3590
  border-radius: var(--sc-radius-sm);
2861
3591
  color: var(--sc-color-text);
2862
3592
  font-size: var(--sc-text-xs);
2863
- line-height: 1.4;
3593
+ line-height: var(--sc-leading-snug);
2864
3594
  text-decoration: none;
2865
3595
  }
2866
3596
 
@@ -2897,7 +3627,8 @@ table {
2897
3627
  .sc-calendar-bar {
2898
3628
  margin-inline: calc(-1 * var(--sc-space-2) - 0.125rem - 1px);
2899
3629
  padding-inline: var(--sc-space-2);
2900
- border-block: 1px solid color-mix(in srgb, var(--sc-category-line) 45%, transparent);
3630
+ border-block: 1px solid
3631
+ color-mix(in srgb, var(--sc-category-mark, var(--sc-category-line)) 60%, transparent);
2901
3632
  background: var(--sc-category-fill);
2902
3633
  color: var(--sc-category-line);
2903
3634
  font-size: var(--sc-text-xs);
@@ -2906,32 +3637,57 @@ table {
2906
3637
  white-space: nowrap;
2907
3638
  }
2908
3639
 
2909
- /* Lit a little under the pointer by its colour, not by a filter, which would light the card within it too. */
2910
- .sc-calendar-bar:hover {
2911
- background: color-mix(in srgb, var(--sc-category-fill), white 12%);
3640
+ /* The task under the pointer is lit a little by its colour, in every piece of its bar and in
3641
+ every week it crosses, never one piece alone; by its colour and not by a filter, which would
3642
+ light the card within it too. */
3643
+ .sc-calendar-bar-pointed {
3644
+ background: color-mix(in srgb, var(--sc-category-fill), var(--sc-category-line) 14%);
2912
3645
  }
2913
3646
 
2914
3647
  .sc-calendar-bar-begins {
2915
3648
  margin-left: 0;
2916
- border-left: 1px solid color-mix(in srgb, var(--sc-category-line) 45%, transparent);
3649
+ border-left: 1px solid
3650
+ color-mix(in srgb, var(--sc-category-mark, var(--sc-category-line)) 60%, transparent);
2917
3651
  border-start-start-radius: var(--sc-radius-full);
2918
3652
  border-end-start-radius: var(--sc-radius-full);
2919
3653
  }
2920
3654
 
2921
3655
  .sc-calendar-bar-ends {
2922
3656
  margin-right: 0;
2923
- border-right: 1px solid color-mix(in srgb, var(--sc-category-line) 45%, transparent);
3657
+ border-right: 1px solid
3658
+ color-mix(in srgb, var(--sc-category-mark, var(--sc-category-line)) 60%, transparent);
2924
3659
  border-start-end-radius: var(--sc-radius-full);
2925
3660
  border-end-end-radius: var(--sc-radius-full);
2926
3661
  }
2927
3662
 
3663
+ /* The title of a bar with more days in the week runs along the bar as far as its days reach,
3664
+ less the room of its end, instead of stopping at the first day's edge: above every piece,
3665
+ the one under the pointer included, and under the cards; the pointer goes through it to the
3666
+ piece of the day beneath. The days are the first piece's own custom property. */
3667
+ .sc-calendar-task-title-spanning {
3668
+ position: relative;
3669
+ z-index: 25;
3670
+ flex: none;
3671
+ max-width: calc(var(--sc-span, 1) * 100% - 2.25rem);
3672
+ pointer-events: none;
3673
+ }
3674
+
2928
3675
  .sc-calendar-bar.sc-calendar-late {
2929
3676
  border-color: color-mix(in srgb, var(--sc-color-danger) 70%, transparent);
2930
3677
  color: var(--sc-color-danger);
2931
3678
  }
2932
3679
 
3680
+ /* A bar of a task that is over: paler in its own colour, not see-through, so that every piece
3681
+ of it is one shade whatever lies under it, and the card of the task under the pointer,
3682
+ which lies within the piece, stays solid. */
2933
3683
  .sc-calendar-bar.sc-calendar-over {
2934
- opacity: 0.55;
3684
+ border-color: color-mix(
3685
+ in srgb,
3686
+ var(--sc-category-mark, var(--sc-category-line)) 30%,
3687
+ transparent
3688
+ );
3689
+ background: color-mix(in srgb, var(--sc-category-fill) 50%, var(--sc-color-bg-raised));
3690
+ color: color-mix(in srgb, var(--sc-category-line) 55%, var(--sc-color-bg-raised));
2935
3691
  }
2936
3692
 
2937
3693
  .sc-calendar-legend {
@@ -2992,6 +3748,16 @@ table {
2992
3748
  font-size: var(--sc-text-sm);
2993
3749
  }
2994
3750
 
3751
+ /* The mark hangs in the margin, so that what wraps onto a second line, a badge most often,
3752
+ starts under the name rather than under the mark. */
3753
+ .sc-project-head:has(> .sc-mark-md) {
3754
+ padding-inline-start: calc(2rem + var(--sc-space-3));
3755
+ }
3756
+
3757
+ .sc-project-head > .sc-mark-md {
3758
+ margin-inline-start: calc(-2rem - var(--sc-space-3));
3759
+ }
3760
+
2995
3761
  .sc-mark-lg {
2996
3762
  width: 3rem;
2997
3763
  height: 3rem;
@@ -3020,10 +3786,11 @@ table {
3020
3786
  }
3021
3787
 
3022
3788
  .sc-input-file {
3023
- padding-block: calc(var(--sc-space-2) - 2px);
3024
3789
  font-size: var(--sc-text-sm);
3025
3790
  }
3026
3791
 
3792
+ /* Under the month: what is late and who has what on the left, one under the other, and what
3793
+ has no day yet, the long list, down the right; one column where the window is narrow. */
3027
3794
  .sc-calendar-below {
3028
3795
  display: grid;
3029
3796
  align-items: start;
@@ -3034,6 +3801,12 @@ table {
3034
3801
  @media (min-width: 64rem) {
3035
3802
  .sc-calendar-below {
3036
3803
  grid-template-columns: 1fr 1fr;
3804
+ grid-template-rows: auto 1fr;
3805
+ }
3806
+
3807
+ .sc-calendar-below > :last-child {
3808
+ grid-column: 2;
3809
+ grid-row: 1 / span 2;
3037
3810
  }
3038
3811
  }
3039
3812
 
@@ -3085,6 +3858,26 @@ table {
3085
3858
  color: var(--sc-color-text-muted);
3086
3859
  }
3087
3860
 
3861
+ /* Who asked and who answers (ADR-0042): the two people side by side, an arrow from the one to
3862
+ the other, so that the asker and the decider are never read as one. */
3863
+ .sc-decision-people,
3864
+ .sc-decision-for {
3865
+ display: inline-flex;
3866
+ align-items: center;
3867
+ gap: var(--sc-space-1);
3868
+ white-space: nowrap;
3869
+ }
3870
+
3871
+ .sc-decision-arrow {
3872
+ color: var(--sc-color-text-faint);
3873
+ font-weight: var(--sc-weight-medium);
3874
+ }
3875
+
3876
+ .sc-decision-row-answer {
3877
+ color: var(--sc-color-text);
3878
+ font-weight: var(--sc-weight-medium);
3879
+ }
3880
+
3088
3881
  /* The record of the decisions: a row each, what was asked on the left and what was answered on
3089
3882
  the right, each with who and when under it; one column where the window is narrow. */
3090
3883
  .sc-decision-record {
@@ -3138,12 +3931,26 @@ table {
3138
3931
  margin-left: var(--sc-space-2);
3139
3932
  }
3140
3933
 
3934
+ /* The answer a decision took, marked in green before its words. */
3935
+ .sc-decision-record-chosen::before {
3936
+ content: "";
3937
+ position: absolute;
3938
+ top: calc(0.8em - 0.25rem);
3939
+ left: 0;
3940
+ width: 0.5rem;
3941
+ height: 0.5rem;
3942
+ border-radius: var(--sc-radius-full);
3943
+ background: var(--sc-color-success);
3944
+ }
3945
+
3141
3946
  .sc-decision-record-chosen {
3947
+ position: relative;
3948
+ padding-left: var(--sc-space-4);
3142
3949
  display: flex;
3143
3950
  flex-wrap: wrap;
3144
3951
  align-items: center;
3145
3952
  gap: var(--sc-space-2);
3146
- color: var(--sc-color-success);
3953
+ color: var(--sc-color-text);
3147
3954
  font-weight: var(--sc-weight-medium);
3148
3955
  overflow-wrap: anywhere;
3149
3956
  }
@@ -3182,31 +3989,44 @@ table {
3182
3989
  font-size: var(--sc-text-sm);
3183
3990
  }
3184
3991
 
3185
- /* Who has what: a small table, the late numbers in the danger colour. */
3992
+ /* Who has what: a table on a sheet of its own, a quiet band for the headings, a hairline
3993
+ between people, the numbers in columns of their own on the right in the display size; the
3994
+ one due this week and the one late carry a dot of their colour before them. */
3186
3995
  .sc-workload {
3187
3996
  width: 100%;
3188
3997
  max-width: var(--sc-width-prose);
3189
- border-collapse: collapse;
3998
+ border: var(--sc-border);
3999
+ border-radius: var(--sc-radius-lg);
4000
+ border-collapse: separate;
4001
+ border-spacing: 0;
4002
+ background: var(--sc-color-sheet);
4003
+ box-shadow: var(--sc-glass-lift);
3190
4004
  font-size: var(--sc-text-sm);
3191
4005
  }
3192
4006
 
3193
4007
  .sc-workload th,
3194
4008
  .sc-workload td {
3195
- padding: var(--sc-space-2) var(--sc-space-3);
3196
- border-bottom: var(--sc-border);
4009
+ padding: var(--sc-space-3) var(--sc-space-4);
3197
4010
  text-align: left;
3198
4011
  }
3199
4012
 
3200
4013
  .sc-workload thead th {
3201
- color: var(--sc-color-text-faint);
3202
- font-size: var(--sc-text-xs);
3203
- font-weight: var(--sc-weight-medium);
3204
- letter-spacing: 0.04em;
3205
- text-transform: uppercase;
4014
+ padding-block: var(--sc-space-2);
4015
+ border-bottom: var(--sc-border);
4016
+ background: var(--sc-color-bg-inset);
4017
+ white-space: nowrap;
4018
+ }
4019
+
4020
+ .sc-workload thead th:first-child {
4021
+ border-start-start-radius: var(--sc-radius-lg);
4022
+ }
4023
+
4024
+ .sc-workload thead th:last-child {
4025
+ border-start-end-radius: var(--sc-radius-lg);
3206
4026
  }
3207
4027
 
3208
4028
  .sc-workload tbody th {
3209
- font-weight: var(--sc-weight-normal);
4029
+ font-weight: var(--sc-weight-medium);
3210
4030
  }
3211
4031
 
3212
4032
  .sc-workload tbody th a {
@@ -3218,24 +4038,86 @@ table {
3218
4038
  color: var(--sc-color-accent);
3219
4039
  }
3220
4040
 
4041
+ /* The numbers: a narrow column each, lined up on the right. */
4042
+ .sc-workload th:not(:first-child),
3221
4043
  .sc-workload td {
3222
- font-variant-numeric: tabular-nums;
4044
+ width: 6.5rem;
4045
+ text-align: right;
3223
4046
  }
3224
4047
 
3225
- .sc-workload-soon {
3226
- color: var(--sc-color-warning);
4048
+ .sc-workload td {
4049
+ font-size: var(--sc-text-md);
4050
+ font-variant-numeric: tabular-nums;
4051
+ white-space: nowrap;
3227
4052
  }
3228
4053
 
4054
+ .sc-workload-soon,
3229
4055
  .sc-workload-late {
3230
- color: var(--sc-color-danger);
3231
4056
  font-weight: var(--sc-weight-bold);
3232
4057
  }
3233
4058
 
3234
- /* The roadmap: a goal a pane, with how far it is as a bar. */
4059
+ .sc-workload-soon::before,
4060
+ .sc-workload-late::before {
4061
+ content: "";
4062
+ display: inline-block;
4063
+ width: 0.4rem;
4064
+ height: 0.4rem;
4065
+ margin-inline-end: var(--sc-space-2);
4066
+ border-radius: var(--sc-radius-full);
4067
+ background: currentColor;
4068
+ vertical-align: 0.1em;
4069
+ }
4070
+
4071
+ .sc-workload-soon {
4072
+ color: var(--sc-color-warning);
4073
+ }
4074
+
4075
+ .sc-workload-late {
4076
+ color: var(--sc-color-danger);
4077
+ }
4078
+
4079
+ /* A hairline between people, and the row under the pointer lit a little. */
4080
+ .sc-workload tbody tr + tr > th,
4081
+ .sc-workload tbody tr + tr > td {
4082
+ border-top: var(--sc-hairline);
4083
+ }
4084
+
4085
+ .sc-workload tbody tr:hover > th,
4086
+ .sc-workload tbody tr:hover > td {
4087
+ background: color-mix(in srgb, var(--sc-color-accent) 4%, transparent);
4088
+ }
4089
+
4090
+ @media (max-width: 40rem) {
4091
+ .sc-workload th:not(:first-child),
4092
+ .sc-workload td {
4093
+ width: auto;
4094
+ }
4095
+
4096
+ .sc-workload th,
4097
+ .sc-workload td {
4098
+ padding-inline: var(--sc-space-2);
4099
+ }
4100
+
4101
+ .sc-workload thead th {
4102
+ white-space: normal;
4103
+ word-break: keep-all;
4104
+ line-height: var(--sc-leading-tight);
4105
+ }
4106
+
4107
+ .sc-workload tbody th {
4108
+ word-break: keep-all;
4109
+ }
4110
+
4111
+ .sc-workload td {
4112
+ font-size: var(--sc-text-sm);
4113
+ }
4114
+ }
4115
+
4116
+ /* The roadmap: a goal a pane, with how far it is as a bar. */
3235
4117
  .sc-goals {
3236
4118
  display: grid;
4119
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 30rem), 1fr));
3237
4120
  gap: var(--sc-space-3);
3238
- max-width: var(--sc-width-prose);
3239
4121
  margin: 0;
3240
4122
  padding: 0;
3241
4123
  list-style: none;
@@ -3252,7 +4134,7 @@ table {
3252
4134
  }
3253
4135
 
3254
4136
  .sc-goal-done {
3255
- opacity: 0.75;
4137
+ opacity: 0.55;
3256
4138
  }
3257
4139
 
3258
4140
  .sc-goal-dropped {
@@ -3267,7 +4149,7 @@ table {
3267
4149
  }
3268
4150
 
3269
4151
  .sc-goal-title {
3270
- flex: 1 1 12rem;
4152
+ flex: 1 1 100%;
3271
4153
  color: var(--sc-color-text);
3272
4154
  font-size: var(--sc-text-lg);
3273
4155
  font-weight: var(--sc-weight-medium);
@@ -3311,11 +4193,6 @@ table {
3311
4193
 
3312
4194
  .sc-goal-tasks-state {
3313
4195
  margin-bottom: var(--sc-space-2);
3314
- color: var(--sc-color-text-faint);
3315
- font-size: var(--sc-text-xs);
3316
- font-weight: var(--sc-weight-medium);
3317
- letter-spacing: 0.04em;
3318
- text-transform: uppercase;
3319
4196
  }
3320
4197
 
3321
4198
  /* The categories: a row each, with its name and its colour open to an administrator. */
@@ -3344,6 +4221,10 @@ table {
3344
4221
  background: var(--sc-color-sheet);
3345
4222
  }
3346
4223
 
4224
+ .sc-category-row > .sc-project-key {
4225
+ margin-inline-start: auto;
4226
+ }
4227
+
3347
4228
  .sc-category-form {
3348
4229
  display: flex;
3349
4230
  flex: 1;
@@ -3365,29 +4246,23 @@ table {
3365
4246
  position: relative;
3366
4247
  }
3367
4248
 
3368
- /* The item under the pointer rises above its neighbours, which would otherwise paint over its card. */
3369
- .sc-calendar-task:hover,
3370
- .sc-calendar-task:focus-visible,
3371
- .sc-calendar-bar:hover,
3372
- .sc-calendar-bar:focus-visible {
3373
- z-index: 20;
3374
- }
3375
-
4249
+ /* The card rises above its neighbours and above a title running along a bar; the item under the
4250
+ pointer itself stays in its layer, so that nothing of it covers such a title. */
3376
4251
  .sc-task-tip {
3377
4252
  position: absolute;
3378
4253
  left: 0;
3379
- z-index: 20;
4254
+ z-index: 30;
3380
4255
  width: max-content;
3381
4256
  max-width: 20rem;
3382
4257
  padding: var(--sc-space-2) var(--sc-space-3);
3383
4258
  border: var(--sc-border);
3384
4259
  border-radius: var(--sc-radius-md);
3385
- background: var(--sc-color-bg-inset);
4260
+ background: var(--sc-color-bg-raised);
3386
4261
  box-shadow: var(--sc-shadow-stage);
3387
4262
  color: var(--sc-color-text);
3388
4263
  font-size: var(--sc-text-xs);
3389
4264
  font-weight: var(--sc-weight-normal);
3390
- line-height: 1.4;
4265
+ line-height: var(--sc-leading-snug);
3391
4266
  text-align: left;
3392
4267
  text-decoration: none;
3393
4268
  white-space: normal;
@@ -3477,13 +4352,17 @@ table {
3477
4352
  padding-inline: var(--sc-space-4);
3478
4353
  }
3479
4354
 
3480
- .sc-brand-symbol,
3481
- .sc-brand-wordmark {
3482
- height: var(--sc-brand-size-compact);
4355
+ .sc-brand {
4356
+ gap: calc(var(--sc-brand-size-compact) * var(--sc-brand-gap-ratio));
3483
4357
  }
3484
4358
 
3485
4359
  .sc-brand-symbol {
3486
4360
  width: var(--sc-brand-size-compact);
4361
+ height: var(--sc-brand-size-compact);
4362
+ }
4363
+
4364
+ .sc-brand-wordmark {
4365
+ height: calc(var(--sc-brand-size-compact) * var(--sc-brand-wordmark-ratio));
3487
4366
  }
3488
4367
 
3489
4368
  .sc-crumb-link {
@@ -3495,15 +4374,18 @@ table {
3495
4374
  display: none;
3496
4375
  }
3497
4376
 
3498
- /* Tabs that do not fit wrap, so that none is hidden off the edge. */
4377
+ /* Tabs that do not fit stay on one line and scroll sideways, the edge fading where more of them
4378
+ are; the current one is brought into view by the shell. */
3499
4379
  .sc-tabs {
3500
4380
  padding-inline: var(--sc-space-4);
3501
- overflow: visible;
4381
+ mask-image: linear-gradient(to right, #000 calc(100% - var(--sc-space-6)), transparent);
3502
4382
  }
3503
4383
 
3504
4384
  .sc-tabs-inner {
3505
- flex-wrap: wrap;
3506
- gap: 0 var(--sc-space-4);
4385
+ gap: var(--sc-space-4);
4386
+ /* As wide as the tabs and some room past the last, so that it scrolls clear of the fading edge. */
4387
+ width: max-content;
4388
+ padding-inline-end: var(--sc-space-6);
3507
4389
  }
3508
4390
 
3509
4391
  .sc-menu-summary .sc-person-login {
@@ -3591,9 +4473,9 @@ table {
3591
4473
  position: static;
3592
4474
  }
3593
4475
 
3594
- .sc-feed-item {
3595
- grid-template-columns: 1fr;
3596
- gap: var(--sc-space-1);
4476
+ /* The rows of a run use the whole width. */
4477
+ .sc-feed-run-list {
4478
+ padding-inline-start: 0;
3597
4479
  }
3598
4480
 
3599
4481
  .sc-sign-in {
@@ -3622,10 +4504,10 @@ table {
3622
4504
  display: inline-flex;
3623
4505
  align-items: center;
3624
4506
  padding: 0 var(--sc-space-3);
3625
- border: 1px solid var(--sc-color-border-strong);
4507
+ border: var(--sc-border-strong);
3626
4508
  border-right: 0;
3627
4509
  border-radius: var(--sc-radius-md) 0 0 var(--sc-radius-md);
3628
- background: color-mix(in srgb, var(--sc-color-field) 60%, var(--sc-color-border));
4510
+ background: color-mix(in srgb, var(--sc-color-bg-raised) 60%, var(--sc-color-border));
3629
4511
  color: var(--sc-color-text-muted);
3630
4512
  font-size: var(--sc-text-sm);
3631
4513
  white-space: nowrap;
@@ -3655,7 +4537,12 @@ table {
3655
4537
  }
3656
4538
 
3657
4539
  /* The facts of a thing inside a panel: a list in the panel, not a pane of their own. */
4540
+ /* The facts on a settings page, inside a pane of their own: a table, a row per fact with its
4541
+ name in a column on the left and its value beside it, a hairline between rows; the name over
4542
+ the value where the window is narrow. */
3658
4543
  .sc-facts-plain {
4544
+ grid-template-columns: minmax(0, 1fr);
4545
+ gap: 0;
3659
4546
  padding: 0;
3660
4547
  border: 0;
3661
4548
  border-radius: 0;
@@ -3668,6 +4555,44 @@ table {
3668
4555
  content: none;
3669
4556
  }
3670
4557
 
4558
+ .sc-facts-plain > * {
4559
+ display: grid;
4560
+ grid-template-columns: minmax(8rem, 12rem) minmax(0, 1fr);
4561
+ gap: var(--sc-space-1) var(--sc-space-5);
4562
+ align-items: baseline;
4563
+ padding: var(--sc-space-3) 0;
4564
+ border-top: var(--sc-hairline);
4565
+ }
4566
+
4567
+ .sc-facts-plain > :first-child {
4568
+ padding-top: 0;
4569
+ border-top: 0;
4570
+ }
4571
+
4572
+ .sc-facts-plain > :last-child {
4573
+ padding-bottom: 0;
4574
+ }
4575
+
4576
+ .sc-facts-plain dt {
4577
+ color: var(--sc-color-text-muted);
4578
+ font-size: var(--sc-text-sm);
4579
+ font-weight: var(--sc-weight-medium);
4580
+ letter-spacing: 0;
4581
+ text-transform: none;
4582
+ }
4583
+
4584
+ .sc-facts-plain dd {
4585
+ margin-top: 0;
4586
+ font-size: var(--sc-text-md);
4587
+ overflow-wrap: anywhere;
4588
+ }
4589
+
4590
+ @media (max-width: 40rem) {
4591
+ .sc-facts-plain > * {
4592
+ grid-template-columns: minmax(0, 1fr);
4593
+ }
4594
+ }
4595
+
3671
4596
  /* A fact that needs the whole row: a description. */
3672
4597
  .sc-facts-wide {
3673
4598
  grid-column: 1 / -1;
@@ -3723,7 +4648,7 @@ table {
3723
4648
 
3724
4649
  .sc-timeline-title {
3725
4650
  margin: 0;
3726
- font-size: var(--sc-text-base);
4651
+ font-size: var(--sc-text-md);
3727
4652
  font-weight: var(--sc-weight-medium);
3728
4653
  }
3729
4654
 
@@ -3740,14 +4665,19 @@ table {
3740
4665
  gap: var(--sc-space-2);
3741
4666
  }
3742
4667
 
4668
+ /* A label keeps to one line, so that every row is as tall as its bar and the labels line up with
4669
+ the bars: a long title is cut short, said in full on hover, and the state stays beside it. */
3743
4670
  .sc-timeline-label {
3744
4671
  display: flex;
3745
- flex-wrap: wrap;
3746
4672
  align-items: center;
3747
4673
  gap: var(--sc-space-2);
3748
4674
  min-width: 0;
3749
4675
  }
3750
4676
 
4677
+ .sc-timeline-label .sc-badge {
4678
+ flex: none;
4679
+ }
4680
+
3751
4681
  .sc-timeline-goal {
3752
4682
  color: var(--sc-color-text);
3753
4683
  font-size: var(--sc-text-sm);
@@ -3755,6 +4685,13 @@ table {
3755
4685
  overflow-wrap: anywhere;
3756
4686
  }
3757
4687
 
4688
+ .sc-timeline-label .sc-timeline-goal {
4689
+ min-width: 0;
4690
+ overflow: hidden;
4691
+ text-overflow: ellipsis;
4692
+ white-space: nowrap;
4693
+ }
4694
+
3758
4695
  .sc-timeline-goal:hover {
3759
4696
  color: var(--sc-color-accent);
3760
4697
  }
@@ -3794,7 +4731,7 @@ table {
3794
4731
  width: 2px;
3795
4732
  margin-left: -1px;
3796
4733
  background: var(--sc-color-accent);
3797
- opacity: 0.7;
4734
+ opacity: 0.55;
3798
4735
  }
3799
4736
 
3800
4737
  .sc-timeline-today-mark {
@@ -3810,7 +4747,8 @@ table {
3810
4747
  display: flex;
3811
4748
  align-items: center;
3812
4749
  overflow: hidden;
3813
- border-block: 1px solid color-mix(in srgb, var(--sc-category-line) 45%, transparent);
4750
+ border-block: 1px solid
4751
+ color-mix(in srgb, var(--sc-category-mark, var(--sc-category-line)) 60%, transparent);
3814
4752
  background: var(--sc-category-fill);
3815
4753
  color: var(--sc-category-line);
3816
4754
  font-size: var(--sc-text-xs);
@@ -3819,17 +4757,19 @@ table {
3819
4757
  }
3820
4758
 
3821
4759
  .sc-timeline-bar:hover {
3822
- background: color-mix(in srgb, var(--sc-category-fill), white 12%);
4760
+ background: color-mix(in srgb, var(--sc-category-fill), var(--sc-category-line) 14%);
3823
4761
  }
3824
4762
 
3825
4763
  .sc-timeline-bar.sc-timeline-bar-begins {
3826
- border-left: 1px solid color-mix(in srgb, var(--sc-category-line) 45%, transparent);
4764
+ border-left: 1px solid
4765
+ color-mix(in srgb, var(--sc-category-mark, var(--sc-category-line)) 60%, transparent);
3827
4766
  border-start-start-radius: var(--sc-radius-full);
3828
4767
  border-end-start-radius: var(--sc-radius-full);
3829
4768
  }
3830
4769
 
3831
4770
  .sc-timeline-bar.sc-timeline-bar-ends {
3832
- border-right: 1px solid color-mix(in srgb, var(--sc-category-line) 45%, transparent);
4771
+ border-right: 1px solid
4772
+ color-mix(in srgb, var(--sc-category-mark, var(--sc-category-line)) 60%, transparent);
3833
4773
  border-start-end-radius: var(--sc-radius-full);
3834
4774
  border-end-end-radius: var(--sc-radius-full);
3835
4775
  }
@@ -3839,7 +4779,7 @@ table {
3839
4779
  top: 0;
3840
4780
  bottom: 0;
3841
4781
  left: 0;
3842
- background: color-mix(in srgb, var(--sc-category-line) 35%, transparent);
4782
+ background: color-mix(in srgb, var(--sc-category-mark, var(--sc-category-line)) 40%, transparent);
3843
4783
  }
3844
4784
 
3845
4785
  .sc-timeline-words {
@@ -3854,18 +4794,19 @@ table {
3854
4794
  height: 0.75rem;
3855
4795
  margin-left: -0.375rem;
3856
4796
  transform: translateY(-50%) rotate(45deg);
3857
- border: 1px solid color-mix(in srgb, var(--sc-category-line) 60%, transparent);
4797
+ border: 1px solid
4798
+ color-mix(in srgb, var(--sc-category-mark, var(--sc-category-line)) 75%, transparent);
3858
4799
  background: var(--sc-category-fill);
3859
4800
  }
3860
4801
 
3861
4802
  .sc-goal-done .sc-timeline-bar,
3862
4803
  .sc-goal-done .sc-timeline-point {
3863
- opacity: 0.6;
4804
+ opacity: 0.55;
3864
4805
  }
3865
4806
 
3866
4807
  .sc-goal-dropped .sc-timeline-bar,
3867
4808
  .sc-goal-dropped .sc-timeline-point {
3868
- opacity: 0.4;
4809
+ opacity: 0.55;
3869
4810
  }
3870
4811
 
3871
4812
  .sc-timeline-undated {
@@ -3874,6 +4815,7 @@ table {
3874
4815
  }
3875
4816
 
3876
4817
  .sc-goal-days {
4818
+ margin-inline-start: auto;
3877
4819
  color: var(--sc-color-text-muted);
3878
4820
  font-size: var(--sc-text-xs);
3879
4821
  }
@@ -3887,7 +4829,7 @@ table {
3887
4829
  color: var(--sc-category-line, var(--sc-color-text));
3888
4830
  font-size: var(--sc-text-xs);
3889
4831
  font-weight: var(--sc-weight-medium);
3890
- line-height: 1.2;
4832
+ line-height: var(--sc-leading-tight);
3891
4833
  text-decoration: none;
3892
4834
  }
3893
4835
 
@@ -3901,13 +4843,18 @@ table {
3901
4843
  width: 0.5rem;
3902
4844
  height: 0.5rem;
3903
4845
  transform: rotate(45deg);
3904
- background: var(--sc-category-line, var(--sc-color-text-faint));
4846
+ background: var(--sc-category-mark, var(--sc-category-line, var(--sc-color-text-faint)));
3905
4847
  }
3906
4848
 
3907
4849
  @media (max-width: 40rem) {
3908
4850
  .sc-timeline-row {
3909
4851
  grid-template-columns: minmax(6rem, 8rem) minmax(16rem, 1fr);
3910
4852
  }
4853
+
4854
+ /* A narrow label is the title's: the goal's state is on its card below the months. */
4855
+ .sc-timeline-label .sc-badge {
4856
+ display: none;
4857
+ }
3911
4858
  }
3912
4859
 
3913
4860
  /* A card is dragged to another column from anywhere on it but its menu, its title included: with
@@ -3931,7 +4878,7 @@ table {
3931
4878
  }
3932
4879
 
3933
4880
  .sc-card-dragging {
3934
- opacity: 0.4;
4881
+ opacity: 0.55;
3935
4882
  }
3936
4883
 
3937
4884
  .sc-board-dragging,
@@ -3986,7 +4933,7 @@ table {
3986
4933
  }
3987
4934
 
3988
4935
  .sc-card-menu-button:focus-visible {
3989
- outline: 2px solid var(--sc-color-accent);
4936
+ outline: var(--sc-focus-ring);
3990
4937
  outline-offset: 1px;
3991
4938
  }
3992
4939
 
@@ -4020,7 +4967,7 @@ table {
4020
4967
  }
4021
4968
 
4022
4969
  .sc-column-over {
4023
- outline: 2px solid var(--sc-color-accent);
4970
+ outline: var(--sc-focus-ring);
4024
4971
  outline-offset: -2px;
4025
4972
  }
4026
4973
 
@@ -4062,26 +5009,37 @@ table {
4062
5009
  font-size: var(--sc-text-sm);
4063
5010
  }
4064
5011
 
5012
+ .sc-goal-progress .sc-progress-words {
5013
+ display: none;
5014
+ }
5015
+
4065
5016
  .sc-facts-row {
4066
5017
  display: flex;
4067
5018
  flex-wrap: wrap;
4068
- align-items: center;
4069
- gap: var(--sc-space-2) var(--sc-space-5);
5019
+ align-items: stretch;
5020
+ gap: var(--sc-space-3) 0;
4070
5021
  margin: 0;
4071
5022
  font-size: var(--sc-text-sm);
4072
5023
  }
4073
5024
 
4074
5025
  .sc-facts-row > div {
4075
- display: flex;
4076
- align-items: center;
4077
- gap: var(--sc-space-2);
5026
+ display: grid;
5027
+ align-content: start;
5028
+ gap: var(--sc-space-1);
5029
+ padding-inline: var(--sc-space-4);
5030
+ border-inline-start: var(--sc-hairline);
4078
5031
  }
4079
5032
 
4080
- .sc-facts-row dt {
4081
- color: var(--sc-color-text-muted);
5033
+ .sc-facts-row > div:first-child {
5034
+ padding-inline-start: 0;
5035
+ border-inline-start: 0;
4082
5036
  }
4083
5037
 
4084
5038
  .sc-facts-row dd {
5039
+ display: flex;
5040
+ flex-wrap: wrap;
5041
+ align-items: center;
5042
+ gap: var(--sc-space-2);
4085
5043
  margin: 0;
4086
5044
  }
4087
5045
 
@@ -4272,7 +5230,7 @@ table {
4272
5230
 
4273
5231
  .sc-pack-code {
4274
5232
  font-size: var(--sc-text-xl);
4275
- letter-spacing: 0.12em;
5233
+ letter-spacing: var(--sc-tracking-code);
4276
5234
  }
4277
5235
 
4278
5236
  .sc-pack-connect-waiting {
@@ -4286,3 +5244,406 @@ table {
4286
5244
  .sc-pack-actions {
4287
5245
  margin-top: var(--sc-space-5);
4288
5246
  }
5247
+
5248
+ /* Beside a task the facts stand in one column, a hairline between each. */
5249
+ .sc-task-aside .sc-facts {
5250
+ grid-template-columns: minmax(0, 1fr);
5251
+ gap: 0;
5252
+ padding-block: var(--sc-space-2);
5253
+ }
5254
+
5255
+ .sc-task-aside .sc-facts > * {
5256
+ padding: var(--sc-space-2) 0;
5257
+ }
5258
+
5259
+ .sc-task-aside .sc-facts > * + * {
5260
+ border-top: var(--sc-hairline);
5261
+ }
5262
+
5263
+ /* A phone's pages, one by one. */
5264
+ @media (max-width: 40rem) {
5265
+ /* The board: a column nearly as wide as the window, so that a card's title has room and one
5266
+ column is read at a time, the next peeking in from the side. */
5267
+ .sc-column {
5268
+ flex-basis: min(18rem, 82vw);
5269
+ }
5270
+
5271
+ /* The filters scroll as a row; a select with long choices keeps to a width of its own. */
5272
+ .sc-filters .sc-input {
5273
+ max-width: 11rem;
5274
+ }
5275
+
5276
+ /* A task's facts: one to a row, as on the wide layout's side, instead of two abreast with
5277
+ the select and the dates pressed against each other. */
5278
+ .sc-task .sc-task-aside .sc-facts {
5279
+ grid-template-columns: minmax(0, 1fr);
5280
+ }
5281
+
5282
+ .sc-facts .sc-input {
5283
+ max-width: 100%;
5284
+ }
5285
+
5286
+ /* A goal's card: the badges on one line, the span of days on a line of its own. */
5287
+ .sc-goal-days {
5288
+ flex: 1 1 100%;
5289
+ margin-inline-start: 0;
5290
+ }
5291
+
5292
+ /* The goal page's progress: the words under the bar. */
5293
+ .sc-goal-progress {
5294
+ grid-template-columns: minmax(0, 1fr);
5295
+ gap: var(--sc-space-1);
5296
+ }
5297
+
5298
+ /* The roadmap's months: too narrow for the year and the month on one line, so the two
5299
+ stand one over the other, small. */
5300
+ .sc-timeline-month {
5301
+ padding-inline: 2px;
5302
+ font-size: 0.6rem;
5303
+ line-height: var(--sc-leading-tight);
5304
+ white-space: normal;
5305
+ word-break: keep-all;
5306
+ overflow: visible;
5307
+ text-overflow: clip;
5308
+ }
5309
+
5310
+ /* A bar on the month reaches over the gap between the cells, which is narrower here. */
5311
+ .sc-calendar-bar {
5312
+ margin-inline: calc(-1 * var(--sc-space-1) - 2px - 1px);
5313
+ }
5314
+
5315
+ .sc-calendar-bar-begins {
5316
+ margin-left: 0;
5317
+ }
5318
+
5319
+ .sc-calendar-bar-ends {
5320
+ margin-right: 0;
5321
+ }
5322
+
5323
+ /* "N more" on a day keeps to one line, small enough for the cell. */
5324
+ .sc-calendar-more {
5325
+ padding-inline: 0;
5326
+ font-size: 0.65rem;
5327
+ overflow: hidden;
5328
+ white-space: nowrap;
5329
+ text-overflow: ellipsis;
5330
+ }
5331
+
5332
+ /* A bar reaching past the week stops at the edge of the month. */
5333
+ .sc-calendar-grid {
5334
+ clip-path: inset(0);
5335
+ }
5336
+ }
5337
+
5338
+ /* A phone's pages as one design. */
5339
+ @media (max-width: 40rem) {
5340
+ /* Every page's head: the name, a word about it under the name, and the ways the page offers
5341
+ as a row of equal buttons under those, so that no head differs from another. */
5342
+ .sc-page-head {
5343
+ display: grid;
5344
+ justify-content: stretch;
5345
+ gap: var(--sc-space-3);
5346
+ margin-bottom: var(--sc-space-5);
5347
+ }
5348
+
5349
+ .sc-page-heading {
5350
+ display: grid;
5351
+ row-gap: var(--sc-space-1);
5352
+ }
5353
+
5354
+ .sc-page-lead {
5355
+ flex: none;
5356
+ }
5357
+
5358
+ .sc-page-actions {
5359
+ flex-wrap: nowrap;
5360
+ width: 100%;
5361
+ }
5362
+
5363
+ .sc-page-actions > * {
5364
+ flex: 1 1 0;
5365
+ justify-content: center;
5366
+ min-width: 0;
5367
+ }
5368
+
5369
+ /* A head with one way alone gives it the whole width too. */
5370
+ .sc-page-head > .sc-button {
5371
+ width: 100%;
5372
+ justify-content: center;
5373
+ }
5374
+
5375
+ /* The tabs snap tab by tab, the first keeping its room from the edge. */
5376
+ .sc-tabs {
5377
+ scroll-snap-type: x proximity;
5378
+ scroll-padding-inline: var(--sc-space-4);
5379
+ }
5380
+
5381
+ .sc-tab {
5382
+ scroll-snap-align: start;
5383
+ }
5384
+
5385
+ /* The panes: one padding and one radius for all of them. */
5386
+ .sc-project,
5387
+ .sc-goal,
5388
+ .sc-skill,
5389
+ .sc-run,
5390
+ .sc-decision,
5391
+ .sc-comment,
5392
+ .sc-facts {
5393
+ padding: var(--sc-space-4);
5394
+ border-radius: var(--sc-radius-lg);
5395
+ }
5396
+
5397
+ /* The board scrolls from edge to edge of the window, its columns snapping into place. */
5398
+ .sc-board {
5399
+ min-height: 0;
5400
+ margin-inline: calc(-1 * var(--sc-space-4));
5401
+ padding-inline: var(--sc-space-4);
5402
+ scroll-padding-inline: var(--sc-space-4);
5403
+ }
5404
+
5405
+ .sc-filters {
5406
+ margin-bottom: var(--sc-space-4);
5407
+ }
5408
+
5409
+ /* A task's head: the parent on one line, the title, the badges, then the ways as a row of
5410
+ equal buttons. */
5411
+ .sc-task-header {
5412
+ display: grid;
5413
+ justify-content: stretch;
5414
+ gap: var(--sc-space-3);
5415
+ }
5416
+
5417
+ .sc-task-parent {
5418
+ overflow: hidden;
5419
+ white-space: nowrap;
5420
+ text-overflow: ellipsis;
5421
+ }
5422
+
5423
+ .sc-task-actions {
5424
+ flex-wrap: nowrap;
5425
+ align-items: stretch;
5426
+ }
5427
+
5428
+ .sc-task-actions > * {
5429
+ flex: 1 1 0;
5430
+ justify-content: center;
5431
+ min-width: 0;
5432
+ }
5433
+
5434
+ /* The calendar's legend, tighter; what is under the month, further apart. */
5435
+ .sc-calendar-legend {
5436
+ gap: var(--sc-space-1) var(--sc-space-3);
5437
+ }
5438
+
5439
+ .sc-calendar-below {
5440
+ gap: var(--sc-space-6);
5441
+ }
5442
+
5443
+ /* The roadmap's label column, narrower, so that the months have the room. */
5444
+ .sc-timeline-row {
5445
+ grid-template-columns: minmax(5.5rem, 7rem) minmax(14rem, 1fr);
5446
+ }
5447
+ }
5448
+
5449
+ /* A phone's month: a dot per task per day. */
5450
+ @media (max-width: 40rem) {
5451
+ .sc-calendar-cell {
5452
+ height: auto;
5453
+ min-height: 3.25rem;
5454
+ padding: 2px var(--sc-space-1) var(--sc-space-1);
5455
+ /* The rows of dots as tall as the dots, not as tall as a line of text. */
5456
+ line-height: 0;
5457
+ }
5458
+
5459
+ .sc-calendar-day,
5460
+ .sc-calendar-more {
5461
+ line-height: var(--sc-leading-snug);
5462
+ }
5463
+
5464
+ .sc-calendar-lane {
5465
+ display: none;
5466
+ }
5467
+
5468
+ /* A task planned across days: a dot on each of its days, in its category's colour, the
5469
+ late one in the danger colour; nothing of the bar remains. */
5470
+ .sc-calendar-bar,
5471
+ .sc-calendar-bar-begins,
5472
+ .sc-calendar-bar-ends {
5473
+ display: inline-block;
5474
+ width: 0.5rem;
5475
+ height: 0.5rem;
5476
+ margin: 2px 3px 0 0;
5477
+ padding: 0;
5478
+ border: 0;
5479
+ border-radius: var(--sc-radius-full);
5480
+ background: var(--sc-category-mark, var(--sc-category-line));
5481
+ vertical-align: top;
5482
+ }
5483
+
5484
+ .sc-calendar-bar.sc-calendar-late {
5485
+ background: var(--sc-color-danger);
5486
+ }
5487
+
5488
+ /* A task on its day: the same dot. */
5489
+ .sc-calendar-task {
5490
+ margin: 2px 3px 0 0;
5491
+ vertical-align: top;
5492
+ }
5493
+
5494
+ .sc-calendar-dot {
5495
+ width: 0.5rem;
5496
+ height: 0.5rem;
5497
+ }
5498
+
5499
+ .sc-calendar-more {
5500
+ margin-top: 2px;
5501
+ text-align: left;
5502
+ }
5503
+ }
5504
+
5505
+ /* A day's number is a button: pressed, the day's tasks are listed under the month. */
5506
+ .sc-calendar-day[type="button"] {
5507
+ width: auto;
5508
+ margin-inline-start: calc(-1 * var(--sc-space-1));
5509
+ padding: 0 var(--sc-space-1);
5510
+ border: 0;
5511
+ border-radius: var(--sc-radius-sm);
5512
+ background: transparent;
5513
+ color: inherit;
5514
+ font: inherit;
5515
+ font-size: var(--sc-text-xs);
5516
+ font-weight: var(--sc-weight-medium);
5517
+ line-height: var(--sc-leading-snug);
5518
+ text-align: left;
5519
+ cursor: pointer;
5520
+ }
5521
+
5522
+ .sc-calendar-day[type="button"]:hover {
5523
+ background: var(--sc-color-sheet-hover);
5524
+ }
5525
+
5526
+ .sc-calendar-day[aria-pressed="true"] {
5527
+ background: var(--sc-color-accent);
5528
+ color: #ffffff;
5529
+ }
5530
+
5531
+ .sc-calendar-cell-picked {
5532
+ border-color: var(--sc-color-accent);
5533
+ background: color-mix(in srgb, var(--sc-color-accent) 6%, var(--sc-color-sheet));
5534
+ }
5535
+
5536
+ /* The tasks of the picked day, under the month: a pane with the day over the rows. */
5537
+ .sc-calendar-day-list {
5538
+ display: grid;
5539
+ gap: var(--sc-space-3);
5540
+ margin-top: var(--sc-space-4);
5541
+ padding: var(--sc-space-4);
5542
+ border: var(--sc-border);
5543
+ border-radius: var(--sc-radius-lg);
5544
+ background: var(--sc-color-sheet);
5545
+ }
5546
+
5547
+ .sc-calendar-day-list-head {
5548
+ display: flex;
5549
+ align-items: center;
5550
+ justify-content: space-between;
5551
+ gap: var(--sc-space-2);
5552
+ }
5553
+
5554
+ .sc-calendar-day-list-title {
5555
+ display: flex;
5556
+ align-items: center;
5557
+ gap: var(--sc-space-2);
5558
+ margin: 0;
5559
+ font-size: var(--sc-text-md);
5560
+ font-weight: var(--sc-weight-bold);
5561
+ }
5562
+
5563
+ /* How many a day holds: said on a phone, where the day shows three dots and no more. */
5564
+ .sc-calendar-count {
5565
+ display: none;
5566
+ }
5567
+
5568
+ @media (max-width: 40rem) {
5569
+ /* The number covers the whole day, so that a finger anywhere on it lists the day's tasks;
5570
+ the dots and the count under it are a picture, not targets. */
5571
+ .sc-calendar-cell {
5572
+ position: relative;
5573
+ padding-top: 1.375rem;
5574
+ }
5575
+
5576
+ .sc-calendar-day[type="button"] {
5577
+ position: absolute;
5578
+ inset: 0;
5579
+ z-index: 1;
5580
+ display: flex;
5581
+ align-items: flex-start;
5582
+ justify-content: flex-start;
5583
+ width: auto;
5584
+ margin: 0;
5585
+ padding: 2px var(--sc-space-1);
5586
+ border-radius: var(--sc-radius-md);
5587
+ }
5588
+
5589
+ /* No pointer rests on a phone; a finger that tapped must not leave a sheet over the dots. */
5590
+ .sc-calendar-day[type="button"]:hover {
5591
+ background: transparent;
5592
+ }
5593
+
5594
+ .sc-calendar-day[aria-pressed="true"] {
5595
+ background: transparent;
5596
+ color: var(--sc-color-accent);
5597
+ font-weight: var(--sc-weight-bold);
5598
+ }
5599
+
5600
+ .sc-calendar-cell > a,
5601
+ .sc-calendar-cell > .sc-calendar-more {
5602
+ pointer-events: none;
5603
+ }
5604
+
5605
+ .sc-calendar-cell > a:nth-of-type(n + 4),
5606
+ .sc-calendar-cell > .sc-calendar-more {
5607
+ display: none;
5608
+ }
5609
+
5610
+ .sc-calendar-count {
5611
+ display: block;
5612
+ width: fit-content;
5613
+ min-width: 1rem;
5614
+ margin-top: 3px;
5615
+ padding: 0 4px;
5616
+ border-radius: var(--sc-radius-full);
5617
+ background: color-mix(in srgb, var(--sc-color-text-muted) 14%, transparent);
5618
+ color: var(--sc-color-text-muted);
5619
+ font-size: 0.625rem;
5620
+ font-weight: var(--sc-weight-medium);
5621
+ line-height: 1rem;
5622
+ text-align: center;
5623
+ }
5624
+
5625
+ .sc-calendar-day-list {
5626
+ margin-top: var(--sc-space-3);
5627
+ }
5628
+ }
5629
+
5630
+ /* The end of a phone's header: the live dot, the avatar and the caret close together. */
5631
+ @media (max-width: 40rem) {
5632
+ .sc-header-end {
5633
+ gap: 0;
5634
+ }
5635
+
5636
+ .sc-menu-summary {
5637
+ gap: var(--sc-space-1);
5638
+ padding-inline: var(--sc-space-1);
5639
+ }
5640
+ }
5641
+
5642
+ /* The ways under a comment's field stand on one row at one height, the small file button
5643
+ included, so that none sits lower than the one beside it. */
5644
+ .sc-comment-form-actions > .sc-button,
5645
+ .sc-comment-form-actions > label {
5646
+ min-height: var(--sc-control-size);
5647
+ padding-inline: var(--sc-space-4);
5648
+ font-size: var(--sc-text-sm);
5649
+ }