File size: 10,418 Bytes
f546440
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1f123e1
 
 
 
 
 
 
f546440
 
 
 
 
 
 
 
 
 
 
 
 
1f123e1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f546440
 
 
 
1f123e1
 
 
 
 
f546440
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
/* settings/perms.css β€” wave 33 (owner item 11, W33-T34/T38).
 *
 * β›” CONTRACT C4: `index.css` is lane B's. Everything the permission editor's
 * per-database DISCLOSURE needs is new, so it lives here and is imported by
 * `PermsEditor.tsx` β€” the established practice (`query.css`, `navExtras.css`,
 * `SwipeView.css`). Nothing in this file redefines an `index.css` rule; it only
 * styles classes that did not exist before this wave.
 *
 * WHY A DISCLOSURE AT ALL. Owner, 2026-08-14: *"the database should not show all
 * immediately the detail (for filter or hide fields), the user should have the
 * ability to see ALL databases"*. Those two clauses pull against each other β€”
 * more databases, less detail per database β€” and an accordion is what satisfies
 * both. Before wave 33 the list was a fixed TWO and every panel rendered inline;
 * it is now every database the tenant has.
 */

/* The trailing controls of a module head, grouped as ONE flex child so the
   `space-between` rule in `index.css` still sees exactly two children. */
.set-perm-headend {
  display: flex;
  align-items: center;
  gap: 10px;
  flex: none;
}

/* Smaller and quieter than a primary action: this button reveals detail, it does
   not commit anything. It borrows `.set-secondary`'s border, surface and focus
   ring rather than restating them β€” a second definition of the button chrome is a
   second place for the focus ring to go missing.
   ⚠ STILL LIVE, and only in the agent editor. Wave 40 replaced the account
   editor's accordion with a full-pane room (`.set-perm-edit` below); the agent
   editor mounts the same list without `onEdit` and keeps this disclosure. */
.set-perm-disclose {
  font-size: var(--lp-fs-2xs);
  padding: 3px 9px;
  white-space: nowrap;
}

/* The open state reads as pressed, so a scrolled-away head still says which
   database owns the panels below it. */
.set-perm-disclose[aria-expanded="true"] {
  border-color: var(--lp-blue-deep);
  color: var(--lp-blue-deep);
}

/* ── wave 40, owner instruction 7 (W40-T14): the row's ONE way in, and the room
   it opens ──────────────────────────────────────────────────────────────────
 *
 * WHY THE ACCORDION BECAME A ROOM. Wave 33's disclosure answered "show every
 * database, not every panel", and it did β€” while the list was two rows. It is now
 * every database the tenant has, and a filter builder unfolded inside one row of
 * that list reads as a menu that failed to close. Owner: *"Edit opens the whole
 * database's Fields and Filters to toggle, with a Back button to return."*
 */

/* Sized and quietened like the disclosure it replaces, and borrowing
   `.set-secondary`'s border, surface and focus ring for the same reason that one
   does: a second definition of the button chrome is a second place for the focus
   ring to go missing. */
.set-perm-edit {
  font-size: var(--lp-fs-2xs);
  padding: 3px 9px;
  white-space: nowrap;
}

/* The way out and the name of the room share one line, so the reader learns
   where they are and how to leave in a single glance. `baseline` rather than
   `center`: the title's cap height should sit on the button's label, which is
   the alignment every other head on this page uses. */
.set-dbperm-head {
  display: flex;
  align-items: baseline;
  gap: 12px;
  margin-bottom: 16px;
}
/* The chevron rides with the words rather than beside them. */
.set-dbperm-back { display: inline-flex; align-items: center; gap: 6px; flex: none; }
/* `.set-h4` carries block margins meant for a heading that starts a section; here
   it is a flex item on the head's own line. */
.set-dbperm-title { margin: 0; min-width: 0; }
/* ⭐ W40-T16 β€” `.set-dbperm-metrics` IS DELETED WITH THE BOX IT SPACED. Owner instruction 13
   folded the blanket Metrics checkbox into the Hide-fields list as one row per metric, so the
   rule had no element left to apply to. A rule that matches nothing is how a stylesheet ends up
   describing a screen that no longer exists. */

/* THE PANELS STACK, one decision per eye level. A grid rather than a column flex
   box on purpose: `.set-perm-pop` carries `flex: 1 1 320px` for the side-by-side
   accordion, and flex properties are inert on a GRID item, so this container gets
   the stacking it wants without redefining a rule that belongs to `index.css`. */
.set-dbperm-panels {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 14px;
}

/* ── wave 40, owner instructions 8 + 9 + 10 (W40-T15): the account page stops
   shouting, and Save sits where the hand is ──────────────────────────────────
 *
 * Three complaints, one page. The header put an exit, a person and two chips on
 * one flex row; the reset-password control was split across a two-column grid
 * with its consequence read BEFORE the button that causes it; and a long access
 * list had its only Save at the bottom.
 *
 * β›” EVERY SELECTOR BELOW THAT OVERRIDES AN `index.css` DEFAULT CARRIES TWO
 * CLASSES ON PURPOSE. A single-class rule here would tie at 0-1-0 with the rule
 * it means to beat, and the winner would then be vite's import order across two
 * stylesheets β€” a thing no reader of either file can see. Nothing in `index.css`
 * is edited or restated; these only bound the new arrangement.
 */

