@bongos/core 1.21.11 → 1.21.13

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.
@@ -137,6 +137,15 @@
137
137
  const label = item.subject ? item.subject.label : `stage ${item.subject_id}`;
138
138
  return `Close the ${escapeHtml(label)} stage ${pill('quiet', 'genesis stage')}`;
139
139
  }
140
+ // task 1004528: a building's matter (task 1004529's <area>_matter subjects)
141
+ // is put to that building's sitting, not an amendment; and a change to who
142
+ // decides what is an amendment of its own kind.
143
+ const matterArea = /^([a-z]+)_matter$/.exec(String(item.subject_type || ''));
144
+ if (matterArea) {
145
+ const title = item.subject && item.subject.title ? item.subject.title : `A matter at ${matterArea[1]}`;
146
+ return `${escapeHtml(title)} ${pill('quiet', `${matterArea[1]} matter`)}`;
147
+ }
148
+ if (item.subject && item.subject.kind === 'decision_rules') return `Who decides what ${pill('quiet', 'amendment')}`;
140
149
  return `Constitutional amendment ${pill('quiet', 'amendment')}`;
141
150
  }
142
151
 
@@ -0,0 +1,98 @@
1
+ /* modules/hall-ui/public/street-card.css — THE MATTER CARD THAT ACTS (task
2
+ 1004528, goal 1000125). The card() half of the template of
3
+ docs/design/mocks/governor-city/Street.dc.html: the quote, the seats with
4
+ their tally, a voice, the counsel box, the result, the .door actions and the
5
+ .textbtn, the toast, and the prototype's rise for a building that answers.
6
+ Laid over street.css (whose card frame, head and title it keeps), on the
7
+ hall's tokens and the street's own body tokens. The accent is the token and
8
+ only on what needs you (the primary act, your open seat). No :root; the
9
+ dark tokens are street.css's twins, so this sheet needs no dark block of its
10
+ own; motion dies under reduced motion at the foot. */
11
+
12
+ /* the full card holds more than the short one did: it may stand taller over
13
+ the street before it scrolls, so the acts are in view on a laptop */
14
+ .street-card { max-height: min(480px, calc(100vh - 120px)); }
15
+ body[data-page="street"] {
16
+ /* an objecting seat: the terracotta, deepened so its white initial clears AA */
17
+ --mcard-against: color-mix(in srgb, var(--terracotta) 82%, #000000);
18
+ --mcard-against-ink: color-mix(in srgb, #ffffff 98%, transparent);
19
+ }
20
+
21
+ .street-card__body { display: flex; flex-direction: column; gap: 11px; }
22
+
23
+ .mcard-quote { margin: 0; font-size: 14px; line-height: 1.45; color: var(--ink-soft); }
24
+
25
+ /* the wording change: struck, then inserted */
26
+ .mcard-change { display: flex; flex-direction: column; gap: 4px; }
27
+ .mcard-change__row { margin: 0; font-size: 14px; line-height: 1.45; display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 8px; }
28
+ .mcard-change__label { flex-basis: 100%; font-size: 12.5px; color: var(--ink-faint); }
29
+ .mcard-del { color: var(--ink-soft); text-decoration: line-through; text-decoration-color: var(--terracotta); text-decoration-thickness: 1.5px; }
30
+ .mcard-ins { color: var(--ink); text-decoration: none; background: var(--street-wash); border-radius: 4px; padding: 0 4px; }
31
+
32
+ /* the seats, filling as people vote */
33
+ .mcard-seats { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
34
+ .mcard-seats__row { display: flex; gap: 6px; flex-wrap: wrap; }
35
+ .mcard-seat { width: 26px; height: 26px; border-radius: 999px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; font-size: 10.5px; font-weight: 500; flex: none; }
36
+ .mcard-seat--for { background: var(--ink); color: var(--bg); }
37
+ .mcard-seat--against { background: var(--mcard-against); color: var(--mcard-against-ink); }
38
+ .mcard-seat--you { background: transparent; color: var(--street-accent-text); border: 2px solid var(--accent); }
39
+ .mcard-seat--open { background: transparent; color: var(--ink-faint); border: 1px dashed color-mix(in srgb, var(--ink) 40%, transparent); }
40
+ .mcard-tally { font-size: 13px; color: var(--ink-soft); font-variant-numeric: tabular-nums; }
41
+
42
+ /* a voice: who, then their words */
43
+ .mcard-voice { display: flex; flex-direction: column; gap: 2px; }
44
+ .mcard-voice__by { font-size: 12.5px; color: var(--ink-faint); }
45
+ .mcard-voice__words { font-size: 14px; line-height: 1.45; }
46
+
47
+ .mcard-counsel { display: flex; flex-direction: column; gap: 4px; padding: 10px 12px; border-radius: 10px; background: var(--street-wash); }
48
+ .mcard-counsel__words { font-size: 14px; line-height: 1.45; }
49
+
50
+ /* the prototype's .door and .textbtn */
51
+ .mcard-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
52
+ .mcard-actions--text { gap: 18px; margin-top: -4px; }
53
+ .mcard-btn { font-family: var(--font-body); font-size: 14.5px; font-weight: 500; height: 42px; padding: 0 20px; border-radius: 999px; cursor: pointer; text-transform: lowercase; box-sizing: border-box; display: inline-flex; align-items: center; text-decoration: none; }
54
+ .mcard-btn--primary { background: var(--accent); color: var(--accent-on); border: 0; }
55
+ .mcard-btn--quiet { background: transparent; color: var(--ink); border: 1px solid var(--street-rule-strong); }
56
+ .mcard-btn--danger { background: transparent; color: var(--ink); border: 1px solid var(--terracotta); }
57
+ .mcard-btn:hover { filter: brightness(1.06); }
58
+ .mcard-btn[disabled] { opacity: .55; cursor: progress; }
59
+ .mcard-textbtn { align-self: flex-start; background: none; border: 0; padding: 6px 0; min-height: 24px; text-decoration: underline; text-underline-offset: 4px; font-family: var(--font-body); font-size: 14px; color: var(--ink-soft); cursor: pointer; text-align: left; }
60
+ .mcard-textbtn--accent { color: var(--street-accent-text); }
61
+
62
+ /* the two forms: an objection on the record, and the revised words */
63
+ .mcard-form { display: flex; flex-direction: column; gap: 6px; }
64
+ .mcard-form__label { font-size: 12.5px; color: var(--ink-faint); }
65
+ .mcard-form__text, .mcard-form__select { font-family: var(--font-body); font-size: 14px; line-height: 1.45; color: var(--ink); background: var(--bg); border: 1px solid var(--street-rule-strong); border-radius: 10px; padding: 8px 10px; box-sizing: border-box; width: 100%; }
66
+ .mcard-form__text { resize: vertical; min-height: 64px; }
67
+ .mcard-form__select { min-height: 36px; }
68
+ .mcard-form .mcard-actions { margin-top: 4px; }
69
+ .mcard-error { margin: 0; font-size: 13.5px; line-height: 1.4; color: var(--street-accent-text); }
70
+
71
+ .mcard-btn:focus-visible, .mcard-textbtn:focus-visible, .mcard-form__text:focus-visible, .mcard-form__select:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
72
+
73
+ /* the toast: one short line over the street */
74
+ .street-toast { position: absolute; left: 50%; top: 192px; transform: translateX(-50%); max-width: calc(100% - 32px); box-sizing: border-box; font-size: 15px; line-height: 1.35; color: var(--ink); padding: 11px 20px; border-radius: 999px; background: var(--bg-card); border: 1px solid var(--street-rule-strong); z-index: 10; pointer-events: none; text-align: center; }
75
+ .street-toast[hidden] { display: none; }
76
+
77
+ /* the city answers: a building rises (the prototype's rise) or lights, a pin settles */
78
+ @keyframes street-rise { from { transform: scaleY(0.02); opacity: .3; } to { transform: scaleY(1); opacity: 1; } }
79
+ @keyframes street-light { 0% { filter: brightness(1); } 35% { filter: brightness(1.7); } 100% { filter: brightness(1); } }
80
+ @keyframes street-settle { from { transform: translateY(-8px); opacity: .5; } to { transform: none; opacity: 1; } }
81
+ @keyframes street-seat { from { transform: scale(.6); opacity: 0; } to { transform: none; opacity: 1; } }
82
+ .street-answer { transform-box: fill-box; transform-origin: 50% 100%; }
83
+ .street-answer--rise { animation: street-rise 1100ms cubic-bezier(.16,1,.3,1) both; }
84
+ .street-answer--light { animation: street-light 1100ms cubic-bezier(.2,.7,.3,1) both; }
85
+ .street-answer--settle { animation: street-light 700ms cubic-bezier(.2,.7,.3,1) both; }
86
+ .street-pin--answer { animation: street-settle 420ms cubic-bezier(.16,1,.3,1) both; }
87
+ .mcard-seat--fresh { animation: street-seat 360ms cubic-bezier(.16,1,.3,1) both; }
88
+ .street-toast { animation: street-enter 320ms cubic-bezier(.16,1,.3,1) both; }
89
+
90
+ @media (max-width: 560px) {
91
+ .street-toast { top: 96px; border-radius: 16px; }
92
+ }
93
+
94
+ /* The Kill Switch: under reduced motion nothing moves; the street still
95
+ answers, at rest (the toast, the new pins, the lit windows). */
96
+ @media (prefers-reduced-motion: reduce) {
97
+ body[data-page="street"] .street-answer, body[data-page="street"] .street-pin--answer, body[data-page="street"] .mcard-seat--fresh, body[data-page="street"] .street-toast { animation: none !important; transition: none !important; }
98
+ }