@bongos/core 1.25.15 → 1.25.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.bongos-core.json +128 -58
- package/.claude/skills/goal-create/SKILL.md +1 -0
- package/.claude/skills/planning-session/SKILL.md +5 -4
- package/bin/bongos.js +1 -0
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +14 -0
- package/clients/bongos-client/index.cjs +14 -0
- package/clients/bongos-client/index.d.ts +22 -2
- package/clients/bongos-client/index.mjs +14 -0
- package/docs/adr/0406-every-project-gets-a-sandbox-that-follows-main-and-live-moves-only-when-a-person-promotes.md +8 -0
- package/docs/adr/0408-a-genesis-stage-is-three-doors-onto-one-record.md +1 -0
- package/docs/api/openapi.json +415 -3
- package/docs/api-reference.md +13 -2
- package/docs/copy-inventory.md +120 -109
- package/docs/copy-registry.json +275 -165
- package/docs/module-api-changelog.md +4 -2
- package/docs/page-inventory.json +2 -0
- package/docs/page-readings.json +107 -107
- package/docs/project-context.template.md +1 -0
- package/modules/government/decision-rules.js +1 -0
- package/modules/hall-ui/public/dom-utils.js +5 -0
- package/modules/hall-ui/public/genesis-home.js +23 -8
- package/modules/hall-ui/public/setup-gate.js +1 -1
- package/modules/hall-ui/public/style.css +21 -1
- package/modules/lifecycle/first-read-db.js +152 -0
- package/modules/lifecycle/first-read.js +265 -0
- package/modules/lifecycle/kickoff-checklist.js +29 -6
- package/modules/lifecycle/kickoff-seed.js +27 -4
- package/modules/lifecycle/migrations/lifecycle_022_repo_maps.sql +44 -0
- package/modules/lifecycle/module.json +2 -1
- package/modules/lifecycle/routes/first-read.js +79 -0
- package/modules/onboarding/genesis-home.js +11 -2
- package/modules/onboarding/genesis-work.js +28 -5
- package/modules/provisioning/pollers/app-liveness.js +23 -1
- package/modules/provisioning/render-sandbox.js +113 -0
- package/modules/provisioning/render-standup.js +3 -1
- package/modules/provisioning/routes/provisioning.js +4 -1
- package/modules/provisioning/routes/render-standup.js +49 -1
- package/modules/public-landing/public/assets/guide-scene.css +245 -0
- package/modules/public-landing/public/assets/guide-scene.js +566 -0
- package/modules/public-landing/public/index.html +62 -2
- package/modules/public-landing/public/projects.html +101 -4
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +23 -1
- package/scripts/bongos/first-read.js +116 -0
- package/scripts/bongos/genesis.js +2 -0
- package/scripts/bongos/government-walk.js +4 -4
- package/scripts/bongos/provision-render-sandbox.js +171 -0
- package/scripts/bongos/provision-render.js +37 -2
- package/scripts/bongos/provision-teardown.js +1 -1
- package/scripts/bongos/render-api.js +33 -3
- package/scripts/bongos/render-payload.js +39 -1
- package/scripts/gds/first-read.js +7 -0
- package/scripts/gds/provision-render-sandbox.js +6 -0
- package/src/module-api.js +1 -1
- package/tests/first_read.mjs +303 -0
- package/tests/genesis_home.mjs +70 -2
- package/tests/genesis_work.mjs +49 -0
- package/tests/government_act_alone_buildings.mjs +2 -0
- package/tests/landing_guide_scene.mjs +504 -0
- package/tests/provisioning_app_status.mjs +3 -2
- package/tests/provisioning_render_route.mjs +1 -1
- package/tests/provisioning_teardown_intent.mjs +50 -0
- package/tests/render_api.mjs +5 -2
- package/tests/render_sandbox.mjs +447 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/* assets/guide-scene.css — the start-a-project guide as a scene in the game (task 1005275).
|
|
2
|
+
|
|
3
|
+
The scene wears the game's look, Helm (DESIGN.md "Helm: the hall's look"): a night panel
|
|
4
|
+
closed left and right by the strong ice hairline, names in the name voice (condensed
|
|
5
|
+
wide capitals), what you press cut at two corners, progress as skewed segments, and the
|
|
6
|
+
one accent bar on the thing to do next. It stands on the landing, so it spends the
|
|
7
|
+
landing's tokens, never the hall's literals: the night and the ice are mixes of the
|
|
8
|
+
pack's --sea into its --bg and --ink (the Fifteen Rule), and they flip with the world's
|
|
9
|
+
own mode tier, so this sheet writes no dark rule and no :root. Every value is a var()
|
|
10
|
+
or a color-mix() of the fifteen; black with alpha is the scrim. Motion is two short
|
|
11
|
+
transitions and the waiting dots, all stopped by world.css's reduced-motion switch.
|
|
12
|
+
Layout: the plan beside the talk. Every layout value that changes on a phone is a
|
|
13
|
+
--gd-* name read with its desktop value as the fallback, and the landing's ONE
|
|
14
|
+
breakpoint (900px, DESIGN.md "Responsive"; the @media (max-width:900px) body block in
|
|
15
|
+
index.html) restates those names: one column, the frame the whole screen, the plan
|
|
16
|
+
opening over the talk from the Plan button. So this sheet adds no breakpoint, and its
|
|
17
|
+
inset edges are named once here (--gd-edge*) rather than typed into each rule. */
|
|
18
|
+
.gd {
|
|
19
|
+
--gd-night: color-mix(in srgb, var(--sea) 9%, var(--bg));
|
|
20
|
+
--gd-panel: color-mix(in srgb, var(--sea) 13%, var(--bg-card));
|
|
21
|
+
--gd-ice: color-mix(in srgb, var(--sea) 12%, var(--ink));
|
|
22
|
+
--gd-rule: color-mix(in srgb, var(--gd-ice) 40%, transparent);
|
|
23
|
+
--gd-rule-soft: color-mix(in srgb, var(--gd-ice) 20%, transparent);
|
|
24
|
+
--gd-glass: color-mix(in srgb, var(--gd-ice) 9%, transparent);
|
|
25
|
+
--gd-strong: 1.5px;
|
|
26
|
+
--gd-name: "Barlow Condensed", var(--font-display);
|
|
27
|
+
--gd-body: "Barlow", var(--font-body);
|
|
28
|
+
--gd-cut: 12px;
|
|
29
|
+
--gd-cut-sm: 8px;
|
|
30
|
+
--gd-cut-path: polygon(var(--gd-cut) 0, 100% 0, 100% calc(100% - var(--gd-cut)), calc(100% - var(--gd-cut)) 100%, 0 100%, 0 var(--gd-cut));
|
|
31
|
+
--gd-cut-path-sm: polygon(var(--gd-cut-sm) 0, 100% 0, 100% calc(100% - var(--gd-cut-sm)), calc(100% - var(--gd-cut-sm)) 100%, 0 100%, 0 var(--gd-cut-sm));
|
|
32
|
+
--gd-focus: inset 0 0 0 2px var(--focus), inset 0 0 0 4px var(--gd-night);
|
|
33
|
+
/* the hairline drawn inside a cut shape (a border would be clipped by the cut) */
|
|
34
|
+
--gd-edge: inset 0 0 0 1px var(--gd-rule);
|
|
35
|
+
--gd-edge-soft: inset 0 0 0 1px var(--gd-rule-soft);
|
|
36
|
+
--gd-seg-edge: inset 0 0 0 var(--gd-strong) var(--gd-rule);
|
|
37
|
+
|
|
38
|
+
position: fixed; inset: 0; z-index: var(--ds-z-modal, 160);
|
|
39
|
+
display: flex; align-items: center; justify-content: center;
|
|
40
|
+
padding: var(--gd-pad, var(--ds-space-md));
|
|
41
|
+
background: rgba(0, 0, 0, .62);
|
|
42
|
+
-webkit-backdrop-filter: blur(6px) saturate(.7); backdrop-filter: blur(6px) saturate(.7);
|
|
43
|
+
color: var(--gd-ice); font-family: var(--gd-body); font-size: var(--ds-text-xl); line-height: 1.5;
|
|
44
|
+
}
|
|
45
|
+
.gd[hidden] { display: none; }
|
|
46
|
+
.gd .vh { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
|
|
47
|
+
html.gd-open, html.gd-open body { overflow: hidden; }
|
|
48
|
+
|
|
49
|
+
.gd__frame {
|
|
50
|
+
position: relative; box-sizing: border-box;
|
|
51
|
+
width: min(100%, var(--gd-frame-w, 1080px)); height: min(100%, var(--gd-frame-h, 760px));
|
|
52
|
+
display: grid; grid-template-columns: var(--gd-cols, minmax(0, 1fr) 340px);
|
|
53
|
+
background: var(--gd-night);
|
|
54
|
+
border: 0 solid var(--gd-rule); border-left-width: var(--gd-side, var(--gd-strong)); border-right-width: var(--gd-side, var(--gd-strong));
|
|
55
|
+
box-shadow: var(--ds-shadow-pop);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* ── the talk ── */
|
|
59
|
+
.gd__talk { display: flex; flex-direction: column; min-height: 0; min-width: 0; }
|
|
60
|
+
.gd__head {
|
|
61
|
+
display: flex; align-items: center; justify-content: space-between; gap: var(--ds-space-sm);
|
|
62
|
+
padding: var(--ds-space-sm) var(--gd-gutter, var(--ds-space-md));
|
|
63
|
+
border-bottom: var(--gd-strong) solid var(--gd-rule);
|
|
64
|
+
}
|
|
65
|
+
.gd__title, .gd__planh {
|
|
66
|
+
margin: 0; font-family: var(--gd-name); font-weight: 500; font-size: var(--ds-text-3xl);
|
|
67
|
+
letter-spacing: .24em; text-transform: uppercase; line-height: 1.2; color: var(--ink);
|
|
68
|
+
}
|
|
69
|
+
.gd__x {
|
|
70
|
+
flex: none; display: inline-grid; place-items: center; width: 40px; height: 40px; padding: 0;
|
|
71
|
+
background: transparent; color: var(--gd-ice); border: 0; cursor: pointer;
|
|
72
|
+
clip-path: var(--gd-cut-path-sm);
|
|
73
|
+
transition: background-color var(--ds-dur-fast) var(--ds-ease);
|
|
74
|
+
}
|
|
75
|
+
.gd__x svg { width: 18px; height: 18px; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; fill: none; }
|
|
76
|
+
.gd__x:hover { background: var(--gd-glass); }
|
|
77
|
+
|
|
78
|
+
/* the guide: the sprite in a cut frame, its name, the count as words and segments */
|
|
79
|
+
.gd__who-row {
|
|
80
|
+
display: flex; align-items: center; gap: var(--ds-space-sm);
|
|
81
|
+
padding: var(--ds-space-sm) var(--gd-gutter, var(--ds-space-md));
|
|
82
|
+
border-bottom: var(--ds-line, 1px) solid var(--gd-rule-soft);
|
|
83
|
+
}
|
|
84
|
+
.gd__face {
|
|
85
|
+
position: relative; flex: none; width: var(--gd-face, 72px); height: var(--gd-face, 72px); display: grid; place-items: center;
|
|
86
|
+
background: var(--gd-panel); clip-path: var(--gd-cut-path-sm);
|
|
87
|
+
box-shadow: var(--gd-edge);
|
|
88
|
+
}
|
|
89
|
+
.gd__face img { width: var(--gd-face-img, 64px); height: var(--gd-face-img, 64px); image-rendering: pixelated; }
|
|
90
|
+
.gd__face img[hidden] { display: none; }
|
|
91
|
+
.gd__meta { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 4px; }
|
|
92
|
+
.gd__name {
|
|
93
|
+
margin: 0; font-family: var(--gd-name); font-weight: 600; font-size: var(--ds-text-xl);
|
|
94
|
+
letter-spacing: .2em; text-transform: uppercase; color: var(--ink);
|
|
95
|
+
}
|
|
96
|
+
.gd__left { margin: 0; font-size: var(--ds-text-md); color: var(--gd-ice); font-variant-numeric: tabular-nums; }
|
|
97
|
+
.gd__left[hidden], .gd__segs[hidden] { display: none; }
|
|
98
|
+
.gd__segs { display: flex; flex-wrap: wrap; gap: var(--ds-space-hair); padding-left: 4px; }
|
|
99
|
+
/* a message still to send is an outline; a sent one is filled ice (the Helm segment) */
|
|
100
|
+
.gd__seg {
|
|
101
|
+
width: 22px; height: 8px; transform: skewX(-28deg);
|
|
102
|
+
box-shadow: var(--gd-seg-edge);
|
|
103
|
+
}
|
|
104
|
+
.gd__seg--used { background: var(--gd-ice); box-shadow: none; }
|
|
105
|
+
|
|
106
|
+
/* the conversation */
|
|
107
|
+
.gd__log {
|
|
108
|
+
flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain;
|
|
109
|
+
margin: 0; padding: var(--ds-space-md) var(--gd-gutter, var(--ds-space-md)); list-style: none;
|
|
110
|
+
display: flex; flex-direction: column; gap: var(--ds-space-sm);
|
|
111
|
+
}
|
|
112
|
+
.gd__msg { display: flex; flex-direction: column; gap: 2px; max-width: 46rem; }
|
|
113
|
+
.gd__who {
|
|
114
|
+
font-family: var(--gd-name); font-size: var(--ds-text-xs); font-weight: 500;
|
|
115
|
+
letter-spacing: .2em; text-transform: uppercase; color: var(--gd-ice);
|
|
116
|
+
}
|
|
117
|
+
.gd__words { margin: 0; white-space: pre-wrap; overflow-wrap: anywhere; text-wrap: pretty; color: var(--ink); }
|
|
118
|
+
.gd__msg--visitor { align-self: flex-end; align-items: flex-end; }
|
|
119
|
+
.gd__msg--visitor .gd__words {
|
|
120
|
+
padding: var(--ds-space-hair) var(--ds-space-sm);
|
|
121
|
+
background: var(--gd-panel); clip-path: var(--gd-cut-path-sm);
|
|
122
|
+
box-shadow: var(--gd-edge-soft);
|
|
123
|
+
}
|
|
124
|
+
.gd__msg--note .gd__words {
|
|
125
|
+
padding-top: var(--ds-space-hair); border-top: var(--ds-line, 1px) solid var(--gd-rule-soft);
|
|
126
|
+
color: var(--gd-ice); font-size: var(--ds-text-md);
|
|
127
|
+
}
|
|
128
|
+
/* waiting: three dots that rise in turn; at rest (reduced motion) they simply sit */
|
|
129
|
+
.gd__dot {
|
|
130
|
+
display: inline-block; width: 6px; height: 6px; margin-right: 6px; border-radius: var(--ds-radius-pill);
|
|
131
|
+
background: var(--gd-ice); opacity: .5;
|
|
132
|
+
animation: gd-wait 1.2s var(--ds-ease) infinite;
|
|
133
|
+
}
|
|
134
|
+
.gd__dot:nth-child(3) { animation-delay: .15s; }
|
|
135
|
+
.gd__dot:nth-child(4) { animation-delay: .3s; }
|
|
136
|
+
@keyframes gd-wait { 0%, 60%, 100% { opacity: .35; transform: none; } 30% { opacity: 1; transform: translateY(-3px); } }
|
|
137
|
+
|
|
138
|
+
.gd__err {
|
|
139
|
+
margin: 0 var(--ds-space-md) var(--ds-space-hair); padding: var(--ds-space-hair) var(--ds-space-sm);
|
|
140
|
+
border-left: var(--gd-strong) solid var(--err); background: var(--gd-glass);
|
|
141
|
+
color: var(--ink); font-size: var(--ds-text-md);
|
|
142
|
+
}
|
|
143
|
+
.gd__err[hidden] { display: none; }
|
|
144
|
+
|
|
145
|
+
/* the composer */
|
|
146
|
+
.gd__say {
|
|
147
|
+
display: flex; align-items: flex-end; gap: var(--ds-space-hair); flex-wrap: wrap;
|
|
148
|
+
padding: var(--ds-space-sm) var(--gd-gutter, var(--ds-space-md)) var(--ds-space-md);
|
|
149
|
+
border-top: var(--gd-strong) solid var(--gd-rule);
|
|
150
|
+
}
|
|
151
|
+
.gd__say[hidden] { display: none; }
|
|
152
|
+
.gd__text {
|
|
153
|
+
flex: 1 1 16rem; min-width: 0; min-height: 48px; max-height: 9.5rem; resize: vertical; box-sizing: border-box;
|
|
154
|
+
padding: 11px var(--ds-space-sm);
|
|
155
|
+
background: var(--gd-panel); color: var(--ink); caret-color: var(--accent);
|
|
156
|
+
border: var(--ds-line, 1px) solid var(--gd-rule); border-radius: 0;
|
|
157
|
+
font: inherit; font-size: var(--ds-text-xl);
|
|
158
|
+
}
|
|
159
|
+
.gd__text::placeholder { color: var(--gd-ice); opacity: .8; }
|
|
160
|
+
.gd__text:focus-visible { outline: 2px solid var(--focus); outline-offset: 0; box-shadow: none; border-color: transparent; }
|
|
161
|
+
.gd__text:disabled { opacity: .7; }
|
|
162
|
+
.gd__hp { position: absolute; left: -9999px; width: 1px; height: 1px; opacity: 0; }
|
|
163
|
+
/* under the box: end the chat early for the plan, or leave for sign-up */
|
|
164
|
+
.gd__sayfoot { flex-basis: 100%; display: flex; align-items: center; justify-content: space-between; gap: var(--ds-space-sm); flex-wrap: wrap; }
|
|
165
|
+
.gd__skip {
|
|
166
|
+
display: inline-flex; align-items: center; padding: 2px 0; min-height: 24px;
|
|
167
|
+
color: var(--gd-ice); font-size: var(--ds-text-md); text-decoration: underline; text-underline-offset: 3px;
|
|
168
|
+
}
|
|
169
|
+
.gd__skip:hover { color: var(--ink); }
|
|
170
|
+
|
|
171
|
+
/* what you press: cut, in the name voice. The primary is the one accent bar. */
|
|
172
|
+
.gd__send, .gd__go, .gd__planbtn {
|
|
173
|
+
display: inline-flex; align-items: center; justify-content: center; gap: var(--ds-space-hair);
|
|
174
|
+
min-height: 48px; padding: 0 var(--ds-space-md); box-sizing: border-box; border: 0; cursor: pointer;
|
|
175
|
+
font-family: var(--gd-name); font-size: var(--ds-text-xl); font-weight: 600;
|
|
176
|
+
letter-spacing: .2em; text-transform: uppercase; text-decoration: none;
|
|
177
|
+
clip-path: var(--gd-cut-path);
|
|
178
|
+
transition: background-color var(--ds-dur-fast) var(--ds-ease);
|
|
179
|
+
}
|
|
180
|
+
.gd__send, .gd__go { background: var(--accent); color: var(--accent-on); }
|
|
181
|
+
.gd__send:hover, .gd__go:hover { background: var(--accent-lift); color: var(--accent-on); }
|
|
182
|
+
.gd__send:disabled { background: var(--gd-panel); color: var(--gd-ice); cursor: default; }
|
|
183
|
+
/* the Plan button is the one-column layout's only (the plan stands beside the talk above it) */
|
|
184
|
+
.gd__planbtn { display: var(--gd-planbtn, none); flex: none; background: var(--gd-panel); color: var(--ink); box-shadow: var(--gd-edge); min-height: 40px; padding: 0 var(--ds-space-sm); font-size: var(--ds-text-md); }
|
|
185
|
+
.gd__planbtn:hover { background: var(--gd-glass); }
|
|
186
|
+
/* a cut control's focus is the inset two-tone ring, since a clip-path clips an outline */
|
|
187
|
+
.gd__x:focus-visible, .gd__send:focus-visible, .gd__go:focus-visible, .gd__planbtn:focus-visible {
|
|
188
|
+
outline: 0; box-shadow: var(--gd-focus);
|
|
189
|
+
}
|
|
190
|
+
.gd__skip:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; box-shadow: none; }
|
|
191
|
+
|
|
192
|
+
/* the end: one line and the way on */
|
|
193
|
+
.gd__end {
|
|
194
|
+
display: flex; align-items: center; justify-content: flex-end; gap: var(--ds-space-sm); flex-wrap: wrap;
|
|
195
|
+
padding: var(--ds-space-sm) var(--gd-gutter, var(--ds-space-md)) var(--ds-space-md);
|
|
196
|
+
border-top: var(--gd-strong) solid var(--gd-rule);
|
|
197
|
+
}
|
|
198
|
+
.gd__end[hidden] { display: none; }
|
|
199
|
+
.gd__go { flex: 0 1 auto; width: var(--gd-go-w, auto); box-shadow: var(--accent-glow); }
|
|
200
|
+
.gd__go[hidden] { display: none; }
|
|
201
|
+
/* the quiet press: a cut ghost in the name voice (Make my plan) */
|
|
202
|
+
.gd__more {
|
|
203
|
+
display: inline-flex; align-items: center; justify-content: center; min-height: 40px; padding: 0 var(--ds-space-sm);
|
|
204
|
+
background: transparent; color: var(--ink); border: 0; cursor: pointer;
|
|
205
|
+
box-shadow: var(--gd-edge); clip-path: var(--gd-cut-path-sm);
|
|
206
|
+
font-family: var(--gd-name); font-size: var(--ds-text-md); font-weight: 600; letter-spacing: .2em; text-transform: uppercase;
|
|
207
|
+
transition: background-color var(--ds-dur-fast) var(--ds-ease);
|
|
208
|
+
}
|
|
209
|
+
.gd__more:hover { background: var(--gd-glass); }
|
|
210
|
+
.gd__more:focus-visible { outline: 0; box-shadow: var(--gd-focus); }
|
|
211
|
+
.gd__more[hidden] { display: none; }
|
|
212
|
+
|
|
213
|
+
/* ── the plan ── */
|
|
214
|
+
.gd__plan {
|
|
215
|
+
display: var(--gd-plan-show, flex); flex-direction: column; min-height: 0;
|
|
216
|
+
position: var(--gd-plan-pos, static); inset: 0; z-index: 1;
|
|
217
|
+
background: var(--gd-panel);
|
|
218
|
+
border-left: var(--gd-plan-edge, var(--ds-line, 1px)) solid var(--gd-rule-soft);
|
|
219
|
+
}
|
|
220
|
+
/* one column: the Plan button lays the plan over the talk */
|
|
221
|
+
.gd--plan .gd__plan { display: flex; }
|
|
222
|
+
.gd--plan .gd__talk { visibility: var(--gd-talk-under-plan, visible); }
|
|
223
|
+
.gd__planhead {
|
|
224
|
+
display: flex; align-items: center; justify-content: space-between; gap: var(--ds-space-sm);
|
|
225
|
+
padding: var(--ds-space-sm) var(--ds-space-md);
|
|
226
|
+
border-bottom: var(--gd-strong) solid var(--gd-rule);
|
|
227
|
+
min-height: 72px; box-sizing: border-box;
|
|
228
|
+
}
|
|
229
|
+
.gd__planhead .gd__x { display: var(--gd-planx, none); }
|
|
230
|
+
.gd__planbody { flex: 1; min-height: 0; overflow-y: auto; padding: var(--ds-space-md); display: flex; flex-direction: column; gap: var(--ds-space-hair); }
|
|
231
|
+
.gd__planwait { margin: 0; color: var(--gd-ice); font-size: var(--ds-text-lg); }
|
|
232
|
+
.gd__plansum { margin: 0; color: var(--ink); font-size: var(--ds-text-lg); text-wrap: pretty; }
|
|
233
|
+
.gd__planh4 {
|
|
234
|
+
margin: var(--ds-space-sm) 0 0; font-family: var(--gd-name); font-size: var(--ds-text-xs); font-weight: 500;
|
|
235
|
+
letter-spacing: .2em; text-transform: uppercase; color: var(--gd-ice);
|
|
236
|
+
}
|
|
237
|
+
.gd__planlist { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; }
|
|
238
|
+
.gd__plannote, .gd__saved { margin: 0; color: var(--gd-ice); font-size: var(--ds-text-md); }
|
|
239
|
+
.gd__plannote { margin-top: var(--ds-space-sm); padding-top: var(--ds-space-hair); border-top: var(--ds-line, 1px) solid var(--gd-rule-soft); }
|
|
240
|
+
.gd__saved { padding: var(--ds-space-sm) var(--ds-space-md); border-top: var(--ds-line, 1px) solid var(--gd-rule-soft); }
|
|
241
|
+
.gd__saved[hidden] { display: none; }
|
|
242
|
+
.gd__planlist li {
|
|
243
|
+
padding: var(--ds-space-hair) 0; border-top: var(--ds-line, 1px) solid var(--gd-rule-soft);
|
|
244
|
+
color: var(--ink); font-size: var(--ds-text-lg);
|
|
245
|
+
}
|