aimeat 1.23.2 → 1.23.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/locales/en.json +536 -21
- package/dist/locales/fi.json +548 -33
- package/dist/public/components/ContactCard.js +28 -0
- package/dist/public/css/views/admin.css +12 -0
- package/dist/public/css/views/agents-detail.css +62 -10
- package/dist/public/css/views/landing.css +87 -0
- package/dist/public/css/views/offers.css +96 -0
- package/dist/public/css/views/portfolio.css +18 -0
- package/dist/public/css/views/profile.css +153 -8
- package/dist/public/css/views/start.css +96 -0
- package/dist/public/img/business-hero.png +0 -0
- package/dist/public/img/toimitus.png +0 -0
- package/dist/public/js/components/tag-cloud.js +46 -31
- package/dist/public/js/components/tag-editor.js +2 -2
- package/dist/public/js/recents.js +40 -0
- package/dist/public/js/services/admin.js +6 -0
- package/dist/public/js/services/agents.js +34 -0
- package/dist/public/js/services/offers.js +152 -0
- package/dist/public/js/services/packages.js +1 -0
- package/dist/public/spa.html +32 -2
- package/dist/public/views/admin/subdomains-tab.js +182 -0
- package/dist/public/views/admin.js +2 -0
- package/dist/public/views/business.js +119 -0
- package/dist/public/views/how-it-works.js +159 -0
- package/dist/public/views/landing.js +235 -0
- package/dist/public/views/portfolio.js +120 -23
- package/dist/public/views/pricing.js +75 -0
- package/dist/public/views/profile/access-tab.js +124 -51
- package/dist/public/views/profile/agents/agent-card.js +68 -37
- package/dist/public/views/profile/agents/shared-board.js +56 -22
- package/dist/public/views/profile/agents/tab-activity.js +24 -12
- package/dist/public/views/profile/agents/tab-agent-config.js +31 -1
- package/dist/public/views/profile/agents/tab-data-access.js +9 -13
- package/dist/public/views/profile/agents/tab-integration.js +27 -1
- package/dist/public/views/profile/agents/tab-messages.js +6 -11
- package/dist/public/views/profile/agents/tab-quality.js +45 -5
- package/dist/public/views/profile/agents-tab.js +41 -6
- package/dist/public/views/profile/apps-tab.js +7 -1
- package/dist/public/views/profile/knowledge-tab.js +4 -1
- package/dist/public/views/profile/landing-page.js +427 -123
- package/dist/public/views/profile/memory-tab.js +409 -211
- package/dist/public/views/profile/nodes-tab.js +18 -3
- package/dist/public/views/profile/offers-tab.js +310 -0
- package/dist/public/views/profile/organisms-tab.js +289 -28
- package/dist/public/views/profile/packages-tab.js +152 -16
- package/dist/public/views/profile/portfolio-tab.js +98 -31
- package/dist/public/views/profile.js +2 -0
- package/dist/public/views/start-flows.js +281 -0
- package/dist/public/views/start.js +258 -0
- package/dist/src/generated/api-types.d.ts +856 -17
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/generated/prisma-postgres/edge.js +15 -3
- package/dist/src/generated/prisma-postgres/index-browser.js +12 -0
- package/dist/src/generated/prisma-postgres/index.d.ts +1476 -160
- package/dist/src/generated/prisma-postgres/index.js +15 -3
- package/dist/src/generated/prisma-postgres/package.json +1 -1
- package/dist/src/generated/prisma-postgres/schema.prisma +11 -0
- package/dist/src/generated/prisma-postgres/wasm.js +15 -3
- package/dist/src/middleware/subdomain.d.ts +28 -0
- package/dist/src/middleware/subdomain.d.ts.map +1 -0
- package/dist/src/middleware/subdomain.js +32 -0
- package/dist/src/middleware/subdomain.js.map +1 -0
- package/dist/src/models/offer-schemas.d.ts +229 -0
- package/dist/src/models/offer-schemas.d.ts.map +1 -0
- package/dist/src/models/offer-schemas.js +100 -0
- package/dist/src/models/offer-schemas.js.map +1 -0
- package/dist/src/routes/agent-tasks.d.ts.map +1 -1
- package/dist/src/routes/agent-tasks.js +33 -0
- package/dist/src/routes/agent-tasks.js.map +1 -1
- package/dist/src/routes/agents.d.ts.map +1 -1
- package/dist/src/routes/agents.js +146 -1
- package/dist/src/routes/agents.js.map +1 -1
- package/dist/src/routes/apps-backup.d.ts +20 -0
- package/dist/src/routes/apps-backup.d.ts.map +1 -0
- package/dist/src/routes/apps-backup.js +165 -0
- package/dist/src/routes/apps-backup.js.map +1 -0
- package/dist/src/routes/ghii.d.ts.map +1 -1
- package/dist/src/routes/ghii.js +4 -0
- package/dist/src/routes/ghii.js.map +1 -1
- package/dist/src/routes/instances.d.ts +2 -1
- package/dist/src/routes/instances.d.ts.map +1 -1
- package/dist/src/routes/instances.js +59 -1
- package/dist/src/routes/instances.js.map +1 -1
- package/dist/src/routes/packages.d.ts.map +1 -1
- package/dist/src/routes/packages.js +32 -0
- package/dist/src/routes/packages.js.map +1 -1
- package/dist/src/routes/permissions.d.ts +12 -0
- package/dist/src/routes/permissions.d.ts.map +1 -1
- package/dist/src/routes/permissions.js +35 -3
- package/dist/src/routes/permissions.js.map +1 -1
- package/dist/src/routes/portal.d.ts +3 -0
- package/dist/src/routes/portal.d.ts.map +1 -1
- package/dist/src/routes/portal.js +12 -0
- package/dist/src/routes/portal.js.map +1 -1
- package/dist/src/routes/public-stats.d.ts +15 -0
- package/dist/src/routes/public-stats.d.ts.map +1 -0
- package/dist/src/routes/public-stats.js +90 -0
- package/dist/src/routes/public-stats.js.map +1 -0
- package/dist/src/routes/sse.d.ts +7 -2
- package/dist/src/routes/sse.d.ts.map +1 -1
- package/dist/src/routes/sse.js +35 -5
- package/dist/src/routes/sse.js.map +1 -1
- package/dist/src/routes/subdomains.d.ts +33 -0
- package/dist/src/routes/subdomains.d.ts.map +1 -0
- package/dist/src/routes/subdomains.js +208 -0
- package/dist/src/routes/subdomains.js.map +1 -0
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +12 -1
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +4 -0
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/apps-backup-export.d.ts +22 -0
- package/dist/src/services/apps-backup-export.d.ts.map +1 -0
- package/dist/src/services/apps-backup-export.js +136 -0
- package/dist/src/services/apps-backup-export.js.map +1 -0
- package/dist/src/services/apps-backup-import.d.ts +120 -0
- package/dist/src/services/apps-backup-import.d.ts.map +1 -0
- package/dist/src/services/apps-backup-import.js +259 -0
- package/dist/src/services/apps-backup-import.js.map +1 -0
- package/dist/src/services/component-registrar.d.ts +17 -0
- package/dist/src/services/component-registrar.d.ts.map +1 -1
- package/dist/src/services/component-registrar.js +63 -5
- package/dist/src/services/component-registrar.js.map +1 -1
- package/dist/src/services/handbooks/appdev.d.ts +1 -1
- package/dist/src/services/handbooks/appdev.d.ts.map +1 -1
- package/dist/src/services/handbooks/appdev.js +5 -2
- package/dist/src/services/handbooks/appdev.js.map +1 -1
- package/dist/src/storage/interface.d.ts +11 -1
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/interface.js.map +1 -1
- package/dist/src/storage/providers/mongodb/index.d.ts +10 -1
- package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.js +76 -0
- package/dist/src/storage/providers/mongodb/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/index.d.ts +8 -1
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +61 -0
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +11 -0
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/index.d.ts +1 -0
- package/dist/src/storage/repositories/index.d.ts.map +1 -1
- package/dist/src/storage/repositories/package.repository.d.ts +2 -0
- package/dist/src/storage/repositories/package.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/subdomain-site.repository.d.ts +19 -0
- package/dist/src/storage/repositories/subdomain-site.repository.d.ts.map +1 -0
- package/dist/src/storage/repositories/subdomain-site.repository.js +2 -0
- package/dist/src/storage/repositories/subdomain-site.repository.js.map +1 -0
- package/dist/static/app-catalog.html +1139 -28
- package/package.json +1 -1
- package/prisma/schema.postgres.prisma +11 -0
- package/prisma/schema.prisma +11 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file ContactCard.js
|
|
3
|
+
* @description Shared "Talk to a human" contact card — used on /v1/business and
|
|
4
|
+
* /v1/pricing ONLY (one implementation, no copied text). tel: + mailto: links.
|
|
5
|
+
* @usage import { ContactCard } from '/components/ContactCard.js';
|
|
6
|
+
* @version-history
|
|
7
|
+
* v1.0.0 — 2026-06-10 — Initial (owner spec: human card).
|
|
8
|
+
*/
|
|
9
|
+
import { h } from 'preact';
|
|
10
|
+
import htm from 'htm';
|
|
11
|
+
const html = htm.bind(h);
|
|
12
|
+
import { t } from '/js/i18n.js';
|
|
13
|
+
|
|
14
|
+
const tr = (key, fallback) => { const v = t(key); return v && v !== key ? v : fallback; };
|
|
15
|
+
|
|
16
|
+
export function ContactCard() {
|
|
17
|
+
return html`
|
|
18
|
+
<div class="ld-contact">
|
|
19
|
+
<div class="ld-contact-title">${tr('contact.title', 'Talk to a human.')}</div>
|
|
20
|
+
<div class="ld-contact-name">Jouni Miikki, founder</div>
|
|
21
|
+
<div class="ld-contact-links">
|
|
22
|
+
<a href="tel:+358408231070">+358 40 8231070</a>
|
|
23
|
+
<a href="mailto:jouni.miikki@aimeat.io">jouni.miikki@aimeat.io</a>
|
|
24
|
+
</div>
|
|
25
|
+
<div class="ld-contact-sub">${tr('contact.sub', 'I answer myself. A demo fits in the same call.')}</div>
|
|
26
|
+
</div>
|
|
27
|
+
`;
|
|
28
|
+
}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* its distinct indigo accent and a permanently-dark sidebar, but all content
|
|
5
5
|
* surfaces map to global theme.css tokens so they flip with dark/light mode.
|
|
6
6
|
* @version-history
|
|
7
|
+
* v1.6.0 — 2026-06-12 — Subdomains tab: .adm-subdomain-form create-form grid
|
|
8
|
+
* + .adm-subdomain-modal-actions (right-aligned type-to-confirm buttons).
|
|
7
9
|
* v1.5.0 — 2026-06-02 — Component unification (#13 tables): strip the dead
|
|
8
10
|
* `, #E5E7EB` hardcoded fallback from `.adm-breakdown-table th` border
|
|
9
11
|
* (.adm always maps --glass-border → --border, so the fallback was dead
|
|
@@ -577,6 +579,16 @@
|
|
|
577
579
|
/* Subtabs row */
|
|
578
580
|
.adm-subtabs { display: flex; gap: 8px; margin: 16px 0; flex-wrap: wrap; }
|
|
579
581
|
|
|
582
|
+
/* Subdomains tab — create-form row: subdomain | kind | target (grows) | button */
|
|
583
|
+
.adm-subdomain-form {
|
|
584
|
+
display: grid;
|
|
585
|
+
grid-template-columns: minmax(120px, 200px) minmax(100px, 140px) 1fr auto;
|
|
586
|
+
gap: 8px;
|
|
587
|
+
align-items: center;
|
|
588
|
+
}
|
|
589
|
+
.adm-subdomain-form .adm-text-error { grid-column: 1 / -1; }
|
|
590
|
+
.adm-subdomain-modal-actions { justify-content: flex-end; }
|
|
591
|
+
|
|
580
592
|
/* Active subtab button */
|
|
581
593
|
.adm-btn-active,
|
|
582
594
|
.adm-btn-active:hover { background: var(--accent); color: #fff; }
|
|
@@ -18,8 +18,11 @@
|
|
|
18
18
|
* (var(--text-dim, #6B7280) -> var(--text-dim); var(--text, #1A1A2E) ->
|
|
19
19
|
* var(--text)) so the agent-detail info rows flip in dark mode. Markup left
|
|
20
20
|
* in place (borderless look differs from canonical .kv-row).
|
|
21
|
-
* v1.7.0 -- 2026-06-02 -- Component unification (#6 stat cards): remove .agd-stat
|
|
22
|
-
* .pf-agd-stat
|
|
21
|
+
* v1.7.0 -- 2026-06-02 -- Component unification (#6 stat cards): remove .agd-stat- and
|
|
22
|
+
* .pf-agd-stat- prefixed rules; agent activity/quality stats use canonical .stat-card
|
|
23
|
+
* family. (NB: the original entry ended in "star-slash" which TERMINATED this comment
|
|
24
|
+
* block early and made the parser eat the next rule — keep raw selector globs out of
|
|
25
|
+
* comments.)
|
|
23
26
|
* v1.0.0 -- 2026-05-21 -- Initial creation for Agent Dashboard Phase 1
|
|
24
27
|
* v1.1.0 -- 2026-05-22 -- Add capability badge styles for Capabilities sub-tab
|
|
25
28
|
* v1.2.0 -- 2026-05-22 -- Add Activity sub-tab styles (stats cards, chart, jobs, event log)
|
|
@@ -59,14 +62,35 @@
|
|
|
59
62
|
* v2.13.0 -- 2026-05-31 -- Add per-task blur-title toggle styles (pf-agd-blur-toggle, pf-agd-task-title--blurred) for hiding sensitive titles in screen recordings
|
|
60
63
|
* v2.26.0 -- 2026-06-09 -- Add custom agent-group styles (pf-agd-cgroup-bar/header/toggle/name/empty) for the drag-to-assign "Custom groups" list mode
|
|
61
64
|
* v2.27.0 -- 2026-06-09 -- Add editable tag-strip styles (pf-agd-tag-chip--editable, pf-agd-tag-chip-remove, pf-agd-tag-add-btn/input) for inline tag add/remove in the expanded card header
|
|
65
|
+
* v2.28.0 -- 2026-06-10 -- Detail-tab stat cards: content-sized + centered as a group
|
|
66
|
+
* (labels like "Onnistumisprosentti" no longer overflow); header-row gains bottom
|
|
67
|
+
* margin so the connect button isn't flush against the description text.
|
|
62
68
|
*/
|
|
63
69
|
|
|
64
|
-
/* Header row: title left, connect button right
|
|
70
|
+
/* Header row: title left, connect button right. The bottom margin keeps the
|
|
71
|
+
connect button from sitting flush against the description text below. */
|
|
65
72
|
.pf-agd-header-row {
|
|
66
73
|
display: flex;
|
|
67
74
|
align-items: center;
|
|
68
75
|
justify-content: space-between;
|
|
69
76
|
gap: 1rem;
|
|
77
|
+
margin-bottom: 0.65rem;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* Stat cards inside agent detail tabs (Activity, Quality): size each card to its
|
|
81
|
+
content so long uppercase labels ("Onnistumisprosentti") fit, and center the
|
|
82
|
+
group instead of left-stacking it. */
|
|
83
|
+
.pf .pf-agd-tab-content .stat-grid {
|
|
84
|
+
display: flex;
|
|
85
|
+
flex-wrap: wrap;
|
|
86
|
+
justify-content: center;
|
|
87
|
+
gap: 12px;
|
|
88
|
+
margin-bottom: 1.25rem;
|
|
89
|
+
}
|
|
90
|
+
.pf .pf-agd-tab-content .stat-card {
|
|
91
|
+
flex: 0 1 auto;
|
|
92
|
+
min-width: 170px;
|
|
93
|
+
padding: 14px 26px;
|
|
70
94
|
}
|
|
71
95
|
|
|
72
96
|
/* Sub-tab bar */
|
|
@@ -1925,9 +1949,9 @@
|
|
|
1925
1949
|
}
|
|
1926
1950
|
|
|
1927
1951
|
/* ── Unseen-change badges ──
|
|
1928
|
-
Collapsed-card mini-badge
|
|
1929
|
-
|
|
1930
|
-
|
|
1952
|
+
Collapsed-card mini-badge + per-tab number badges (Tasks/Messages only). Neutral
|
|
1953
|
+
gray by default — red is reserved for unseen FAILED tasks, so a real alarm never
|
|
1954
|
+
drowns in routine counts. Counts come from the localStorage last-seen baseline. */
|
|
1931
1955
|
.pf .pf-agd-change-badge {
|
|
1932
1956
|
display: inline-flex;
|
|
1933
1957
|
align-items: center;
|
|
@@ -1937,13 +1961,19 @@
|
|
|
1937
1961
|
padding: 0 5px;
|
|
1938
1962
|
margin-left: 6px;
|
|
1939
1963
|
border-radius: 9px;
|
|
1940
|
-
background: var(--
|
|
1941
|
-
color: #
|
|
1964
|
+
background: var(--bg-dim, #F3F4F6);
|
|
1965
|
+
color: var(--text-dim, #4B5563);
|
|
1966
|
+
border: 1px solid var(--border, #E5E7EB);
|
|
1942
1967
|
font-size: 0.68rem;
|
|
1943
1968
|
font-weight: 700;
|
|
1944
1969
|
line-height: 1;
|
|
1945
1970
|
flex-shrink: 0;
|
|
1946
1971
|
}
|
|
1972
|
+
.pf .pf-agd-change-badge--failed {
|
|
1973
|
+
background: var(--danger-bg, #FEE2E2);
|
|
1974
|
+
color: var(--danger-fg, #DC2626);
|
|
1975
|
+
border-color: var(--danger-border, #FECACA);
|
|
1976
|
+
}
|
|
1947
1977
|
.pf .pf-agd-tab {
|
|
1948
1978
|
/* allow the inline count badge to sit beside the label */
|
|
1949
1979
|
display: inline-flex;
|
|
@@ -1958,12 +1988,34 @@
|
|
|
1958
1988
|
height: 16px;
|
|
1959
1989
|
padding: 0 4px;
|
|
1960
1990
|
border-radius: 8px;
|
|
1961
|
-
background: var(--
|
|
1962
|
-
color: #
|
|
1991
|
+
background: var(--bg-dim, #F3F4F6);
|
|
1992
|
+
color: var(--text-dim, #4B5563);
|
|
1993
|
+
border: 1px solid var(--border, #E5E7EB);
|
|
1963
1994
|
font-size: 0.62rem;
|
|
1964
1995
|
font-weight: 700;
|
|
1965
1996
|
line-height: 1;
|
|
1966
1997
|
}
|
|
1998
|
+
.pf .pf-agd-tab-badge--failed {
|
|
1999
|
+
background: var(--danger-bg, #FEE2E2);
|
|
2000
|
+
color: var(--danger-fg, #DC2626);
|
|
2001
|
+
border-color: var(--danger-border, #FECACA);
|
|
2002
|
+
}
|
|
2003
|
+
|
|
2004
|
+
/* ── Board legend (filter pills), capability summary, inline misc (2026-06-10 round) ── */
|
|
2005
|
+
.pf .pf-agd-board-legend { display: flex; gap: 0.4rem; flex-wrap: wrap; margin-bottom: 0.6rem; }
|
|
2006
|
+
.pf .pf-agd-legend-pill { display: inline-flex; align-items: center; gap: 0.35rem; background: var(--control-bg, var(--card)); border: 1px solid var(--control-border, var(--border)); border-radius: 999px; padding: 0.2rem 0.6rem; font-size: 0.76rem; color: var(--text-dim); cursor: pointer; }
|
|
2007
|
+
.pf .pf-agd-legend-pill:disabled { opacity: 0.45; cursor: default; }
|
|
2008
|
+
.pf .pf-agd-legend-pill--active { border-color: var(--accent); color: var(--text); }
|
|
2009
|
+
.pf .pf-agd-legend-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
|
|
2010
|
+
.pf .pf-agd-legend-count { color: var(--muted); }
|
|
2011
|
+
.pf .pf-agd-cap-summary { background: none; border: none; padding: 0.15rem 0; font-size: 0.78rem; color: var(--text-dim); cursor: pointer; }
|
|
2012
|
+
.pf .pf-agd-cap-summary:hover { color: var(--text); }
|
|
2013
|
+
.pf .pf-agd-none-inline { font-size: 0.78rem; color: var(--muted); margin: 0 auto 0 0.5rem; }
|
|
2014
|
+
.pf .pf-agd-inline-stars { display: inline-flex; gap: 1px; }
|
|
2015
|
+
.pf .pf-agd-inline-star { background: none; border: none; cursor: pointer; font-size: 1rem; color: var(--border); padding: 0 1px; line-height: 1; }
|
|
2016
|
+
.pf .pf-agd-inline-star--hot, .pf .pf-agd-inline-star:hover { color: var(--warn, #F59E0B); }
|
|
2017
|
+
.pf .pf-agd-quality-pending-when { font-size: 0.74rem; color: var(--muted); white-space: nowrap; }
|
|
2018
|
+
.pf .pf-agd-commands--empty { display: flex; align-items: center; gap: 0.5rem; padding: 0.35rem 0.6rem; font-size: 0.82rem; color: var(--text-dim); }
|
|
1967
2019
|
|
|
1968
2020
|
/* ── README tab (rendered from agents.<name>.readme markdown) ── */
|
|
1969
2021
|
.pf .pf-agd-readme {
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file landing.css
|
|
3
|
+
* @description Logged-out landing + pricing pages (ld- prefix). Theme tokens only;
|
|
4
|
+
* path cards stack on mobile, ticker truncates to one line.
|
|
5
|
+
* @version-history
|
|
6
|
+
* v1.0.0 — 2026-06-10 — Initial (landing/portal split).
|
|
7
|
+
*/
|
|
8
|
+
.ld { max-width: 980px; margin: 0 auto; padding: 2rem 1.25rem 3rem; color: var(--text); }
|
|
9
|
+
.ld-hero { text-align: center; padding: 2.5rem 0 1.25rem; }
|
|
10
|
+
.ld-h1 { font-size: 2.1rem; font-weight: 800; letter-spacing: -0.5px; margin: 0 0 .6rem; }
|
|
11
|
+
.ld-hero-sub { color: var(--text-dim); font-size: 1.05rem; margin: 0; }
|
|
12
|
+
.ld-ticker { display: flex; align-items: center; gap: .5rem; justify-content: center; margin: 1rem auto; max-width: 760px; padding: .45rem .9rem; border: 1px solid var(--border); border-radius: 999px; background: var(--card); font-size: .85rem; color: var(--text-dim); white-space: nowrap; overflow: hidden; }
|
|
13
|
+
.ld-ticker-text { overflow: hidden; text-overflow: ellipsis; }
|
|
14
|
+
.ld-ticker-dot { color: var(--success-fg, #2E9E5B); flex: none; }
|
|
15
|
+
.ld-stats { max-width: 760px; margin: 1.25rem auto 2rem; padding: 1rem 1.25rem; border: 1px solid var(--border); border-radius: 12px; background: var(--bg-surface, var(--bg-dim)); text-align: center; }
|
|
16
|
+
.ld-stats-line { font-size: 1.05rem; font-weight: 600; }
|
|
17
|
+
.ld-stats-own { margin-top: .6rem; color: var(--text-dim); font-size: .95rem; }
|
|
18
|
+
.ld-stats-cta { color: var(--accent); font-weight: 700; text-decoration: none; margin-left: .35rem; }
|
|
19
|
+
.ld-stats-cta:hover { text-decoration: underline; }
|
|
20
|
+
.ld-paths { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; margin: 1.5rem 0; }
|
|
21
|
+
@media (max-width: 760px) { .ld-paths { grid-template-columns: 1fr; } }
|
|
22
|
+
.ld-path { border: 1px solid var(--border); border-radius: 12px; background: var(--card); padding: 1.1rem 1.2rem; display: flex; flex-direction: column; }
|
|
23
|
+
.ld-path--hot { border-color: var(--accent); border-width: 2px; }
|
|
24
|
+
.ld-path h3 { margin: 0 0 .4rem; font-size: 1.05rem; }
|
|
25
|
+
.ld-path p { margin: 0 0 .9rem; color: var(--text-dim); font-size: .9rem; flex: 1; }
|
|
26
|
+
.ld-path-cta { color: var(--accent); font-weight: 700; text-decoration: none; font-size: .92rem; }
|
|
27
|
+
.ld-path-cta:hover { text-decoration: underline; }
|
|
28
|
+
.ld-loop { display: flex; align-items: center; justify-content: center; gap: .6rem; flex-wrap: wrap; margin: 1.5rem 0 2rem; padding: .8rem 1rem; border: 1px solid var(--border); border-radius: 10px; background: var(--bg-surface, var(--bg-dim)); font-size: .9rem; }
|
|
29
|
+
.ld-loop-arrow { color: var(--text-dim); }
|
|
30
|
+
.ld-section { margin: 2rem 0; }
|
|
31
|
+
.ld-h2 { font-size: 1.3rem; margin: 0 0 1rem; }
|
|
32
|
+
.ld-gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: .9rem; }
|
|
33
|
+
.ld-app-card { display: block; border: 1px solid var(--border); border-radius: 10px; background: var(--card); padding: .9rem 1rem; text-decoration: none; color: var(--text); }
|
|
34
|
+
.ld-app-card:hover { border-color: var(--accent); }
|
|
35
|
+
.ld-app-name { font-weight: 700; margin-bottom: .25rem; }
|
|
36
|
+
.ld-app-desc { font-size: .82rem; color: var(--text-dim); margin-bottom: .4rem; }
|
|
37
|
+
.ld-app-meta { font-size: .72rem; color: var(--muted); }
|
|
38
|
+
.ld-footer { display: flex; gap: 1.25rem; flex-wrap: wrap; justify-content: center; margin-top: 2.5rem; padding-top: 1.25rem; border-top: 1px solid var(--border); font-size: .88rem; }
|
|
39
|
+
.ld-footer a { color: var(--text-dim); text-decoration: none; }
|
|
40
|
+
.ld-footer a:hover { color: var(--text); }
|
|
41
|
+
/* Pricing */
|
|
42
|
+
.ld-pricing .ld-h1 { text-align: center; }
|
|
43
|
+
.ld-pricing .ld-hero-sub { text-align: center; margin-bottom: 1.5rem; }
|
|
44
|
+
.ld-tiers { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 1rem; margin: 1.25rem 0; }
|
|
45
|
+
.ld-tier { border: 1px solid var(--border); border-radius: 12px; background: var(--card); padding: 1.1rem 1.2rem; display: flex; flex-direction: column; }
|
|
46
|
+
.ld-tier--hot { border-color: var(--accent); border-width: 2px; }
|
|
47
|
+
.ld-tier-name { margin: 0 0 .2rem; font-size: 1.05rem; }
|
|
48
|
+
.ld-tier-price { font-size: 1.3rem; font-weight: 800; margin-bottom: .6rem; }
|
|
49
|
+
.ld-tier-lines { margin: 0 0 1rem; padding-left: 1.1rem; color: var(--text-dim); font-size: .88rem; flex: 1; }
|
|
50
|
+
.ld-tier-lines li { margin-bottom: .3rem; }
|
|
51
|
+
|
|
52
|
+
/* ── How it works ── */
|
|
53
|
+
.hiw-diagram { margin: 1.5rem 0; }
|
|
54
|
+
.hiw-svg { width: 100%; height: auto; display: block; }
|
|
55
|
+
.hiw-svg--tall { display: none; max-width: 360px; margin: 0 auto; }
|
|
56
|
+
@media (max-width: 700px) { .hiw-svg--wide { display: none; } .hiw-svg--tall { display: block; } }
|
|
57
|
+
.ld-ctarow { display: flex; gap: .9rem; justify-content: center; flex-wrap: wrap; margin: 2rem 0 1rem; }
|
|
58
|
+
.ld-ctarow a { text-decoration: none; }
|
|
59
|
+
|
|
60
|
+
/* ── Business ── */
|
|
61
|
+
.ld-bhero { position: relative; display: grid; grid-template-columns: 1fr 1fr; align-items: center; gap: 1.25rem; margin: 1rem 0 2rem; border-radius: 14px; overflow: hidden; background: var(--bg-surface, var(--bg-dim)); border: 1px solid var(--border); }
|
|
62
|
+
.ld-bhero-img { width: 100%; height: 100%; object-fit: cover; min-height: 260px; }
|
|
63
|
+
.ld-bhero-text { padding: 1.5rem 1.5rem 1.5rem .25rem; }
|
|
64
|
+
.ld-bhero--noimg { grid-template-columns: 1fr; text-align: center; }
|
|
65
|
+
.ld-bhero--noimg .ld-bhero-text { padding: 2.25rem 1.5rem; }
|
|
66
|
+
@media (max-width: 700px) { .ld-bhero { grid-template-columns: 1fr; } .ld-bhero-text { padding: 1.25rem; } .ld-bhero-img { max-height: 220px; } }
|
|
67
|
+
.ld-cases { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem; margin: 1.5rem 0; }
|
|
68
|
+
@media (max-width: 760px) { .ld-cases { grid-template-columns: 1fr; } }
|
|
69
|
+
.ld-case { border: 1px solid var(--border); border-radius: 12px; background: var(--card); padding: 1.1rem 1.2rem; display: flex; flex-direction: column; gap: .55rem; }
|
|
70
|
+
.ld-case-title { margin: 0; font-size: 1.05rem; }
|
|
71
|
+
.ld-case-text { margin: 0; color: var(--text-dim); font-size: .9rem; flex: 1; }
|
|
72
|
+
.ld-case-quote { margin: 0; padding: .5rem .8rem; border-left: 3px solid var(--accent); background: var(--bg-surface, var(--bg-dim)); border-radius: 6px; font-size: .88rem; }
|
|
73
|
+
.ld-case-quote footer { color: var(--text-dim); font-size: .78rem; margin-top: .25rem; }
|
|
74
|
+
.ld-case-proof { font-size: .85rem; color: var(--accent); text-decoration: none; font-weight: 600; }
|
|
75
|
+
.ld-case-proof:hover { text-decoration: underline; }
|
|
76
|
+
.ld-case-proofnote { font-size: .8rem; color: var(--text-dim); font-style: italic; background: var(--bg-surface, var(--bg-dim)); border-radius: 6px; padding: .45rem .7rem; }
|
|
77
|
+
|
|
78
|
+
/* ── Contact card (business + pricing only) ── */
|
|
79
|
+
.ld-contact { max-width: 460px; margin: 2.25rem auto 0; padding: 1.25rem 1.5rem; border: 2px solid var(--accent); border-radius: 14px; background: var(--card); text-align: center; }
|
|
80
|
+
.ld-contact-title { font-size: 1.15rem; font-weight: 800; margin-bottom: .4rem; }
|
|
81
|
+
.ld-contact-name { font-weight: 600; margin-bottom: .35rem; }
|
|
82
|
+
.ld-contact-links { display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap; margin-bottom: .45rem; }
|
|
83
|
+
.ld-contact-links a { color: var(--accent); text-decoration: none; font-weight: 600; }
|
|
84
|
+
.ld-contact-links a:hover { text-decoration: underline; }
|
|
85
|
+
.ld-contact-sub { color: var(--text-dim); font-size: .88rem; }
|
|
86
|
+
.ld-example-img { width: 100%; max-height: 260px; object-fit: cover; border-radius: 10px; margin-bottom: .9rem; }
|
|
87
|
+
.ld-app-badge { font-size: .68rem; font-weight: 600; color: var(--text-dim); border: 1px solid var(--border); border-radius: 999px; padding: 1px 7px; vertical-align: 2px; }
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file offers.css
|
|
3
|
+
* @description Styles for the Agent Offers "Do" surface (offers-tab.js). Prefix `of-`. Uses theme.css
|
|
4
|
+
* variables only (no hardcoded colors / no rgba(255,255,255)).
|
|
5
|
+
* @version-history
|
|
6
|
+
* v1.0.0 -- 2026-06-12 -- Initial: Do feed cards, badges, offer detail, provenance footer.
|
|
7
|
+
* v1.1.0 -- 2026-06-12 -- Billable offers: price/visibility badges + the Selling editor row.
|
|
8
|
+
* v1.2.0 -- 2026-06-12 -- Markdown deliverable/sample (.of-md) + Inbox deep-link (.of-link).
|
|
9
|
+
* v1.2.1 -- 2026-06-12 -- Scope markdown headings/tables/lists to the card (LLM h1 was giant; tables
|
|
10
|
+
* now render with borders).
|
|
11
|
+
*/
|
|
12
|
+
.of { max-width: 920px; }
|
|
13
|
+
.of-search { width: 100%; margin: 0.5rem 0 0.75rem; }
|
|
14
|
+
|
|
15
|
+
.of-card { border: 1px solid var(--border); background: var(--card); border-radius: 8px; padding: 0.6rem 0.75rem; margin: 0.5rem 0; }
|
|
16
|
+
.of-card--open { border-color: var(--accent, var(--border)); }
|
|
17
|
+
.of-card-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.75rem; cursor: pointer; }
|
|
18
|
+
.of-card-title { display: flex; flex-direction: column; gap: 0.15rem; min-width: 0; }
|
|
19
|
+
.of-offer-title { font-weight: 600; }
|
|
20
|
+
.of-agent { font-size: 0.82rem; color: var(--muted); display: inline-flex; align-items: center; gap: 0.35rem; }
|
|
21
|
+
.of-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
|
|
22
|
+
.of-dot--on { background: var(--success, #10b981); }
|
|
23
|
+
.of-dot--off { background: var(--border); }
|
|
24
|
+
|
|
25
|
+
.of-badges { display: flex; flex-wrap: wrap; gap: 0.3rem; align-items: flex-start; }
|
|
26
|
+
.of-badge { font-size: 0.72rem; padding: 0.05rem 0.4rem; border-radius: 10px; background: var(--bg-dim); color: var(--muted); border: 1px solid var(--border); white-space: nowrap; }
|
|
27
|
+
.of-badge--ver { color: var(--success, #10b981); }
|
|
28
|
+
.of-badge--data { color: var(--info, var(--accent)); }
|
|
29
|
+
.of-badge--cost { color: var(--warn, #f59e0b); }
|
|
30
|
+
.of-badge--untested { color: var(--muted); font-style: italic; }
|
|
31
|
+
|
|
32
|
+
.of-ask { margin: 0.35rem 0 0; color: var(--text); }
|
|
33
|
+
.of-detail { margin-top: 0.5rem; padding-top: 0.5rem; border-top: 1px solid var(--border); display: flex; flex-direction: column; gap: 0.4rem; }
|
|
34
|
+
.of-example { font-size: 0.88rem; color: var(--muted); }
|
|
35
|
+
.of-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--muted); font-weight: 600; }
|
|
36
|
+
.of-mini { font-size: 0.8rem; color: var(--muted); }
|
|
37
|
+
|
|
38
|
+
.of-req-list, .of-conseq-list { display: flex; flex-wrap: wrap; gap: 0.35rem; }
|
|
39
|
+
.of-req { font-size: 0.82rem; background: var(--bg-dim); border: 1px solid var(--border); border-radius: 6px; padding: 0.1rem 0.45rem; }
|
|
40
|
+
.of-fix { color: var(--accent); font-weight: 600; }
|
|
41
|
+
.of-conseq { font-size: 0.78rem; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 0.1rem 0.45rem; }
|
|
42
|
+
.of-conseq--warn { color: var(--warn, #f59e0b); border-color: var(--warn, #f59e0b); }
|
|
43
|
+
|
|
44
|
+
.of-sample { font-size: 0.8rem; background: var(--bg-dim); border: 1px solid var(--border); border-radius: 6px; padding: 0.4rem 0.6rem; white-space: pre-wrap; overflow-x: auto; max-height: 200px; margin: 0; }
|
|
45
|
+
.of-input { width: 100%; resize: vertical; }
|
|
46
|
+
|
|
47
|
+
.of-result { margin-top: 0.4rem; padding: 0.5rem 0.6rem; background: var(--bg-dim); border: 1px solid var(--border); border-radius: 6px; }
|
|
48
|
+
.of-result-msg { font-weight: 600; }
|
|
49
|
+
.of-prov { font-size: 0.78rem; color: var(--muted); margin-top: 0.25rem; }
|
|
50
|
+
|
|
51
|
+
/* Do/Inbox segment */
|
|
52
|
+
.of-seg { display: inline-flex; border: 1px solid var(--border); border-radius: 8px; overflow: hidden; margin: 0.25rem 0 0.75rem; }
|
|
53
|
+
.of-seg-btn { background: var(--card); color: var(--muted); border: none; padding: 0.3rem 0.9rem; cursor: pointer; font-weight: 600; }
|
|
54
|
+
.of-seg-btn--on { background: var(--accent, var(--bg-dim)); color: var(--accent-contrast, var(--text)); }
|
|
55
|
+
|
|
56
|
+
/* Inbox status badges */
|
|
57
|
+
.of-status { font-size: 0.72rem; padding: 0.05rem 0.5rem; border-radius: 10px; border: 1px solid var(--border); white-space: nowrap; }
|
|
58
|
+
.of-st--done { color: var(--success, #10b981); border-color: var(--success, #10b981); }
|
|
59
|
+
.of-st--failed { color: var(--danger, #ef4444); border-color: var(--danger, #ef4444); }
|
|
60
|
+
.of-st--active { color: var(--info, var(--accent)); }
|
|
61
|
+
.of-st--queued { color: var(--muted); }
|
|
62
|
+
.of-fail { color: var(--danger, #ef4444); font-size: 0.88rem; }
|
|
63
|
+
|
|
64
|
+
/* Rating */
|
|
65
|
+
.of-rate { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem; margin-top: 0.3rem; }
|
|
66
|
+
.of-stars { display: inline-flex; }
|
|
67
|
+
.of-star { background: none; border: none; cursor: pointer; font-size: 1.1rem; line-height: 1; color: var(--muted); padding: 0 0.05rem; }
|
|
68
|
+
.of-star--on { color: var(--warn, #f59e0b); }
|
|
69
|
+
.of-rate-note { flex: 1 1 200px; min-width: 140px; }
|
|
70
|
+
|
|
71
|
+
/* Billing badges + the Selling editor */
|
|
72
|
+
.of-badge--vis { color: var(--accent); border-color: var(--accent); }
|
|
73
|
+
.of-badge--price { color: var(--warn, #f59e0b); font-weight: 600; }
|
|
74
|
+
.of-bill { margin-top: 0.4rem; padding-top: 0.5rem; border-top: 1px dashed var(--border); display: flex; flex-direction: column; gap: 0.35rem; }
|
|
75
|
+
.of-bill-row { align-items: center; gap: 0.4rem; }
|
|
76
|
+
.of-bill-vis { flex: 0 1 180px; }
|
|
77
|
+
.of-bill-price { flex: 0 1 110px; }
|
|
78
|
+
.of-warn { color: var(--warn, #f59e0b); }
|
|
79
|
+
|
|
80
|
+
/* Rendered markdown (deliverable + sample) + the Inbox deep-link */
|
|
81
|
+
.of-md { font-size: 0.86rem; background: var(--bg-dim); border: 1px solid var(--border); border-radius: 6px; padding: 0.4rem 0.7rem; overflow-x: auto; max-height: 360px; }
|
|
82
|
+
.of-md > :first-child { margin-top: 0; }
|
|
83
|
+
.of-md > :last-child { margin-bottom: 0; }
|
|
84
|
+
.of-sample-md { max-height: 200px; }
|
|
85
|
+
/* Scale headings/tables/lists to the card context (an LLM h1 must not be giant here). */
|
|
86
|
+
.of-md h1, .of-md h2, .of-md h3, .of-md h4, .of-md h5, .of-md h6 { font-size: 0.95rem; font-weight: 700; line-height: 1.3; margin: 0.45rem 0 0.2rem; }
|
|
87
|
+
.of-md h1 { font-size: 1.02rem; }
|
|
88
|
+
.of-md p { margin: 0.3rem 0; }
|
|
89
|
+
.of-md ul, .of-md ol { margin: 0.3rem 0; padding-left: 1.2rem; }
|
|
90
|
+
.of-md li { margin: 0.1rem 0; }
|
|
91
|
+
.of-md table { border-collapse: collapse; font-size: 0.8rem; margin: 0.3rem 0; }
|
|
92
|
+
.of-md th, .of-md td { border: 1px solid var(--border); padding: 0.15rem 0.45rem; text-align: left; }
|
|
93
|
+
.of-md th { background: var(--surface); font-weight: 600; }
|
|
94
|
+
.of-md pre { font-size: 0.8rem; background: var(--surface); border: 1px solid var(--border); border-radius: 4px; padding: 0.4rem 0.6rem; overflow-x: auto; }
|
|
95
|
+
.of-md code { font-size: 0.82em; }
|
|
96
|
+
.of-link { background: none; border: none; padding: 0; margin-left: 0.35rem; color: var(--accent); cursor: pointer; font: inherit; text-decoration: underline; }
|
|
@@ -320,3 +320,21 @@
|
|
|
320
320
|
flex-direction: column;
|
|
321
321
|
}
|
|
322
322
|
}
|
|
323
|
+
|
|
324
|
+
/* ── Builder workflow round (2026-06-10): flow banner, summaries, preview, publish bits ── */
|
|
325
|
+
.portfolio-subtitle-text { color: var(--text-dim); margin-bottom: 1rem; }
|
|
326
|
+
.portfolio-flow { display: flex; align-items: center; gap: .6rem; flex-wrap: wrap; padding: .7rem 1rem; margin-bottom: 1.5rem; background: var(--bg-surface, var(--bg-dim)); border: 1px solid var(--border); border-radius: 10px; font-size: .88rem; color: var(--text); }
|
|
327
|
+
.portfolio-flow-num { font-weight: 700; margin-right: .25rem; }
|
|
328
|
+
.portfolio-flow-arrow { color: var(--text-dim); }
|
|
329
|
+
.portfolio-published-bar { margin-bottom: 1.5rem; padding: .75rem 1rem; background: rgba(80,200,120,.08); border: 1px solid rgba(80,200,120,.25); border-radius: 8px; display: flex; align-items: center; gap: .75rem; flex-wrap: wrap; }
|
|
330
|
+
.portfolio-published-dot { color: var(--success-fg, #2E9E5B); }
|
|
331
|
+
.portfolio-published-link { margin-left: auto; }
|
|
332
|
+
.portfolio-group-checkall { margin-right: .65rem; cursor: pointer; accent-color: var(--accent, #E8564A); width: 15px; height: 15px; }
|
|
333
|
+
.portfolio-custom-desc { width: 100%; margin-top: .6rem; background: var(--control-bg, var(--card)); border: 1px solid var(--control-border, var(--border)); border-radius: 8px; padding: .5rem .65rem; color: var(--text); font: inherit; font-size: .88rem; resize: vertical; }
|
|
334
|
+
.portfolio-generate-row { display: flex; align-items: center; gap: .75rem; flex-wrap: wrap; margin-bottom: 1rem; }
|
|
335
|
+
.portfolio-generate-hint { font-size: .82rem; color: var(--text-dim); }
|
|
336
|
+
.portfolio-prompt-meta { font-size: .76rem; color: var(--text-dim); margin: .35rem 0 .6rem; }
|
|
337
|
+
.portfolio-publish-target { font-size: .85rem; color: var(--text-dim); margin-bottom: .75rem; }
|
|
338
|
+
.portfolio-publish-url { font-family: monospace; word-break: break-all; }
|
|
339
|
+
.portfolio-paste-actions { display: flex; gap: .6rem; margin-top: .5rem; flex-wrap: wrap; }
|
|
340
|
+
.portfolio-preview-frame { margin-top: .75rem; min-height: 420px; width: 100%; border: 1px solid var(--border); border-radius: 8px; background: #fff; }
|
|
@@ -174,9 +174,52 @@
|
|
|
174
174
|
Unified 2026-06-02 (#6). (.pf .wallet-lifetime grid wrapper kept.) */
|
|
175
175
|
.pf .wallet-balance-copy{display:inline-block;margin-left:.5rem;font-size:.7rem;padding:2px 8px;background:rgba(232,86,74,.15);border:1px solid rgba(232,86,74,.3);border-radius:4px;color:var(--text,#1A1A2E);cursor:pointer;vertical-align:middle}
|
|
176
176
|
.pf .wallet-balance-copy:hover{background:rgba(232,86,74,.25)}
|
|
177
|
-
.pf .mem-item{display:flex;justify-content:space-between;align-items:center;padding:.5rem 0;border-bottom:1px solid
|
|
178
|
-
.pf .mem-item:hover{background:
|
|
179
|
-
|
|
177
|
+
.pf .mem-item{display:flex;justify-content:space-between;align-items:center;padding:.5rem 0;border-bottom:1px solid var(--border-subtle,var(--border));font-size:.85rem;cursor:pointer;gap:.5rem}
|
|
178
|
+
.pf .mem-item:hover{background:var(--bg-surface,var(--bg-dim))}
|
|
179
|
+
/* Keys in the NEUTRAL text color — monospace already separates them; a list of all-red
|
|
180
|
+
keys read like an error log and burned out red's alarm meaning. */
|
|
181
|
+
.pf .mem-key{font-family:monospace;color:var(--text);font-weight:500;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
182
|
+
/* ── Grouped key list (2026-06-10): collapsible groups by first key segment ── */
|
|
183
|
+
.pf .mem-group{margin-bottom:.35rem}
|
|
184
|
+
.pf .mem-group-header{display:flex;align-items:center;gap:.5rem;width:100%;background:none;border:none;border-bottom:1px solid var(--border);padding:.45rem .2rem;cursor:pointer;font:inherit;text-align:left}
|
|
185
|
+
.pf .mem-group-header:hover{background:var(--bg-surface,var(--bg-dim))}
|
|
186
|
+
.pf .mem-group-name{font-family:monospace;font-weight:700;color:var(--text);font-size:.85rem}
|
|
187
|
+
.pf .mem-group-count{font-size:.75rem;color:var(--text-dim)}
|
|
188
|
+
.pf .mem-group-sub{font-family:monospace;font-size:.7rem;color:var(--muted)}
|
|
189
|
+
.pf .mem-item--grouped{padding-left:1.4rem}
|
|
190
|
+
.pf .mem-detail-key{font-family:monospace;font-size:.72rem;color:var(--muted);margin-bottom:.4rem;word-break:break-all}
|
|
191
|
+
.pf .mem-detail-visrow{display:flex;align-items:center;gap:.5rem;margin-top:.5rem}
|
|
192
|
+
.pf .mem-row-check{flex:none;margin:0 .15rem 0 0;cursor:pointer}
|
|
193
|
+
.pf .mem-vis-pop{display:flex;flex-wrap:wrap;gap:.35rem;padding:.5rem .75rem;margin:.25rem 0 .25rem 1.4rem;background:var(--card);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-sm)}
|
|
194
|
+
.pf .mem-vis-opt{background:var(--control-bg,var(--card));border:1px solid var(--control-border,var(--border));border-radius:999px;padding:.2rem .65rem;font-size:.76rem;color:var(--text);cursor:pointer}
|
|
195
|
+
.pf .mem-vis-opt:hover{border-color:var(--accent)}
|
|
196
|
+
.pf .mem-vis-opt--current{border-color:var(--accent);font-weight:700}
|
|
197
|
+
.pf .mem-vis-opt--dim{color:var(--text-dim);border-style:dashed}
|
|
198
|
+
.pf .mem-bulkbar{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;padding:.45rem .75rem;margin-bottom:.5rem;background:var(--bg-surface,var(--bg-dim));border:1px solid var(--border);border-radius:8px}
|
|
199
|
+
.pf .mem-bulkbar-count{font-size:.82rem;font-weight:600;color:var(--text)}
|
|
200
|
+
.pf .mem-actions .mem-delete-btn{margin-left:auto}
|
|
201
|
+
.pf .mem-vis-select{font-size:.72rem;padding:2px 6px;min-width:auto;width:auto}
|
|
202
|
+
.pf .mem-edit-textarea{min-height:280px;resize:vertical;font-family:monospace;font-size:.8rem}
|
|
203
|
+
.pf .mem-edit-textarea--error{border-color:var(--danger-fg,#DC2626)}
|
|
204
|
+
.pf .mem-json-error{color:var(--danger-fg,#DC2626);font-size:.78rem;margin-top:.35rem}
|
|
205
|
+
.pf .tag-pill.tag-more{border-style:dashed;color:var(--text-dim)}
|
|
206
|
+
.pf .tag-pill.tag-removable{background:var(--control-bg,var(--card));color:var(--text);border:1px solid var(--control-border,var(--border))}
|
|
207
|
+
.pf .tag-pill.tag-removable .tag-x{color:var(--muted);margin-left:2px}
|
|
208
|
+
.pf .tag-pill.tag-removable:hover .tag-x{color:var(--text)}
|
|
209
|
+
/* ── Access tab polish (2026-06-10): neutral headers, compact empties, fed coupling ── */
|
|
210
|
+
.pf .card-h3.access-h3{color:var(--text)}
|
|
211
|
+
.pf .access-empty-row{display:flex;align-items:center;gap:.75rem;padding:.4rem 0;margin-bottom:1rem}
|
|
212
|
+
.pf .access-fed-allowall{padding:.4rem 0;border-bottom:1px solid var(--border-subtle,var(--border))}
|
|
213
|
+
.pf .access-fed-warn-caption{font-size:.78rem;color:var(--warn-fg,#B45309);margin:.25rem 0 .1rem 1.6rem}
|
|
214
|
+
.pf .access-fed-list--inactive{opacity:.45;pointer-events:none}
|
|
215
|
+
.pf .access-copy-val{display:inline-flex;align-items:center;gap:.25rem;min-width:0;overflow-wrap:anywhere}
|
|
216
|
+
/* ── Sidebar reorg (2026-06-10): collapsible groups + pin-on-hover ── */
|
|
217
|
+
.pf .pf-side-group-toggle{display:flex;align-items:center;gap:.35rem;width:100%;background:none;border:none;cursor:pointer;font:inherit;text-align:left;padding:0}
|
|
218
|
+
.pf .pf-side-group-toggle .pf-chevron{font-size:.55rem;color:var(--muted)}
|
|
219
|
+
.pf .pf-side-pin{display:none;margin-left:auto;font-size:.72rem;opacity:.55;cursor:pointer;filter:grayscale(1)}
|
|
220
|
+
.pf .pf-side-item:hover .pf-side-pin{display:inline}
|
|
221
|
+
.pf .pf-side-pin:hover{opacity:1}
|
|
222
|
+
.pf .pf-side-pin--on{display:inline;opacity:.9;filter:none}
|
|
180
223
|
.pf .mem-time{font-size:.7rem;color:var(--text-dim,#6B7280);white-space:nowrap;flex-shrink:0}
|
|
181
224
|
.pf .mem-sort-bar{display:flex;align-items:center;gap:.35rem}
|
|
182
225
|
.pf .mem-sort-select{font-size:.75rem;padding:2px 6px;min-width:auto;width:auto}
|
|
@@ -467,6 +510,22 @@
|
|
|
467
510
|
.pf .pkg-badge-published{background:var(--success-bg);color:var(--success-fg)}
|
|
468
511
|
.pf .pkg-badge-draft{background:var(--bg-surface);color:var(--text-dim)}
|
|
469
512
|
.pf .pkg-empty{color:var(--muted,#888);font-size:.85rem;text-align:center;padding:2rem 0}
|
|
513
|
+
/* Expanded instance card: per-component list with status dots and inline actions */
|
|
514
|
+
.pf .pkg-card-expanded{grid-column:span 2}
|
|
515
|
+
@media (max-width:720px){.pf .pkg-card-expanded{grid-column:span 1}}
|
|
516
|
+
.pf .pkg-badge-sub{font-weight:400;text-transform:none;letter-spacing:0;opacity:.85;margin-left:.25rem}
|
|
517
|
+
.pf .pkg-comp-list{list-style:none;padding:0;margin:.75rem 0 .5rem;border-top:1px solid var(--border,#E5E7EB)}
|
|
518
|
+
.pf .pkg-comp{display:grid;grid-template-columns:1.5rem 1fr auto auto auto;gap:.5rem;align-items:center;padding:.4rem 0;border-bottom:1px dashed var(--border,#E5E7EB);font-size:.8rem}
|
|
519
|
+
.pf .pkg-comp:last-child{border-bottom:0}
|
|
520
|
+
.pf .pkg-comp-icon{font-size:1.1rem;line-height:1}
|
|
521
|
+
.pf .pkg-comp-id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;color:var(--text,#111);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
522
|
+
.pf .pkg-comp-type{font-size:.7rem;color:var(--text-dim,#6B7280);background:var(--bg-dim,#F3F4F6);padding:1px 6px;border-radius:4px;text-transform:lowercase}
|
|
523
|
+
.pf .pkg-comp-status{display:flex;align-items:center;gap:.25rem}
|
|
524
|
+
.pf .pkg-dot{display:inline-block;width:.55rem;height:.55rem;border-radius:50%;background:var(--muted,#9CA3AF)}
|
|
525
|
+
.pf .pkg-dot-active{background:#22c55e;box-shadow:0 0 0 2px rgba(34,197,94,.18)}
|
|
526
|
+
.pf .pkg-comp-customized{font-size:.85rem;color:var(--warn-fg,#b45309)}
|
|
527
|
+
.pf .pkg-comp-actions{display:flex;gap:.25rem;flex-wrap:wrap}
|
|
528
|
+
.pf .pkg-comp-actions .btn-xs,.pf .pkg-card-meta .btn-xs{font-size:.7rem;padding:2px 6px}
|
|
470
529
|
.pf .pkg-stats{display:flex;gap:.5rem;align-items:center;font-size:.8rem;color:var(--muted,#888)}
|
|
471
530
|
.pf .pkg-section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}
|
|
472
531
|
.pf .pkg-section-header h3{margin:0}
|
|
@@ -1981,7 +2040,8 @@
|
|
|
1981
2040
|
border-right: 1px solid var(--border);
|
|
1982
2041
|
}
|
|
1983
2042
|
.pf-side-identity { display: flex; align-items: center; gap: 0.6rem; padding: 0.4rem 0.6rem 0.8rem; }
|
|
1984
|
-
.pf-side-avatar { width: 34px; height: 34px; border-radius: var(--radius-full, 999px); flex: 0 0 auto; background:
|
|
2043
|
+
.pf-side-avatar { width: 34px; height: 34px; border-radius: var(--radius-full, 999px); flex: 0 0 auto; background: var(--card); border: 1.5px solid var(--border); overflow: hidden; }
|
|
2044
|
+
.pf-side-avatar svg { width: 100%; height: 100%; }
|
|
1985
2045
|
.pf-side-id-name { font-weight: 700; font-size: 0.95rem; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1986
2046
|
|
|
1987
2047
|
.pf-side-group { margin-top: 0.4rem; }
|
|
@@ -2070,6 +2130,11 @@
|
|
|
2070
2130
|
/* A declared space whose data does not live in workspace records (backing 'tasks', or a legacy
|
|
2071
2131
|
unsupported backing) — shown as a notice instead of silently dropped from the view. */
|
|
2072
2132
|
.pj-space-notice { font-size: 0.88rem; color: var(--muted); padding: 0.2rem 0 0.3rem; }
|
|
2133
|
+
/* The viewer's own contract-advertising agents (tag 'workspace-contract'), surfaced in the
|
|
2134
|
+
workspace People panel so the user sees which of their agents can serve this workspace. */
|
|
2135
|
+
.pj-contract-agents { border: 1px solid var(--border); border-radius: 10px; padding: 0.5rem 0.75rem; margin-bottom: 0.6rem; background: var(--card); }
|
|
2136
|
+
/* The per-contract one-click adopt action inside a contract-agent chip. */
|
|
2137
|
+
.pj-adopt-btn { margin-left: 0.4rem; padding: 0.1rem 0.5rem; font-size: 0.78rem; }
|
|
2073
2138
|
.pj-draft-form { margin: 0.4rem 0; }
|
|
2074
2139
|
.pj-drafts { display: flex; flex-direction: column; gap: 0.3rem; margin-bottom: 0.3rem; }
|
|
2075
2140
|
.pj-item { display: flex; align-items: center; gap: 0.5rem; padding: 0.35rem 0; }
|
|
@@ -2337,6 +2402,44 @@
|
|
|
2337
2402
|
.md-img { max-width: 100%; height: auto; border-radius: 6px; }
|
|
2338
2403
|
@media (max-width: 640px) { .pj-docspace { flex-direction: column; } .pj-doc-index { flex: none; width: 100%; } }
|
|
2339
2404
|
|
|
2405
|
+
/* ───────────────── Workspace Overview tab ─────────────────
|
|
2406
|
+
* The landing view: a "what happened here" strip + every space stacked on one vertical scroll.
|
|
2407
|
+
* Sections collapse as accordions on mobile; documents expand inline there (no popups). */
|
|
2408
|
+
.pj-ov { display: flex; flex-direction: column; gap: 0.6rem; }
|
|
2409
|
+
.pj-ov-strip { border: 1px solid var(--border); border-radius: 10px; padding: 0.5rem 0.6rem; background: var(--card); }
|
|
2410
|
+
.pj-ov-strip-title { font-weight: 600; font-size: 0.85rem; color: var(--muted); margin-bottom: 0.3rem; }
|
|
2411
|
+
.pj-ov-event { display: flex; align-items: center; gap: 0.45rem; width: 100%; padding: 0.2rem 0.25rem; border: 0; background: none; border-radius: 6px; cursor: pointer; text-align: left; font-size: 0.85rem; color: var(--text); }
|
|
2412
|
+
.pj-ov-event:hover { background: var(--bg-dim); }
|
|
2413
|
+
.pj-ov-event-who { font-weight: 600; flex-shrink: 0; }
|
|
2414
|
+
.pj-ov-event-act { color: var(--muted); flex-shrink: 0; }
|
|
2415
|
+
.pj-ov-event-what { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
|
|
2416
|
+
.pj-ov-event-time { margin-left: auto; color: var(--muted); font-size: 0.75rem; flex-shrink: 0; }
|
|
2417
|
+
.pj-ov-sec { border: 1px solid var(--border); border-radius: 10px; background: var(--card); }
|
|
2418
|
+
.pj-ov-sec-head { display: flex; align-items: center; gap: 0.4rem; padding: 0.45rem 0.6rem; cursor: pointer; }
|
|
2419
|
+
.pj-ov-chevron { color: var(--muted); font-size: 0.8rem; width: 1em; flex-shrink: 0; }
|
|
2420
|
+
.pj-ov-name { font-weight: 600; color: var(--text); font-size: 0.95rem; }
|
|
2421
|
+
.pj-ov-name-link { border: 0; background: none; cursor: pointer; padding: 0; text-align: left; }
|
|
2422
|
+
.pj-ov-spacer { flex: 1; }
|
|
2423
|
+
.pj-ov-items { display: flex; flex-direction: column; gap: 0.1rem; padding: 0 0.6rem 0.5rem 1.5rem; }
|
|
2424
|
+
.pj-ov-row { display: flex; align-items: center; gap: 0.5rem; border: 1px solid var(--border); border-radius: 10px; background: var(--card); padding: 0.35rem 0.6rem; }
|
|
2425
|
+
.pj-ov-row .pj-ov-name { flex-shrink: 0; }
|
|
2426
|
+
.pj-ov-item { display: flex; align-items: center; gap: 0.45rem; width: 100%; padding: 0.25rem 0.3rem; border: 0; background: none; border-radius: 6px; cursor: pointer; text-align: left; font-size: 0.88rem; color: var(--text); min-width: 0; }
|
|
2427
|
+
.pj-ov-item:hover { background: var(--bg-dim); }
|
|
2428
|
+
.pj-ov-item-title { flex-shrink: 0; max-width: 60%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2429
|
+
.pj-ov-preview { color: var(--muted); font-size: 0.8rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
|
|
2430
|
+
.pj-ov-more { border: 0; background: none; color: var(--accent); cursor: pointer; text-align: left; padding: 0.25rem 0.3rem; font-size: 0.85rem; }
|
|
2431
|
+
.pj-ov-more:hover { text-decoration: underline; }
|
|
2432
|
+
.pj-ov-doc-inline { border-top: 1px solid var(--border); margin: 0.2rem 0 0.4rem; padding-top: 0.4rem; }
|
|
2433
|
+
/* Unseen-changes badge on workspace tabs — neutral gray pill (red is reserved for errors). */
|
|
2434
|
+
.pj-org-tab-unseen { background: var(--bg-dim); color: var(--muted); border: 1px solid var(--border); border-radius: 999px; font-size: 0.68rem; padding: 0 0.35rem; margin-left: 0.3rem; line-height: 1.3; }
|
|
2435
|
+
@media (max-width: 640px) {
|
|
2436
|
+
.pj-ov-event { flex-wrap: wrap; } /* "what/where" wraps to its own line — never hidden */
|
|
2437
|
+
.pj-ov-event-what { flex-basis: 100%; padding-left: calc(9px + 0.45rem); }
|
|
2438
|
+
.pj-ov-item { flex-wrap: wrap; }
|
|
2439
|
+
.pj-ov-item-title { max-width: none; flex-shrink: 1; white-space: normal; }
|
|
2440
|
+
.pj-ov-preview { flex-basis: 100%; }
|
|
2441
|
+
}
|
|
2442
|
+
|
|
2340
2443
|
/* ───────────────── Organisms list renew (phase 1) ─────────────────
|
|
2341
2444
|
* Compact list rows + kebab menu + organism home page. All colors via theme tokens. */
|
|
2342
2445
|
|
|
@@ -2441,8 +2544,50 @@
|
|
|
2441
2544
|
.pj-stat-btn.active { background: var(--bg-dim); color: var(--text); }
|
|
2442
2545
|
.pj-ws-person { display: flex; align-items: center; gap: 0.4rem; padding: 0.2rem 0; font-size: 0.83rem; color: var(--text); }
|
|
2443
2546
|
.pj-ws-person-agents { font-size: 0.76rem; color: var(--muted); }
|
|
2444
|
-
|
|
2445
|
-
/* ── Settings polish: menu divider, bounded form card ── */
|
|
2446
|
-
.pj-menu-sep { height: 1px; background: var(--border); margin: 0.25rem 0.3rem; }
|
|
2447
|
-
.pj-form-card { border: 1px solid var(--border); border-radius: 10px; background: var(--card); padding: 0.75rem 0.9rem 0.6rem; margin-bottom: 0.25rem; }
|
|
2547
|
+
|
|
2548
|
+
/* ── Settings polish: menu divider, bounded form card ── */
|
|
2549
|
+
.pj-menu-sep { height: 1px; background: var(--border); margin: 0.25rem 0.3rem; }
|
|
2550
|
+
.pj-form-card { border: 1px solid var(--border); border-radius: 10px; background: var(--card); padding: 0.75rem 0.9rem 0.6rem; margin-bottom: 0.25rem; }
|
|
2448
2551
|
.pj-form-card .pj-form-group:first-child { margin-top: 0; }
|
|
2552
|
+
|
|
2553
|
+
/* ── Home dashboard: waiting-for-you box, continue/agents cards, clickable stats, promo dismiss ── */
|
|
2554
|
+
.pf-waiting { border: 1px solid var(--warn-border, var(--border)); border-left: 3px solid var(--warn, var(--accent)); border-radius: 12px; background: var(--card); padding: 0.8rem 1rem; margin: 1rem 0; }
|
|
2555
|
+
.pf-waiting-title { font-size: 0.78rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--warn-fg, var(--text-dim)); margin-bottom: 0.5rem; }
|
|
2556
|
+
.pf-waiting-row { display: flex; align-items: center; gap: 0.75rem; padding: 0.35rem 0; }
|
|
2557
|
+
.pf-waiting-row + .pf-waiting-row { border-top: 1px solid var(--border-subtle, var(--border)); }
|
|
2558
|
+
.pf-waiting-text { flex: 1; font-size: 0.88rem; color: var(--text-dim); }
|
|
2559
|
+
.pf-waiting-text b { font-weight: 600; color: var(--text); }
|
|
2560
|
+
.pf-waiting-where { color: var(--muted); }
|
|
2561
|
+
.pf-home-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin: 1rem 0; }
|
|
2562
|
+
@media (max-width: 760px) { .pf-home-grid { grid-template-columns: 1fr; } }
|
|
2563
|
+
.pf-home-card { border: 1px solid var(--border); border-radius: 12px; background: var(--card); padding: 0.8rem 1rem; }
|
|
2564
|
+
.pf-home-card-title { font-size: 0.78rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--text-dim); margin-bottom: 0.5rem; background: none; border: none; padding: 0; text-align: left; }
|
|
2565
|
+
.pf-home-card-link { cursor: pointer; }
|
|
2566
|
+
.pf-home-card-link:hover { color: var(--text); }
|
|
2567
|
+
.pf-home-card-note { font-weight: 500; text-transform: none; letter-spacing: 0; color: var(--muted); }
|
|
2568
|
+
.pf-home-row { display: flex; align-items: center; gap: 0.55rem; width: 100%; background: none; border: none; padding: 0.32rem 0.2rem; border-radius: 8px; cursor: pointer; font-size: 0.88rem; color: var(--text-dim); text-align: left; }
|
|
2569
|
+
.pf-home-row:hover { background: var(--bg-surface); color: var(--text); }
|
|
2570
|
+
.pf-home-row-static { cursor: default; }
|
|
2571
|
+
.pf-home-row-static:hover { background: none; color: var(--text-dim); }
|
|
2572
|
+
.pf-home-row-ico { flex: none; }
|
|
2573
|
+
.pf-home-row-label { flex: 1; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2574
|
+
.pf-home-row-meta { flex: none; font-size: 0.78rem; color: var(--muted); }
|
|
2575
|
+
.pf-home-row-meta.pf-ok { color: var(--success-fg, var(--text)); }
|
|
2576
|
+
.pf-lp-stat-link { background: none; border: none; padding: 0.15rem 0.35rem; border-radius: 8px; cursor: pointer; font: inherit; color: inherit; }
|
|
2577
|
+
.pf-lp-stat-link:hover { background: var(--bg-surface); }
|
|
2578
|
+
.pf-lp-profile-btn { margin-left: auto; align-self: flex-start; }
|
|
2579
|
+
.pf-promo-dismiss { float: right; background: none; border: none; cursor: pointer; color: var(--muted); font-size: 0.85rem; padding: 0 0.2rem; }
|
|
2580
|
+
.pf-promo-dismiss:hover { color: var(--text); }
|
|
2581
|
+
/* Edit profile / password dialogs */
|
|
2582
|
+
.pf-avatar-row { display: flex; align-items: center; gap: 0.6rem; }
|
|
2583
|
+
.pf-avatar-preview { width: 42px; height: 42px; border-radius: 50%; border: 1px solid var(--border); background: var(--bg-dim); display: inline-flex; align-items: center; justify-content: center; font-size: 1.3rem; flex: none; }
|
|
2584
|
+
.pf-edit-link { font-size: 0.82rem; color: var(--accent); cursor: pointer; text-decoration: none; }
|
|
2585
|
+
.pf-edit-link:hover { text-decoration: underline; }
|
|
2586
|
+
.pf-edit-footer-left { margin-right: auto; }
|
|
2587
|
+
.pf-pw-wrap { position: relative; }
|
|
2588
|
+
.pf-pw-wrap .pf-edit-input { padding-right: 4.2rem; }
|
|
2589
|
+
.pf-pw-eye { position: absolute; right: 0.5rem; top: 50%; transform: translateY(-50%); background: none; border: none; cursor: pointer; color: var(--muted); font-size: 0.76rem; padding: 0.15rem 0.3rem; }
|
|
2590
|
+
.pf-pw-eye:hover { color: var(--text); }
|
|
2591
|
+
.pf-pw-rules { list-style: none; margin: 0.1rem 0 0.5rem; padding: 0; font-size: 0.78rem; color: var(--muted); }
|
|
2592
|
+
.pf-pw-rules li { padding: 0.08rem 0; }
|
|
2593
|
+
.pf-pw-rules li.ok { color: var(--success-fg, var(--text)); }
|