hub.css css
3,134 lines 99.6 KB
Raw
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 .detail-footer {
1304 flex-shrink: 0;
1305 position: relative;
1306 z-index: 12;
1307 padding: 0.75rem 1rem 1rem;
1308 border-top: 1px solid var(--border);
1309 background: var(--surface);
1310 }
1311 .detail-footer-row {
1312 display: flex;
1313 align-items: center;
1314 gap: 0.75rem;
1315 flex-wrap: wrap;
1316 }
1317 .detail-footer-hint {
1318 flex: 1;
1319 min-width: 10rem;
1320 margin: 0;
1321 line-height: 1.4;
1322 }
1323 .detail-close-bottom {
1324 flex: 0 0 auto;
1325 box-sizing: border-box;
1326 min-width: 5rem;
1327 }
1328
1329 .detail-panel.detail-panel-proposal-wide { width: min(560px, 100vw); }
1330
1331 .proposal-list-filters {
1332 display: flex;
1333 flex-wrap: wrap;
1334 gap: 0.5rem 1rem;
1335 align-items: flex-end;
1336 margin-bottom: 0.75rem;
1337 padding: 0.5rem 0;
1338 }
1339 .proposal-filter-label {
1340 font-size: 0.8rem;
1341 color: var(--muted);
1342 display: flex;
1343 flex-direction: column;
1344 gap: 0.2rem;
1345 }
1346 .proposal-filter-label input {
1347 min-width: 8rem;
1348 padding: 0.25rem 0.4rem;
1349 font-size: 0.85rem;
1350 border: 1px solid var(--border);
1351 border-radius: 6px;
1352 background: var(--bg);
1353 color: var(--text);
1354 }
1355
1356 #detail-body.detail-body-proposal { white-space: normal; }
1357 .proposal-meta-chips { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-bottom: 0.75rem; }
1358 .proposal-chip { font-size: 0.7rem; padding: 0.15rem 0.45rem; border-radius: 999px; background: var(--border); color: var(--text); }
1359 .proposal-diff-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.5rem; margin: 0.75rem 0; }
1360 @media (max-width: 640px) { .proposal-diff-grid { grid-template-columns: 1fr; } }
1361 .proposal-diff-grid h4 { margin: 0 0 0.35rem; font-size: 0.75rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.03em; }
1362 .proposal-pre {
1363 margin: 0;
1364 max-height: 14rem;
1365 overflow: auto;
1366 font-size: 0.75rem;
1367 padding: 0.5rem;
1368 border: 1px solid var(--border);
1369 border-radius: 6px;
1370 background: var(--bg);
1371 white-space: pre-wrap;
1372 word-break: break-word;
1373 }
1374 .proposal-md-heading {
1375 display: block;
1376 margin: 0.75rem 0 0.35rem;
1377 font-size: 0.75rem;
1378 color: var(--muted);
1379 text-transform: uppercase;
1380 letter-spacing: 0.03em;
1381 }
1382 .proposal-md { font-size: 0.9rem; line-height: 1.45; }
1383 .proposal-md h1, .proposal-md h2, .proposal-md h3,
1384 .proposal-md h4, .proposal-md h5, .proposal-md h6 {
1385 font-size: 1rem;
1386 font-weight: 600;
1387 margin: 0.65rem 0 0.25rem;
1388 line-height: 1.3;
1389 }
1390 .proposal-md pre { overflow: auto; max-height: 10rem; }
1391 .proposal-assistant {
1392 margin-top: 1rem;
1393 padding: 0.75rem;
1394 border-radius: 8px;
1395 border: 1px dashed var(--border);
1396 font-size: 0.85rem;
1397 }
1398 .proposal-suggested-fm {
1399 margin-top: 1rem;
1400 padding: 0.75rem;
1401 border-radius: 8px;
1402 border: 1px dashed color-mix(in srgb, var(--border, #444) 70%, transparent);
1403 font-size: 0.85rem;
1404 }
1405 .proposal-suggested-fm-table {
1406 width: 100%;
1407 border-collapse: collapse;
1408 font-size: 0.8rem;
1409 margin-top: 0.35rem;
1410 }
1411 .proposal-suggested-fm-table th {
1412 text-align: left;
1413 vertical-align: top;
1414 padding: 0.25rem 0.5rem 0.25rem 0;
1415 width: 38%;
1416 color: var(--muted);
1417 font-weight: 600;
1418 }
1419 .proposal-suggested-fm-table td {
1420 padding: 0.25rem 0;
1421 word-break: break-word;
1422 }
1423 .proposal-eval,
1424 .proposal-eval-waiver {
1425 margin-top: 1rem;
1426 padding: 0.75rem 0.85rem;
1427 border-radius: 8px;
1428 border: 1px solid color-mix(in srgb, var(--border, #444) 80%, transparent);
1429 font-size: 0.85rem;
1430 }
1431 .proposal-eval-summary {
1432 margin: 0.35rem 0 0.65rem;
1433 padding: 0.5rem 0.6rem;
1434 border-radius: 6px;
1435 background: color-mix(in srgb, var(--border, #444) 12%, transparent);
1436 }
1437 .proposal-eval-field {
1438 display: flex;
1439 flex-direction: column;
1440 gap: 0.25rem;
1441 margin: 0.5rem 0;
1442 font-size: 0.8rem;
1443 }
1444 .proposal-eval-field select,
1445 .proposal-eval-field input[type='text'],
1446 .proposal-eval-field textarea {
1447 font: inherit;
1448 padding: 0.35rem 0.5rem;
1449 border-radius: 6px;
1450 border: 1px solid var(--border);
1451 background: var(--surface);
1452 color: var(--text);
1453 }
1454 .proposal-eval-checklist {
1455 display: flex;
1456 flex-direction: column;
1457 gap: 0.35rem;
1458 margin: 0.35rem 0 0.5rem;
1459 }
1460 .proposal-eval-check {
1461 display: flex;
1462 align-items: flex-start;
1463 gap: 0.4rem;
1464 font-size: 0.8rem;
1465 line-height: 1.35;
1466 }
1467 .proposal-filter-checkbox {
1468 display: flex;
1469 align-items: center;
1470 gap: 0.35rem;
1471 }
1472 .proposal-filter-checkbox input {
1473 margin: 0;
1474 }
1475
1476 /* Modal */
1477 .modal { position: fixed; inset: 0; z-index: 100; display: flex; align-items: center; justify-content: center; padding: 1rem; }
1478 .modal-backdrop { position: absolute; inset: 0; background: rgba(0,0,0,0.7); }
1479 .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); }
1480 .modal-card-narrow { max-width: 420px; }
1481 .modal-card-settings {
1482 max-width: 820px;
1483 width: 92%;
1484 height: 82vh;
1485 min-height: 420px;
1486 max-height: 82vh;
1487 overflow: hidden;
1488 display: flex;
1489 flex-direction: column;
1490 }
1491 .modal-card-settings .settings-body { overflow: auto; flex: 1; min-height: 0; padding-bottom: 1.5rem; }
1492 .settings-panel { display: none; flex: 1; min-height: 0; flex-direction: column; overflow: hidden; }
1493 .settings-panel.active { display: flex; }
1494 .settings-panel .settings-body { flex: 1; min-height: 280px; }
1495 .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.25rem; border-bottom: 1px solid var(--border); }
1496 .modal-header h2 { margin: 0; font-size: 1.1rem; }
1497 .modal-header-actions { display: flex; align-items: center; gap: 0.5rem; }
1498 .btn-link-small { font-size: 0.875rem; padding: 0.25rem 0.5rem; }
1499 .modal-close { border: none; background: transparent; font-size: 1.5rem; line-height: 1; color: var(--muted); padding: 0 0.25rem; }
1500 .modal-close:hover { color: var(--text); }
1501 .modal-tabs { display: flex; border-bottom: 1px solid var(--border); }
1502 .modal-tab { flex: 1; padding: 0.65rem; border: none; background: transparent; color: var(--muted); border-bottom: 2px solid transparent; margin-bottom: -1px; }
1503 .modal-tab.active { color: var(--accent); border-bottom-color: var(--accent); }
1504 .create-panel { padding: 1.25rem; display: flex; flex-direction: column; gap: 0.5rem; }
1505 .create-panel label { font-size: 0.8rem; color: var(--muted); margin-top: 0.25rem; }
1506 /* New note path row: lead word bolder + brighter accent tint (not full --text / white). */
1507 #create-full label .create-label-em,
1508 #import-create-path-block label .create-label-em {
1509 font-weight: 700;
1510 color: color-mix(in srgb, var(--accent) 72%, var(--muted) 28%);
1511 }
1512 .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; }
1513 /* Hint key terms: bold only; same color as surrounding .muted copy. */
1514 #create-full .create-hint-em,
1515 #create-full .muted strong,
1516 #import-create-path-block .create-hint-em,
1517 #import-create-path-block .muted strong {
1518 font-weight: 700;
1519 color: inherit;
1520 }
1521 .create-msg { min-height: 1.25rem; font-size: 0.85rem; }
1522 .create-msg.ok { color: #22c55e; }
1523 .create-msg.err { color: #f87171; }
1524
1525 /* How to use modal — wide, step-by-step */
1526 .modal-card-how-to-use {
1527 width: 92vw;
1528 max-width: 960px;
1529 max-height: 90vh;
1530 overflow: hidden;
1531 display: flex;
1532 flex-direction: column;
1533 }
1534 .how-to-use-body {
1535 padding: 1.25rem 1.75rem 1.75rem;
1536 overflow: auto;
1537 flex: 1;
1538 min-height: 0;
1539 }
1540 .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); }
1541 /* Hosted-first lead in How to use → Setup (Phase 5) */
1542 .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)); }
1543 .how-to-hosted-lead .how-to-two-paths-title { color: var(--text); }
1544 .how-to-selfhosted-details > summary { font-weight: 600; }
1545 .how-to-two-paths-title { margin: 0 0 0.5rem; font-size: 1rem; font-weight: 600; color: var(--text); }
1546 .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); }
1547 .how-to-two-paths-list li { margin-bottom: 0.5rem; }
1548 .how-to-two-paths-list li:last-child { margin-bottom: 0; }
1549 .how-to-two-paths-list code { font-size: 0.85em; background: var(--bg); padding: 0.1rem 0.35rem; border-radius: 4px; }
1550 .how-to-intro {
1551 margin: 0 0 1rem;
1552 font-size: 0.95rem;
1553 color: var(--muted);
1554 line-height: 1.5;
1555 }
1556 .how-to-flow {
1557 display: flex;
1558 align-items: center;
1559 justify-content: center;
1560 flex-wrap: wrap;
1561 gap: 0.35rem;
1562 margin-bottom: 1.5rem;
1563 padding: 0.75rem 1rem;
1564 background: var(--bg);
1565 border-radius: 8px;
1566 border: 1px solid var(--border);
1567 }
1568 .flow-step {
1569 display: flex;
1570 align-items: center;
1571 gap: 0.4rem;
1572 padding: 0.35rem 0.6rem;
1573 background: var(--surface);
1574 border: 1px solid var(--border);
1575 border-radius: 6px;
1576 font-size: 0.8rem;
1577 }
1578 .flow-num {
1579 display: inline-flex;
1580 align-items: center;
1581 justify-content: center;
1582 width: 1.25rem;
1583 height: 1.25rem;
1584 border-radius: 50%;
1585 background: var(--accent);
1586 color: var(--cta-on-accent);
1587 font-weight: 700;
1588 font-size: 0.7rem;
1589 }
1590 .flow-arrow { color: var(--muted); font-size: 0.9rem; }
1591 .how-to-step {
1592 margin-bottom: 1.75rem;
1593 padding-bottom: 1.5rem;
1594 border-bottom: 1px solid var(--border);
1595 }
1596 .how-to-step:last-of-type { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
1597 .how-to-step h3 { margin: 0 0 0.5rem; font-size: 1.05rem; color: var(--text); display: flex; align-items: center; gap: 0.5rem; }
1598 .step-num {
1599 display: inline-flex;
1600 align-items: center;
1601 justify-content: center;
1602 min-width: 1.5rem;
1603 height: 1.5rem;
1604 padding: 0 0.35rem;
1605 border-radius: 6px;
1606 background: var(--accent);
1607 color: var(--cta-on-accent);
1608 font-weight: 700;
1609 font-size: 0.8rem;
1610 }
1611 .step-what {
1612 margin: 0 0 0.75rem;
1613 padding: 0.5rem 0.75rem 0.5rem 1rem;
1614 background: color-mix(in srgb, var(--accent) 10%, transparent);
1615 border-left: 3px solid var(--accent);
1616 border-radius: 0 6px 6px 0;
1617 font-size: 0.85rem;
1618 color: var(--muted);
1619 line-height: 1.45;
1620 }
1621 .how-to-step ul { margin: 0 0 0.75rem; padding-left: 1.25rem; }
1622 .how-to-step li { margin-bottom: 0.35rem; font-size: 0.9rem; line-height: 1.5; }
1623 .how-to-step code { font-size: 0.8rem; background: var(--bg); padding: 0.1rem 0.35rem; border-radius: 4px; }
1624 .how-to-table { width: 100%; border-collapse: collapse; margin: 0.75rem 0; font-size: 0.88rem; }
1625 .how-to-table th, .how-to-table td { padding: 0.5rem 0.75rem; border: 1px solid var(--border); text-align: left; vertical-align: top; }
1626 .how-to-table th { background: var(--bg); color: var(--muted); font-weight: 600; }
1627 .how-to-table code { font-size: 0.8rem; }
1628 .example-block {
1629 margin-top: 0.5rem;
1630 padding: 0.75rem 1rem;
1631 background: var(--bg);
1632 border: 1px solid var(--border);
1633 border-radius: 8px;
1634 }
1635 .example-label { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted); margin-bottom: 0.35rem; display: block; }
1636 .example-block pre { margin: 0; font-size: 0.8rem; white-space: pre-wrap; word-break: break-all; }
1637 .diagram-box {
1638 margin: 1rem 0;
1639 padding: 1rem;
1640 background: var(--bg);
1641 border: 1px solid var(--border);
1642 border-radius: 8px;
1643 }
1644 .diagram-title { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted); margin-bottom: 0.5rem; }
1645 .diagram-svg { width: 100%; height: auto; max-height: 90px; }
1646 .diagram-svg-network { max-height: 200px; }
1647 .diagram-text { fill: var(--text); font-size: 11px; font-family: system-ui, sans-serif; }
1648 .diagram-text-small { fill: var(--muted); font-size: 9px; font-family: system-ui, sans-serif; }
1649 .how-to-sub { margin: 1rem 0 0.5rem; font-size: 0.95rem; color: var(--accent); }
1650 .how-to-step-inline { margin-top: 1.25rem; padding-top: 1rem; border-top: 1px solid var(--border); }
1651 .how-to-step-inline h5 { margin: 0 0 0.5rem; font-size: 1rem; color: var(--text); display: flex; align-items: center; gap: 0.5rem; }
1652 .how-to-step-inline p { margin: 0 0 0.5rem; font-size: 0.9rem; line-height: 1.5; }
1653 .how-to-step-inline .how-to-note { margin-top: 0.5rem; }
1654 .integration-card {
1655 margin-top: 1rem;
1656 padding: 1rem 1.25rem;
1657 background: var(--bg);
1658 border: 1px solid var(--border);
1659 border-radius: 8px;
1660 }
1661 .integration-card h5 { margin: 0 0 0.5rem; font-size: 0.95rem; color: var(--accent); }
1662 .integration-card p { margin: 0 0 0.5rem; font-size: 0.9rem; line-height: 1.5; }
1663 .integration-card .example-block { margin-top: 0.5rem; }
1664 .how-to-details { margin-top: 0.75rem; border: 1px solid var(--border); border-radius: 6px; overflow: hidden; }
1665 .how-to-details summary { padding: 0.5rem 0.75rem; cursor: pointer; font-size: 0.9rem; color: var(--accent); background: var(--surface); list-style: none; }
1666 .how-to-details summary:hover { color: var(--text); }
1667 .how-to-details summary:focus { outline: 2px solid var(--accent); outline-offset: 2px; }
1668 .how-to-details summary::-webkit-details-marker { display: none; }
1669 .how-to-details-body { padding: 0.75rem 1rem; border-top: 1px solid var(--border); font-size: 0.9rem; line-height: 1.5; }
1670 /* Settings modals: stack technical <details> under short leads (Integrations, etc.) */
1671 .settings-body .how-to-details { margin-top: 0.65rem; }
1672 .how-to-steps-list { margin: 0.5rem 0 0.75rem; padding-left: 1.25rem; }
1673 .how-to-steps-list li { margin-bottom: 0.5rem; }
1674 .settings-list { margin: 0 0 0.75rem; padding-left: 1.25rem; font-size: 0.9rem; line-height: 1.55; }
1675 .settings-list li { margin-bottom: 0.5rem; }
1676 .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; }
1677 .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; }
1678
1679 /* How to use + Settings + onboarding: explicit link color (UA default blue is too dark on dark theme) */
1680 .modal-card-how-to-use a[href],
1681 .modal-card-settings .settings-body a[href],
1682 .onboarding-step-body a[href],
1683 .onboarding-resume-hint a[href] {
1684 color: var(--link-url);
1685 text-decoration: underline;
1686 text-decoration-color: color-mix(in srgb, var(--link-url) 50%, transparent);
1687 text-underline-offset: 0.12em;
1688 }
1689 .modal-card-how-to-use a[href]:hover,
1690 .modal-card-settings .settings-body a[href]:hover,
1691 .onboarding-step-body a[href]:hover,
1692 .onboarding-resume-hint a[href]:hover {
1693 color: var(--link-url-hover);
1694 text-decoration-color: color-mix(in srgb, var(--link-url-hover) 55%, transparent);
1695 }
1696 .modal-card-how-to-use a[href]:visited,
1697 .modal-card-settings .settings-body a[href]:visited,
1698 .onboarding-step-body a[href]:visited,
1699 .onboarding-resume-hint a[href]:visited {
1700 color: var(--link-url);
1701 }
1702
1703 .settings-body { padding: 1rem 1.25rem; }
1704 .settings-body > h3,
1705 .settings-body > .settings-h3,
1706 .settings-body > h4,
1707 .settings-body > .settings-h4 { margin-top: 1.75rem; }
1708 .settings-body > h3:first-child,
1709 .settings-body > .settings-h3:first-child { margin-top: 0; }
1710 .settings-intro { margin: 0 0 1rem; font-size: 0.9rem; color: var(--muted); }
1711 .settings-row { display: flex; gap: 0.75rem; margin-bottom: 0.5rem; }
1712 .settings-label { font-weight: 600; min-width: 6rem; }
1713 .settings-value { color: var(--accent); }
1714 .settings-value-wrap { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
1715 .settings-code { font-size: 0.85rem; background: var(--bg); padding: 0.2rem 0.5rem; border-radius: 4px; word-break: break-all; }
1716 .btn-copy-small { padding: 0.2rem 0.5rem; font-size: 0.75rem; }
1717 .settings-h4 { margin: 1rem 0 0.5rem; font-size: 0.95rem; }
1718 .team-roles-list { display: flex; flex-direction: column; gap: 0.25rem; }
1719 .team-roles-list .team-role-row { font-family: ui-monospace, monospace; font-size: 0.85rem; }
1720 .team-role-row-flex { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 0.75rem; justify-content: space-between; }
1721 .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; }
1722 .team-evaluator-approve-add { align-items: flex-start; gap: 0.5rem; margin-top: 0.5rem; font-size: 0.88rem; color: var(--muted); }
1723 .settings-tabs { display: flex; gap: 0; border-bottom: 1px solid var(--border); padding: 0 1rem; }
1724 .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; }
1725 .settings-tab:hover { color: var(--text); }
1726 .settings-tab.active { color: var(--accent); border-bottom-color: var(--accent); }
1727 .how-to-tabs { display: flex; gap: 0; border-bottom: 1px solid var(--border); padding: 0 1.25rem; }
1728 .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; }
1729 .how-to-tab:hover { color: var(--text); }
1730 .how-to-tab.active { color: var(--accent); border-bottom-color: var(--accent); }
1731 .how-to-panel { display: none; flex: 1; min-height: 0; flex-direction: column; overflow: hidden; }
1732 .how-to-panel.active { display: flex; }
1733 .settings-steps-list { margin: 0 0 0.75rem; padding-left: 1.25rem; font-size: 0.9rem; line-height: 1.6; color: var(--text); }
1734 .settings-steps-list li { margin-bottom: 0.35rem; }
1735 .settings-label-hint { font-weight: normal; color: var(--muted); font-size: 0.85em; }
1736 .theme-section-row {
1737 display: flex;
1738 flex-wrap: wrap;
1739 align-items: center;
1740 gap: 0.5rem 1.5rem;
1741 }
1742 .theme-dashboard-colors-link {
1743 flex-shrink: 0;
1744 }
1745 .theme-toggle { display: flex; gap: 0.5rem; flex-wrap: wrap; }
1746 .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; }
1747 .theme-btn:hover { border-color: var(--accent); }
1748 .theme-btn[aria-pressed="true"] { background: var(--accent); color: var(--cta-on-accent); border-color: var(--accent); }
1749 /* Accent: presets (left) + large custom + hex (right) */
1750 .accent-color-layout {
1751 display: flex;
1752 flex-wrap: wrap;
1753 align-items: flex-start;
1754 justify-content: space-between;
1755 gap: 1.25rem 1.5rem;
1756 margin-top: 0.5rem;
1757 width: 100%;
1758 }
1759 .accent-preset-groups {
1760 display: flex;
1761 flex-direction: column;
1762 gap: 0.85rem;
1763 flex: 1 1 16rem;
1764 min-width: min(100%, 16rem);
1765 max-width: 100%;
1766 margin-top: 0;
1767 }
1768 .accent-preset-group { width: 100%; }
1769 .accent-custom-column {
1770 flex: 0 1 20rem;
1771 width: min(100%, 20rem);
1772 min-width: 14rem;
1773 display: flex;
1774 flex-direction: column;
1775 align-self: flex-start;
1776 align-items: center;
1777 text-align: center;
1778 gap: 0.5rem;
1779 padding: 0.75rem 1rem 0.9rem;
1780 border: 1px solid color-mix(in srgb, var(--border) 85%, transparent);
1781 border-radius: 10px;
1782 background: color-mix(in srgb, var(--surface) 90%, var(--bg));
1783 margin-left: auto;
1784 }
1785 .accent-custom-heading { margin: 0 0 0.1rem; align-self: center; width: 100%; }
1786 /* Inline color UI (@jaames/iro): box + hue, centered in the column */
1787 .accent-iro-root {
1788 display: flex;
1789 justify-content: center;
1790 align-items: center;
1791 width: 100%;
1792 min-height: 8rem;
1793 overflow: hidden;
1794 border-radius: 8px;
1795 }
1796 .accent-iro-root .IroColorPicker,
1797 .accent-iro-root [class^='Iro'] {
1798 margin-left: auto;
1799 margin-right: auto;
1800 }
1801 .accent-custom-hex-row { margin: 0.1rem 0 0; text-align: center; width: 100%; }
1802 .accent-custom-hex {
1803 font-size: 0.88rem;
1804 font-family: ui-monospace, 'Cascadia Code', monospace;
1805 color: var(--accent);
1806 background: var(--bg);
1807 padding: 0.2rem 0.45rem;
1808 border-radius: 4px;
1809 border: 1px solid var(--border);
1810 }
1811 @media (max-width: 520px) {
1812 .accent-custom-column {
1813 width: 100%;
1814 max-width: 100%;
1815 min-width: 0;
1816 margin-left: 0;
1817 }
1818 }
1819 .accent-preset-group-label {
1820 margin: 0 0 0.35rem;
1821 font-size: 0.72rem;
1822 font-weight: 600;
1823 text-transform: uppercase;
1824 letter-spacing: 0.06em;
1825 color: var(--muted);
1826 }
1827 .accent-presets {
1828 display: grid;
1829 grid-template-columns: repeat(auto-fill, minmax(2.25rem, 1fr));
1830 gap: 0.45rem;
1831 width: 100%;
1832 align-items: start;
1833 justify-items: center;
1834 }
1835 /* Fill set in JS from data-accent (was var(--bg) so swatches looked all black in dark mode) */
1836 .accent-swatch {
1837 width: min(100%, 2.75rem);
1838 aspect-ratio: 1;
1839 height: auto;
1840 border-radius: 50%;
1841 border: 2px solid var(--border);
1842 cursor: pointer;
1843 padding: 0;
1844 box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
1845 }
1846 .accent-swatch:hover { border-color: var(--text); transform: scale(1.08); }
1847 .accent-swatch.active {
1848 border-color: var(--text);
1849 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);
1850 }
1851 [data-theme="light"] .accent-swatch {
1852 box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.12);
1853 }
1854 [data-theme="light"] .accent-swatch.active {
1855 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);
1856 }
1857 /* Appearance → dashboard color theme cards */
1858 .dashboard-theme-grid {
1859 display: grid;
1860 grid-template-columns: repeat(auto-fill, minmax(7.25rem, 1fr));
1861 gap: 0.65rem;
1862 margin-top: 0.5rem;
1863 width: 100%;
1864 }
1865 .dashboard-theme-card {
1866 display: flex;
1867 flex-direction: column;
1868 align-items: stretch;
1869 gap: 0.4rem;
1870 padding: 0.55rem 0.5rem;
1871 border-radius: 10px;
1872 border: 2px solid var(--border);
1873 background: var(--surface);
1874 cursor: pointer;
1875 text-align: left;
1876 color: var(--text);
1877 transition: border-color 0.15s ease, box-shadow 0.15s ease, transform 0.12s ease;
1878 }
1879 .dashboard-theme-card:hover {
1880 border-color: var(--muted);
1881 transform: translateY(-1px);
1882 }
1883 .dashboard-theme-card[aria-checked="true"] {
1884 border-color: var(--accent);
1885 box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 40%, transparent);
1886 }
1887 /* Night | Day: bg → surface → border → muted for each (matches theme tokens; muted + light half read clearly). */
1888 .dashboard-theme-preview {
1889 height: 2.65rem;
1890 border-radius: 6px;
1891 display: block;
1892 width: 100%;
1893 border: 1px solid color-mix(in srgb, var(--text) 12%, transparent);
1894 box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--text) 8%, transparent);
1895 }
1896 .dashboard-theme-name {
1897 font-size: 0.78rem;
1898 font-weight: 600;
1899 line-height: 1.25;
1900 }
1901 .dashboard-theme-preview--classic {
1902 background: linear-gradient(
1903 90deg,
1904 #0a192f 0% 12.5%,
1905 #0d2138 12.5% 25%,
1906 #2a3f5c 25% 37.5%,
1907 #89cff0 37.5% 50%,
1908 #f5f7fb 50% 62.5%,
1909 #ffffff 62.5% 75%,
1910 #d8dee9 75% 87.5%,
1911 #556070 87.5% 100%
1912 );
1913 }
1914 .dashboard-theme-preview--ocean {
1915 background: linear-gradient(
1916 90deg,
1917 #0a0f1a 0% 12.5%,
1918 #111b2e 12.5% 25%,
1919 #1e3d5c 25% 37.5%,
1920 #6b8fb3 37.5% 50%,
1921 #eef6ff 50% 62.5%,
1922 #ffffff 62.5% 75%,
1923 #c7d9ee 75% 87.5%,
1924 #4a678a 87.5% 100%
1925 );
1926 }
1927 .dashboard-theme-preview--forest {
1928 background: linear-gradient(
1929 90deg,
1930 #0a120f 0% 12.5%,
1931 #131f1a 12.5% 25%,
1932 #1e3d32 25% 37.5%,
1933 #6b9a7f 37.5% 50%,
1934 #f0faf4 50% 62.5%,
1935 #ffffff 62.5% 75%,
1936 #c5e0d4 75% 87.5%,
1937 #3d6b52 87.5% 100%
1938 );
1939 }
1940 .dashboard-theme-preview--sunset {
1941 background: linear-gradient(
1942 90deg,
1943 #140d0d 0% 12.5%,
1944 #1f1412 12.5% 25%,
1945 #3d2820 25% 37.5%,
1946 #c48b7a 37.5% 50%,
1947 #fff8f4 50% 62.5%,
1948 #ffffff 62.5% 75%,
1949 #f0d4c4 75% 87.5%,
1950 #8a5c4a 87.5% 100%
1951 );
1952 }
1953 .dashboard-theme-preview--lavender {
1954 background: linear-gradient(
1955 90deg,
1956 #100d14 0% 12.5%,
1957 #181222 12.5% 25%,
1958 #2d2540 25% 37.5%,
1959 #9b8bb8 37.5% 50%,
1960 #f8f5ff 50% 62.5%,
1961 #ffffff 62.5% 75%,
1962 #e0d6f5 75% 87.5%,
1963 #6b5a8a 87.5% 100%
1964 );
1965 }
1966 .dashboard-theme-preview--ember {
1967 background: linear-gradient(
1968 90deg,
1969 #120a08 0% 12.5%,
1970 #1e110c 12.5% 25%,
1971 #3d2418 25% 37.5%,
1972 #c9856a 37.5% 50%,
1973 #fff6f0 50% 62.5%,
1974 #ffffff 62.5% 75%,
1975 #efd4c8 75% 87.5%,
1976 #7a5344 87.5% 100%
1977 );
1978 }
1979 .dashboard-theme-preview--arctic {
1980 background: linear-gradient(
1981 90deg,
1982 #0c1014 0% 12.5%,
1983 #131a20 12.5% 25%,
1984 #243240 25% 37.5%,
1985 #7a95ab 37.5% 50%,
1986 #f4f8fb 50% 62.5%,
1987 #ffffff 62.5% 75%,
1988 #d4e1ea 75% 87.5%,
1989 #4a5f72 87.5% 100%
1990 );
1991 }
1992 .dashboard-theme-preview--slate {
1993 background: linear-gradient(
1994 90deg,
1995 #0c0e12 0% 12.5%,
1996 #151922 12.5% 25%,
1997 #2a3140 25% 37.5%,
1998 #8892a6 37.5% 50%,
1999 #f5f6f8 50% 62.5%,
2000 #ffffff 62.5% 75%,
2001 #dbe0e8 75% 87.5%,
2002 #5a6578 87.5% 100%
2003 );
2004 }
2005 .dashboard-theme-preview--midnight {
2006 background: linear-gradient(
2007 90deg,
2008 #080a18 0% 12.5%,
2009 #101428 12.5% 25%,
2010 #1e2448 25% 37.5%,
2011 #8b87c4 37.5% 50%,
2012 #f4f3ff 50% 62.5%,
2013 #ffffff 62.5% 75%,
2014 #ddd6f5 75% 87.5%,
2015 #5c5288 87.5% 100%
2016 );
2017 }
2018 .dashboard-theme-preview--sakura {
2019 background: linear-gradient(
2020 90deg,
2021 #120e11 0% 12.5%,
2022 #1a1418 12.5% 25%,
2023 #3a2834 25% 37.5%,
2024 #c49aaa 37.5% 50%,
2025 #fff5f8 50% 62.5%,
2026 #ffffff 62.5% 75%,
2027 #f5d0de 75% 87.5%,
2028 #8a5a6e 87.5% 100%
2029 );
2030 }
2031 .dashboard-theme-preview--sand {
2032 background: linear-gradient(
2033 90deg,
2034 #100e0c 0% 12.5%,
2035 #1a1714 12.5% 25%,
2036 #3a342a 25% 37.5%,
2037 #b8a892 37.5% 50%,
2038 #faf7f1 50% 62.5%,
2039 #ffffff 62.5% 75%,
2040 #e8dfd0 75% 87.5%,
2041 #6e6558 87.5% 100%
2042 );
2043 }
2044 .dashboard-theme-preview--mint {
2045 background: linear-gradient(
2046 90deg,
2047 #0a1211 0% 12.5%,
2048 #121d1c 12.5% 25%,
2049 #1e3834 25% 37.5%,
2050 #6ab5a8 37.5% 50%,
2051 #f0faf8 50% 62.5%,
2052 #ffffff 62.5% 75%,
2053 #cce8e2 75% 87.5%,
2054 #3d7268 87.5% 100%
2055 );
2056 }
2057 .settings-actions { display: flex; align-items: center; gap: 0.75rem; margin-top: 1rem; flex-wrap: wrap; }
2058 .settings-msg { font-size: 0.9rem; color: var(--muted); }
2059 .settings-msg.ok { color: var(--accent); font-weight: 500; }
2060 .settings-msg.err { color: #f87171; }
2061 .settings-hr { border: none; border-top: 1px solid var(--border); margin: 1.25rem 0; }
2062
2063 /* Setup checklist (Guided Setup) */
2064 .setup-checklist { list-style: none; padding: 0; margin: 0.75rem 0 0; }
2065 .setup-step { display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 0; border-bottom: 1px solid var(--border); font-size: 0.9rem; }
2066 .setup-step:last-child { border-bottom: none; }
2067 .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); }
2068 .setup-step.setup-step-done .setup-step-icon { background: var(--accent); border-color: var(--accent); color: var(--cta-on-accent); }
2069 .setup-step-label { font-weight: 500; flex-shrink: 0; }
2070 .setup-step-hint { margin-left: auto; font-size: 0.8rem; color: var(--muted); min-width: 0; }
2071 @media (max-width: 480px) { .setup-step-hint { display: none; } }
2072 .settings-h3 { margin: 0 0 0.5rem; font-size: 1rem; }
2073 .settings-form { display: flex; flex-direction: column; gap: 0.5rem; margin-top: 0.75rem; }
2074 .settings-form label:not(.settings-checkbox-label) { font-size: 0.9rem; font-weight: 500; }
2075 .settings-form input[type="text"] { padding: 0.5rem 0.75rem; border-radius: 6px; border: 1px solid var(--border); background: var(--surface); color: var(--text); }
2076 .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; }
2077 /* Settings modal: native <select> without a class (e.g. Team role) — match dark surface, not OS white */
2078 #modal-settings select,
2079 .modal-card-settings select {
2080 padding: 0.45rem 0.75rem;
2081 border-radius: 6px;
2082 border: 1px solid var(--border);
2083 background-color: var(--surface);
2084 color: var(--text);
2085 font-size: 0.9rem;
2086 line-height: 1.35;
2087 cursor: pointer;
2088 max-width: min(100%, 30rem);
2089 }
2090 #modal-settings select:hover,
2091 .modal-card-settings select:hover {
2092 border-color: color-mix(in srgb, var(--accent) 45%, var(--border));
2093 }
2094 #modal-settings select:focus,
2095 .modal-card-settings select:focus {
2096 outline: 2px solid color-mix(in srgb, var(--accent) 55%, transparent);
2097 outline-offset: 1px;
2098 }
2099 .scope-form-simple .settings-form-row label { font-size: 0.9rem; font-weight: 500; }
2100 .settings-checkbox-label { display: flex; align-items: center; gap: 0.5rem; font-weight: normal; cursor: pointer; }
2101 .settings-form-actions { display: flex; align-items: center; gap: 0.75rem; margin-top: 0.5rem; flex-wrap: wrap; }
2102 /* Backup tab — proposal policy: separate save action from the long explainer copy below */
2103 .settings-proposal-policy-actions {
2104 display: flex;
2105 flex-wrap: wrap;
2106 align-items: center;
2107 gap: 0.75rem;
2108 margin-top: 1rem;
2109 margin-bottom: 1.25rem;
2110 padding-top: 1rem;
2111 border-top: 1px solid var(--border);
2112 }
2113 .settings-proposal-policy-actions .btn-proposal-policy-save {
2114 min-height: 2.6rem;
2115 padding: 0.55rem 1.35rem;
2116 box-shadow: 0 1px 0 color-mix(in srgb, var(--accent) 35%, transparent);
2117 }
2118 /* Backup: space below proposal explainer + technical details, before status rows (API / GitHub) */
2119 .settings-proposal-eval-explainer-block {
2120 margin-bottom: 1.5rem;
2121 }
2122 .settings-proposal-eval-explainer-block .settings-json-details {
2123 margin-top: 0.5rem;
2124 }
2125 #settings-api-base-row.settings-row {
2126 margin-top: 0.35rem;
2127 margin-bottom: 0.75rem;
2128 padding-top: 0.5rem;
2129 border-top: 1px solid color-mix(in srgb, var(--border) 70%, transparent);
2130 }
2131 .settings-hosted-repo-block { margin: 0.75rem 0 0.25rem; padding-top: 0.25rem; border-top: 1px solid var(--border); }
2132 .settings-form-compact { margin-top: 0.35rem; }
2133 .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; }
2134 .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); }
2135 .vault-list-simple-form { margin: 0.75rem 0 0.65rem; }
2136 .vault-list-simple-form .settings-form-row + .settings-form-row,
2137 .vault-list-simple-form p + .settings-form-row { margin-top: 0.35rem; }
2138 .settings-vaults-server-view { margin: 0.5rem 0 1rem; line-height: 1.4; }
2139
2140 .vault-switcher-label { display: inline-flex; align-items: center; gap: 0.5rem; }
2141 .vault-switcher-text { font-size: 0.9rem; color: var(--muted); }
2142 .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; }
2143 .hub-header .vault-switcher-select {
2144 border-width: 0.7px;
2145 }
2146
2147 /* Toast (Re-index, etc.) */
2148 .toast {
2149 position: fixed;
2150 bottom: 1.5rem;
2151 left: 50%;
2152 transform: translateX(-50%) translateY(1rem);
2153 padding: 0.6rem 1.2rem;
2154 border-radius: 8px;
2155 background: var(--surface);
2156 border: 1px solid var(--accent);
2157 color: var(--text);
2158 font-size: 0.9rem;
2159 z-index: 9999;
2160 opacity: 0;
2161 transition: opacity 0.2s, transform 0.2s;
2162 }
2163 .toast.toast-show { opacity: 1; transform: translateX(-50%) translateY(0); }
2164 .toast.toast-err { border-color: #ef4444; color: #fca5a5; }
2165 .list-item.selected { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 14%, transparent); }
2166
2167 /* Settings → Vaults: lead, info buttons, spacing */
2168 .settings-vaults-lead-row {
2169 display: flex;
2170 align-items: center;
2171 justify-content: space-between;
2172 gap: 0.5rem;
2173 margin-bottom: 0.35rem;
2174 }
2175 .settings-vaults-lead {
2176 margin: 0;
2177 font-size: 1rem;
2178 font-weight: 600;
2179 }
2180 .settings-vaults-lead-sub {
2181 font-weight: 400;
2182 }
2183 .settings-h3-row {
2184 display: flex;
2185 align-items: center;
2186 gap: 0.4rem;
2187 flex-wrap: wrap;
2188 margin: 0 0 0.35rem;
2189 }
2190 .settings-h3-row .settings-h3 {
2191 margin: 0;
2192 }
2193 .btn-settings-info {
2194 display: inline-flex;
2195 align-items: center;
2196 justify-content: center;
2197 padding: 0.25rem;
2198 border: 1px solid var(--border);
2199 border-radius: 6px;
2200 background: var(--surface);
2201 color: var(--accent);
2202 line-height: 0;
2203 flex-shrink: 0;
2204 }
2205 .btn-settings-info:hover {
2206 border-color: var(--accent);
2207 filter: brightness(1.08);
2208 }
2209 .btn-settings-info-svg {
2210 display: block;
2211 }
2212 .settings-info-panel {
2213 margin: 0 0 0.85rem;
2214 padding: 0.65rem 0.75rem;
2215 border: 1px solid var(--border);
2216 border-radius: 8px;
2217 background: color-mix(in srgb, var(--accent) 8%, transparent);
2218 max-width: 42rem;
2219 }
2220 .settings-info-panel--section {
2221 margin-top: 0.25rem;
2222 margin-bottom: 0.65rem;
2223 }
2224 .settings-intro-tight {
2225 margin-top: 0;
2226 margin-bottom: 0.45rem;
2227 }
2228 .settings-server-view-compact {
2229 display: block;
2230 line-height: 1.45;
2231 }
2232 .settings-vaults-vault-list-block {
2233 margin-bottom: 1.75rem;
2234 padding-bottom: 0.25rem;
2235 }
2236 .settings-vaults-gap-before-access {
2237 margin-top: 0.25rem;
2238 }
2239 .settings-vaults-after-access-save {
2240 margin-top: 0.65rem;
2241 margin-bottom: 2.25rem;
2242 }
2243 .settings-vaults-scope-heading {
2244 margin-top: 0.25rem;
2245 }
2246 .settings-vaults-save-row {
2247 margin-top: 1.05rem;
2248 margin-bottom: 0.55rem;
2249 }
2250 .settings-vaults-vault-list-block .settings-json-details {
2251 margin-top: 0.85rem;
2252 }
2253
2254 /* Vault list summary (not raw JSON) */
2255 .settings-vaults-summary-list {
2256 list-style: none;
2257 margin: 0 0 0.35rem;
2258 padding: 0;
2259 }
2260 .vaults-summary-item {
2261 padding: 0.45rem 0;
2262 border-bottom: 1px solid var(--border);
2263 }
2264 .vaults-summary-item:last-child {
2265 border-bottom: none;
2266 }
2267 .vaults-summary-code {
2268 font-size: 0.95em;
2269 }
2270 .vaults-summary-path {
2271 margin-top: 0.2rem;
2272 word-break: break-all;
2273 line-height: 1.35;
2274 }
2275
2276 /* Settings → Vaults: checkbox grid + collapsible JSON (self-hosted + hosted) */
2277 .access-vault-checkboxes { display: flex; flex-wrap: wrap; gap: 0.45rem 1.1rem; align-items: center; }
2278 .access-vault-checkboxes label { cursor: pointer; display: inline-flex; align-items: center; gap: 0.35rem; font-size: 0.9rem; }
2279 .access-rules-summary { margin: 0.25rem 0 0; padding-left: 1.1rem; }
2280 .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); }
2281 .settings-json-details-summary {
2282 cursor: pointer;
2283 font-weight: 600;
2284 color: var(--accent);
2285 list-style: none;
2286 display: flex;
2287 align-items: center;
2288 gap: 0.45rem;
2289 user-select: none;
2290 padding: 0.25rem 0;
2291 }
2292 .settings-json-details-summary::-webkit-details-marker,
2293 .settings-json-details-summary::marker {
2294 display: none;
2295 content: '';
2296 }
2297 /* Custom disclosure arrow (native marker hidden above) */
2298 .settings-json-details-summary::before {
2299 content: '';
2300 display: inline-block;
2301 width: 0.4rem;
2302 height: 0.4rem;
2303 border-right: 2px solid var(--accent);
2304 border-bottom: 2px solid var(--accent);
2305 transform: rotate(-45deg);
2306 transition: transform 0.18s ease;
2307 flex-shrink: 0;
2308 margin-top: -0.1rem;
2309 }
2310 .settings-json-details[open] > .settings-json-details-summary::before {
2311 transform: rotate(45deg);
2312 margin-top: -0.2rem;
2313 }
2314 .settings-json-details[open] > .settings-json-details-summary { margin-bottom: 0.35rem; }
2315
2316 /* Settings → Backup: GitHub row + primary Connect button */
2317 .settings-github-connect-row {
2318 display: flex;
2319 flex-wrap: wrap;
2320 align-items: center;
2321 gap: 0.5rem 0.75rem;
2322 margin-bottom: 0.65rem;
2323 }
2324 .settings-github-connect-row .settings-label {
2325 flex-shrink: 0;
2326 }
2327 .settings-github-connect-row .settings-value {
2328 flex: 1 1 12rem;
2329 min-width: 0;
2330 }
2331 .settings-github-connect-row #btn-connect-github {
2332 flex-shrink: 0;
2333 }
2334
2335 /* Settings → Integrations: Hub API troubleshoot + copy row */
2336 .settings-hub-api-troubleshoot {
2337 margin-top: 0.5rem;
2338 }
2339 .settings-troubleshoot-body .settings-intro.small:last-child {
2340 margin-bottom: 0;
2341 }
2342 .settings-hub-api-copy-actions {
2343 display: flex;
2344 flex-wrap: wrap;
2345 align-items: center;
2346 gap: 0.5rem 0.75rem;
2347 margin-bottom: 1rem;
2348 }
2349 .settings-hub-api-doc-ref {
2350 margin-top: 0.25rem;
2351 margin-bottom: 0;
2352 }
2353
2354 .settings-advanced-ecosystems-details {
2355 margin-top: 0.85rem;
2356 }
2357 .settings-advanced-ecosystems-inner-hr {
2358 margin: 1rem 0;
2359 border: 0;
2360 border-top: 1px solid var(--border);
2361 }
2362
2363 /* Integrations tab: compact inline “How?” for Hub API (hosted + self-hosted) */
2364 .settings-intro-integrations-lede {
2365 margin: 0 0 0.75rem;
2366 line-height: 1.55;
2367 }
2368 .settings-integ-how-inline {
2369 display: inline-block;
2370 vertical-align: baseline;
2371 margin: 0 0 0 0.15rem;
2372 border: none;
2373 max-width: 100%;
2374 }
2375 .settings-integ-how-inline-summary {
2376 cursor: pointer;
2377 list-style: none;
2378 display: inline;
2379 user-select: none;
2380 }
2381 .settings-integ-how-inline-summary::-webkit-details-marker,
2382 .settings-integ-how-inline-summary::marker {
2383 display: none;
2384 content: '';
2385 }
2386 .settings-integ-how-inline-label {
2387 color: var(--accent);
2388 font-weight: 700;
2389 text-decoration: underline;
2390 text-decoration-style: dotted;
2391 text-underline-offset: 0.15em;
2392 }
2393 .settings-integ-how-inline[open] .settings-integ-how-inline-label {
2394 text-decoration-style: solid;
2395 }
2396 .settings-integ-how-inline-body {
2397 display: block;
2398 margin-top: 0.5rem;
2399 padding: 0.5rem 0.65rem 0.55rem;
2400 border-radius: 8px;
2401 border: 1px solid color-mix(in srgb, var(--accent) 35%, var(--border));
2402 background: color-mix(in srgb, var(--surface) 92%, var(--accent) 8%);
2403 max-width: 40rem;
2404 }
2405
2406 /* Loading state */
2407 .loading-state { padding: 2rem; text-align: center; color: var(--muted); }
2408 .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; }
2409 @keyframes spin { to { transform: rotate(360deg); } }
2410
2411 /* Responsive: small screens and touch targets */
2412 @media (max-width: 768px) {
2413 .hub-header { padding: 0.75rem 1rem; gap: 0.5rem; }
2414 .hub-header h1 { font-size: 1.1rem; }
2415 .hub-auth button:not(.modal-close),
2416 .hub-auth .btn-provider { min-height: 44px; min-width: 44px; padding: 0.6rem 0.75rem; }
2417 .search-section { padding: 0.75rem 1rem; gap: 0.5rem; }
2418 .search-row-filters input[type="text"] { min-width: 100%; flex: 1 1 100%; }
2419 .search-section select,
2420 .search-section input[type="date"],
2421 .search-section button { min-height: 44px; }
2422 .browse-toolbar { padding: 0.5rem 1rem; }
2423 .filter-chips-toggle { min-height: 44px; min-width: 44px; }
2424 .view-tab { min-height: 44px; padding: 0.5rem 0.85rem; }
2425 .tabs { padding: 0.5rem 1rem; gap: 0.2rem; }
2426 .tab { min-height: 44px; padding: 0.5rem 0.75rem; font-size: 0.9rem; }
2427 .tab-panel { padding: 0.75rem 1rem; }
2428 .list-item { min-height: 48px; padding: 0.85rem; }
2429 .detail-panel { width: 100%; max-width: 100%; }
2430 .detail-header-actions button { min-height: 44px; min-width: 44px; }
2431 .modal { padding: 0.5rem; align-items: flex-start; }
2432 .modal-card { max-height: 95vh; }
2433 .modal-card-how-to-use { width: 100%; max-width: 100%; }
2434 .presets-row input { width: 100%; max-width: 12rem; }
2435 .calendar-grid { max-width: 100%; }
2436 .cal-cell { min-height: 2.5rem; }
2437 .settings-row { flex-wrap: wrap; }
2438 .settings-form-actions { flex-direction: column; align-items: flex-start; }
2439 }
2440 @media (max-width: 480px) {
2441 .hub-auth { width: 100%; justify-content: flex-end; }
2442 .flow-arrow { display: none; }
2443 .how-to-flow { flex-direction: column; align-items: stretch; }
2444 }
2445
2446
2447 /* Approval log rows: theme accent (works with data-palette / data-theme) */
2448 .badge-approval-log {
2449 display: inline-block;
2450 font-size: 0.65rem;
2451 font-weight: 600;
2452 text-transform: uppercase;
2453 letter-spacing: 0.05em;
2454 padding: 0.2em 0.55em;
2455 border-radius: 4px;
2456 margin-left: 0.4em;
2457 vertical-align: middle;
2458 color: var(--accent);
2459 background: color-mix(in srgb, var(--accent) 16%, transparent);
2460 border: 1px solid color-mix(in srgb, var(--accent) 42%, var(--border));
2461 }
2462 .list-item.row-approval-log {
2463 border-left: 3px solid color-mix(in srgb, var(--accent) 55%, var(--border));
2464 padding-left: 0.35rem;
2465 }
2466
2467 /* ── Billing panel (Phase 16) ─────────────────────────────────── */
2468 .billing-plan-badge {
2469 display: inline-block;
2470 padding: 0.2rem 0.6rem;
2471 border-radius: 9999px;
2472 font-size: 0.78rem;
2473 font-weight: 700;
2474 letter-spacing: 0.04em;
2475 text-transform: uppercase;
2476 background: color-mix(in srgb, var(--accent) 18%, transparent);
2477 color: var(--accent);
2478 border: 1px solid color-mix(in srgb, var(--accent) 35%, transparent);
2479 }
2480 .billing-plan-badge.tier-free { background: color-mix(in srgb, var(--muted) 12%, transparent); color: var(--muted); border-color: var(--border); }
2481 .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); }
2482 .billing-plan-badge.tier-growth { background: color-mix(in srgb, #a78bfa 18%, transparent); color: #a78bfa; border-color: color-mix(in srgb, #a78bfa 40%, transparent); }
2483 .billing-plan-badge.tier-pro { background: color-mix(in srgb, #fbbf24 18%, transparent); color: #fbbf24; border-color: color-mix(in srgb, #fbbf24 40%, transparent); }
2484 .billing-plan-badge.tier-beta { background: color-mix(in srgb, #6b7280 12%, transparent); color: var(--muted); border-color: var(--border); }
2485
2486 .billing-usage-bar-wrap {
2487 margin: 0.25rem 0 0;
2488 width: 100%;
2489 max-width: 18rem;
2490 }
2491 .billing-usage-bar-track {
2492 height: 6px;
2493 border-radius: 3px;
2494 background: var(--border);
2495 overflow: hidden;
2496 }
2497 .billing-usage-bar-fill {
2498 height: 100%;
2499 border-radius: 3px;
2500 background: var(--accent);
2501 transition: width 0.3s ease;
2502 }
2503 .billing-usage-bar-fill.warn { background: #fbbf24; }
2504 .billing-usage-bar-fill.over { background: #f87171; }
2505 .billing-usage-bar-label {
2506 font-size: 0.78rem;
2507 color: var(--muted);
2508 margin-top: 0.2rem;
2509 }
2510
2511 /* Operation usage rows (searches + index jobs) */
2512 .billing-op-row {
2513 display: flex;
2514 align-items: flex-start;
2515 gap: 0.6rem;
2516 width: 100%;
2517 }
2518 .billing-op-label {
2519 font-size: 0.78rem;
2520 color: var(--muted);
2521 width: 5.5rem;
2522 flex-shrink: 0;
2523 padding-top: 0.05rem;
2524 }
2525
2526 /* Plan comparison grid */
2527 .billing-plan-grid {
2528 display: grid;
2529 grid-template-columns: 1fr 1fr;
2530 gap: 0.5rem;
2531 margin: 0.85rem 0 0;
2532 }
2533 .billing-plan-card {
2534 border: 1px solid var(--border);
2535 border-radius: 8px;
2536 padding: 0.6rem 0.7rem 0.55rem;
2537 display: flex;
2538 flex-direction: column;
2539 gap: 0.35rem;
2540 background: color-mix(in srgb, #fff 4%, var(--surface));
2541 box-shadow: 0 1px 4px rgba(0,0,0,0.35), inset 0 1px 0 rgba(255,255,255,0.04);
2542 transition: border-color 0.15s, box-shadow 0.15s;
2543 }
2544 .billing-plan-card-active {
2545 border-color: var(--accent);
2546 background: color-mix(in srgb, var(--accent) 10%, var(--surface));
2547 box-shadow: 0 0 0 1px var(--accent), 0 2px 6px rgba(0,0,0,0.4);
2548 }
2549 .billing-plan-card-header {
2550 display: flex;
2551 align-items: baseline;
2552 justify-content: space-between;
2553 gap: 0.3rem;
2554 }
2555 .billing-plan-card-name {
2556 font-weight: 700;
2557 font-size: 0.88rem;
2558 }
2559 .billing-plan-card-price {
2560 font-size: 0.78rem;
2561 color: var(--muted);
2562 font-weight: 600;
2563 }
2564 .billing-plan-card-active .billing-plan-card-price { color: var(--accent); }
2565 .billing-plan-card-features {
2566 list-style: none;
2567 margin: 0;
2568 padding: 0;
2569 font-size: 0.75rem;
2570 color: var(--muted);
2571 line-height: 1.55;
2572 }
2573 .billing-plan-card-features li::before {
2574 content: '✓ ';
2575 opacity: 0.55;
2576 }
2577 .billing-plan-card-cta {
2578 margin-top: 0.3rem;
2579 }
2580 .billing-plan-upgrade-btn {
2581 width: 100%;
2582 padding: 0.3rem 0.5rem;
2583 font-size: 0.75rem;
2584 font-weight: 600;
2585 border-radius: 5px;
2586 cursor: pointer;
2587 background: var(--accent);
2588 /* Slightly off-pure-white on accent (matches softened primary text intent) */
2589 color: #f2f2f2;
2590 border: none;
2591 transition: opacity 0.15s;
2592 }
2593 .billing-plan-upgrade-btn:hover { opacity: 0.85; }
2594 .billing-plan-upgrade-btn:disabled { opacity: 0.5; cursor: not-allowed; }
2595 .billing-plan-current-badge {
2596 display: inline-block;
2597 font-size: 0.7rem;
2598 font-weight: 600;
2599 color: var(--accent);
2600 letter-spacing: 0.03em;
2601 text-transform: uppercase;
2602 }
2603
2604 .billing-cta-row {
2605 display: flex;
2606 align-items: center;
2607 gap: 0.75rem;
2608 flex-wrap: wrap;
2609 margin: 1rem 0 0.25rem;
2610 }
2611
2612 .billing-pack-grid {
2613 display: flex;
2614 gap: 0.6rem;
2615 flex-wrap: wrap;
2616 margin: 0.5rem 0 0;
2617 }
2618 .billing-pack-card {
2619 flex: 1 1 7rem;
2620 min-width: 7rem;
2621 max-width: 12rem;
2622 padding: 0.6rem 0.75rem;
2623 border-radius: 8px;
2624 border: 1px solid var(--border);
2625 background: color-mix(in srgb, #fff 4%, var(--surface));
2626 box-shadow: 0 1px 4px rgba(0,0,0,0.35), inset 0 1px 0 rgba(255,255,255,0.04);
2627 transition: border-color 0.15s, box-shadow 0.15s, background 0.15s;
2628 background: var(--surface);
2629 cursor: pointer;
2630 transition: border-color 0.15s, background 0.15s;
2631 text-align: left;
2632 }
2633 .billing-pack-card:hover,
2634 .billing-pack-card:focus {
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 outline: none;
2639 }
2640 .billing-pack-card:disabled {
2641 opacity: 0.45;
2642 cursor: not-allowed;
2643 }
2644 .billing-pack-name { font-weight: 600; font-size: 0.88rem; margin-bottom: 0.3rem; }
2645 .billing-pack-price { font-size: 1.05rem; font-weight: 700; color: var(--accent); margin-bottom: 0.2rem; }
2646 .billing-pack-tokens { font-size: 0.78rem; color: var(--muted); }
2647 .billing-pack-equiv { font-size: 0.7rem; color: var(--muted); opacity: 0.7; margin-top: 0.15rem; }
2648
2649 .billing-bornfree-blurb {
2650 font-size: 0.8rem;
2651 color: var(--muted);
2652 margin-top: 0.75rem;
2653 }
2654 .billing-bornfree-blurb a { color: var(--accent); text-decoration: none; }
2655 .billing-bornfree-blurb a:hover { text-decoration: underline; }
2656
2657 /* Phase 18: Media toolbar + paste-URL dialog */
2658 .media-toolbar {
2659 display: flex;
2660 gap: 0.5rem;
2661 margin-top: 0.35rem;
2662 margin-bottom: 0.25rem;
2663 }
2664 .media-toolbar .btn-small {
2665 font-size: 0.75rem;
2666 padding: 0.25rem 0.6rem;
2667 border: 1px solid color-mix(in srgb, var(--border) 60%, var(--text));
2668 border-radius: 4px;
2669 background: var(--surface);
2670 color: var(--text);
2671 cursor: pointer;
2672 }
2673 .media-toolbar .btn-small:hover {
2674 border-color: var(--accent);
2675 background: color-mix(in srgb, var(--accent) 10%, var(--surface));
2676 }
2677 .media-toolbar-hint {
2678 font-size: 0.72rem;
2679 color: var(--text-muted, color-mix(in srgb, var(--text) 55%, transparent));
2680 align-self: center;
2681 cursor: help;
2682 border-bottom: 1px dashed currentColor;
2683 }
2684 .media-url-dialog {
2685 background: var(--surface);
2686 border: 1px solid var(--border);
2687 border-radius: 6px;
2688 padding: 0.75rem;
2689 margin-top: 0.25rem;
2690 max-width: 450px;
2691 }
2692 .media-url-input {
2693 width: 100%;
2694 padding: 0.4rem 0.5rem;
2695 font-size: 0.82rem;
2696 border: 1px solid var(--border);
2697 border-radius: 4px;
2698 background: var(--bg);
2699 color: var(--text);
2700 box-sizing: border-box;
2701 }
2702 .media-url-input:focus {
2703 border-color: var(--accent);
2704 outline: none;
2705 }
2706 .media-preview {
2707 margin-top: 0.5rem;
2708 min-height: 1rem;
2709 }
2710 .media-preview img,
2711 .media-preview video {
2712 max-height: 200px;
2713 max-width: 100%;
2714 border-radius: 4px;
2715 object-fit: contain;
2716 }
2717 .media-url-actions {
2718 display: flex;
2719 gap: 0.5rem;
2720 margin-top: 0.5rem;
2721 }
2722 .note-rendered-body video {
2723 max-width: 100%;
2724 border-radius: 6px;
2725 margin: 0.5rem 0;
2726 }
2727
2728 /* ── Consolidation UI (Stream 2) ──────────────────────────────── */
2729 .consol-radio-group {
2730 display: flex;
2731 flex-wrap: wrap;
2732 gap: 0.35rem 1rem;
2733 }
2734 .consol-mode-section {
2735 padding-top: 0.25rem;
2736 }
2737 .consol-dashboard-card {
2738 margin-bottom: 1rem;
2739 padding: 1rem;
2740 border-radius: 8px;
2741 border: 1px solid var(--border);
2742 background: var(--surface);
2743 }
2744 .consol-card-header {
2745 display: flex;
2746 justify-content: space-between;
2747 align-items: center;
2748 gap: 0.5rem;
2749 margin-bottom: 0.65rem;
2750 }
2751 .consol-card-body {
2752 display: flex;
2753 flex-direction: column;
2754 gap: 0.3rem;
2755 margin-bottom: 0.75rem;
2756 }
2757 .consol-card-actions {
2758 display: flex;
2759 flex-wrap: wrap;
2760 gap: 0.5rem;
2761 }
2762 .consol-badge {
2763 font-size: 0.75rem;
2764 font-weight: 600;
2765 padding: 0.15rem 0.5rem;
2766 border-radius: 999px;
2767 white-space: nowrap;
2768 }
2769 .consol-badge-success { background: color-mix(in srgb, #22c55e 18%, transparent); color: #22c55e; }
2770 .consol-badge-warning { background: color-mix(in srgb, #fbbf24 18%, transparent); color: #fbbf24; }
2771 .consol-badge-neutral { background: color-mix(in srgb, var(--muted) 12%, transparent); color: var(--muted); }
2772 .consol-badge-error { background: color-mix(in srgb, #f87171 18%, transparent); color: #f87171; }
2773 .consol-cost-meter {
2774 margin-top: 0.25rem;
2775 display: flex;
2776 flex-direction: column;
2777 gap: 0.15rem;
2778 }
2779 .consol-history-table {
2780 width: 100%;
2781 border-collapse: collapse;
2782 font-size: 0.85rem;
2783 margin-top: 0.5rem;
2784 }
2785 .consol-history-table th,
2786 .consol-history-table td {
2787 padding: 0.4rem 0.6rem;
2788 border: 1px solid var(--border);
2789 text-align: left;
2790 vertical-align: top;
2791 }
2792 .consol-history-table th {
2793 background: var(--bg);
2794 color: var(--muted);
2795 font-weight: 600;
2796 font-size: 0.78rem;
2797 }
2798 .consol-history-modal {
2799 max-width: 720px;
2800 width: 92%;
2801 max-height: 80vh;
2802 overflow: auto;
2803 }
2804
2805 /* ── Integrations tab: section headings with icons ─────────── */
2806 .integ-section-heading {
2807 display: flex;
2808 align-items: center;
2809 gap: 0.5rem;
2810 margin: 0 0 0.5rem;
2811 font-size: 1rem;
2812 }
2813 .integ-section-icon {
2814 display: inline-flex;
2815 align-items: center;
2816 justify-content: center;
2817 width: 1.5rem;
2818 height: 1.5rem;
2819 flex-shrink: 0;
2820 }
2821 .integ-section-icon svg {
2822 display: block;
2823 width: 100%;
2824 height: 100%;
2825 }
2826
2827 /* Status dot (green = active, gray = inactive) */
2828 .integ-status-dot {
2829 display: inline-block;
2830 width: 0.5rem;
2831 height: 0.5rem;
2832 border-radius: 50%;
2833 background: var(--muted);
2834 flex-shrink: 0;
2835 margin-left: 0.25rem;
2836 }
2837 .integ-status-dot.active {
2838 background: #22c55e;
2839 box-shadow: 0 0 4px rgba(34, 197, 94, 0.5);
2840 }
2841
2842 /* ── Integrations: source tile grid ────────────────────────── */
2843 .integ-source-grid {
2844 display: grid;
2845 grid-template-columns: repeat(auto-fill, minmax(9.5rem, 1fr));
2846 gap: 0.55rem;
2847 margin: 0.65rem 0 0.25rem;
2848 }
2849 .integ-source-tile {
2850 display: flex;
2851 flex-direction: column;
2852 align-items: center;
2853 gap: 0.3rem;
2854 padding: 0.65rem 0.5rem 0.55rem;
2855 border-radius: 8px;
2856 border: 1px solid var(--border);
2857 background: var(--surface);
2858 text-align: center;
2859 transition: border-color 0.15s, background 0.15s;
2860 }
2861 .integ-source-tile:hover {
2862 border-color: var(--accent);
2863 background: color-mix(in srgb, var(--accent) 6%, var(--surface));
2864 }
2865 .integ-source-tile-icon {
2866 font-size: 1.5rem;
2867 line-height: 1;
2868 }
2869 .integ-source-tile-name {
2870 font-size: 0.8rem;
2871 font-weight: 600;
2872 color: var(--text);
2873 line-height: 1.2;
2874 }
2875 .integ-source-tile-desc {
2876 font-size: 0.68rem;
2877 color: var(--muted);
2878 line-height: 1.3;
2879 }
2880
2881 /* Capture tiles are wider (fewer per row) for the extra CLI hint */
2882 .integ-capture-grid {
2883 grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr));
2884 }
2885
2886 @media (max-width: 480px) {
2887 .integ-source-grid {
2888 grid-template-columns: repeat(auto-fill, minmax(7.5rem, 1fr));
2889 }
2890 }
2891
2892 /* Onboarding wizard */
2893 .import-aux-btns {
2894 display: flex;
2895 flex-wrap: wrap;
2896 align-items: center;
2897 gap: 0.5rem;
2898 margin: 0.4rem 0 0.35rem 0;
2899 }
2900
2901 .import-drop-zone {
2902 border: 2px dashed var(--border, rgba(255, 255, 255, 0.22));
2903 border-radius: 8px;
2904 padding: 0.85rem 1rem;
2905 margin: 0.5rem 0 0.75rem 0;
2906 background: var(--surface-elevated, rgba(255, 255, 255, 0.03));
2907 transition: border-color 0.15s ease, background 0.15s ease;
2908 }
2909
2910 .import-drop-zone.import-drop-zone--over {
2911 border-color: var(--accent, #89cff0);
2912 background: var(--surface-elevated, rgba(137, 207, 240, 0.08));
2913 }
2914
2915 .import-drop-zone:focus-visible {
2916 outline: 2px solid var(--accent, #89cff0);
2917 outline-offset: 2px;
2918 }
2919
2920 .import-drop-zone .import-drop-zone-text {
2921 margin: 0;
2922 font-size: 0.9rem;
2923 line-height: 1.35;
2924 }
2925
2926 .import-drop-status {
2927 margin: 0.4rem 0 0 0;
2928 }
2929
2930 .sr-only {
2931 position: absolute;
2932 width: 1px;
2933 height: 1px;
2934 padding: 0;
2935 margin: -1px;
2936 overflow: hidden;
2937 clip: rect(0, 0, 0, 0);
2938 white-space: nowrap;
2939 border: 0;
2940 }
2941 .modal-onboarding-card {
2942 max-width: 38rem;
2943 width: calc(100% - 2rem);
2944 }
2945 .onboarding-step-body {
2946 padding: 0 1.25rem 0.75rem;
2947 line-height: 1.55;
2948 color: var(--text);
2949 max-height: min(58vh, 28rem);
2950 overflow-y: auto;
2951 }
2952 .onboarding-token-line {
2953 font-size: 0.92rem;
2954 border-left: 3px solid var(--accent-dim, color-mix(in srgb, var(--accent) 35%, transparent));
2955 padding-left: 0.65rem;
2956 margin-left: 0.1rem;
2957 }
2958 .onboarding-path-grid {
2959 display: grid;
2960 grid-template-columns: 1fr 1fr;
2961 gap: 0.75rem;
2962 margin: 0.5rem 0 0.25rem;
2963 }
2964 @media (max-width: 520px) {
2965 .onboarding-path-grid {
2966 grid-template-columns: 1fr;
2967 }
2968 }
2969 .onboarding-path-card {
2970 border: 1px solid var(--border);
2971 border-radius: var(--radius, 8px);
2972 padding: 0.65rem 0.75rem;
2973 background: color-mix(in srgb, var(--surface) 88%, var(--border));
2974 }
2975 .onboarding-path-card-title {
2976 margin: 0 0 0.35rem;
2977 font-size: 0.95rem;
2978 color: var(--text);
2979 }
2980 .onboarding-path-card-body {
2981 margin: 0;
2982 font-size: 0.88rem;
2983 color: var(--muted);
2984 line-height: 1.45;
2985 }
2986 ul.onboarding-import-cards {
2987 margin: 0.35rem 0 0.75rem;
2988 padding-left: 1.15rem;
2989 line-height: 1.45;
2990 }
2991 ul.onboarding-import-cards li {
2992 margin-bottom: 0.4rem;
2993 }
2994 .onboarding-llm-prompt {
2995 width: 100%;
2996 box-sizing: border-box;
2997 font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
2998 font-size: 0.78rem;
2999 line-height: 1.4;
3000 margin: 0.35rem 0 0;
3001 padding: 0.5rem 0.55rem;
3002 border-radius: 6px;
3003 border: 1px solid var(--border);
3004 background: var(--surface);
3005 color: var(--text);
3006 resize: vertical;
3007 min-height: 7rem;
3008 }
3009 .onboarding-copy-row {
3010 margin: 0.5rem 0 0;
3011 }
3012
3013 .onboarding-step-body .how-to-details {
3014 margin-top: 0.65rem;
3015 }
3016
3017 /* Proposal list empty states (Suggested / Activity) */
3018 .empty-state-suggested-actions,
3019 .empty-state-activity-actions {
3020 margin: 0.75rem 0 0;
3021 }
3022
3023 /* Empty vault reminder when onboarding was skipped (Skip for now) */
3024 .hub-empty-vault-strip {
3025 margin: 0 0 0.75rem;
3026 padding: 0 0.5rem;
3027 }
3028 .hub-empty-vault-strip-inner {
3029 max-width: 56rem;
3030 margin: 0 auto;
3031 padding: 0.85rem 1rem 1rem;
3032 border: 1px solid color-mix(in srgb, var(--accent) 22%, var(--border));
3033 border-radius: var(--radius, 8px);
3034 background: linear-gradient(135deg, color-mix(in srgb, var(--accent) 8%, var(--surface)) 0%, var(--surface) 100%);
3035 }
3036 .hub-empty-vault-strip-lede {
3037 margin: 0 0 0.6rem;
3038 font-size: 0.92rem;
3039 color: var(--text);
3040 line-height: 1.45;
3041 }
3042 .hub-empty-vault-steps {
3043 list-style: none;
3044 margin: 0 0 0.75rem;
3045 padding: 0;
3046 display: grid;
3047 gap: 0.45rem;
3048 }
3049 .hub-empty-vault-steps li {
3050 display: flex;
3051 align-items: flex-start;
3052 gap: 0.5rem;
3053 font-size: 0.86rem;
3054 color: var(--muted);
3055 line-height: 1.45;
3056 }
3057 .hub-empty-vault-num {
3058 flex-shrink: 0;
3059 width: 1.5rem;
3060 height: 1.5rem;
3061 border-radius: 999px;
3062 display: inline-flex;
3063 align-items: center;
3064 justify-content: center;
3065 font-weight: 700;
3066 font-size: 0.85rem;
3067 color: var(--accent);
3068 background: color-mix(in srgb, var(--accent) 15%, transparent);
3069 }
3070 .hub-empty-vault-step-body strong {
3071 color: var(--text);
3072 }
3073 .hub-empty-vault-actions {
3074 display: flex;
3075 flex-wrap: wrap;
3076 gap: 0.5rem;
3077 align-items: center;
3078 }
3079 .onboarding-step-body p {
3080 margin: 0 0 0.75rem 0;
3081 }
3082 .onboarding-step-body p:last-child {
3083 margin-bottom: 0;
3084 }
3085 .onboarding-tip {
3086 font-size: 0.9rem;
3087 color: var(--muted);
3088 }
3089 .onboarding-progress {
3090 display: flex;
3091 gap: 0.35rem;
3092 flex-wrap: wrap;
3093 padding: 0.25rem 1.25rem 0.75rem;
3094 justify-content: center;
3095 }
3096 .onboarding-dot {
3097 width: 0.5rem;
3098 height: 0.5rem;
3099 border-radius: 999px;
3100 background: var(--border);
3101 }
3102 .onboarding-dot.onboarding-dot-active {
3103 background: var(--accent);
3104 box-shadow: 0 0 0 2px var(--accent-dim);
3105 }
3106 .onboarding-secondary-actions {
3107 display: flex;
3108 flex-wrap: wrap;
3109 gap: 0.5rem 0.75rem;
3110 padding: 0 1.25rem 0.75rem;
3111 }
3112 .onboarding-footer {
3113 display: flex;
3114 flex-wrap: wrap;
3115 align-items: center;
3116 justify-content: space-between;
3117 gap: 0.75rem;
3118 padding: 0.75rem 1.25rem 0.5rem;
3119 border-top: 1px solid var(--border);
3120 }
3121 .onboarding-nav {
3122 display: flex;
3123 gap: 0.5rem;
3124 }
3125 .onboarding-resume-hint {
3126 padding: 0 1.25rem 1rem;
3127 margin: 0;
3128 line-height: 1.4;
3129 }
3130 @media (prefers-reduced-motion: reduce) {
3131 .onboarding-dot.onboarding-dot-active {
3132 box-shadow: none;
3133 }
3134 }
File History 1 commit