/* --- instruction 9c: the way out is page chrome, on its own line ----------- */
/* The quiet-button register this system already uses (`.shell-newfolder`: muted
   ink, wash on hover, nothing else), with the native chrome reset in the BASE
   rule as `DESIGN.md` §4 requires. ⚠ `font: inherit` FIRST and the size after
   it: a shorthand declared below its own longhands re-expands and undoes them,
   which is the Alerts-button scar `verify_ui.py`'s R5b cascade check exists to
   catch. The negative left margin is optical, not spacing β€” it pulls the
   chevron out to the page's text edge so the label starts where the title does. */
.set-perm-back {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border: 0;
  background: transparent;
  font: inherit;
  font-size: var(--lp-fs-2xs);
  color: var(--lp-muted);
  padding: 4px 8px;
  margin: 0 0 10px -8px;
  border-radius: var(--lp-r-sm);
  cursor: pointer;
}
.set-perm-back:hover { background: var(--lp-wash); color: var(--lp-ink); }
.set-perm-back:focus-visible { outline: 2px solid var(--lp-blue-deep); outline-offset: 1px; }

/* The identity is the page TITLE now, so it owns the space under the head
   rather than sharing a row with the exit. */
.set-perm-ident { margin-bottom: 16px; }
/* The chips sit beside the name, which is where `index.css` already argued they
   belong: pushed to the far end they read as a status of the dialog rather than
   of the person.
   ⚠ `baseline`, NOT the `center` the old head used, and the difference is which
   sibling the chip is beside. On that row the chip sat next to a TWO-LINE block
   (name over username) and index.css records the reason for centring it: a chip
   top-aligned against two lines looks dropped. Here its sibling is the one-line
   title, so the chip's text sits on the title's baseline, which is the alignment
   `.set-perm-modhead` and `.set-dbperm-head` already use for a heading and a
   smaller control on one line. The username moved out of this row entirely. */
.set-perm-nameline {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 10px;
}

/* --- instruction 9a + 9b: the password group reads top to bottom ----------- */
/* Label, box and button on one line and one baseline; the consequence under
   them. `flex-end` rather than `baseline` because the label sits ABOVE the box:
   what has to line up is the bottom of the input and the bottom of the button,
   which are both 32px tall. */
.set-pw-row {
  display: flex;
  align-items: flex-end;
  flex-wrap: wrap;
  gap: 12px;
}
/* `.set-field` carries 13px of bottom margin meant for stacked form rows; here
   it would lift the box off the button's baseline. The width keeps the box the
   size a password is, instead of letting it stretch the whole card. */
.set-pw-group .set-pw-field { flex: 1 1 220px; max-width: 320px; margin-bottom: 0; }
/* The gap goes ABOVE the sentence now that the sentence is last. */
.set-perms .set-pw-note { margin: 8px 0 0; }

/* --- instruction 10: Save access at the head of the section too ------------ */
/* The trailing controls of the Access head, grouped as ONE flex child so
   `index.css`'s `space-between` on `.set-perm-sect` still sees exactly two. */
.set-perm-sectend {
  display: flex;
  align-items: center;
  gap: 8px;
  flex: none;
}
/* Sized to the copy door beside it rather than to the 32px action row at the
   bottom of the page: controls sharing a row share a height (`DESIGN.md` Β§4),
   and this one is riding a heading's line. It stays `.set-primary` in colour,
   because it commits the same write the bottom button commits. */
.set-perms .set-perm-savetop {
  height: 28px;
  padding: 0 12px;
  font-size: var(--lp-fs-2xs);
}

/* --- instruction 8: "Database" and "Module" ------------------------------- */
/* A label for a group of cards, one step quieter than the `Access` heading it
   sits under, so the reader gets the hierarchy from weight rather than from
   indentation. Sentence case: the product has no ALL-CAPS chrome.
   ⚠ The bottom margin is deliberately small because `.set-perm-mod` brings 14px
   of its own top margin and adjacent margins collapse to the larger β€” anything
   under 14px here has no effect at all, so 4px says "as tight as the card
   allows" rather than pretending to a number the layout cannot honour. */
.set-perms .set-perm-group {
  margin: 22px 0 4px;
  font-size: var(--lp-fs-2xs);
  color: var(--lp-muted);
}

@media (max-width: 640px) {
  /* The head wraps before the label truncates: a database name is the one thing
     in this row that cannot be guessed from context. */
  .set-perm-headend { flex-wrap: wrap; justify-content: flex-end; }
  .set-dbperm-head { flex-wrap: wrap; }
  /* The Access heading keeps its own line and the two controls take the next
     one, rather than the copy door and Save being crushed into a strip beside
     the word. */
  .set-perm-sectend { flex-wrap: wrap; justify-content: flex-end; }
}