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