hub.css file-level

at main · View file ↗ · Intel ↗

History
1 files
1 commits
0 hotspots
0 🧊 dead
0 💥 blast risk
sha256:4 fix(security): pin patched transitive deps to clear Dependabot moderate… · aaronrene · Jun 11, 2026
1 /* Default theme tokens — keep in sync with web/index.html :root / html[data-theme="light"] */
2 :root {
3 --bg: #0a192f;
4 --surface: #0d2138;
5 --border: #2a3f5c;
6 /* Primary copy: off-white (slightly grayer than pure #fafafa) to ease contrast on dark surfaces */
7 --text: color-mix(in srgb, #fafafa 97%, #9a9a9a 3%);
8 --muted: #a1a1a1;
9 --accent: #89cff0;
10 --accent-dim: rgba(137, 207, 240, 0.18);
11 --accent-soft: rgba(137, 207, 240, 0.1);
12 --accent-glow: color-mix(in srgb, var(--accent) 32%, transparent);
13 --cta-on-accent: #0a1628;
14 /* Hyperlinks on dark surfaces — brighter than UA default blue (Cursor / VS Code–style) */
15 --link-url: #55b4ff;
16 --link-url-hover: #7ec8ff;
17 }
18
19 [data-theme="light"] {
20 --bg: #f5f7fb;
21 --surface: #ffffff;
22 --border: #d8dee9;
23 --text: #0f172a;
24 --muted: #556070;
25 --accent: #5eb8e8;
26 --accent-dim: rgba(94, 184, 232, 0.2);
27 --accent-soft: rgba(94, 184, 232, 0.12);
28 --accent-glow: color-mix(in srgb, var(--accent) 28%, transparent);
29 --cta-on-accent: #0a1628;
30 --link-url: #0969da;
31 --link-url-hover: #0550ae;
32 }
33
34 /* Dashboard color palettes: set data-palette on <html> (saved in localStorage). Night/Day still uses data-theme. */
35 html[data-palette="ocean"]:not([data-theme="light"]) {
36 --bg: #0a0f1a;
37 --surface: #111b2e;
38 --border: #2a4f6e;
39 --text: color-mix(in srgb, #e8f0ff 97%, #9a9a9a 3%);
40 --muted: #6b8fb3;
41 }
42 html[data-theme="light"][data-palette="ocean"] {
43 --bg: #eef6ff;
44 --surface: #ffffff;
45 --border: #c7d9ee;
46 --text: #0c1829;
47 --muted: #4a678a;
48 }
49 html[data-palette="forest"]:not([data-theme="light"]) {
50 --bg: #0a120f;
51 --surface: #131f1a;
52 --border: #2a4f42;
53 --text: color-mix(in srgb, #e8f5ef 97%, #9a9a9a 3%);
54 --muted: #6b9a7f;
55 }
56 html[data-theme="light"][data-palette="forest"] {
57 --bg: #f0faf4;
58 --surface: #ffffff;
59 --border: #c5e0d4;
60 --text: #0f2418;
61 --muted: #3d6b52;
62 }
63 html[data-palette="sunset"]:not([data-theme="light"]) {
64 --bg: #140d0d;
65 --surface: #1f1412;
66 --border: #4f3a30;
67 --text: color-mix(in srgb, #fff0ea 97%, #9a9a9a 3%);
68 --muted: #c48b7a;
69 }
70 html[data-theme="light"][data-palette="sunset"] {
71 --bg: #fff8f4;
72 --surface: #ffffff;
73 --border: #f0d4c4;
74 --text: #2a1410;
75 --muted: #8a5c4a;
76 }
77 html[data-palette="lavender"]:not([data-theme="light"]) {
78 --bg: #100d14;
79 --surface: #181222;
80 --border: #3f3552;
81 --text: color-mix(in srgb, #f3edff 97%, #9a9a9a 3%);
82 --muted: #9b8bb8;
83 }
84 html[data-theme="light"][data-palette="lavender"] {
85 --bg: #f8f5ff;
86 --surface: #ffffff;
87 --border: #e0d6f5;
88 --text: #1f1530;
89 --muted: #6b5a8a;
90 }
91 html[data-palette="ember"]:not([data-theme="light"]) {
92 --bg: #120a08;
93 --surface: #1e110c;
94 --border: #4f3628;
95 --text: color-mix(in srgb, #ffe8dc 97%, #9a9a9a 3%);
96 --muted: #c9856a;
97 }
98 html[data-theme="light"][data-palette="ember"] {
99 --bg: #fff6f0;
100 --surface: #ffffff;
101 --border: #efd4c8;
102 --text: #281210;
103 --muted: #7a5344;
104 }
105 html[data-palette="arctic"]:not([data-theme="light"]) {
106 --bg: #0c1014;
107 --surface: #131a20;
108 --border: #344452;
109 --text: color-mix(in srgb, #eef5fa 97%, #9a9a9a 3%);
110 --muted: #7a95ab;
111 }
112 html[data-theme="light"][data-palette="arctic"] {
113 --bg: #f4f8fb;
114 --surface: #ffffff;
115 --border: #d4e1ea;
116 --text: #111920;
117 --muted: #4a5f72;
118 }
119 html[data-palette="slate"]:not([data-theme="light"]) {
120 --bg: #0c0e12;
121 --surface: #151922;
122 --border: #3a4352;
123 --text: color-mix(in srgb, #eef1f7 97%, #9a9a9a 3%);
124 --muted: #8892a6;
125 }
126 html[data-theme="light"][data-palette="slate"] {
127 --bg: #f5f6f8;
128 --surface: #ffffff;
129 --border: #dbe0e8;
130 --text: #12161f;
131 --muted: #5a6578;
132 }
133 html[data-palette="midnight"]:not([data-theme="light"]) {
134 --bg: #080a18;
135 --surface: #101428;
136 --border: #2e345a;
137 --text: color-mix(in srgb, #eae8ff 97%, #9a9a9a 3%);
138 --muted: #8b87c4;
139 }
140 html[data-theme="light"][data-palette="midnight"] {
141 --bg: #f4f3ff;
142 --surface: #ffffff;
143 --border: #ddd6f5;
144 --text: #15122a;
145 --muted: #5c5288;
146 }
147 html[data-palette="sakura"]:not([data-theme="light"]) {
148 --bg: #120e11;
149 --surface: #1a1418;
150 --border: #4c3a46;
151 --text: color-mix(in srgb, #ffeaf2 97%, #9a9a9a 3%);
152 --muted: #c49aaa;
153 }
154 html[data-theme="light"][data-palette="sakura"] {
155 --bg: #fff5f8;
156 --surface: #ffffff;
157 --border: #f5d0de;
158 --text: #2a1620;
159 --muted: #8a5a6e;
160 }
161 html[data-palette="sand"]:not([data-theme="light"]) {
162 --bg: #100e0c;
163 --surface: #1a1714;
164 --border: #4c463a;
165 --text: color-mix(in srgb, #f5efe6 97%, #9a9a9a 3%);
166 --muted: #b8a892;
167 }
168 html[data-theme="light"][data-palette="sand"] {
169 --bg: #faf7f1;
170 --surface: #ffffff;
171 --border: #e8dfd0;
172 --text: #231f18;
173 --muted: #6e6558;
174 }
175 html[data-palette="mint"]:not([data-theme="light"]) {
176 --bg: #0a1211;
177 --surface: #121d1c;
178 --border: #2e4a46;
179 --text: color-mix(in srgb, #e6fff9 97%, #9a9a9a 3%);
180 --muted: #6ab5a8;
181 }
182 html[data-theme="light"][data-palette="mint"] {
183 --bg: #f0faf8;
184 --surface: #ffffff;
185 --border: #cce8e2;
186 --text: #102320;
187 --muted: #3d7268;
188 }
189 * { box-sizing: border-box; }
190 body { margin: 0; font-family: system-ui, sans-serif; background: var(--bg); color: var(--text); line-height: 1.5; }
191 .hub-header {
192 display: flex;
193 justify-content: space-between;
194 align-items: center;
195 padding: 1rem 1.5rem;
196 border-bottom-width: 2px;
197 border-bottom-style: solid;
198 border-bottom-color: var(--border);
199 flex-wrap: wrap;
200 gap: 0.75rem;
201 background: var(--surface);
202 }
203 @supports (color: color-mix(in srgb, white 50%, black 50%)) {
204 .hub-header {
205 border-bottom-color: color-mix(in srgb, var(--border) 65%, var(--text) 35%);
206 }
207 }
208 .hub-header h1 { margin: 0; font-size: 1.25rem; }
209 .hub-auth { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; }
210 .btn-new-note { background: #22c55e; color: #000; border-color: #22c55e; font-weight: 600; }
211 .btn-new-note:hover { filter: brightness(1.08); border-color: #4ade80; }
212 .btn-secondary { background: var(--surface); }
213 .btn-primary { background: var(--accent); color: var(--cta-on-accent); border-color: var(--accent); font-weight: 600; }
214
215 /*
216 * Header nav: 35%/65% border/accent. Header outline: 1.61px.
217 * Search row matches Save preset (.browse-toolbar .presets-row button): 1.1px, border 90% + accent 10%.
218 * Re-index: 1.3px border (unchanged weight), soft accent fill; Clear/Apply use preset stroke.
219 */
220 .hub-header .btn-secondary {
221 border-width: 1.61px;
222 border-style: solid;
223 border-color: color-mix(in srgb, var(--border) 35%, var(--accent) 65%);
224 transition: border-color 0.15s ease, box-shadow 0.15s ease, filter 0.15s ease;
225 }
226 .hub-header .btn-secondary:hover {
227 border-color: color-mix(in srgb, var(--accent) 82%, white 18%);
228 box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 48%, transparent);
229 filter: brightness(1.12);
230 }
231 .hub-header .btn-secondary:focus-visible {
232 border-color: color-mix(in srgb, var(--accent) 82%, white 18%);
233 box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 48%, transparent);
234 filter: brightness(1.12);
235 outline: none;
236 }
237 .hub-header .btn-secondary:active {
238 filter: brightness(1.02);
239 box-shadow: none;
240 }
241
242 /* Search: same stroke as Save preset — see .browse-toolbar .presets-row button */
243 .search-section .search-row-filters input[type="text"],
244 .search-section .search-row-filters select,
245 .search-section .search-row-dates-actions input[type="date"],
246 .search-section .search-row-dates-actions .btn-secondary:not(#btn-reindex) {
247 border-width: 1.1px;
248 border-style: solid;
249 border-color: color-mix(in srgb, var(--border) 90%, var(--accent) 10%);
250 transition: border-color 0.15s ease, box-shadow 0.15s ease, filter 0.15s ease;
251 }
252 .search-section .btn-inline-field-help {
253 border-width: 1.1px;
254 border-color: color-mix(in srgb, var(--border) 90%, var(--accent) 10%);
255 }
256 /* Re-index: keep heavier border; soft fill so it reads as a primary maintenance action */
257 .search-section .search-row-dates-actions #btn-reindex {
258 border-width: 1.3px;
259 border-style: solid;
260 border-color: color-mix(
261 in srgb,
262 color-mix(in srgb, var(--border) 35%, var(--accent) 65%) 80%,
263 black 20%
264 );
265 background: color-mix(in srgb, var(--accent) 12%, var(--surface) 88%);
266 transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
267 }
268 .search-section .search-row-dates-actions .btn-secondary:not(#btn-reindex):hover,
269 .search-section .search-row-dates-actions .btn-secondary:not(#btn-reindex):focus-visible {
270 border-color: color-mix(in srgb, var(--border) 75%, var(--accent) 25%);
271 box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 28%, transparent);
272 filter: none;
273 outline: none;
274 }
275 .search-section .search-row-dates-actions .btn-secondary:not(#btn-reindex):active {
276 box-shadow: none;
277 }
278 .search-section .search-row-dates-actions #btn-reindex:hover,
279 .search-section .search-row-dates-actions #btn-reindex:focus-visible {
280 border-color: color-mix(in srgb, var(--border) 70%, var(--accent) 30%);
281 background: color-mix(in srgb, var(--accent) 20%, var(--surface) 80%);
282 box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 35%, transparent);
283 filter: none;
284 outline: none;
285 }
286 .search-section .search-row-dates-actions #btn-reindex:active {
287 background: color-mix(in srgb, var(--accent) 10%, var(--surface) 90%);
288 box-shadow: none;
289 }
290
291 /*
292 * "Last indexed: N minutes ago" passive UI. Lives next to the Re-index button
293 * (see #btn-reindex above) and is populated by `web/hub/hub.js` from the
294 * `GET /api/v1/index/status` sidecar that both sync and background re-indexes
295 * write via `lib/bridge-index-last-indexed.mjs`. Intentionally muted styling
296 * because this is read-only context, not an action — the eye should land on
297 * the Re-index button first.
298 */
299 .search-section .search-row-dates-actions .hub-index-status {
300 font-size: 12px;
301 color: color-mix(in srgb, var(--text) 60%, transparent 40%);
302 align-self: center;
303 margin-left: 8px;
304 white-space: nowrap;
305 font-variant-numeric: tabular-nums;
306 }
307 .search-section .search-row-dates-actions .hub-index-status.hub-index-status-running {
308 /* When a background job is in flight the status flips to a softly-pulsing
309 accent color so users know to wait before clicking Re-index again. */
310 color: color-mix(in srgb, var(--accent) 75%, var(--text) 25%);
311 }
312 /* Search fields: hover/focus — same family as Save preset + presets name input */
313 .search-section .search-row-filters input[type="text"]:hover,
314 .search-section .search-row-filters select:hover,
315 .search-section .search-row-dates-actions input[type="date"]:hover,
316 .search-section .search-row-filters input[type="text"]:focus-visible,
317 .search-section .search-row-filters select:focus-visible,
318 .search-section .search-row-dates-actions input[type="date"]:focus-visible {
319 border-color: color-mix(in srgb, var(--border) 75%, var(--accent) 25%);
320 box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 25%, transparent);
321 outline: none;
322 }
323 .search-section .btn-inline-field-help:hover,
324 .search-section .btn-inline-field-help:focus-visible {
325 border-color: color-mix(in srgb, var(--border) 75%, var(--accent) 25%);
326 outline: none;
327 }
328
329 /* Browse + proposal filters: outlined controls — slightly stronger than base button (not search row) */
330 .browse-toolbar .view-tab,
331 .browse-toolbar .presets-row button,
332 .proposal-list-filters .btn-secondary {
333 border-width: 1.1px;
334 border-color: color-mix(in srgb, var(--border) 90%, var(--accent) 10%);
335 }
336 .browse-toolbar .view-tab:hover {
337 border-color: color-mix(in srgb, var(--border) 70%, var(--accent) 30%);
338 }
339 .browse-toolbar .presets-row button:hover,
340 .proposal-list-filters .btn-secondary:hover {
341 border-color: color-mix(in srgb, var(--border) 75%, var(--accent) 25%);
342 }
343 .btn-primary:hover:not(:disabled):not(.btn-busy) {
344 filter: brightness(1.1);
345 border-color: var(--accent);
346 }
347 .btn-primary:active:not(:disabled):not(.btn-busy) {
348 filter: brightness(0.95);
349 }
350 .muted { color: var(--muted); font-size: 0.9rem; }
351 .small { font-size: 0.8rem; }
352 .hidden { display: none !important; }
353 button { cursor: pointer; padding: 0.5rem 1rem; border-radius: 6px; border: 1px solid var(--border); background: var(--surface); color: var(--text); }
354 button:hover { border-color: var(--accent); }
355 /* Long-running API actions (hosted latency): in-progress label + spinner */
356 button.btn-busy,
357 button.btn-busy:hover {
358 cursor: wait;
359 opacity: 0.92;
360 }
361 button.btn-busy::after {
362 content: '';
363 display: inline-block;
364 width: 0.85em;
365 height: 0.85em;
366 margin-left: 0.4em;
367 border: 2px solid var(--border);
368 border-top-color: var(--accent);
369 border-radius: 50%;
370 vertical-align: -0.12em;
371 animation: spin 0.65s linear infinite;
372 }
373 button.btn-primary.btn-busy::after,
374 button.btn-new-note.btn-busy::after {
375 border-color: rgba(0, 0, 0, 0.22);
376 border-top-color: rgba(0, 0, 0, 0.75);
377 }
378 .btn-provider { background: var(--accent); color: var(--cta-on-accent); border-color: var(--accent); }
379 .login-buttons-wrap { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; }
380 .oauth-setup { margin-top: 1.25rem; padding: 1rem 1.25rem; border-radius: 8px; border: 1px solid var(--border); background: var(--surface); }
381 .oauth-setup code { font-size: 0.85rem; background: var(--bg); padding: 0.15rem 0.4rem; border-radius: 4px; }
382 .oauth-steps { margin: 0.75rem 0; padding-left: 1.25rem; }
383 .oauth-steps li { margin-bottom: 0.5rem; }
384 .panel { padding: 2rem 1.5rem; max-width: 640px; }
385 .search-section {
386 display: flex;
387 flex-direction: column;
388 gap: 0.5rem;
389 padding: 1rem 1.5rem;
390 background: var(--surface);
391 border-bottom-width: 2px;
392 border-bottom-style: solid;
393 border-bottom-color: var(--border);
394 align-items: stretch;
395 }
396 @supports (color: color-mix(in srgb, white 50%, black 50%)) {
397 .search-section {
398 border-bottom-color: color-mix(in srgb, var(--border) 65%, var(--text) 35%);
399 }
400 }
401 .search-row {
402 display: flex;
403 flex-wrap: wrap;
404 gap: 0.5rem;
405 align-items: center;
406 }
407 .search-row-filters input[type="text"] {
408 flex: 1;
409 min-width: 200px;
410 padding: 0.5rem 0.75rem;
411 border-radius: 6px;
412 /* border: unified with .hub-header .btn-secondary (see block above) */
413 background: var(--surface);
414 color: var(--text);
415 }
416 /* Date inputs: native calendar glyph ignores theme (often black). Paint accent via mask + background (WebKit/Blink). */
417 input[type="date"] {
418 accent-color: var(--accent);
419 }
420 html:not([data-theme="light"]) input[type="date"] {
421 color-scheme: dark;
422 }
423 /* Calendar icon: mask SVG (white = visible) × background-color = theme accent — works on dark + light + palettes */
424 input[type="date"]::-webkit-calendar-picker-indicator {
425 cursor: pointer;
426 opacity: 1;
427 width: 1.125rem;
428 height: 1.125rem;
429 padding: 0.12rem;
430 box-sizing: content-box;
431 margin-left: 0.15rem;
432 background-color: var(--accent);
433 -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2zm0 18H4V10h16v11zM4 6V5h16v1H4z'/%3E%3C/svg%3E");
434 -webkit-mask-size: contain;
435 -webkit-mask-repeat: no-repeat;
436 -webkit-mask-position: center;
437 mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2zm0 18H4V10h16v11zM4 6V5h16v1H4z'/%3E%3C/svg%3E");
438 mask-size: contain;
439 mask-repeat: no-repeat;
440 mask-position: center;
441 }
442 input[type="date"]::-moz-calendar-picker-indicator {
443 cursor: pointer;
444 opacity: 1;
445 width: 1.125rem;
446 height: 1.125rem;
447 padding: 0.12rem;
448 margin-left: 0.15rem;
449 background-color: var(--accent);
450 mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2zm0 18H4V10h16v11zM4 6V5h16v1H4z'/%3E%3C/svg%3E");
451 mask-size: contain;
452 mask-repeat: no-repeat;
453 mask-position: center;
454 }
455 .search-section .search-row-filters select {
456 padding: 0.5rem 0.75rem;
457 border-radius: 6px;
458 /* border: unified with header (see .hub-header .btn-secondary block) */
459 background: var(--surface);
460 color: var(--text);
461 }
462 .search-section .filter-date-label { font-size: 0.8rem; color: var(--muted); margin-right: 0.2rem; }
463 .search-section .search-row-dates-actions input[type="date"] {
464 padding: 0.5rem 0.75rem;
465 border-radius: 6px;
466 /* border: unified with header */
467 background: var(--surface);
468 color: var(--text);
469 }
470 .search-section .search-hint { margin: 0.25rem 0 0; line-height: 1.45; max-width: 72rem; }
471 .browse-key-wrap {
472 display: inline-flex;
473 align-items: center;
474 }
475 .browse-toolbar-key-details {
476 margin: 0;
477 display: inline-block;
478 vertical-align: middle;
479 }
480 .browse-toolbar-key-details[open] {
481 display: flex;
482 flex-direction: row;
483 flex-wrap: wrap;
484 align-items: flex-start;
485 gap: 0.65rem 0.75rem;
486 width: 100%;
487 }
488 .browse-toolbar-key-details[open] .search-key-body {
489 flex: 1 1 18rem;
490 min-width: 0;
491 margin-top: 0;
492 }
493 .search-key-summary {
494 list-style: none;
495 display: inline-flex;
496 align-items: center;
497 justify-content: center;
498 gap: 0.35rem;
499 cursor: pointer;
500 user-select: none;
501 padding: 0.2rem 0.25rem;
502 line-height: 1;
503 border: none;
504 border-radius: 4px;
505 background: transparent;
506 color: #4ade80;
507 box-sizing: border-box;
508 }
509 .search-key-collapse-cue {
510 display: none;
511 font-size: 0.55rem;
512 line-height: 1;
513 color: inherit;
514 opacity: 0.95;
515 }
516 .browse-toolbar-key-details[open] .search-key-collapse-cue {
517 display: inline-block;
518 }
519 .search-key-summary:hover {
520 filter: brightness(1.12);
521 }
522 [data-theme="light"] .search-key-summary {
523 color: #15803d;
524 }
525 .search-key-summary:focus-visible {
526 outline: 2px solid var(--accent);
527 outline-offset: 2px;
528 }
529 .search-key-summary::-webkit-details-marker {
530 display: none;
531 }
532 .search-key-summary::marker {
533 content: '';
534 }
535 .search-key-icon {
536 display: block;
537 flex-shrink: 0;
538 width: 31px;
539 height: 31px;
540 /* 30% smaller than 44px (~1.4× original 22px) */
541 }
542 .search-key-body {
543 margin: 0.5rem 0 0;
544 padding: 0.85rem 1rem;
545 max-width: min(52rem, 100%);
546 font-size: 0.9375rem;
547 line-height: 1.55;
548 color: var(--muted);
549 border: 1px solid var(--accent);
550 border-radius: 8px;
551 background: var(--surface);
552 }
553 .search-key-lede {
554 margin: 0;
555 font-size: 0.88rem;
556 line-height: 1.55;
557 color: var(--muted);
558 }
559 .search-key-assist {
560 margin: 0.55rem 0 0;
561 padding: 0.5rem 0.7rem 0.55rem;
562 border: 1px solid var(--border);
563 border-radius: 6px;
564 background: var(--bg);
565 }
566 .search-key-assist-title {
567 margin: 0 0 0.4rem;
568 }
569 .search-key-assist-lede {
570 margin: 0 0 0.35rem;
571 font-size: 0.82rem;
572 line-height: 1.45;
573 color: var(--muted);
574 }
575 .search-key-assist-pair {
576 display: grid;
577 grid-template-columns: 1fr 1fr;
578 gap: 0.4rem 1rem;
579 margin: 0;
580 font-size: 0.82rem;
581 line-height: 1.45;
582 color: var(--muted);
583 }
584 .search-key-assist-pair p {
585 margin: 0;
586 }
587 .search-key-meta + .search-key-assist.search-key-assist-after-memory {
588 margin-top: 0.75rem;
589 margin-bottom: 0;
590 }
591 .how-to-connection-helpers {
592 margin-top: 1.25rem;
593 margin-bottom: 0;
594 }
595 @media (max-width: 640px) {
596 .search-key-assist-pair {
597 grid-template-columns: 1fr;
598 }
599 }
600 .search-key-columns {
601 display: grid;
602 grid-template-columns: 1fr 1fr;
603 gap: 0.85rem 1.35rem;
604 margin-top: 0.75rem;
605 padding-bottom: 0.85rem;
606 align-items: start;
607 }
608 @media (max-width: 720px) {
609 .search-key-columns {
610 grid-template-columns: 1fr;
611 }
612 }
613 .search-key-col-title {
614 margin: 0 0 0.45rem;
615 font-size: 0.7rem;
616 font-weight: 700;
617 text-transform: uppercase;
618 letter-spacing: 0.055em;
619 color: var(--accent);
620 }
621 .search-key-col .search-key-list li:last-child {
622 margin-bottom: 0;
623 }
624 .search-key-meta {
625 margin: 1.15rem 0 0;
626 padding-top: 1rem;
627 border-top: 1px solid var(--border);
628 }
629 .search-key-meta-heading {
630 margin-top: 0;
631 }
632 .search-key-meta .search-key-list {
633 margin: 0;
634 }
635 .search-key-list {
636 list-style: none;
637 margin: 0;
638 padding: 0;
639 }
640 .search-key-list li {
641 margin: 0 0 0.7rem;
642 padding: 0;
643 }
644 .search-key-list li:last-child {
645 margin-bottom: 0;
646 }
647 .search-key-term {
648 font-weight: 600;
649 color: var(--text);
650 }
651 @supports (color: color-mix(in srgb, white 50%, black 50%)) {
652 .search-key-term {
653 color: color-mix(in srgb, var(--text) 78%, var(--accent) 22%);
654 }
655 }
656 .search-key-body code {
657 font-size: 0.88em;
658 }
659 .search-key-reindex {
660 margin: 1.85rem 0 0;
661 padding-top: 1.1rem;
662 border-top: 1px solid var(--border);
663 font-size: 0.9rem;
664 }
665 .search-key-body p {
666 margin: 0;
667 }
668 @supports selector(:has(*)) {
669 .view-modes:has(.browse-toolbar-key-details[open]) .browse-key-wrap {
670 flex: 1 1 100%;
671 width: 100%;
672 }
673 .view-modes:has(.browse-toolbar-key-details[open]) .browse-toolbar-key-details {
674 min-width: 0;
675 }
676 .view-modes:has(.browse-toolbar-key-details[open]) .search-key-body {
677 max-width: 100%;
678 }
679 }
680 .search-row-dates-actions { align-items: center; }
681 .filter-project-wrap {
682 display: inline-flex;
683 align-items: center;
684 gap: 0.2rem;
685 }
686 .filter-project-wrap select {
687 min-width: 8.5rem;
688 }
689 .btn-inline-field-help {
690 display: inline-flex;
691 align-items: center;
692 justify-content: center;
693 padding: 0.25rem;
694 border: 1px solid var(--border);
695 border-radius: 6px;
696 background: var(--surface);
697 color: var(--accent);
698 line-height: 0;
699 flex-shrink: 0;
700 }
701 .btn-inline-field-help:hover {
702 border-color: var(--accent);
703 }
704 .modal-card-projects-help {
705 max-width: 26rem;
706 }
707 .modal-projects-help-body {
708 padding: 0 1.25rem 1.25rem;
709 font-size: 0.9rem;
710 line-height: 1.55;
711 }
712 .modal-projects-help-body pre {
713 margin: 0.5rem 0 0.75rem;
714 font-size: 0.78rem;
715 padding: 0.55rem 0.65rem;
716 background: var(--bg);
717 border: 1px solid var(--border);
718 border-radius: 6px;
719 overflow-x: auto;
720 white-space: pre-wrap;
721 word-break: break-word;
722 }
723 .modal-projects-help-details {
724 margin-top: 1rem;
725 padding: 0.5rem 0.65rem;
726 border: 1px solid var(--border);
727 border-radius: 8px;
728 background: color-mix(in srgb, var(--accent) 6%, transparent);
729 }
730 .modal-projects-help-details summary {
731 cursor: pointer;
732 font-size: 0.85rem;
733 font-weight: 600;
734 color: var(--accent);
735 }
736 .modal-projects-help-details[open] summary {
737 margin-bottom: 0.5rem;
738 }
739 .import-modal-lead {
740 margin-bottom: 0.75rem;
741 line-height: 1.45;
742 max-width: 40rem;
743 }
744 .import-modal-help {
745 margin: 0.75rem 0 0.65rem 0;
746 }
747 .import-modal-help .small {
748 line-height: 1.5;
749 margin: 0 0 0.5rem;
750 }
751 .import-modal-help .small:last-of-type {
752 margin-bottom: 0;
753 }
754 .create-msg.warn {
755 color: #fbbf24;
756 }
757 [data-theme="light"] .create-msg.warn {
758 color: #b45309;
759 }
760
761 .detail-project-hint.warn {
762 color: #fbbf24;
763 }
764 [data-theme="light"] .detail-project-hint.warn {
765 color: #b45309;
766 }
767
768 input[readonly]#detail-edit-project,
769 input[readonly]#full-project {
770 opacity: 0.92;
771 cursor: default;
772 }
773
774 /* Vault access: save is easy to miss after Apply — keep a visible outline at rest */
775 .btn-vault-access-save-emphasis {
776 border: 2px solid var(--accent);
777 box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 25%, transparent);
778 }
779 .btn-vault-access-save-emphasis:hover {
780 filter: brightness(1.06);
781 }
782 .browse-toolbar { padding: 0.75rem 1.5rem; border-bottom: 1px solid var(--border); background: var(--surface); display: flex; flex-direction: column; gap: 0.75rem; }
783 .view-modes { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
784 .toolbar-label {
785 font-size: 0.75rem;
786 font-weight: 700;
787 text-transform: uppercase;
788 letter-spacing: 0.05em;
789 color: var(--accent);
790 margin-right: 0.25rem;
791 }
792 .view-tab { padding: 0.35rem 0.85rem; border-radius: 6px; border: 1px solid var(--border); background: var(--surface); color: var(--muted); font-size: 0.875rem; font-weight: 600; }
793 .view-tab.active { color: var(--accent); border-color: var(--accent); background: var(--accent-soft); }
794 /* In .view-modes: Quick + chevron sit on the Browse row after the key; children join parent flex via contents */
795 .filter-chips {
796 display: contents;
797 }
798 .filter-chips-header {
799 display: inline-flex;
800 align-items: center;
801 gap: 0.2rem;
802 flex-wrap: wrap;
803 flex-shrink: 0;
804 }
805 .filter-chips-toggle {
806 display: inline-flex;
807 align-items: center;
808 justify-content: center;
809 padding: 0.2rem 0.4rem;
810 margin: 0;
811 border: none;
812 border-radius: 6px;
813 background: transparent;
814 color: var(--accent);
815 cursor: pointer;
816 line-height: 1;
817 }
818 .filter-chips-toggle:hover {
819 background: var(--accent-soft);
820 color: var(--accent);
821 }
822 .filter-chips-toggle:focus-visible {
823 outline: 2px solid var(--accent);
824 outline-offset: 2px;
825 }
826 .filter-chips-toggle svg {
827 display: block;
828 transition: transform 0.2s ease;
829 }
830 .filter-chips.is-expanded .filter-chips-toggle svg {
831 transform: rotate(90deg);
832 }
833 .filter-chips-panel {
834 display: none;
835 flex-wrap: wrap;
836 gap: 0.35rem;
837 align-items: center;
838 }
839 .filter-chips.is-expanded .filter-chips-panel {
840 display: flex;
841 flex-basis: 100%;
842 width: 100%;
843 }
844 .filter-chips .chip-btn {
845 cursor: pointer;
846 font-size: 0.75rem;
847 padding: 0.2rem 0.55rem;
848 border-radius: 999px;
849 border: 1px solid color-mix(in srgb, var(--accent) 28%, var(--border));
850 background: var(--accent-soft);
851 color: var(--accent);
852 font-weight: 500;
853 }
854 .filter-chips .chip-btn:hover, .filter-chips .chip-btn.active {
855 border-color: var(--accent);
856 color: var(--accent);
857 background: var(--accent-dim);
858 }
859 /* Phase 12 — blockchain chip tint */
860 .filter-chips .chip-blockchain { border-color: color-mix(in srgb, #7c6fff 40%, var(--border)); color: color-mix(in srgb, #7c6fff 80%, var(--muted)); }
861 .filter-chips .chip-blockchain:hover, .filter-chips .chip-blockchain.active { border-color: #7c6fff; color: #7c6fff; }
862 .presets-row { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; }
863 .presets-row input { padding: 0.35rem 0.6rem; border-radius: 6px; border: 1px solid var(--border); background: var(--surface); color: var(--text); width: 10rem; }
864 .presets-list { display: flex; flex-wrap: wrap; gap: 0.35rem; }
865 .preset-pill { font-size: 0.75rem; padding: 0.2rem 0.55rem; border-radius: 999px; background: var(--border); color: var(--muted); border: none; cursor: pointer; }
866 .preset-pill:hover { background: var(--accent); color: var(--cta-on-accent); }
867 .tabs { padding: 0.75rem 1.5rem; border-bottom: 1px solid var(--border); background: var(--surface); }
868 .tabs-inner {
869 display: flex;
870 flex-wrap: wrap;
871 align-items: center;
872 justify-content: space-between;
873 gap: 0.65rem 1rem;
874 width: 100%;
875 }
876 .tabs-buttons {
877 display: flex;
878 flex-wrap: wrap;
879 gap: 0.25rem;
880 align-items: center;
881 }
882 .tabs-list-controls {
883 display: inline-flex;
884 align-items: center;
885 gap: 0.4rem;
886 flex-shrink: 0;
887 margin-left: auto;
888 }
889 .hub-sort-label {
890 font-size: 0.8rem;
891 color: var(--muted);
892 }
893 .tabs-list-controls select {
894 padding: 0.35rem 0.6rem;
895 border-radius: 6px;
896 border: 1px solid var(--border);
897 background: var(--surface);
898 color: var(--text);
899 font-size: 0.875rem;
900 min-width: 11rem;
901 }
902 .proposal-filters-bar {
903 padding: 0.5rem 1.5rem 0.75rem;
904 border-bottom: 1px solid var(--border);
905 }
906 .proposal-filters-bar.hidden {
907 display: none;
908 }
909 .proposal-filters-bar .proposal-list-filters {
910 margin-bottom: 0;
911 padding-bottom: 0;
912 }
913 .tab { padding: 0.5rem 1rem; border: none; background: transparent; color: var(--muted); }
914 .tab.active { color: var(--accent); border-bottom: 2px solid var(--accent); margin-bottom: -1px; }
915 .tab-panel { padding: 1rem 1.5rem; }
916 .notes-view-panel { min-height: 200px; }
917 .list { display: flex; flex-direction: column; gap: 0.5rem; }
918 .list-item { padding: 0.75rem; border-radius: 8px; border: 1px solid var(--border); background: var(--surface); cursor: pointer; }
919 .list-item:hover { border-color: var(--accent); }
920 .list-item .path,
921 .list-item .row-title { font-family: ui-monospace, monospace; font-size: 0.9rem; color: var(--accent); }
922 .list-item .row-chips { display: flex; flex-wrap: wrap; gap: 0.25rem; margin-top: 0.25rem; }
923 .chip { font-size: 0.7rem; padding: 0.15rem 0.4rem; border-radius: 4px; display: inline-block; box-sizing: border-box; }
924 .chip-project { background: color-mix(in srgb, var(--accent) 22%, transparent); color: var(--accent); }
925 .chip-tag { background: var(--accent-soft); color: var(--accent); border: 1px solid color-mix(in srgb, var(--accent) 28%, var(--border)); }
926 .list-item .status { font-size: 0.8rem; color: var(--muted); margin-top: 0.25rem; }
927 .activity-item.status-approved .row-title { color: #22c55e; }
928 .activity-item.status-discarded .row-title { color: var(--muted); }
929 .activity-item.status-proposed .row-title { color: var(--accent); }
930 .total { margin-top: 0.75rem; }
931 .empty-state { padding: 2rem; text-align: center; color: var(--muted); border: 1px dashed var(--border); border-radius: 8px; }
932 .empty-state a { color: var(--accent); cursor: pointer; }
933 .btn-link { background: none; border: none; padding: 0; color: var(--accent); text-decoration: underline; cursor: pointer; font-size: inherit; }
934 .btn-link:hover { color: color-mix(in srgb, var(--accent) 58%, white); }
935 /* Login first screen (Phase 11.1) */
936 .login-first-screen { margin: 0 auto; }
937 .login-hero { margin-bottom: 1rem; }
938 .login-title { font-size: 1.75rem; font-weight: 600; margin: 0 0 0.5rem; color: var(--text); letter-spacing: -0.02em; }
939 .login-title-main-only { font-size: clamp(1.5rem, 4vw, 1.85rem); font-weight: 600; margin: 0 0 0.35rem; color: var(--text); letter-spacing: -0.02em; line-height: 1.2; }
940 .login-title-equation { font-size: clamp(1.35rem, 4vw, 1.85rem); line-height: 1.35; max-width: 20em; margin-left: auto; margin-right: auto; }
941 .login-title-equation .login-title-main { display: block; font-size: 1.15em; }
942 .login-title-equation .login-title-eq { font-weight: 500; color: var(--muted); font-size: 0.85em; }
943 .login-tagline { font-size: 1.1rem; color: var(--text); margin: 0 0 0.25rem; font-weight: 500; }
944 .login-tagline-sub { margin: 0 0 0.5rem; font-size: 1rem; color: var(--muted); }
945 .login-intent { font-size: 1rem; color: var(--muted); margin: 0; line-height: 1.5; max-width: 32em; }
946 .login-two-paths { margin: 0.75rem 0 0.5rem; padding: 0.65rem 1rem; border-radius: 8px; border: 1px solid var(--border); background: var(--surface); }
947 .login-two-paths-title { margin: 0 0 0.35rem; font-size: 0.9rem; font-weight: 600; color: var(--text); }
948 .login-two-paths-list { margin: 0; padding-left: 1.15rem; color: var(--muted); font-size: 0.85rem; line-height: 1.5; }
949 .login-two-paths-list li { margin-bottom: 0.35rem; }
950 .login-two-paths-list li:last-child { margin-bottom: 0; }
951 .login-two-paths-list code { font-size: 0.8em; background: var(--bg); padding: 0.1rem 0.3rem; border-radius: 4px; }
952 .login-two-paths-list a.btn-link { color: var(--accent); text-decoration: underline; }
953 .login-cta-block { margin-top: 0.35rem; }
954 .login-cta-label { margin: 0 0 0.75rem; color: var(--muted); font-size: 0.95rem; }
955 #app.login-screen .hub-header .btn-provider { padding: 0.6rem 1.25rem; font-size: 1rem; font-weight: 600; }
956 .login-how-to-wrap { margin-top: 1rem; }
957 .login-invite-banner { margin-bottom: 1rem; padding: 0.75rem 1rem; border-radius: 8px; background: color-mix(in srgb, var(--accent) 18%, transparent); color: var(--accent); font-weight: 500; }
958
959 /* Self-hosted: API base points at hosted gateway (localStorage hub_api_url or ?api=) */
960 .hub-api-footgun-banner {
961 margin: 0;
962 padding: 0.65rem 1rem;
963 background: color-mix(in srgb, #d97706 24%, transparent);
964 color: var(--text);
965 border-bottom: 1px solid var(--border);
966 font-size: 0.9rem;
967 line-height: 1.45;
968 }
969 .hub-api-footgun-banner code { font-size: 0.85em; word-break: break-all; }
970 .hub-api-footgun-banner p { margin: 0.35rem 0; }
971 .hub-api-footgun-banner p:first-child { margin-top: 0; }
972 .hub-api-footgun-banner p:last-child { margin-bottom: 0; }
973 .invite-link-block { margin-top: 0.75rem; }
974 .invite-link-row { display: flex; gap: 0.5rem; align-items: center; margin-top: 0.35rem; }
975 .invite-link-input { flex: 1; padding: 0.5rem 0.75rem; border-radius: 6px; border: 1px solid var(--border); background: var(--surface); color: var(--text); font-size: 0.9rem; }
976 .invite-row { display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; }
977 .btn-revoke-invite.small { font-size: 0.8rem; padding: 0.3rem 0.6rem; }
978 .hosted-note { margin-top: 0.75rem; }
979
980 /* Hub login ecosystem graphic (folder center, rings, connection icons) */
981 .hub-ecosystem { margin: 1.25rem auto 0; max-width: 320px; }
982 .hub-ecosystem-rings { position: relative; width: 320px; height: 320px; margin: 0 auto; }
983 .hub-ecosystem-svg { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
984 .hub-ring { transition: stroke 0.2s ease; }
985 .hub-ecosystem-center {
986 position: absolute;
987 left: 50%;
988 top: 50%;
989 transform: translate(-50%, -50%);
990 display: flex;
991 flex-direction: column;
992 align-items: center;
993 gap: 0.35rem;
994 z-index: 2;
995 padding: 1.25rem;
996 min-width: 100px;
997 min-height: 90px;
998 box-sizing: border-box;
999 }
1000 .hub-ecosystem-core-icon { font-size: 2.75rem; line-height: 1; filter: grayscale(0.15); }
1001 .hub-ecosystem-core-label { color: var(--accent); font-weight: 600; font-size: 0.95rem; }
1002 .hub-ecosystem-icon {
1003 position: absolute;
1004 left: 50%;
1005 top: 50%;
1006 width: 36px;
1007 height: 36px;
1008 margin-left: -18px;
1009 margin-top: -18px;
1010 display: flex;
1011 align-items: center;
1012 justify-content: center;
1013 font-size: 1.35rem;
1014 transform-origin: center center;
1015 z-index: 1;
1016 opacity: 0.9;
1017 }
1018 /* Inner ring (8 icons, r=90px — clear gap from center folder + label) */
1019 .hub-ecosystem-icon-1 { transform: rotate(0deg) translate(0, -90px); }
1020 .hub-ecosystem-icon-2 { transform: rotate(45deg) translate(0, -90px); }
1021 .hub-ecosystem-icon-3 { transform: rotate(90deg) translate(0, -90px); }
1022 .hub-ecosystem-icon-4 { transform: rotate(135deg) translate(0, -90px); }
1023 .hub-ecosystem-icon-5 { transform: rotate(180deg) translate(0, -90px); }
1024 .hub-ecosystem-icon-6 { transform: rotate(225deg) translate(0, -90px); }
1025 .hub-ecosystem-icon-7 { transform: rotate(270deg) translate(0, -90px); }
1026 .hub-ecosystem-icon-8 { transform: rotate(315deg) translate(0, -90px); }
1027 /* Outer ring (12 icons, r=135px) */
1028 .hub-ecosystem-icon-9 { transform: rotate(0deg) translate(0, -135px); }
1029 .hub-ecosystem-icon-10 { transform: rotate(30deg) translate(0, -135px); }
1030 .hub-ecosystem-icon-11 { transform: rotate(60deg) translate(0, -135px); }
1031 .hub-ecosystem-icon-12 { transform: rotate(90deg) translate(0, -135px); }
1032 .hub-ecosystem-icon-13 { transform: rotate(120deg) translate(0, -135px); }
1033 .hub-ecosystem-icon-14 { transform: rotate(150deg) translate(0, -135px); }
1034 .hub-ecosystem-icon-15 { transform: rotate(180deg) translate(0, -135px); }
1035 .hub-ecosystem-icon-16 { transform: rotate(210deg) translate(0, -135px); }
1036 .hub-ecosystem-icon-17 { transform: rotate(240deg) translate(0, -135px); }
1037 .hub-ecosystem-icon-18 { transform: rotate(270deg) translate(0, -135px); }
1038 .hub-ecosystem-icon-19 { transform: rotate(300deg) translate(0, -135px); }
1039 .hub-ecosystem-icon-20 { transform: rotate(330deg) translate(0, -135px); }
1040
1041 /* Calendar */
1042 .calendar-nav { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.75rem; }
1043 .calendar-nav h3 { margin: 0; font-size: 1.1rem; }
1044 .calendar-weekdays { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; margin-bottom: 0.25rem; font-size: 0.7rem; color: var(--muted); text-align: center; }
1045 .calendar-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; max-width: 560px; }
1046 .cal-cell { aspect-ratio: 1; min-height: 3rem; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); display: flex; flex-direction: column; align-items: center; justify-content: flex-start; padding: 0.25rem; cursor: pointer; font-size: 0.8rem; }
1047 .cal-cell:hover { border-color: var(--accent); }
1048 .cal-cell.out { opacity: 0.25; cursor: default; }
1049 .cal-cell.today { outline: 1px solid var(--accent); }
1050 .cal-cell .cal-day-num { font-weight: 600; }
1051 .cal-cell .cal-count { font-size: 0.65rem; color: var(--accent); margin-top: 0.15rem; }
1052 .calendar-day-list { margin-top: 1rem; }
1053 .calendar-day-list h4 { margin: 0.5rem 0 1rem; }
1054
1055 /* Dashboard / charts */
1056 .dashboard-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 0.75rem; margin-bottom: 1.5rem; }
1057 .dash-card { padding: 1rem; border-radius: 8px; border: 1px solid var(--border); background: var(--surface); }
1058 .dash-card .dash-value { font-size: 1.5rem; font-weight: 700; color: var(--accent); }
1059 .dash-card .dash-label { font-size: 0.75rem; color: var(--muted); text-transform: uppercase; }
1060 .chart-row { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin-bottom: 1rem; }
1061 @media (max-width: 700px) { .chart-row { grid-template-columns: 1fr; } }
1062 .chart-box { padding: 1rem; border-radius: 8px; border: 1px solid var(--border); background: var(--surface); min-height: 220px; }
1063 .chart-wide { margin-bottom: 1rem; min-height: 240px; }
1064 .dashboard-footnote { font-size: 0.8rem; margin-top: 0.5rem; }
1065
1066 /* Meaning-search index may lag vault edits until user runs Re-index */
1067 .hub-index-stale-banner {
1068 display: flex;
1069 flex-wrap: wrap;
1070 align-items: center;
1071 justify-content: space-between;
1072 gap: 0.65rem 1rem;
1073 margin-bottom: 0.75rem;
1074 padding: 0.55rem 0.85rem;
1075 border-radius: 8px;
1076 border: 1px solid color-mix(in srgb, var(--accent) 45%, var(--border));
1077 background: var(--accent-soft, rgba(137, 207, 240, 0.1));
1078 font-size: 0.88rem;
1079 line-height: 1.35;
1080 }
1081 .hub-index-stale-banner.hidden {
1082 display: none;
1083 }
1084 .hub-index-stale-banner-text {
1085 flex: 1 1 12rem;
1086 min-width: 0;
1087 }
1088 .hub-index-stale-banner-actions {
1089 display: flex;
1090 flex-wrap: wrap;
1091 align-items: center;
1092 gap: 0.35rem 0.65rem;
1093 flex-shrink: 0;
1094 }
1095 .hub-index-stale-banner .btn-small {
1096 padding: 0.3rem 0.65rem;
1097 font-size: 0.82rem;
1098 }
1099
1100 .detail-panel {
1101 position: fixed;
1102 top: 0;
1103 right: 0;
1104 width: min(420px, 100vw);
1105 height: 100vh;
1106 max-height: 100dvh;
1107 background: var(--surface);
1108 border-left: 1px solid var(--border);
1109 overflow: hidden;
1110 z-index: 10;
1111 display: flex;
1112 flex-direction: column;
1113 box-sizing: border-box;
1114 }
1115 .detail-resize-handle { position: absolute; top: 0; left: 0; width: 6px; height: 100%; cursor: col-resize; z-index: 11; }
1116 .detail-resize-handle:hover, .detail-resize-handle.dragging { background: color-mix(in srgb, var(--accent) 42%, transparent); opacity: 0.45; }
1117 .list-item { position: relative; }
1118 .list-item-delete { position: absolute; top: 50%; right: 0.5rem; transform: translateY(-50%); background: none; border: none; color: var(--text-muted, #888); font-size: 0.75rem; line-height: 1; padding: 0.25rem 0.35rem; border-radius: 4px; cursor: pointer; opacity: 0; transition: opacity 0.15s, color 0.15s; }
1119 .list-item:hover .list-item-delete { opacity: 0.6; }
1120 .list-item-delete:hover { opacity: 1 !important; color: var(--danger, #f66); }
1121 .detail-header {
1122 flex-shrink: 0;
1123 display: flex;
1124 justify-content: space-between;
1125 align-items: flex-start;
1126 gap: 0.5rem;
1127 padding: 1rem;
1128 border-bottom: 1px solid var(--border);
1129 }
1130 .detail-header h2 { margin: 0; font-size: 1rem; word-break: break-all; flex: 1; }
1131 .detail-header-actions { display: flex; gap: 0.35rem; flex-shrink: 0; align-items: center; }
1132 .detail-header-actions button { padding: 0.35rem 0.6rem; font-size: 0.8rem; }
1133 /* Note path explainer (hover / focus for title + aria-label) */
1134 .detail-header-info {
1135 padding: 0.2rem;
1136 min-width: 1.75rem;
1137 min-height: 1.75rem;
1138 display: inline-flex;
1139 align-items: center;
1140 justify-content: center;
1141 border: 1px solid var(--border);
1142 border-radius: 50%;
1143 background: transparent;
1144 color: var(--muted);
1145 cursor: help;
1146 flex-shrink: 0;
1147 line-height: 0;
1148 }
1149 .detail-header-info:hover,
1150 .detail-header-info:focus-visible {
1151 color: var(--accent);
1152 border-color: color-mix(in srgb, var(--accent) 55%, var(--border));
1153 outline: none;
1154 }
1155 .detail-header-info svg { display: block; }
1156
1157 /* Note read body + optional copy control */
1158 .detail-body-wrap {
1159 flex: 1;
1160 min-height: 0;
1161 position: relative;
1162 display: flex;
1163 flex-direction: column;
1164 }
1165 .detail-copy-body-btn {
1166 position: absolute;
1167 top: 0.35rem;
1168 right: 0.35rem;
1169 z-index: 2;
1170 padding: 0.35rem;
1171 border-radius: 6px;
1172 border: 1px solid var(--border);
1173 background: color-mix(in srgb, var(--surface) 88%, var(--bg));
1174 color: var(--muted);
1175 cursor: pointer;
1176 line-height: 0;
1177 }
1178 .detail-copy-body-btn:hover,
1179 .detail-copy-body-btn:focus-visible {
1180 color: var(--accent);
1181 border-color: color-mix(in srgb, var(--accent) 50%, var(--border));
1182 outline: none;
1183 }
1184 .detail-copy-body-btn.hidden {
1185 display: none;
1186 }
1187
1188 .duplicate-source-banner {
1189 margin-bottom: 1rem;
1190 padding: 0.75rem 1rem;
1191 border-radius: 8px;
1192 border: 1px solid var(--border);
1193 background: var(--accent-soft, rgba(137, 207, 240, 0.08));
1194 }
1195 .duplicate-source-banner-lede {
1196 margin: 0 0 0.65rem;
1197 }
1198 .duplicate-delete-label {
1199 display: flex;
1200 align-items: flex-start;
1201 gap: 0.5rem;
1202 cursor: pointer;
1203 font-size: 0.9rem;
1204 margin: 0;
1205 }
1206 .duplicate-delete-hint {
1207 margin: 0.4rem 0 0;
1208 font-size: 0.8rem;
1209 }
1210
1211 #detail-body {
1212 flex: 1;
1213 min-height: 0;
1214 overflow-y: auto;
1215 padding: 1rem;
1216 white-space: pre-wrap;
1217 font-size: 0.9rem;
1218 }
1219
1220 /* Rendered markdown note body */
1221 #detail-body.note-rendered-body {
1222 white-space: normal;
1223 line-height: 1.65;
1224 padding-top: 2.35rem;
1225 }
1226 #detail-body.note-rendered-body h1,
1227 #detail-body.note-rendered-body h2,
1228 #detail-body.note-rendered-body h3,
1229 #detail-body.note-rendered-body h4 { margin: 1.1rem 0 0.4rem; font-weight: 700; line-height: 1.3; }
1230 #detail-body.note-rendered-body h1 { font-size: 1.25rem; }
1231 #detail-body.note-rendered-body h2 { font-size: 1.1rem; }
1232 #detail-body.note-rendered-body h3 { font-size: 1rem; }
1233 #detail-body.note-rendered-body p { margin: 0.6rem 0; }
1234 #detail-body.note-rendered-body ul,
1235 #detail-body.note-rendered-body ol { padding-left: 1.4rem; margin: 0.5rem 0; }
1236 #detail-body.note-rendered-body li { margin: 0.25rem 0; }
1237 #detail-body.note-rendered-body a { color: var(--accent, #6c8ebf); text-decoration: underline; }
1238 #detail-body.note-rendered-body a:hover { opacity: 0.8; }
1239 #detail-body.note-rendered-body img { max-width: 100%; border-radius: 6px; margin: 0.5rem 0; display: block; }
1240 #detail-body.note-rendered-body img[src=""],[alt=""] { display: none; }
1241 #detail-body.note-rendered-body code { font-family: ui-monospace, monospace; font-size: 0.85em; background: var(--border); padding: 0.1em 0.35em; border-radius: 3px; }
1242 #detail-body.note-rendered-body pre { background: var(--border); border-radius: 6px; padding: 0.75rem 1rem; overflow-x: auto; margin: 0.75rem 0; }
1243 #detail-body.note-rendered-body pre code { background: none; padding: 0; font-size: 0.82em; }
1244 #detail-body.note-rendered-body blockquote { border-left: 3px solid var(--accent, #6c8ebf); margin: 0.5rem 0; padding: 0.25rem 0.75rem; opacity: 0.8; }
1245 #detail-body.note-rendered-body hr { border: none; border-top: 1px solid var(--border); margin: 1rem 0; }
1246 #detail-body.note-rendered-body table { border-collapse: collapse; width: 100%; margin: 0.75rem 0; font-size: 0.88em; }
1247 #detail-body.note-rendered-body th,
1248 #detail-body.note-rendered-body td { border: 1px solid var(--border); padding: 0.4rem 0.6rem; text-align: left; }
1249 #detail-body.note-rendered-body th { background: var(--border); font-weight: 600; }
1250 /* Metadata block */
1251 .note-meta-block { margin-top: 1.5rem; border-top: 1px solid var(--border); padding-top: 0.75rem; font-size: 0.82rem; }
1252 .note-meta-block summary { cursor: pointer; color: var(--muted, #888); font-size: 0.8rem; user-select: none; padding: 0.2rem 0; }
1253 .note-meta-block summary:hover { opacity: 0.75; }
1254 .note-meta-pre { margin-top: 0.5rem; background: var(--border); border-radius: 5px; padding: 0.6rem 0.8rem; overflow-x: auto; font-family: ui-monospace, monospace; font-size: 0.8rem; white-space: pre; }
1255 .note-meta-hint { margin-top: 0.5rem; font-size: 0.78rem; color: var(--muted, #888); }
1256 .note-body-fallback { white-space: pre-wrap; font-size: 0.9rem; }
1257 /* Edit form lives in #detail-body which defaults to pre-wrap for read view — override for layout. */
1258 #detail-body.detail-edit-container {
1259 white-space: normal;
1260 }
1261 .detail-edit-container { display: flex; flex-direction: column; gap: 0.75rem; }
1262 .detail-edit-container label { font-size: 0.85rem; font-weight: 600; display: block; margin-bottom: 0.25rem; }
1263 .detail-edit-body, .detail-edit-fm { width: 100%; min-height: 8rem; padding: 0.5rem; font-family: inherit; font-size: 0.9rem; resize: vertical; border: 1px solid var(--border); border-radius: 6px; background: var(--bg); color: var(--text); }
1264 .detail-edit-fm { min-height: 6rem; font-family: ui-monospace, monospace; }
1265 /* Body editor wrapper: no flex-grow; flex-shrink 0 so the block cannot collapse to zero height.
1266 Default textarea size uses CSS (height auto); JS only sets height after user drags grip. */
1267 #detail-body.detail-edit-container #detail-edit-body-wrap {
1268 flex: 0 0 auto;
1269 align-self: stretch;
1270 min-width: 0;
1271 display: flex;
1272 flex-direction: column;
1273 }
1274 #detail-body.detail-edit-container #detail-edit-body-wrap > textarea.detail-edit-body {
1275 width: 100%;
1276 min-height: 12rem;
1277 height: auto;
1278 max-height: min(52vh, 30rem);
1279 flex: 0 0 auto;
1280 resize: none;
1281 overflow: auto;
1282 box-sizing: border-box;
1283 }
1284 #detail-body.detail-edit-container #detail-edit-body-wrap > #media-toolbar {
1285 flex: 0 0 auto;
1286 }
1287 .detail-edit-body-resize-handle {
1288 flex: 0 0 auto;
1289 height: 10px;
1290 margin: 0;
1291 border-radius: 0 0 6px 6px;
1292 cursor: ns-resize;
1293 background: color-mix(in srgb, var(--border) 55%, transparent);
1294 border: 1px solid color-mix(in srgb, var(--border) 80%, transparent);
1295 border-top: none;
1296 box-sizing: border-box;
1297 }
1298 .detail-edit-body-resize-handle:hover {
1299 background: color-mix(in srgb, var(--accent) 28%, var(--border) 72%);
1300 }
1301 .detail-actions { flex-shrink: 0; padding: 1rem; display: flex; flex-wrap: wrap; gap: 0.5rem; }
1302 .detail-actions button { flex: 1; min-width: 6rem; }
1303 .section-source-panel {
1304 flex: 1 0 100%;
1305 max-height: 32vh;
1306 overflow: auto;
1307 padding: 0.75rem;
1308 border: 1px solid var(--border);
1309 border-radius: 8px;
1310 background: color-mix(in srgb, var(--surface) 88%, var(--bg));
1311 }
1312 .section-source-header h3 {
1313 margin: 0 0 0.15rem;
1314 font-size: 0.95rem;
1315 }
1316 .section-source-header p,
1317 .section-source-state {
1318 margin: 0;
1319 }
1320 .section-source-panel-loading,
1321 .section-source-panel-empty,
1322 .section-source-panel-error {
1323 color: var(--muted);
1324 }
1325 .section-source-panel-error {
1326 border-color: color-mix(in srgb, #ef4444 55%, var(--border));
1327 }
1328 .section-source-truncated {
1329 margin-top: 0.5rem;
1330 color: var(--accent);
1331 }
1332 .section-source-list {
1333 margin: 0.65rem 0 0;
1334 padding-left: 1.25rem;
1335 }
1336 .section-source-item {
1337 margin: 0.5rem 0;
1338 padding-left: 0.25rem;
1339 }
1340 .section-source-level-3,
1341 .section-source-level-4,
1342 .section-source-level-5,
1343 .section-source-level-6 {
1344 margin-left: 0.75rem;
1345 }
1346 .section-source-heading {
1347 display: flex;
1348 align-items: baseline;
1349 gap: 0.45rem;
1350 margin: 0;
1351 font-weight: 650;
1352 line-height: 1.35;
1353 }
1354 .section-source-level-label {
1355 flex: 0 0 auto;
1356 padding: 0.05rem 0.35rem;
1357 border: 1px solid var(--border);
1358 border-radius: 999px;
1359 color: var(--muted);
1360 font-size: 0.72rem;
1361 line-height: 1.2;
1362 }
1363 .section-source-heading-text {
1364 min-width: 0;
1365 overflow-wrap: anywhere;
1366 }
1367 .section-source-detail,
1368 .section-source-path,
1369 .section-source-children,
1370 .section-source-debug {
1371 margin: 0.1rem 0 0;
1372 word-break: break-word;
1373 }
1374 .section-source-debug summary {
1375 cursor: pointer;
1376 width: fit-content;
1377 }
1378 .section-source-debug-list {
1379 display: grid;
1380 grid-template-columns: max-content minmax(0, 1fr);
1381 gap: 0.15rem 0.5rem;
1382 margin: 0.2rem 0 0;
1383 }
1384 .section-source-debug-list dt {
1385 font-weight: 650;
1386 }
1387 .section-source-debug-list dd {
1388 margin: 0;
1389 overflow-wrap: anywhere;
1390 }
1391 .detail-footer {
1392 flex-shrink: 0;
1393 position: relative;
1394 z-index: 12;
1395 padding: 0.75rem 1rem 1rem;
1396 border-top: 1px solid var(--border);
1397 background: var(--surface);
1398 }
1399 .detail-footer-row {
1400 display: flex;
1401 align-items: center;
1402 gap: 0.75rem;
1403 flex-wrap: wrap;
1404 }
1405 .detail-footer-hint {
1406 flex: 1;
1407 min-width: 10rem;
1408 margin: 0;
1409 line-height: 1.4;
1410 }
1411 .detail-close-bottom {
1412 flex: 0 0 auto;
1413 box-sizing: border-box;
1414 min-width: 5rem;
1415 }
1416
1417 .detail-panel.detail-panel-proposal-wide { width: min(560px, 100vw); }
1418
1419 .proposal-list-filters {
1420 display: flex;
1421 flex-wrap: wrap;
1422 gap: 0.5rem 1rem;
1423 align-items: flex-end;
1424 margin-bottom: 0.75rem;
1425 padding: 0.5rem 0;
1426 }
1427 .proposal-filter-label {
1428 font-size: 0.8rem;
1429 color: var(--muted);
1430 display: flex;
1431 flex-direction: column;
1432 gap: 0.2rem;
1433 }
1434 .proposal-filter-label input {
1435 min-width: 8rem;
1436 padding: 0.25rem 0.4rem;
1437 font-size: 0.85rem;
1438 border: 1px solid var(--border);
1439 border-radius: 6px;
1440 background: var(--bg);
1441 color: var(--text);
1442 }
1443
1444 #detail-body.detail-body-proposal { white-space: normal; }
1445 .proposal-meta-chips { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-bottom: 0.75rem; }
1446 .proposal-chip { font-size: 0.7rem; padding: 0.15rem 0.45rem; border-radius: 999px; background: var(--border); color: var(--text); }
1447 .proposal-diff-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.5rem; margin: 0.75rem 0; }
1448 @media (max-width: 640px) { .proposal-diff-grid { grid-template-columns: 1fr; } }
1449 .proposal-diff-grid h4 { margin: 0 0 0.35rem; font-size: 0.75rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.03em; }
1450 .proposal-pre {
1451 margin: 0;
1452 max-height: 14rem;
1453 overflow: auto;
1454 font-size: 0.75rem;
1455 padding: 0.5rem;
1456 border: 1px solid var(--border);
1457 border-radius: 6px;
1458 background: var(--bg);
1459 white-space: pre-wrap;
1460 word-break: break-word;
1461 }
1462 .proposal-md-heading {
1463 display: block;
1464 margin: 0.75rem 0 0.35rem;
1465 font-size: 0.75rem;
1466 color: var(--muted);
1467 text-transform: uppercase;
1468 letter-spacing: 0.03em;
1469 }
1470 .proposal-md { font-size: 0.9rem; line-height: 1.45; }
1471 .proposal-md h1, .proposal-md h2, .proposal-md h3,
1472 .proposal-md h4, .proposal-md h5, .proposal-md h6 {
1473 font-size: 1rem;
1474 font-weight: 600;
1475 margin: 0.65rem 0 0.25rem;
1476 line-height: 1.3;
1477 }
1478 .proposal-md pre { overflow: auto; max-height: 10rem; }
1479 .proposal-assistant {
1480 margin-top: 1rem;
1481 padding: 0.75rem;
1482 border-radius: 8px;
1483 border: 1px dashed var(--border);
1484 font-size: 0.85rem;
1485 }
1486 .proposal-suggested-fm {
1487 margin-top: 1rem;
1488 padding: 0.75rem;
1489 border-radius: 8px;
1490 border: 1px dashed color-mix(in srgb, var(--border, #444) 70%, transparent);
1491 font-size: 0.85rem;
1492 }
1493 .proposal-suggested-fm-table {
1494 width: 100%;
1495 border-collapse: collapse;
1496 font-size: 0.8rem;
1497 margin-top: 0.35rem;
1498 }
1499 .proposal-suggested-fm-table th {
1500 text-align: left;
1501 vertical-align: top;
1502 padding: 0.25rem 0.5rem 0.25rem 0;
1503 width: 38%;
1504 color: var(--muted);
1505 font-weight: 600;
1506 }
1507 .proposal-suggested-fm-table td {
1508 padding: 0.25rem 0;
1509 word-break: break-word;
1510 }
1511 .proposal-eval,
1512 .proposal-eval-waiver {
1513 margin-top: 1rem;
1514 padding: 0.75rem 0.85rem;
1515 border-radius: 8px;
1516 border: 1px solid color-mix(in srgb, var(--border, #444) 80%, transparent);
1517 font-size: 0.85rem;
1518 }
1519 .proposal-eval-summary {
1520 margin: 0.35rem 0 0.65rem;
1521 padding: 0.5rem 0.6rem;
1522 border-radius: 6px;
1523 background: color-mix(in srgb, var(--border, #444) 12%, transparent);
1524 }
1525 .proposal-eval-field {
1526 display: flex;
1527 flex-direction: column;
1528 gap: 0.25rem;
1529 margin: 0.5rem 0;
1530 font-size: 0.8rem;
1531 }
1532 .proposal-eval-field select,
1533 .proposal-eval-field input[type='text'],
1534 .proposal-eval-field textarea {
1535 font: inherit;
1536 padding: 0.35rem 0.5rem;
1537 border-radius: 6px;
1538 border: 1px solid var(--border);
1539 background: var(--surface);
1540 color: var(--text);
1541 }
1542 .proposal-eval-checklist {
1543 display: flex;
1544 flex-direction: column;
1545 gap: 0.35rem;
1546 margin: 0.35rem 0 0.5rem;
1547 }
1548 .proposal-eval-check {
1549 display: flex;
1550 align-items: flex-start;
1551 gap: 0.4rem;
1552 font-size: 0.8rem;
1553 line-height: 1.35;
1554 }
1555 .proposal-filter-checkbox {
1556 display: flex;
1557 align-items: center;
1558 gap: 0.35rem;
1559 }
1560 .proposal-filter-checkbox input {
1561 margin: 0;
1562 }
1563
1564 /* Modal */
1565 .modal { position: fixed; inset: 0; z-index: 100; display: flex; align-items: center; justify-content: center; padding: 1rem; }
1566 /* Stacked above Settings / other modals when opened from Integrations tiles */
1567 #modal-integ-guide { z-index: 110; }
1568 .modal-backdrop { position: absolute; inset: 0; background: rgba(0,0,0,0.7); }
1569 .modal-card { position: relative; width: 100%; max-width: 520px; max-height: 90vh; overflow: auto; background: var(--surface); border: 1px solid var(--border); border-radius: 12px; box-shadow: 0 20px 50px rgba(0,0,0,0.5); }
1570 .modal-card-narrow { max-width: 420px; }
1571 .modal-card-settings {
1572 max-width: 820px;
1573 width: 92%;
1574 height: 82vh;
1575 min-height: 420px;
1576 max-height: 82vh;
1577 overflow: hidden;
1578 display: flex;
1579 flex-direction: column;
1580 }
1581 .modal-card-settings .settings-body { overflow: auto; flex: 1; min-height: 0; padding-bottom: 1.5rem; }
1582 .settings-panel { display: none; flex: 1; min-height: 0; flex-direction: column; overflow: hidden; }
1583 .settings-panel.active { display: flex; }
1584 .settings-panel .settings-body { flex: 1; min-height: 280px; }
1585 .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.25rem; border-bottom: 1px solid var(--border); }
1586 .modal-header h2 { margin: 0; font-size: 1.1rem; }
1587 .modal-header-actions { display: flex; align-items: center; gap: 0.5rem; }
1588 .btn-link-small { font-size: 0.875rem; padding: 0.25rem 0.5rem; }
1589 .modal-close { border: none; background: transparent; font-size: 1.5rem; line-height: 1; color: var(--muted); padding: 0 0.25rem; }
1590 .modal-close:hover { color: var(--text); }
1591 .modal-tabs { display: flex; border-bottom: 1px solid var(--border); }
1592 .modal-tab { flex: 1; padding: 0.65rem; border: none; background: transparent; color: var(--muted); border-bottom: 2px solid transparent; margin-bottom: -1px; }
1593 .modal-tab.active { color: var(--accent); border-bottom-color: var(--accent); }
1594 .create-panel { padding: 1.25rem; display: flex; flex-direction: column; gap: 0.5rem; }
1595 .create-panel label { font-size: 0.8rem; color: var(--muted); margin-top: 0.25rem; }
1596 /* New note path row: lead word bolder + brighter accent tint (not full --text / white). */
1597 #create-full label .create-label-em,
1598 #import-create-path-block label .create-label-em {
1599 font-weight: 700;
1600 color: color-mix(in srgb, var(--accent) 72%, var(--muted) 28%);
1601 }
1602 .create-panel input, .create-panel textarea { padding: 0.5rem 0.65rem; border-radius: 6px; border: 1px solid var(--border); background: var(--bg); color: var(--text); font-family: inherit; }
1603 /* Hint key terms: bold only; same color as surrounding .muted copy. */
1604 #create-full .create-hint-em,
1605 #create-full .muted strong,
1606 #import-create-path-block .create-hint-em,
1607 #import-create-path-block .muted strong {
1608 font-weight: 700;
1609 color: inherit;
1610 }
1611 .create-msg { min-height: 1.25rem; font-size: 0.85rem; }
1612 .create-msg.ok { color: #22c55e; }
1613 .create-msg.err { color: #f87171; }
1614
1615 /* How to use modal — wide, step-by-step */
1616 .modal-card-how-to-use {
1617 width: 92vw;
1618 max-width: 960px;
1619 max-height: 90vh;
1620 overflow: hidden;
1621 display: flex;
1622 flex-direction: column;
1623 }
1624 .how-to-use-body {
1625 padding: 1.25rem 1.75rem 1.75rem;
1626 overflow: auto;
1627 flex: 1;
1628 min-height: 0;
1629 }
1630 .how-to-two-paths-box { margin: 0 0 1.25rem; padding: 1rem 1.25rem; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); }
1631 /* Hosted-first lead in How to use → Setup (Phase 5) */
1632 .how-to-hosted-lead { border-color: color-mix(in srgb, var(--accent) 45%, var(--border)); background: color-mix(in srgb, var(--accent-soft) 55%, var(--surface)); }
1633 .how-to-hosted-lead .how-to-two-paths-title { color: var(--text); }
1634 .how-to-selfhosted-details > summary { font-weight: 600; }
1635 .how-to-two-paths-title { margin: 0 0 0.5rem; font-size: 1rem; font-weight: 600; color: var(--text); }
1636 .how-to-two-paths-list { margin: 0 0 0.5rem; padding-left: 1.25rem; font-size: 0.9rem; line-height: 1.6; color: var(--muted); }
1637 .how-to-two-paths-list li { margin-bottom: 0.5rem; }
1638 .how-to-two-paths-list li:last-child { margin-bottom: 0; }
1639 .how-to-two-paths-list code { font-size: 0.85em; background: var(--bg); padding: 0.1rem 0.35rem; border-radius: 4px; }
1640 .how-to-intro {
1641 margin: 0 0 1rem;
1642 font-size: 0.95rem;
1643 color: var(--muted);
1644 line-height: 1.5;
1645 }
1646 .how-to-flow {
1647 display: flex;
1648 align-items: center;
1649 justify-content: center;
1650 flex-wrap: wrap;
1651 gap: 0.35rem;
1652 margin-bottom: 1.5rem;
1653 padding: 0.75rem 1rem;
1654 background: var(--bg);
1655 border-radius: 8px;
1656 border: 1px solid var(--border);
1657 }
1658 .flow-step {
1659 display: flex;
1660 align-items: center;
1661 gap: 0.4rem;
1662 padding: 0.35rem 0.6rem;
1663 background: var(--surface);
1664 border: 1px solid var(--border);
1665 border-radius: 6px;
1666 font-size: 0.8rem;
1667 }
1668 .flow-num {
1669 display: inline-flex;
1670 align-items: center;
1671 justify-content: center;
1672 width: 1.25rem;
1673 height: 1.25rem;
1674 border-radius: 50%;
1675 background: var(--accent);
1676 color: var(--cta-on-accent);
1677 font-weight: 700;
1678 font-size: 0.7rem;
1679 }
1680 .flow-arrow { color: var(--muted); font-size: 0.9rem; }
1681 .how-to-step {
1682 margin-bottom: 1.75rem;
1683 padding-bottom: 1.5rem;
1684 border-bottom: 1px solid var(--border);
1685 }
1686 .how-to-step:last-of-type { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
1687 .how-to-step h3 { margin: 0 0 0.5rem; font-size: 1.05rem; color: var(--text); display: flex; align-items: center; gap: 0.5rem; }
1688 .step-num {
1689 display: inline-flex;
1690 align-items: center;
1691 justify-content: center;
1692 min-width: 1.5rem;
1693 height: 1.5rem;
1694 padding: 0 0.35rem;
1695 border-radius: 6px;
1696 background: var(--accent);
1697 color: var(--cta-on-accent);
1698 font-weight: 700;
1699 font-size: 0.8rem;
1700 }
1701 .step-what {
1702 margin: 0 0 0.75rem;
1703 padding: 0.5rem 0.75rem 0.5rem 1rem;
1704 background: color-mix(in srgb, var(--accent) 10%, transparent);
1705 border-left: 3px solid var(--accent);
1706 border-radius: 0 6px 6px 0;
1707 font-size: 0.85rem;
1708 color: var(--muted);
1709 line-height: 1.45;
1710 }
1711 .how-to-step ul { margin: 0 0 0.75rem; padding-left: 1.25rem; }
1712 .how-to-step li { margin-bottom: 0.35rem; font-size: 0.9rem; line-height: 1.5; }
1713 .how-to-step code { font-size: 0.8rem; background: var(--bg); padding: 0.1rem 0.35rem; border-radius: 4px; }
1714 .how-to-table { width: 100%; border-collapse: collapse; margin: 0.75rem 0; font-size: 0.88rem; }
1715 .how-to-table th, .how-to-table td { padding: 0.5rem 0.75rem; border: 1px solid var(--border); text-align: left; vertical-align: top; }
1716 .how-to-table th { background: var(--bg); color: var(--muted); font-weight: 600; }
1717 .how-to-table code { font-size: 0.8rem; }
1718 .example-block {
1719 margin-top: 0.5rem;
1720 padding: 0.75rem 1rem;
1721 background: var(--bg);
1722 border: 1px solid var(--border);
1723 border-radius: 8px;
1724 }
1725 .example-label { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted); margin-bottom: 0.35rem; display: block; }
1726 .example-block pre { margin: 0; font-size: 0.8rem; white-space: pre-wrap; word-break: break-all; }
1727 .diagram-box {
1728 margin: 1rem 0;
1729 padding: 1rem;
1730 background: var(--bg);
1731 border: 1px solid var(--border);
1732 border-radius: 8px;
1733 }
1734 .diagram-title { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted); margin-bottom: 0.5rem; }
1735 .diagram-svg { width: 100%; height: auto; max-height: 90px; }
1736 .diagram-svg-network { max-height: 200px; }
1737 .diagram-text { fill: var(--text); font-size: 11px; font-family: system-ui, sans-serif; }
1738 .diagram-text-small { fill: var(--muted); font-size: 9px; font-family: system-ui, sans-serif; }
1739 .how-to-sub { margin: 1rem 0 0.5rem; font-size: 0.95rem; color: var(--accent); }
1740 .how-to-step-inline { margin-top: 1.25rem; padding-top: 1rem; border-top: 1px solid var(--border); }
1741 .how-to-step-inline h5 { margin: 0 0 0.5rem; font-size: 1rem; color: var(--text); display: flex; align-items: center; gap: 0.5rem; }
1742 .how-to-step-inline p { margin: 0 0 0.5rem; font-size: 0.9rem; line-height: 1.5; }
1743 .how-to-step-inline .how-to-note { margin-top: 0.5rem; }
1744 .integration-card {
1745 margin-top: 1rem;
1746 padding: 1rem 1.25rem;
1747 background: var(--bg);
1748 border: 1px solid var(--border);
1749 border-radius: 8px;
1750 }
1751 .integration-card h5 { margin: 0 0 0.5rem; font-size: 0.95rem; color: var(--accent); }
1752 .integration-card p { margin: 0 0 0.5rem; font-size: 0.9rem; line-height: 1.5; }
1753 .integration-card .example-block { margin-top: 0.5rem; }
1754 .how-to-details { margin-top: 0.75rem; border: 1px solid var(--border); border-radius: 6px; overflow: hidden; }
1755 .how-to-details summary { padding: 0.5rem 0.75rem; cursor: pointer; font-size: 0.9rem; color: var(--accent); background: var(--surface); list-style: none; }
1756 .how-to-details summary:hover { color: var(--text); }
1757 .how-to-details summary:focus { outline: 2px solid var(--accent); outline-offset: 2px; }
1758 .how-to-details summary::-webkit-details-marker { display: none; }
1759 .how-to-details-body { padding: 0.75rem 1rem; border-top: 1px solid var(--border); font-size: 0.9rem; line-height: 1.5; }
1760 /* Settings modals: stack technical <details> under short leads (Integrations, etc.) */
1761 .settings-body .how-to-details { margin-top: 0.65rem; }
1762 .how-to-steps-list { margin: 0.5rem 0 0.75rem; padding-left: 1.25rem; }
1763 .how-to-steps-list li { margin-bottom: 0.5rem; }
1764 .settings-list { margin: 0 0 0.75rem; padding-left: 1.25rem; font-size: 0.9rem; line-height: 1.55; }
1765 .settings-list li { margin-bottom: 0.5rem; }
1766 .how-to-note { margin-top: 1rem; padding: 0.5rem 0.75rem; background: var(--surface); border-radius: 6px; font-size: 0.85rem; line-height: 1.5; }
1767 .how-to-code { margin: 0.5rem 0 0.75rem; padding: 0.5rem 0.75rem; background: var(--bg); border: 1px solid var(--border); border-radius: 6px; font-family: monospace; font-size: 0.85rem; white-space: pre-wrap; word-break: break-all; }
1768
1769 /* How to use + Settings + onboarding: explicit link color (UA default blue is too dark on dark theme) */
1770 .modal-card-how-to-use a[href],
1771 .modal-card-settings .settings-body a[href],
1772 .onboarding-step-body a[href],
1773 .onboarding-resume-hint a[href] {
1774 color: var(--link-url);
1775 text-decoration: underline;
1776 text-decoration-color: color-mix(in srgb, var(--link-url) 50%, transparent);
1777 text-underline-offset: 0.12em;
1778 }
1779 .modal-card-how-to-use a[href]:hover,
1780 .modal-card-settings .settings-body a[href]:hover,
1781 .onboarding-step-body a[href]:hover,
1782 .onboarding-resume-hint a[href]:hover {
1783 color: var(--link-url-hover);
1784 text-decoration-color: color-mix(in srgb, var(--link-url-hover) 55%, transparent);
1785 }
1786 .modal-card-how-to-use a[href]:visited,
1787 .modal-card-settings .settings-body a[href]:visited,
1788 .onboarding-step-body a[href]:visited,
1789 .onboarding-resume-hint a[href]:visited {
1790 color: var(--link-url);
1791 }
1792
1793 .settings-body { padding: 1rem 1.25rem; }
1794 .settings-body > h3,
1795 .settings-body > .settings-h3,
1796 .settings-body > h4,
1797 .settings-body > .settings-h4 { margin-top: 1.75rem; }
1798 .settings-body > h3:first-child,
1799 .settings-body > .settings-h3:first-child { margin-top: 0; }
1800 .settings-intro { margin: 0 0 1rem; font-size: 0.9rem; color: var(--muted); }
1801 .settings-row { display: flex; gap: 0.75rem; margin-bottom: 0.5rem; }
1802 .settings-label { font-weight: 600; min-width: 6rem; }
1803 .settings-value { color: var(--accent); }
1804 .settings-value-wrap { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
1805 .settings-code { font-size: 0.85rem; background: var(--bg); padding: 0.2rem 0.5rem; border-radius: 4px; word-break: break-all; }
1806 .btn-copy-small { padding: 0.2rem 0.5rem; font-size: 0.75rem; }
1807 .settings-h4 { margin: 1rem 0 0.5rem; font-size: 0.95rem; }
1808 .team-roles-list { display: flex; flex-direction: column; gap: 0.25rem; }
1809 .team-roles-list .team-role-row { font-family: ui-monospace, monospace; font-size: 0.85rem; }
1810 .team-role-row-flex { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 0.75rem; justify-content: space-between; }
1811 .team-evaluator-approve-inline { display: inline-flex; align-items: center; gap: 0.35rem; font-family: inherit; font-size: 0.8rem; color: var(--muted); margin-left: auto; }
1812 .team-evaluator-approve-add { align-items: flex-start; gap: 0.5rem; margin-top: 0.5rem; font-size: 0.88rem; color: var(--muted); }
1813 .settings-tabs { display: flex; gap: 0; border-bottom: 1px solid var(--border); padding: 0 1rem; }
1814 .settings-tab { padding: 0.65rem 1rem; border: none; background: transparent; color: var(--muted); font-size: 0.9rem; cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; }
1815 .settings-tab:hover { color: var(--text); }
1816 .settings-tab.active { color: var(--accent); border-bottom-color: var(--accent); }
1817 .how-to-tabs { display: flex; gap: 0; border-bottom: 1px solid var(--border); padding: 0 1.25rem; }
1818 .how-to-tab { padding: 0.65rem 1rem; border: none; background: transparent; color: var(--muted); font-size: 0.9rem; cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; }
1819 .how-to-tab:hover { color: var(--text); }
1820 .how-to-tab.active { color: var(--accent); border-bottom-color: var(--accent); }
1821 .how-to-panel { display: none; flex: 1; min-height: 0; flex-direction: column; overflow: hidden; }
1822 .how-to-panel.active { display: flex; }
1823 .settings-steps-list { margin: 0 0 0.75rem; padding-left: 1.25rem; font-size: 0.9rem; line-height: 1.6; color: var(--text); }
1824 .settings-steps-list li { margin-bottom: 0.35rem; }
1825 .settings-label-hint { font-weight: normal; color: var(--muted); font-size: 0.85em; }
1826 .theme-section-row {
1827 display: flex;
1828 flex-wrap: wrap;
1829 align-items: center;
1830 gap: 0.5rem 1.5rem;
1831 }
1832 .theme-dashboard-colors-link {
1833 flex-shrink: 0;
1834 }
1835 .theme-toggle { display: flex; gap: 0.5rem; flex-wrap: wrap; }
1836 .theme-btn { padding: 0.5rem 1rem; border-radius: 8px; border: 1px solid var(--border); background: var(--surface); color: var(--text); font-size: 0.9rem; cursor: pointer; }
1837 .theme-btn:hover { border-color: var(--accent); }
1838 .theme-btn[aria-pressed="true"] { background: var(--accent); color: var(--cta-on-accent); border-color: var(--accent); }
1839 /* Accent: presets (left) + large custom + hex (right) */
1840 .accent-color-layout {
1841 display: flex;
1842 flex-wrap: wrap;
1843 align-items: flex-start;
1844 justify-content: space-between;
1845 gap: 1.25rem 1.5rem;
1846 margin-top: 0.5rem;
1847 width: 100%;
1848 }
1849 .accent-preset-groups {
1850 display: flex;
1851 flex-direction: column;
1852 gap: 0.85rem;
1853 flex: 1 1 16rem;
1854 min-width: min(100%, 16rem);
1855 max-width: 100%;
1856 margin-top: 0;
1857 }
1858 .accent-preset-group { width: 100%; }
1859 .accent-custom-column {
1860 flex: 0 1 20rem;
1861 width: min(100%, 20rem);
1862 min-width: 14rem;
1863 display: flex;
1864 flex-direction: column;
1865 align-self: flex-start;
1866 align-items: center;
1867 text-align: center;
1868 gap: 0.5rem;
1869 padding: 0.75rem 1rem 0.9rem;
1870 border: 1px solid color-mix(in srgb, var(--border) 85%, transparent);
1871 border-radius: 10px;
1872 background: color-mix(in srgb, var(--surface) 90%, var(--bg));
1873 margin-left: auto;
1874 }
1875 .accent-custom-heading { margin: 0 0 0.1rem; align-self: center; width: 100%; }
1876 /* Inline color UI (@jaames/iro): box + hue, centered in the column */
1877 .accent-iro-root {
1878 display: flex;
1879 justify-content: center;
1880 align-items: center;
1881 width: 100%;
1882 min-height: 8rem;
1883 overflow: hidden;
1884 border-radius: 8px;
1885 }
1886 .accent-iro-root .IroColorPicker,
1887 .accent-iro-root [class^='Iro'] {
1888 margin-left: auto;
1889 margin-right: auto;
1890 }
1891 .accent-custom-hex-row { margin: 0.1rem 0 0; text-align: center; width: 100%; }
1892 .accent-custom-hex {
1893 font-size: 0.88rem;
1894 font-family: ui-monospace, 'Cascadia Code', monospace;
1895 color: var(--accent);
1896 background: var(--bg);
1897 padding: 0.2rem 0.45rem;
1898 border-radius: 4px;
1899 border: 1px solid var(--border);
1900 }
1901 @media (max-width: 520px) {
1902 .accent-custom-column {
1903 width: 100%;
1904 max-width: 100%;
1905 min-width: 0;
1906 margin-left: 0;
1907 }
1908 }
1909 .accent-preset-group-label {
1910 margin: 0 0 0.35rem;
1911 font-size: 0.72rem;
1912 font-weight: 600;
1913 text-transform: uppercase;
1914 letter-spacing: 0.06em;
1915 color: var(--muted);
1916 }
1917 .accent-presets {
1918 display: grid;
1919 grid-template-columns: repeat(auto-fill, minmax(2.25rem, 1fr));
1920 gap: 0.45rem;
1921 width: 100%;
1922 align-items: start;
1923 justify-items: center;
1924 }
1925 /* Fill set in JS from data-accent (was var(--bg) so swatches looked all black in dark mode) */
1926 .accent-swatch {
1927 width: min(100%, 2.75rem);
1928 aspect-ratio: 1;
1929 height: auto;
1930 border-radius: 50%;
1931 border: 2px solid var(--border);
1932 cursor: pointer;
1933 padding: 0;
1934 box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
1935 }
1936 .accent-swatch:hover { border-color: var(--text); transform: scale(1.08); }
1937 .accent-swatch.active {
1938 border-color: var(--text);
1939 box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12), 0 0 0 2px var(--surface), 0 0 0 3px var(--text);
1940 }
1941 [data-theme="light"] .accent-swatch {
1942 box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.12);
1943 }
1944 [data-theme="light"] .accent-swatch.active {
1945 box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.12), 0 0 0 2px var(--surface), 0 0 0 3px var(--text);
1946 }
1947 /* Appearance → dashboard color theme cards */
1948 .dashboard-theme-grid {
1949 display: grid;
1950 grid-template-columns: repeat(auto-fill, minmax(7.25rem, 1fr));
1951 gap: 0.65rem;
1952 margin-top: 0.5rem;
1953 width: 100%;
1954 }
1955 .dashboard-theme-card {
1956 display: flex;
1957 flex-direction: column;
1958 align-items: stretch;
1959 gap: 0.4rem;
1960 padding: 0.55rem 0.5rem;
1961 border-radius: 10px;
1962 border: 2px solid var(--border);
1963 background: var(--surface);
1964 cursor: pointer;
1965 text-align: left;
1966 color: var(--text);
1967 transition: border-color 0.15s ease, box-shadow 0.15s ease, transform 0.12s ease;
1968 }
1969 .dashboard-theme-card:hover {
1970 border-color: var(--muted);
1971 transform: translateY(-1px);
1972 }
1973 .dashboard-theme-card[aria-checked="true"] {
1974 border-color: var(--accent);
1975 box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 40%, transparent);
1976 }
1977 /* Night | Day: bg → surface → border → muted for each (matches theme tokens; muted + light half read clearly). */
1978 .dashboard-theme-preview {
1979 height: 2.65rem;
1980 border-radius: 6px;
1981 display: block;
1982 width: 100%;
1983 border: 1px solid color-mix(in srgb, var(--text) 12%, transparent);
1984 box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--text) 8%, transparent);
1985 }
1986 .dashboard-theme-name {
1987 font-size: 0.78rem;
1988 font-weight: 600;
1989 line-height: 1.25;
1990 }
1991 .dashboard-theme-preview--classic {
1992 background: linear-gradient(
1993 90deg,
1994 #0a192f 0% 12.5%,
1995 #0d2138 12.5% 25%,
1996 #2a3f5c 25% 37.5%,
1997 #89cff0 37.5% 50%,
1998 #f5f7fb 50% 62.5%,
1999 #ffffff 62.5% 75%,
2000 #d8dee9 75% 87.5%,
2001 #556070 87.5% 100%
2002 );
2003 }
2004 .dashboard-theme-preview--ocean {
2005 background: linear-gradient(
2006 90deg,
2007 #0a0f1a 0% 12.5%,
2008 #111b2e 12.5% 25%,
2009 #1e3d5c 25% 37.5%,
2010 #6b8fb3 37.5% 50%,
2011 #eef6ff 50% 62.5%,
2012 #ffffff 62.5% 75%,
2013 #c7d9ee 75% 87.5%,
2014 #4a678a 87.5% 100%
2015 );
2016 }
2017 .dashboard-theme-preview--forest {
2018 background: linear-gradient(
2019 90deg,
2020 #0a120f 0% 12.5%,
2021 #131f1a 12.5% 25%,
2022 #1e3d32 25% 37.5%,
2023 #6b9a7f 37.5% 50%,
2024 #f0faf4 50% 62.5%,
2025 #ffffff 62.5% 75%,
2026 #c5e0d4 75% 87.5%,
2027 #3d6b52 87.5% 100%
2028 );
2029 }
2030 .dashboard-theme-preview--sunset {
2031 background: linear-gradient(
2032 90deg,
2033 #140d0d 0% 12.5%,
2034 #1f1412 12.5% 25%,
2035 #3d2820 25% 37.5%,
2036 #c48b7a 37.5% 50%,
2037 #fff8f4 50% 62.5%,
2038 #ffffff 62.5% 75%,
2039 #f0d4c4 75% 87.5%,
2040 #8a5c4a 87.5% 100%
2041 );
2042 }
2043 .dashboard-theme-preview--lavender {
2044 background: linear-gradient(
2045 90deg,
2046 #100d14 0% 12.5%,
2047 #181222 12.5% 25%,
2048 #2d2540 25% 37.5%,
2049 #9b8bb8 37.5% 50%,
2050 #f8f5ff 50% 62.5%,
2051 #ffffff 62.5% 75%,
2052 #e0d6f5 75% 87.5%,
2053 #6b5a8a 87.5% 100%
2054 );
2055 }
2056 .dashboard-theme-preview--ember {
2057 background: linear-gradient(
2058 90deg,
2059 #120a08 0% 12.5%,
2060 #1e110c 12.5% 25%,
2061 #3d2418 25% 37.5%,
2062 #c9856a 37.5% 50%,
2063 #fff6f0 50% 62.5%,
2064 #ffffff 62.5% 75%,
2065 #efd4c8 75% 87.5%,
2066 #7a5344 87.5% 100%
2067 );
2068 }
2069 .dashboard-theme-preview--arctic {
2070 background: linear-gradient(
2071 90deg,
2072 #0c1014 0% 12.5%,
2073 #131a20 12.5% 25%,
2074 #243240 25% 37.5%,
2075 #7a95ab 37.5% 50%,
2076 #f4f8fb 50% 62.5%,
2077 #ffffff 62.5% 75%,
2078 #d4e1ea 75% 87.5%,
2079 #4a5f72 87.5% 100%
2080 );
2081 }
2082 .dashboard-theme-preview--slate {
2083 background: linear-gradient(
2084 90deg,
2085 #0c0e12 0% 12.5%,
2086 #151922 12.5% 25%,
2087 #2a3140 25% 37.5%,
2088 #8892a6 37.5% 50%,
2089 #f5f6f8 50% 62.5%,
2090 #ffffff 62.5% 75%,
2091 #dbe0e8 75% 87.5%,
2092 #5a6578 87.5% 100%
2093 );
2094 }
2095 .dashboard-theme-preview--midnight {
2096 background: linear-gradient(
2097 90deg,
2098 #080a18 0% 12.5%,
2099 #101428 12.5% 25%,
2100 #1e2448 25% 37.5%,
2101 #8b87c4 37.5% 50%,
2102 #f4f3ff 50% 62.5%,
2103 #ffffff 62.5% 75%,
2104 #ddd6f5 75% 87.5%,
2105 #5c5288 87.5% 100%
2106 );
2107 }
2108 .dashboard-theme-preview--sakura {
2109 background: linear-gradient(
2110 90deg,
2111 #120e11 0% 12.5%,
2112 #1a1418 12.5% 25%,
2113 #3a2834 25% 37.5%,
2114 #c49aaa 37.5% 50%,
2115 #fff5f8 50% 62.5%,
2116 #ffffff 62.5% 75%,
2117 #f5d0de 75% 87.5%,
2118 #8a5a6e 87.5% 100%
2119 );
2120 }
2121 .dashboard-theme-preview--sand {
2122 background: linear-gradient(
2123 90deg,
2124 #100e0c 0% 12.5%,
2125 #1a1714 12.5% 25%,
2126 #3a342a 25% 37.5%,
2127 #b8a892 37.5% 50%,
2128 #faf7f1 50% 62.5%,
2129 #ffffff 62.5% 75%,
2130 #e8dfd0 75% 87.5%,
2131 #6e6558 87.5% 100%
2132 );
2133 }
2134 .dashboard-theme-preview--mint {
2135 background: linear-gradient(
2136 90deg,
2137 #0a1211 0% 12.5%,
2138 #121d1c 12.5% 25%,
2139 #1e3834 25% 37.5%,
2140 #6ab5a8 37.5% 50%,
2141 #f0faf8 50% 62.5%,
2142 #ffffff 62.5% 75%,
2143 #cce8e2 75% 87.5%,
2144 #3d7268 87.5% 100%
2145 );
2146 }
2147 .settings-actions { display: flex; align-items: center; gap: 0.75rem; margin-top: 1rem; flex-wrap: wrap; }
2148 .settings-msg { font-size: 0.9rem; color: var(--muted); }
2149 .settings-msg.ok { color: var(--accent); font-weight: 500; }
2150 .settings-msg.err { color: #f87171; }
2151 .settings-hr { border: none; border-top: 1px solid var(--border); margin: 1.25rem 0; }
2152
2153 /* Setup checklist (Guided Setup) */
2154 .setup-checklist { list-style: none; padding: 0; margin: 0.75rem 0 0; }
2155 .setup-step { display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 0; border-bottom: 1px solid var(--border); font-size: 0.9rem; }
2156 .setup-step:last-child { border-bottom: none; }
2157 .setup-step-icon { flex-shrink: 0; width: 1.25rem; height: 1.25rem; border-radius: 50%; border: 1px solid var(--border); background: var(--bg); display: inline-flex; align-items: center; justify-content: center; font-size: 0.7rem; font-weight: 700; color: var(--muted); }
2158 .setup-step.setup-step-done .setup-step-icon { background: var(--accent); border-color: var(--accent); color: var(--cta-on-accent); }
2159 .setup-step-label { font-weight: 500; flex-shrink: 0; }
2160 .setup-step-hint { margin-left: auto; font-size: 0.8rem; color: var(--muted); min-width: 0; }
2161 @media (max-width: 480px) { .setup-step-hint { display: none; } }
2162 .settings-h3 { margin: 0 0 0.5rem; font-size: 1rem; }
2163 .settings-form { display: flex; flex-direction: column; gap: 0.5rem; margin-top: 0.75rem; }
2164 .settings-form label:not(.settings-checkbox-label) { font-size: 0.9rem; font-weight: 500; }
2165 .settings-form input[type="text"] { padding: 0.5rem 0.75rem; border-radius: 6px; border: 1px solid var(--border); background: var(--surface); color: var(--text); }
2166 .settings-input-inline, .settings-select-inline { padding: 0.4rem 0.6rem; border-radius: 6px; border: 1px solid var(--border); background: var(--surface); color: var(--text); font-size: 0.9rem; }
2167 /* Settings modal: native <select> without a class (e.g. Team role) — match dark surface, not OS white */
2168 #modal-settings select,
2169 .modal-card-settings select {
2170 padding: 0.45rem 0.75rem;
2171 border-radius: 6px;
2172 border: 1px solid var(--border);
2173 background-color: var(--surface);
2174 color: var(--text);
2175 font-size: 0.9rem;
2176 line-height: 1.35;
2177 cursor: pointer;
2178 max-width: min(100%, 30rem);
2179 }
2180 #modal-settings select:hover,
2181 .modal-card-settings select:hover {
2182 border-color: color-mix(in srgb, var(--accent) 45%, var(--border));
2183 }
2184 #modal-settings select:focus,
2185 .modal-card-settings select:focus {
2186 outline: 2px solid color-mix(in srgb, var(--accent) 55%, transparent);
2187 outline-offset: 1px;
2188 }
2189 .scope-form-simple .settings-form-row label { font-size: 0.9rem; font-weight: 500; }
2190 .settings-checkbox-label { display: flex; align-items: center; gap: 0.5rem; font-weight: normal; cursor: pointer; }
2191 .settings-form-actions { display: flex; align-items: center; gap: 0.75rem; margin-top: 0.5rem; flex-wrap: wrap; }
2192 /* Backup tab — proposal policy: separate save action from the long explainer copy below */
2193 .settings-proposal-policy-actions {
2194 display: flex;
2195 flex-wrap: wrap;
2196 align-items: center;
2197 gap: 0.75rem;
2198 margin-top: 1rem;
2199 margin-bottom: 1.25rem;
2200 padding-top: 1rem;
2201 border-top: 1px solid var(--border);
2202 }
2203 .settings-proposal-policy-actions .btn-proposal-policy-save {
2204 min-height: 2.6rem;
2205 padding: 0.55rem 1.35rem;
2206 box-shadow: 0 1px 0 color-mix(in srgb, var(--accent) 35%, transparent);
2207 }
2208 /* Backup: space below proposal explainer + technical details, before status rows (API / GitHub) */
2209 .settings-proposal-eval-explainer-block {
2210 margin-bottom: 1.5rem;
2211 }
2212 .settings-proposal-eval-explainer-block .settings-json-details {
2213 margin-top: 0.5rem;
2214 }
2215 #settings-api-base-row.settings-row {
2216 margin-top: 0.35rem;
2217 margin-bottom: 0.75rem;
2218 padding-top: 0.5rem;
2219 border-top: 1px solid color-mix(in srgb, var(--border) 70%, transparent);
2220 }
2221 .settings-hosted-repo-block { margin: 0.75rem 0 0.25rem; padding-top: 0.25rem; border-top: 1px solid var(--border); }
2222 .settings-form-compact { margin-top: 0.35rem; }
2223 .settings-json-textarea { font-family: ui-monospace, monospace; font-size: 0.85rem; padding: 0.5rem; border-radius: 6px; border: 1px solid var(--border); background: var(--surface); color: var(--text); resize: vertical; min-height: 6rem; }
2224 .settings-vaults-list { margin: 0.65rem 0 0.85rem; padding: 0.65rem 0.75rem; background: var(--bg); border-radius: 6px; font-size: 0.9rem; border: 1px solid color-mix(in srgb, var(--border) 65%, transparent); }
2225 .vault-list-simple-form { margin: 0.75rem 0 0.65rem; }
2226 .vault-list-simple-form .settings-form-row + .settings-form-row,
2227 .vault-list-simple-form p + .settings-form-row { margin-top: 0.35rem; }
2228 .settings-vaults-server-view { margin: 0.5rem 0 1rem; line-height: 1.4; }
2229
2230 .vault-switcher-label { display: inline-flex; align-items: center; gap: 0.5rem; }
2231 .vault-switcher-text { font-size: 0.9rem; color: var(--muted); }
2232 .vault-switcher-select { padding: 0.35rem 0.6rem; border-radius: 6px; border: 1px solid var(--border); background: var(--surface); color: var(--text); font-size: 0.9rem; cursor: pointer; }
2233 .hub-header .vault-switcher-select {
2234 border-width: 0.7px;
2235 }
2236
2237 /* Toast (Re-index, etc.) */
2238 .toast {
2239 position: fixed;
2240 bottom: 1.5rem;
2241 left: 50%;
2242 transform: translateX(-50%) translateY(1rem);
2243 padding: 0.6rem 1.2rem;
2244 border-radius: 8px;
2245 background: var(--surface);
2246 border: 1px solid var(--accent);
2247 color: var(--text);
2248 font-size: 0.9rem;
2249 z-index: 9999;
2250 opacity: 0;
2251 transition: opacity 0.2s, transform 0.2s;
2252 }
2253 .toast.toast-show { opacity: 1; transform: translateX(-50%) translateY(0); }
2254 .toast.toast-err { border-color: #ef4444; color: #fca5a5; }
2255 .list-item.selected { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 14%, transparent); }
2256
2257 /* Settings → Vaults: lead, info buttons, spacing */
2258 .settings-vaults-lead-row {
2259 display: flex;
2260 align-items: center;
2261 justify-content: space-between;
2262 gap: 0.5rem;
2263 margin-bottom: 0.35rem;
2264 }
2265 .settings-vaults-lead {
2266 margin: 0;
2267 font-size: 1rem;
2268 font-weight: 600;
2269 }
2270 .settings-vaults-lead-sub {
2271 font-weight: 400;
2272 }
2273 .settings-h3-row {
2274 display: flex;
2275 align-items: center;
2276 gap: 0.4rem;
2277 flex-wrap: wrap;
2278 margin: 0 0 0.35rem;
2279 }
2280 .settings-h3-row .settings-h3 {
2281 margin: 0;
2282 }
2283 .btn-settings-info {
2284 display: inline-flex;
2285 align-items: center;
2286 justify-content: center;
2287 padding: 0.25rem;
2288 border: 1px solid var(--border);
2289 border-radius: 6px;
2290 background: var(--surface);
2291 color: var(--accent);
2292 line-height: 0;
2293 flex-shrink: 0;
2294 }
2295 .btn-settings-info:hover {
2296 border-color: var(--accent);
2297 filter: brightness(1.08);
2298 }
2299 .btn-settings-info-svg {
2300 display: block;
2301 }
2302 .settings-info-panel {
2303 margin: 0 0 0.85rem;
2304 padding: 0.65rem 0.75rem;
2305 border: 1px solid var(--border);
2306 border-radius: 8px;
2307 background: color-mix(in srgb, var(--accent) 8%, transparent);
2308 max-width: 42rem;
2309 }
2310 .settings-info-panel--section {
2311 margin-top: 0.25rem;
2312 margin-bottom: 0.65rem;
2313 }
2314 .settings-intro-tight {
2315 margin-top: 0;
2316 margin-bottom: 0.45rem;
2317 }
2318 .settings-server-view-compact {
2319 display: block;
2320 line-height: 1.45;
2321 }
2322 .settings-vaults-vault-list-block {
2323 margin-bottom: 1.75rem;
2324 padding-bottom: 0.25rem;
2325 }
2326 .settings-vaults-gap-before-access {
2327 margin-top: 0.25rem;
2328 }
2329 .settings-vaults-after-access-save {
2330 margin-top: 0.65rem;
2331 margin-bottom: 2.25rem;
2332 }
2333 .settings-vaults-scope-heading {
2334 margin-top: 0.25rem;
2335 }
2336 .settings-vaults-save-row {
2337 margin-top: 1.05rem;
2338 margin-bottom: 0.55rem;
2339 }
2340 .settings-vaults-vault-list-block .settings-json-details {
2341 margin-top: 0.85rem;
2342 }
2343
2344 /* Vault list summary (not raw JSON) */
2345 .settings-vaults-summary-list {
2346 list-style: none;
2347 margin: 0 0 0.35rem;
2348 padding: 0;
2349 }
2350 .vaults-summary-item {
2351 padding: 0.45rem 0;
2352 border-bottom: 1px solid var(--border);
2353 }
2354 .vaults-summary-item:last-child {
2355 border-bottom: none;
2356 }
2357 .vaults-summary-code {
2358 font-size: 0.95em;
2359 }
2360 .vaults-summary-path {
2361 margin-top: 0.2rem;
2362 word-break: break-all;
2363 line-height: 1.35;
2364 }
2365
2366 /* Settings → Vaults: checkbox grid + collapsible JSON (self-hosted + hosted) */
2367 .access-vault-checkboxes { display: flex; flex-wrap: wrap; gap: 0.45rem 1.1rem; align-items: center; }
2368 .access-vault-checkboxes label { cursor: pointer; display: inline-flex; align-items: center; gap: 0.35rem; font-size: 0.9rem; }
2369 .access-rules-summary { margin: 0.25rem 0 0; padding-left: 1.1rem; }
2370 .settings-json-details { margin-top: 0.35rem; border: 1px solid var(--border); border-radius: 8px; padding: 0.35rem 0.65rem 0.65rem; background: var(--surface); }
2371 .settings-json-details-summary {
2372 cursor: pointer;
2373 font-weight: 600;
2374 color: var(--accent);
2375 list-style: none;
2376 display: flex;
2377 align-items: center;
2378 gap: 0.45rem;
2379 user-select: none;
2380 padding: 0.25rem 0;
2381 }
2382 .settings-json-details-summary::-webkit-details-marker,
2383 .settings-json-details-summary::marker {
2384 display: none;
2385 content: '';
2386 }
2387 /* Custom disclosure arrow (native marker hidden above) */
2388 .settings-json-details-summary::before {
2389 content: '';
2390 display: inline-block;
2391 width: 0.4rem;
2392 height: 0.4rem;
2393 border-right: 2px solid var(--accent);
2394 border-bottom: 2px solid var(--accent);
2395 transform: rotate(-45deg);
2396 transition: transform 0.18s ease;
2397 flex-shrink: 0;
2398 margin-top: -0.1rem;
2399 }
2400 .settings-json-details[open] > .settings-json-details-summary::before {
2401 transform: rotate(45deg);
2402 margin-top: -0.2rem;
2403 }
2404 .settings-json-details[open] > .settings-json-details-summary { margin-bottom: 0.35rem; }
2405
2406 /* Settings → Backup: GitHub row + primary Connect button */
2407 .settings-github-connect-row {
2408 display: flex;
2409 flex-wrap: wrap;
2410 align-items: center;
2411 gap: 0.5rem 0.75rem;
2412 margin-bottom: 0.65rem;
2413 }
2414 .settings-github-connect-row .settings-label {
2415 flex-shrink: 0;
2416 }
2417 .settings-github-connect-row .settings-value {
2418 flex: 1 1 12rem;
2419 min-width: 0;
2420 }
2421 .settings-github-connect-row #btn-connect-github {
2422 flex-shrink: 0;
2423 }
2424
2425 /* Settings → Integrations: Hub API troubleshoot + copy row */
2426 .settings-hub-api-troubleshoot {
2427 margin-top: 0.5rem;
2428 }
2429 .settings-troubleshoot-body .settings-intro.small:last-child {
2430 margin-bottom: 0;
2431 }
2432 .settings-hub-api-copy-actions {
2433 display: flex;
2434 flex-wrap: wrap;
2435 align-items: center;
2436 gap: 0.5rem 0.75rem;
2437 margin-bottom: 1rem;
2438 }
2439 .settings-hub-api-doc-ref {
2440 margin-top: 0.25rem;
2441 margin-bottom: 0;
2442 }
2443
2444 .settings-advanced-ecosystems-details {
2445 margin-top: 0.85rem;
2446 }
2447 .settings-advanced-ecosystems-inner-hr {
2448 margin: 1rem 0;
2449 border: 0;
2450 border-top: 1px solid var(--border);
2451 }
2452
2453 /* Integrations tab: compact inline “How?” for Hub API (hosted + self-hosted) */
2454 .settings-intro-integrations-lede {
2455 margin: 0 0 0.75rem;
2456 line-height: 1.55;
2457 }
2458 .settings-integ-how-inline {
2459 display: inline-block;
2460 vertical-align: baseline;
2461 margin: 0 0 0 0.15rem;
2462 border: none;
2463 max-width: 100%;
2464 }
2465 .settings-integ-how-inline-summary {
2466 cursor: pointer;
2467 list-style: none;
2468 display: inline;
2469 user-select: none;
2470 }
2471 .settings-integ-how-inline-summary::-webkit-details-marker,
2472 .settings-integ-how-inline-summary::marker {
2473 display: none;
2474 content: '';
2475 }
2476 .settings-integ-how-inline-label {
2477 color: var(--accent);
2478 font-weight: 700;
2479 text-decoration: underline;
2480 text-decoration-style: dotted;
2481 text-underline-offset: 0.15em;
2482 }
2483 .settings-integ-how-inline[open] .settings-integ-how-inline-label {
2484 text-decoration-style: solid;
2485 }
2486 .settings-integ-how-inline-body {
2487 display: block;
2488 margin-top: 0.5rem;
2489 padding: 0.5rem 0.65rem 0.55rem;
2490 border-radius: 8px;
2491 border: 1px solid color-mix(in srgb, var(--accent) 35%, var(--border));
2492 background: color-mix(in srgb, var(--surface) 92%, var(--accent) 8%);
2493 max-width: 40rem;
2494 }
2495
2496 /* Loading state */
2497 .loading-state { padding: 2rem; text-align: center; color: var(--muted); }
2498 .loading-state::before { content: ''; display: inline-block; width: 1.25rem; height: 1.25rem; border: 2px solid var(--border); border-top-color: var(--accent); border-radius: 50%; animation: spin 0.7s linear infinite; margin-right: 0.5rem; vertical-align: middle; }
2499 @keyframes spin { to { transform: rotate(360deg); } }
2500
2501 /* Responsive: small screens and touch targets */
2502 @media (max-width: 768px) {
2503 .hub-header { padding: 0.75rem 1rem; gap: 0.5rem; }
2504 .hub-header h1 { font-size: 1.1rem; }
2505 .hub-auth button:not(.modal-close),
2506 .hub-auth .btn-provider { min-height: 44px; min-width: 44px; padding: 0.6rem 0.75rem; }
2507 .search-section { padding: 0.75rem 1rem; gap: 0.5rem; }
2508 .search-row-filters input[type="text"] { min-width: 100%; flex: 1 1 100%; }
2509 .search-section select,
2510 .search-section input[type="date"],
2511 .search-section button { min-height: 44px; }
2512 .browse-toolbar { padding: 0.5rem 1rem; }
2513 .filter-chips-toggle { min-height: 44px; min-width: 44px; }
2514 .view-tab { min-height: 44px; padding: 0.5rem 0.85rem; }
2515 .tabs { padding: 0.5rem 1rem; gap: 0.2rem; }
2516 .tab { min-height: 44px; padding: 0.5rem 0.75rem; font-size: 0.9rem; }
2517 .tab-panel { padding: 0.75rem 1rem; }
2518 .list-item { min-height: 48px; padding: 0.85rem; }
2519 .detail-panel { width: 100%; max-width: 100%; }
2520 .detail-header-actions button { min-height: 44px; min-width: 44px; }
2521 .modal { padding: 0.5rem; align-items: flex-start; }
2522 .modal-card { max-height: 95vh; }
2523 .modal-card-how-to-use { width: 100%; max-width: 100%; }
2524 .presets-row input { width: 100%; max-width: 12rem; }
2525 .calendar-grid { max-width: 100%; }
2526 .cal-cell { min-height: 2.5rem; }
2527 .settings-row { flex-wrap: wrap; }
2528 .settings-form-actions { flex-direction: column; align-items: flex-start; }
2529 }
2530 @media (max-width: 480px) {
2531 .hub-auth { width: 100%; justify-content: flex-end; }
2532 .flow-arrow { display: none; }
2533 .how-to-flow { flex-direction: column; align-items: stretch; }
2534 }
2535
2536
2537 /* Approval log rows: theme accent (works with data-palette / data-theme) */
2538 .badge-approval-log {
2539 display: inline-block;
2540 font-size: 0.65rem;
2541 font-weight: 600;
2542 text-transform: uppercase;
2543 letter-spacing: 0.05em;
2544 padding: 0.2em 0.55em;
2545 border-radius: 4px;
2546 margin-left: 0.4em;
2547 vertical-align: middle;
2548 color: var(--accent);
2549 background: color-mix(in srgb, var(--accent) 16%, transparent);
2550 border: 1px solid color-mix(in srgb, var(--accent) 42%, var(--border));
2551 }
2552 .list-item.row-approval-log {
2553 border-left: 3px solid color-mix(in srgb, var(--accent) 55%, var(--border));
2554 padding-left: 0.35rem;
2555 }
2556
2557 /* ── Billing panel (Phase 16) ─────────────────────────────────── */
2558 .billing-plan-badge {
2559 display: inline-block;
2560 padding: 0.2rem 0.6rem;
2561 border-radius: 9999px;
2562 font-size: 0.78rem;
2563 font-weight: 700;
2564 letter-spacing: 0.04em;
2565 text-transform: uppercase;
2566 background: color-mix(in srgb, var(--accent) 18%, transparent);
2567 color: var(--accent);
2568 border: 1px solid color-mix(in srgb, var(--accent) 35%, transparent);
2569 }
2570 .billing-plan-badge.tier-free { background: color-mix(in srgb, var(--muted) 12%, transparent); color: var(--muted); border-color: var(--border); }
2571 .billing-plan-badge.tier-plus { background: color-mix(in srgb, var(--accent) 18%, transparent); color: var(--accent); border-color: color-mix(in srgb, var(--accent) 40%, transparent); }
2572 .billing-plan-badge.tier-growth { background: color-mix(in srgb, #a78bfa 18%, transparent); color: #a78bfa; border-color: color-mix(in srgb, #a78bfa 40%, transparent); }
2573 .billing-plan-badge.tier-pro { background: color-mix(in srgb, #fbbf24 18%, transparent); color: #fbbf24; border-color: color-mix(in srgb, #fbbf24 40%, transparent); }
2574 .billing-plan-badge.tier-beta { background: color-mix(in srgb, #6b7280 12%, transparent); color: var(--muted); border-color: var(--border); }
2575
2576 .billing-usage-bar-wrap {
2577 margin: 0.25rem 0 0;
2578 width: 100%;
2579 max-width: 18rem;
2580 }
2581 .billing-usage-bar-track {
2582 height: 6px;
2583 border-radius: 3px;
2584 background: var(--border);
2585 overflow: hidden;
2586 }
2587 .billing-usage-bar-fill {
2588 height: 100%;
2589 border-radius: 3px;
2590 background: var(--accent);
2591 transition: width 0.3s ease;
2592 }
2593 .billing-usage-bar-fill.warn { background: #fbbf24; }
2594 .billing-usage-bar-fill.over { background: #f87171; }
2595 .billing-usage-bar-label {
2596 font-size: 0.78rem;
2597 color: var(--muted);
2598 margin-top: 0.2rem;
2599 }
2600
2601 /* Operation usage rows (searches + index jobs) */
2602 .billing-op-row {
2603 display: flex;
2604 align-items: flex-start;
2605 gap: 0.6rem;
2606 width: 100%;
2607 }
2608 .billing-op-label {
2609 font-size: 0.78rem;
2610 color: var(--muted);
2611 width: 5.5rem;
2612 flex-shrink: 0;
2613 padding-top: 0.05rem;
2614 }
2615
2616 /* Plan comparison grid */
2617 .billing-plan-grid {
2618 display: grid;
2619 grid-template-columns: 1fr 1fr;
2620 gap: 0.5rem;
2621 margin: 0.85rem 0 0;
2622 }
2623 .billing-plan-card {
2624 border: 1px solid var(--border);
2625 border-radius: 8px;
2626 padding: 0.6rem 0.7rem 0.55rem;
2627 display: flex;
2628 flex-direction: column;
2629 gap: 0.35rem;
2630 background: color-mix(in srgb, #fff 4%, var(--surface));
2631 box-shadow: 0 1px 4px rgba(0,0,0,0.35), inset 0 1px 0 rgba(255,255,255,0.04);
2632 transition: border-color 0.15s, box-shadow 0.15s;
2633 }
2634 .billing-plan-card-active {
2635 border-color: var(--accent);
2636 background: color-mix(in srgb, var(--accent) 10%, var(--surface));
2637 box-shadow: 0 0 0 1px var(--accent), 0 2px 6px rgba(0,0,0,0.4);
2638 }
2639 .billing-plan-card-header {
2640 display: flex;
2641 align-items: baseline;
2642 justify-content: space-between;
2643 gap: 0.3rem;
2644 }
2645 .billing-plan-card-name {
2646 font-weight: 700;
2647 font-size: 0.88rem;
2648 }
2649 .billing-plan-card-price {
2650 font-size: 0.78rem;
2651 color: var(--muted);
2652 font-weight: 600;
2653 }
2654 .billing-plan-card-active .billing-plan-card-price { color: var(--accent); }
2655 .billing-plan-card-features {
2656 list-style: none;
2657 margin: 0;
2658 padding: 0;
2659 font-size: 0.75rem;
2660 color: var(--muted);
2661 line-height: 1.55;
2662 }
2663 .billing-plan-card-features li::before {
2664 content: '✓ ';
2665 opacity: 0.55;
2666 }
2667 .billing-plan-card-cta {
2668 margin-top: 0.3rem;
2669 }
2670 .billing-plan-upgrade-btn {
2671 width: 100%;
2672 padding: 0.3rem 0.5rem;
2673 font-size: 0.75rem;
2674 font-weight: 600;
2675 border-radius: 5px;
2676 cursor: pointer;
2677 background: var(--accent);
2678 /* Slightly off-pure-white on accent (matches softened primary text intent) */
2679 color: #f2f2f2;
2680 border: none;
2681 transition: opacity 0.15s;
2682 }
2683 .billing-plan-upgrade-btn:hover { opacity: 0.85; }
2684 .billing-plan-upgrade-btn:disabled { opacity: 0.5; cursor: not-allowed; }
2685 .billing-plan-current-badge {
2686 display: inline-block;
2687 font-size: 0.7rem;
2688 font-weight: 600;
2689 color: var(--accent);
2690 letter-spacing: 0.03em;
2691 text-transform: uppercase;
2692 }
2693
2694 .billing-cta-row {
2695 display: flex;
2696 align-items: center;
2697 gap: 0.75rem;
2698 flex-wrap: wrap;
2699 margin: 1rem 0 0.25rem;
2700 }
2701
2702 .billing-pack-grid {
2703 display: flex;
2704 gap: 0.6rem;
2705 flex-wrap: wrap;
2706 margin: 0.5rem 0 0;
2707 }
2708 .billing-pack-card {
2709 flex: 1 1 7rem;
2710 min-width: 7rem;
2711 max-width: 12rem;
2712 padding: 0.6rem 0.75rem;
2713 border-radius: 8px;
2714 border: 1px solid var(--border);
2715 background: color-mix(in srgb, #fff 4%, var(--surface));
2716 box-shadow: 0 1px 4px rgba(0,0,0,0.35), inset 0 1px 0 rgba(255,255,255,0.04);
2717 transition: border-color 0.15s, box-shadow 0.15s, background 0.15s;
2718 background: var(--surface);
2719 cursor: pointer;
2720 transition: border-color 0.15s, background 0.15s;
2721 text-align: left;
2722 }
2723 .billing-pack-card:hover,
2724 .billing-pack-card:focus {
2725 border-color: var(--accent);
2726 background: color-mix(in srgb, var(--accent) 10%, var(--surface));
2727 box-shadow: 0 0 0 1px var(--accent), 0 2px 6px rgba(0,0,0,0.4);
2728 outline: none;
2729 }
2730 .billing-pack-card:disabled {
2731 opacity: 0.45;
2732 cursor: not-allowed;
2733 }
2734 .billing-pack-name { font-weight: 600; font-size: 0.88rem; margin-bottom: 0.3rem; }
2735 .billing-pack-price { font-size: 1.05rem; font-weight: 700; color: var(--accent); margin-bottom: 0.2rem; }
2736 .billing-pack-tokens { font-size: 0.78rem; color: var(--muted); }
2737 .billing-pack-equiv { font-size: 0.7rem; color: var(--muted); opacity: 0.7; margin-top: 0.15rem; }
2738
2739 .billing-bornfree-blurb {
2740 font-size: 0.8rem;
2741 color: var(--muted);
2742 margin-top: 0.75rem;
2743 }
2744 .billing-bornfree-blurb a { color: var(--accent); text-decoration: none; }
2745 .billing-bornfree-blurb a:hover { text-decoration: underline; }
2746
2747 /* Phase 18: Media toolbar + paste-URL dialog */
2748 .media-toolbar {
2749 display: flex;
2750 gap: 0.5rem;
2751 margin-top: 0.35rem;
2752 margin-bottom: 0.25rem;
2753 }
2754 .media-toolbar .btn-small {
2755 font-size: 0.75rem;
2756 padding: 0.25rem 0.6rem;
2757 border: 1px solid color-mix(in srgb, var(--border) 60%, var(--text));
2758 border-radius: 4px;
2759 background: var(--surface);
2760 color: var(--text);
2761 cursor: pointer;
2762 }
2763 .media-toolbar .btn-small:hover {
2764 border-color: var(--accent);
2765 background: color-mix(in srgb, var(--accent) 10%, var(--surface));
2766 }
2767 .media-toolbar-hint {
2768 font-size: 0.72rem;
2769 color: var(--text-muted, color-mix(in srgb, var(--text) 55%, transparent));
2770 align-self: center;
2771 cursor: help;
2772 border-bottom: 1px dashed currentColor;
2773 }
2774 .media-url-dialog {
2775 background: var(--surface);
2776 border: 1px solid var(--border);
2777 border-radius: 6px;
2778 padding: 0.75rem;
2779 margin-top: 0.25rem;
2780 max-width: 450px;
2781 }
2782 .media-url-input {
2783 width: 100%;
2784 padding: 0.4rem 0.5rem;
2785 font-size: 0.82rem;
2786 border: 1px solid var(--border);
2787 border-radius: 4px;
2788 background: var(--bg);
2789 color: var(--text);
2790 box-sizing: border-box;
2791 }
2792 .media-url-input:focus {
2793 border-color: var(--accent);
2794 outline: none;
2795 }
2796 .media-preview {
2797 margin-top: 0.5rem;
2798 min-height: 1rem;
2799 }
2800 .media-preview img,
2801 .media-preview video {
2802 max-height: 200px;
2803 max-width: 100%;
2804 border-radius: 4px;
2805 object-fit: contain;
2806 }
2807 .media-url-actions {
2808 display: flex;
2809 gap: 0.5rem;
2810 margin-top: 0.5rem;
2811 }
2812 .note-rendered-body video {
2813 max-width: 100%;
2814 border-radius: 6px;
2815 margin: 0.5rem 0;
2816 }
2817
2818 /* ── Consolidation UI (Stream 2) ──────────────────────────────── */
2819 .consol-radio-group {
2820 display: flex;
2821 flex-wrap: wrap;
2822 gap: 0.35rem 1rem;
2823 }
2824 .consol-mode-section {
2825 padding-top: 0.25rem;
2826 }
2827 .consol-dashboard-card {
2828 margin-bottom: 1rem;
2829 padding: 1rem;
2830 border-radius: 8px;
2831 border: 1px solid var(--border);
2832 background: var(--surface);
2833 }
2834 .consol-card-header {
2835 display: flex;
2836 justify-content: space-between;
2837 align-items: center;
2838 gap: 0.5rem;
2839 margin-bottom: 0.65rem;
2840 }
2841 .consol-card-body {
2842 display: flex;
2843 flex-direction: column;
2844 gap: 0.3rem;
2845 margin-bottom: 0.75rem;
2846 }
2847 .consol-card-actions {
2848 display: flex;
2849 flex-wrap: wrap;
2850 gap: 0.5rem;
2851 }
2852 .consol-badge {
2853 font-size: 0.75rem;
2854 font-weight: 600;
2855 padding: 0.15rem 0.5rem;
2856 border-radius: 999px;
2857 white-space: nowrap;
2858 }
2859 .consol-badge-success { background: color-mix(in srgb, #22c55e 18%, transparent); color: #22c55e; }
2860 .consol-badge-warning { background: color-mix(in srgb, #fbbf24 18%, transparent); color: #fbbf24; }
2861 .consol-badge-neutral { background: color-mix(in srgb, var(--muted) 12%, transparent); color: var(--muted); }
2862 .consol-badge-error { background: color-mix(in srgb, #f87171 18%, transparent); color: #f87171; }
2863 .consol-cost-meter {
2864 margin-top: 0.25rem;
2865 display: flex;
2866 flex-direction: column;
2867 gap: 0.15rem;
2868 }
2869 .consol-history-table {
2870 width: 100%;
2871 border-collapse: collapse;
2872 font-size: 0.85rem;
2873 margin-top: 0.5rem;
2874 }
2875 .consol-history-table th,
2876 .consol-history-table td {
2877 padding: 0.4rem 0.6rem;
2878 border: 1px solid var(--border);
2879 text-align: left;
2880 vertical-align: top;
2881 }
2882 .consol-history-table th {
2883 background: var(--bg);
2884 color: var(--muted);
2885 font-weight: 600;
2886 font-size: 0.78rem;
2887 }
2888 .consol-history-modal {
2889 max-width: 720px;
2890 width: 92%;
2891 max-height: 80vh;
2892 overflow: auto;
2893 }
2894
2895 /* ── Integrations tab: section headings with icons ─────────── */
2896 .integ-section-heading {
2897 display: flex;
2898 align-items: center;
2899 gap: 0.5rem;
2900 margin: 0 0 0.5rem;
2901 font-size: 1rem;
2902 }
2903 .integ-section-icon {
2904 display: inline-flex;
2905 align-items: center;
2906 justify-content: center;
2907 width: 1.5rem;
2908 height: 1.5rem;
2909 flex-shrink: 0;
2910 }
2911 .integ-section-icon svg {
2912 display: block;
2913 width: 100%;
2914 height: 100%;
2915 }
2916
2917 /* Status dot (green = active, gray = inactive) */
2918 .integ-status-dot {
2919 display: inline-block;
2920 width: 0.5rem;
2921 height: 0.5rem;
2922 border-radius: 50%;
2923 background: var(--muted);
2924 flex-shrink: 0;
2925 margin-left: 0.25rem;
2926 }
2927 .integ-status-dot.active {
2928 background: #22c55e;
2929 box-shadow: 0 0 4px rgba(34, 197, 94, 0.5);
2930 }
2931
2932 /* ── Integrations: source tile grid ────────────────────────── */
2933 .integ-source-grid {
2934 display: grid;
2935 grid-template-columns: repeat(auto-fill, minmax(9.5rem, 1fr));
2936 gap: 0.55rem;
2937 margin: 0.65rem 0 0.25rem;
2938 }
2939 .integ-source-tile {
2940 display: flex;
2941 flex-direction: column;
2942 align-items: center;
2943 gap: 0.3rem;
2944 padding: 0.65rem 0.5rem 0.55rem;
2945 border-radius: 8px;
2946 border: 1px solid var(--border);
2947 background: var(--surface);
2948 text-align: center;
2949 transition: border-color 0.15s, background 0.15s;
2950 cursor: pointer;
2951 font: inherit;
2952 color: inherit;
2953 width: 100%;
2954 }
2955 .integ-source-tile:focus-visible {
2956 outline: 2px solid var(--accent);
2957 outline-offset: 2px;
2958 }
2959 .integ-source-tile:hover {
2960 border-color: var(--accent);
2961 background: color-mix(in srgb, var(--accent) 6%, var(--surface));
2962 }
2963 .integ-source-tile-icon {
2964 font-size: 1.5rem;
2965 line-height: 1;
2966 }
2967 .integ-source-tile-name {
2968 font-size: 0.8rem;
2969 font-weight: 600;
2970 color: var(--text);
2971 line-height: 1.2;
2972 }
2973 .integ-source-tile-desc {
2974 font-size: 0.68rem;
2975 color: var(--muted);
2976 line-height: 1.3;
2977 }
2978
2979 /* Capture tiles are wider (fewer per row) for the extra CLI hint */
2980 .integ-capture-grid {
2981 grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr));
2982 }
2983
2984 @media (max-width: 480px) {
2985 .integ-source-grid {
2986 grid-template-columns: repeat(auto-fill, minmax(7.5rem, 1fr));
2987 }
2988 }
2989
2990 .modal-card-integ-guide {
2991 max-width: 36rem;
2992 }
2993 .modal-integ-guide-body {
2994 padding: 0 1rem 1rem;
2995 max-height: min(70vh, 32rem);
2996 overflow: auto;
2997 }
2998 .integ-guide-modal-icon {
2999 font-size: 1.25rem;
3000 vertical-align: middle;
3001 }
3002 .integ-guide-lead {
3003 margin-top: 0;
3004 }
3005 .integ-guide-text {
3006 font-size: 0.875rem;
3007 line-height: 1.45;
3008 margin: 0.5rem 0;
3009 }
3010 .integ-guide-text code {
3011 font-size: 0.82em;
3012 }
3013 .integ-guide-code-block {
3014 position: relative;
3015 margin: 0.65rem 0;
3016 }
3017 .integ-guide-code-label {
3018 display: block;
3019 font-size: 0.72rem;
3020 font-weight: 600;
3021 color: var(--muted);
3022 margin-bottom: 0.25rem;
3023 text-transform: uppercase;
3024 letter-spacing: 0.03em;
3025 }
3026 .integ-guide-code-block pre {
3027 margin: 0;
3028 padding: 0.65rem 0.75rem;
3029 border-radius: 6px;
3030 border: 1px solid var(--border);
3031 background: var(--surface-elevated, rgba(0, 0, 0, 0.2));
3032 overflow-x: auto;
3033 font-size: 0.78rem;
3034 line-height: 1.4;
3035 }
3036 .integ-guide-code-block .integ-guide-copy {
3037 margin-top: 0.35rem;
3038 }
3039 .integ-guide-doc {
3040 margin: 0.75rem 0 0;
3041 font-size: 0.85rem;
3042 }
3043 .integ-guide-actions {
3044 display: flex;
3045 flex-wrap: wrap;
3046 gap: 0.5rem;
3047 margin-top: 0.85rem;
3048 }
3049
3050 /* Onboarding wizard */
3051 .import-aux-btns {
3052 display: flex;
3053 flex-wrap: wrap;
3054 align-items: center;
3055 gap: 0.5rem;
3056 margin: 0.4rem 0 0.35rem 0;
3057 }
3058
3059 .import-drop-zone {
3060 border: 2px dashed var(--border, rgba(255, 255, 255, 0.22));
3061 border-radius: 8px;
3062 padding: 0.85rem 1rem;
3063 margin: 0.5rem 0 0.75rem 0;
3064 background: var(--surface-elevated, rgba(255, 255, 255, 0.03));
3065 transition: border-color 0.15s ease, background 0.15s ease;
3066 }
3067
3068 .import-drop-zone.import-drop-zone--over {
3069 border-color: var(--accent, #89cff0);
3070 background: var(--surface-elevated, rgba(137, 207, 240, 0.08));
3071 }
3072
3073 .import-drop-zone:focus-visible {
3074 outline: 2px solid var(--accent, #89cff0);
3075 outline-offset: 2px;
3076 }
3077
3078 .import-drop-zone .import-drop-zone-text {
3079 margin: 0;
3080 font-size: 0.9rem;
3081 line-height: 1.35;
3082 }
3083
3084 .import-drop-status {
3085 margin: 0.4rem 0 0 0;
3086 }
3087
3088 .sr-only {
3089 position: absolute;
3090 width: 1px;
3091 height: 1px;
3092 padding: 0;
3093 margin: -1px;
3094 overflow: hidden;
3095 clip: rect(0, 0, 0, 0);
3096 white-space: nowrap;
3097 border: 0;
3098 }
3099 .modal-onboarding-card {
3100 max-width: 38rem;
3101 width: calc(100% - 2rem);
3102 }
3103 .onboarding-step-body {
3104 padding: 0 1.25rem 0.75rem;
3105 line-height: 1.55;
3106 color: var(--text);
3107 max-height: min(58vh, 28rem);
3108 overflow-y: auto;
3109 }
3110 .onboarding-token-line {
3111 font-size: 0.92rem;
3112 border-left: 3px solid var(--accent-dim, color-mix(in srgb, var(--accent) 35%, transparent));
3113 padding-left: 0.65rem;
3114 margin-left: 0.1rem;
3115 }
3116 .onboarding-path-grid {
3117 display: grid;
3118 grid-template-columns: 1fr 1fr;
3119 gap: 0.75rem;
3120 margin: 0.5rem 0 0.25rem;
3121 }
3122 @media (max-width: 520px) {
3123 .onboarding-path-grid {
3124 grid-template-columns: 1fr;
3125 }
3126 }
3127 .onboarding-path-card {
3128 border: 1px solid var(--border);
3129 border-radius: var(--radius, 8px);
3130 padding: 0.65rem 0.75rem;
3131 background: color-mix(in srgb, var(--surface) 88%, var(--border));
3132 }
3133 .onboarding-path-card-title {
3134 margin: 0 0 0.35rem;
3135 font-size: 0.95rem;
3136 color: var(--text);
3137 }
3138 .onboarding-path-card-body {
3139 margin: 0;
3140 font-size: 0.88rem;
3141 color: var(--muted);
3142 line-height: 1.45;
3143 }
3144 ul.onboarding-import-cards {
3145 margin: 0.35rem 0 0.75rem;
3146 padding-left: 1.15rem;
3147 line-height: 1.45;
3148 }
3149 ul.onboarding-import-cards li {
3150 margin-bottom: 0.4rem;
3151 }
3152 .onboarding-llm-prompt {
3153 width: 100%;
3154 box-sizing: border-box;
3155 font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
3156 font-size: 0.78rem;
3157 line-height: 1.4;
3158 margin: 0.35rem 0 0;
3159 padding: 0.5rem 0.55rem;
3160 border-radius: 6px;
3161 border: 1px solid var(--border);
3162 background: var(--surface);
3163 color: var(--text);
3164 resize: vertical;
3165 min-height: 7rem;
3166 }
3167 .onboarding-copy-row {
3168 margin: 0.5rem 0 0;
3169 }
3170
3171 .onboarding-step-body .how-to-details {
3172 margin-top: 0.65rem;
3173 }
3174
3175 /* Proposal list empty states (Suggested / Activity) */
3176 .empty-state-suggested-actions,
3177 .empty-state-activity-actions {
3178 margin: 0.75rem 0 0;
3179 }
3180
3181 /* Empty vault reminder when onboarding was skipped (Skip for now) */
3182 .hub-empty-vault-strip {
3183 margin: 0 0 0.75rem;
3184 padding: 0 0.5rem;
3185 }
3186 .hub-empty-vault-strip-inner {
3187 max-width: 56rem;
3188 margin: 0 auto;
3189 padding: 0.85rem 1rem 1rem;
3190 border: 1px solid color-mix(in srgb, var(--accent) 22%, var(--border));
3191 border-radius: var(--radius, 8px);
3192 background: linear-gradient(135deg, color-mix(in srgb, var(--accent) 8%, var(--surface)) 0%, var(--surface) 100%);
3193 }
3194 .hub-empty-vault-strip-lede {
3195 margin: 0 0 0.6rem;
3196 font-size: 0.92rem;
3197 color: var(--text);
3198 line-height: 1.45;
3199 }
3200 .hub-empty-vault-steps {
3201 list-style: none;
3202 margin: 0 0 0.75rem;
3203 padding: 0;
3204 display: grid;
3205 gap: 0.45rem;
3206 }
3207 .hub-empty-vault-steps li {
3208 display: flex;
3209 align-items: flex-start;
3210 gap: 0.5rem;
3211 font-size: 0.86rem;
3212 color: var(--muted);
3213 line-height: 1.45;
3214 }
3215 .hub-empty-vault-num {
3216 flex-shrink: 0;
3217 width: 1.5rem;
3218 height: 1.5rem;
3219 border-radius: 999px;
3220 display: inline-flex;
3221 align-items: center;
3222 justify-content: center;
3223 font-weight: 700;
3224 font-size: 0.85rem;
3225 color: var(--accent);
3226 background: color-mix(in srgb, var(--accent) 15%, transparent);
3227 }
3228 .hub-empty-vault-step-body strong {
3229 color: var(--text);
3230 }
3231 .hub-empty-vault-actions {
3232 display: flex;
3233 flex-wrap: wrap;
3234 gap: 0.5rem;
3235 align-items: center;
3236 }
3237 .onboarding-step-body p {
3238 margin: 0 0 0.75rem 0;
3239 }
3240 .onboarding-step-body p:last-child {
3241 margin-bottom: 0;
3242 }
3243 .onboarding-tip {
3244 font-size: 0.9rem;
3245 color: var(--muted);
3246 }
3247 .onboarding-progress {
3248 display: flex;
3249 gap: 0.35rem;
3250 flex-wrap: wrap;
3251 padding: 0.25rem 1.25rem 0.75rem;
3252 justify-content: center;
3253 }
3254 .onboarding-dot {
3255 width: 0.5rem;
3256 height: 0.5rem;
3257 border-radius: 999px;
3258 background: var(--border);
3259 }
3260 .onboarding-dot.onboarding-dot-active {
3261 background: var(--accent);
3262 box-shadow: 0 0 0 2px var(--accent-dim);
3263 }
3264 .onboarding-secondary-actions {
3265 display: flex;
3266 flex-wrap: wrap;
3267 gap: 0.5rem 0.75rem;
3268 padding: 0 1.25rem 0.75rem;
3269 }
3270 .onboarding-footer {
3271 display: flex;
3272 flex-wrap: wrap;
3273 align-items: center;
3274 justify-content: space-between;
3275 gap: 0.75rem;
3276 padding: 0.75rem 1.25rem 0.5rem;
3277 border-top: 1px solid var(--border);
3278 }
3279 .onboarding-nav {
3280 display: flex;
3281 gap: 0.5rem;
3282 }
3283 .onboarding-resume-hint {
3284 padding: 0 1.25rem 1rem;
3285 margin: 0;
3286 line-height: 1.4;
3287 }
3288 @media (prefers-reduced-motion: reduce) {
3289 .onboarding-dot.onboarding-dot-active {
3290 box-shadow: none;
3291 }
3292 }