aimeat 1.23.1 → 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 +674 -125
- package/dist/locales/fi.json +712 -163
- package/dist/public/components/ContactCard.js +28 -0
- package/dist/public/css/theme.css +25 -10
- 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 +216 -7
- 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/organisms.js +28 -5
- 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 +1330 -485
- 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/cli/connect/mcp/tools/organisms.d.ts +3 -0
- package/dist/src/cli/connect/mcp/tools/organisms.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/organisms.js +20 -3
- package/dist/src/cli/connect/mcp/tools/organisms.js.map +1 -1
- package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call.js +20 -1
- package/dist/src/cli/connect/tool-call.js.map +1 -1
- 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/mcp/organisms.d.ts +3 -0
- package/dist/src/mcp/organisms.d.ts.map +1 -1
- package/dist/src/mcp/organisms.js +18 -0
- package/dist/src/mcp/organisms.js.map +1 -1
- 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/organisms.d.ts.map +1 -1
- package/dist/src/routes/organisms.js +27 -5
- package/dist/src/routes/organisms.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/services/schema-validator.d.ts.map +1 -1
- package/dist/src/services/schema-validator.js +12 -0
- package/dist/src/services/schema-validator.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
|
+
}
|
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
@usage Loaded first in spa.html <head>; the theme is toggled by /js/theme.js
|
|
11
11
|
which flips the data-theme attribute on <html>.
|
|
12
12
|
@version-history
|
|
13
|
+
v1.19.0 — 2026-06-10 — Controls get their own surface: new --control-bg/--control-border tokens
|
|
14
|
+
(light: white + gray-300; dark: raised #262934 + #4A4E5A). .btn-outline/.btn-ghost drop
|
|
15
|
+
background:transparent (they melted into the page as "framed text") and .input-field drops
|
|
16
|
+
background:var(--bg) (fields were LITERALLY the page color) — all three now use the control
|
|
17
|
+
tokens, buttons additionally get --shadow-sm so they read as pressable.
|
|
13
18
|
v1.18.0 — 2026-06-02 — Component unification (#10 third toast pathway): tokenize the shared .toast color literals. Added a theme-invariant --toast-success-bg (green-500 #22C55E @ .95, the legacy toast green — deliberately NOT --success emerald, which would shift the hue), --toast-danger-bg (= --danger #EF4444 @ .95) and --toast-fg (white), same rationale as the badge palette. The base .toast and the .toast.error/.toast-error/.toast-success modifiers now reference these tokens instead of raw rgba()/#fff. Appearance-preserving: identical resolved values; solid saturated pills intentionally do not flip in dark mode. profile.js keeps its own showToast pathway (distinct .pf.toast-container wrapper + .toast.error markup) — left as a convergence candidate, NOT migrated, to avoid changing DOM/behavior.
|
|
14
19
|
v1.17.0 — 2026-06-02 — Component unification (#26 recipient badge): add a theme-invariant --badge-*-bg palette (wildcard→danger, ghii→purple, organism→success, gaii→blue; domain #F97316 / node #6B7280 kept as own invariant swatches as they have no palette match) + --badge-fg white, so the profile .badge-* recipient classifier can drop its hardcoded hex (#8b5cf6/#f97316/#6b7280/#3b82f6) and dead light-only fallbacks (var(--success,#22c55e)/var(--danger,#ef4444)). Appearance-preserving: values resolve identically and these solid swatches intentionally do not flip in dark mode.
|
|
15
20
|
v1.16.0 — 2026-06-02 — Component unification (#25 pill base): add a canonical token-only .pill shape primitive (inline-flex chip, --radius-full, compact padding, small bold text, pointer + opacity hover) — shape only, no colors; tints come from caller classes. Mirrors the shape the profile .vis-pill already used. The scoped .pf .vis-pill keeps its own shape declaration (the (0,2,0)-beats-bare-.pill specificity trap) but its radius was retokenized to the same --radius-full so the two stay in lockstep.
|
|
@@ -140,6 +145,12 @@
|
|
|
140
145
|
--bg-input: var(--bg);
|
|
141
146
|
--bg-input-focus: #FFFFFF;
|
|
142
147
|
|
|
148
|
+
/* Controls (outline/ghost buttons, input fields) — a surface DISTINCT from both the page bg and
|
|
149
|
+
white cards: white fill + a clearly visible border, so controls read as controls instead of
|
|
150
|
+
"framed text" that melts into the background. */
|
|
151
|
+
--control-bg: #FFFFFF;
|
|
152
|
+
--control-border: #D1D5DB;
|
|
153
|
+
|
|
143
154
|
/* Code */
|
|
144
155
|
--code-bg: #F3F4F6;
|
|
145
156
|
|
|
@@ -238,6 +249,10 @@
|
|
|
238
249
|
--bg-input: #1C1E26;
|
|
239
250
|
--bg-input-focus: #23262F;
|
|
240
251
|
|
|
252
|
+
/* Controls — slightly lighter than the card surface so they read as raised, with a visible border */
|
|
253
|
+
--control-bg: #262934;
|
|
254
|
+
--control-border: #4A4E5A;
|
|
255
|
+
|
|
241
256
|
/* Code */
|
|
242
257
|
--code-bg: #0E0F13;
|
|
243
258
|
|
|
@@ -603,8 +618,8 @@ a { color: inherit; text-decoration: none; }
|
|
|
603
618
|
|
|
604
619
|
.btn-outline {
|
|
605
620
|
padding: 0.65rem 1.5rem;
|
|
606
|
-
background:
|
|
607
|
-
border: 1px solid var(--border);
|
|
621
|
+
background: var(--control-bg);
|
|
622
|
+
border: 1px solid var(--control-border);
|
|
608
623
|
border-radius: var(--radius-sm);
|
|
609
624
|
color: var(--text-dim);
|
|
610
625
|
font-size: 0.84rem;
|
|
@@ -613,15 +628,15 @@ a { color: inherit; text-decoration: none; }
|
|
|
613
628
|
cursor: pointer;
|
|
614
629
|
transition: all 0.15s;
|
|
615
630
|
letter-spacing: 0;
|
|
616
|
-
box-shadow:
|
|
631
|
+
box-shadow: var(--shadow-sm);
|
|
617
632
|
animation: none;
|
|
618
633
|
}
|
|
619
634
|
|
|
620
635
|
.btn-outline:hover {
|
|
621
636
|
border-color: var(--text-muted);
|
|
622
637
|
color: var(--text);
|
|
623
|
-
background:
|
|
624
|
-
box-shadow:
|
|
638
|
+
background: var(--control-bg);
|
|
639
|
+
box-shadow: var(--shadow-sm);
|
|
625
640
|
transform: none;
|
|
626
641
|
}
|
|
627
642
|
|
|
@@ -680,8 +695,8 @@ a { color: inherit; text-decoration: none; }
|
|
|
680
695
|
gap: 0.35rem;
|
|
681
696
|
padding: 7px 16px;
|
|
682
697
|
border-radius: var(--radius-sm);
|
|
683
|
-
border: 1px solid var(--border);
|
|
684
|
-
background:
|
|
698
|
+
border: 1px solid var(--control-border);
|
|
699
|
+
background: var(--control-bg);
|
|
685
700
|
color: var(--text-dim);
|
|
686
701
|
text-decoration: none;
|
|
687
702
|
font-size: 0.81rem;
|
|
@@ -692,7 +707,7 @@ a { color: inherit; text-decoration: none; }
|
|
|
692
707
|
.btn-ghost:hover {
|
|
693
708
|
border-color: var(--text-muted);
|
|
694
709
|
color: var(--text);
|
|
695
|
-
background:
|
|
710
|
+
background: var(--control-bg);
|
|
696
711
|
}
|
|
697
712
|
|
|
698
713
|
/* ── Cards ── */
|
|
@@ -1040,8 +1055,8 @@ a { color: inherit; text-decoration: none; }
|
|
|
1040
1055
|
.input-field {
|
|
1041
1056
|
width: 100%;
|
|
1042
1057
|
padding: 11px 14px;
|
|
1043
|
-
background: var(--bg);
|
|
1044
|
-
border: 1.5px solid var(--border);
|
|
1058
|
+
background: var(--control-bg);
|
|
1059
|
+
border: 1.5px solid var(--control-border);
|
|
1045
1060
|
border-radius: var(--radius-sm);
|
|
1046
1061
|
color: var(--text);
|
|
1047
1062
|
font-family: var(--font);
|
|
@@ -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; }
|