open-managed-agents 0.1.0
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/LICENSE +93 -0
- package/README.md +248 -0
- package/bin/oma.mjs +499 -0
- package/dist/scripts/alpha-openai-compatible-fixture.mjs +134 -0
- package/dist/scripts/alpha-smoke-models.mjs +92 -0
- package/dist/scripts/alpha-smoke.mjs +581 -0
- package/dist/scripts/oma-doctor.js +230 -0
- package/dist/scripts/oma-models.js +299 -0
- package/dist/scripts/oma-workspaces.js +133 -0
- package/dist/src/control-plane/admin/auth.js +43 -0
- package/dist/src/control-plane/admin/routes.js +76 -0
- package/dist/src/control-plane/admin/service.js +102 -0
- package/dist/src/control-plane/admission.js +90 -0
- package/dist/src/control-plane/agents/routes.js +63 -0
- package/dist/src/control-plane/agents/service.js +687 -0
- package/dist/src/control-plane/agents/store.js +391 -0
- package/dist/src/control-plane/agents/types.js +1 -0
- package/dist/src/control-plane/api-constants.js +3 -0
- package/dist/src/control-plane/app.js +907 -0
- package/dist/src/control-plane/console/auth.js +68 -0
- package/dist/src/control-plane/console/static.js +112 -0
- package/dist/src/control-plane/deployment-runtime-config.js +328 -0
- package/dist/src/control-plane/deployment-runtime-event-coordinator.js +25 -0
- package/dist/src/control-plane/deployment-runtime-turn-guard.js +14 -0
- package/dist/src/control-plane/deployment-session-coordinator.js +25 -0
- package/dist/src/control-plane/deployment-session-output-coordinator.js +27 -0
- package/dist/src/control-plane/deployment-storage.js +354 -0
- package/dist/src/control-plane/egress/image.js +48 -0
- package/dist/src/control-plane/egress/policy.js +571 -0
- package/dist/src/control-plane/egress/presets.js +77 -0
- package/dist/src/control-plane/egress/proxy.js +72 -0
- package/dist/src/control-plane/egress/ssrf.js +106 -0
- package/dist/src/control-plane/egress/utils/debug.js +14 -0
- package/dist/src/control-plane/egress/vendor/http-proxy.js +335 -0
- package/dist/src/control-plane/egress/vendor/mitm-ca.js +226 -0
- package/dist/src/control-plane/egress/vendor/mitm-leaf.js +124 -0
- package/dist/src/control-plane/egress/vendor/parent-proxy.js +438 -0
- package/dist/src/control-plane/egress/vendor/request-filter.js +105 -0
- package/dist/src/control-plane/egress/vendor/sandbox-config.js +1 -0
- package/dist/src/control-plane/egress/vendor/tls-terminate-proxy.js +269 -0
- package/dist/src/control-plane/environments/routes.js +54 -0
- package/dist/src/control-plane/environments/service.js +112 -0
- package/dist/src/control-plane/environments/store.js +132 -0
- package/dist/src/control-plane/environments/types.js +1 -0
- package/dist/src/control-plane/errors.js +81 -0
- package/dist/src/control-plane/events/broadcaster.js +217 -0
- package/dist/src/control-plane/events/constants.js +2 -0
- package/dist/src/control-plane/events/persist.js +39 -0
- package/dist/src/control-plane/events/request.js +190 -0
- package/dist/src/control-plane/events/routes.js +159 -0
- package/dist/src/control-plane/events/runtime-helpers.js +134 -0
- package/dist/src/control-plane/events/service.js +1985 -0
- package/dist/src/control-plane/events/session-guards.js +29 -0
- package/dist/src/control-plane/events/sse.js +6 -0
- package/dist/src/control-plane/events/store.js +772 -0
- package/dist/src/control-plane/events/tool-persistence.js +102 -0
- package/dist/src/control-plane/events/types.js +21 -0
- package/dist/src/control-plane/files/routes.js +121 -0
- package/dist/src/control-plane/files/service.js +65 -0
- package/dist/src/control-plane/files/store-common.js +87 -0
- package/dist/src/control-plane/files/store-local.js +488 -0
- package/dist/src/control-plane/files/store-memory.js +270 -0
- package/dist/src/control-plane/files/store.js +2 -0
- package/dist/src/control-plane/files/types.js +7 -0
- package/dist/src/control-plane/http.js +25 -0
- package/dist/src/control-plane/ids.js +43 -0
- package/dist/src/control-plane/logging.js +263 -0
- package/dist/src/control-plane/models/auth-storage-backend.js +238 -0
- package/dist/src/control-plane/models/catalog.js +78 -0
- package/dist/src/control-plane/models/config-security.js +376 -0
- package/dist/src/control-plane/models/deployment-config.js +93 -0
- package/dist/src/control-plane/models/routes.js +32 -0
- package/dist/src/control-plane/models/service.js +138 -0
- package/dist/src/control-plane/observability/instruments.js +65 -0
- package/dist/src/control-plane/observability/metrics.js +125 -0
- package/dist/src/control-plane/observability/routes.js +95 -0
- package/dist/src/control-plane/openapi/document.js +282 -0
- package/dist/src/control-plane/openapi/routes.js +78 -0
- package/dist/src/control-plane/request-idempotency.js +85 -0
- package/dist/src/control-plane/secrets/envelope.js +132 -0
- package/dist/src/control-plane/secrets/master-key.js +44 -0
- package/dist/src/control-plane/secrets/routes.js +20 -0
- package/dist/src/control-plane/secrets/service.js +71 -0
- package/dist/src/control-plane/secrets/store.js +212 -0
- package/dist/src/control-plane/secrets/types.js +3 -0
- package/dist/src/control-plane/sessions/pi/custom-tools.js +146 -0
- package/dist/src/control-plane/sessions/pi/mcp/bridge.js +527 -0
- package/dist/src/control-plane/sessions/pi/mcp/client.js +157 -0
- package/dist/src/control-plane/sessions/pi/mcp/credential.js +28 -0
- package/dist/src/control-plane/sessions/pi/mcp/fetch.js +69 -0
- package/dist/src/control-plane/sessions/pi/mcp/probe.js +202 -0
- package/dist/src/control-plane/sessions/pi/mcp/runtime.js +13 -0
- package/dist/src/control-plane/sessions/pi/runner.js +1104 -0
- package/dist/src/control-plane/sessions/pi/sandbox/cma-glob.js +388 -0
- package/dist/src/control-plane/sessions/pi/sandbox/cma-grep.js +124 -0
- package/dist/src/control-plane/sessions/pi/sandbox/docker-egress.js +347 -0
- package/dist/src/control-plane/sessions/pi/sandbox/docker.js +1589 -0
- package/dist/src/control-plane/sessions/pi/sandbox/glob.js +48 -0
- package/dist/src/control-plane/sessions/pi/sandbox/image.js +7 -0
- package/dist/src/control-plane/sessions/pi/sandbox/microsandbox.js +1677 -0
- package/dist/src/control-plane/sessions/pi/sandbox/provider.js +561 -0
- package/dist/src/control-plane/sessions/pi/sandbox/selection.js +168 -0
- package/dist/src/control-plane/sessions/pi/span-normalizer.js +82 -0
- package/dist/src/control-plane/sessions/pi/tool-permissions.js +392 -0
- package/dist/src/control-plane/sessions/pi/translator.js +100 -0
- package/dist/src/control-plane/sessions/request.js +164 -0
- package/dist/src/control-plane/sessions/resources.js +63 -0
- package/dist/src/control-plane/sessions/routes.js +88 -0
- package/dist/src/control-plane/sessions/serialize.js +24 -0
- package/dist/src/control-plane/sessions/service.js +733 -0
- package/dist/src/control-plane/sessions/store.js +538 -0
- package/dist/src/control-plane/sessions/types.js +1 -0
- package/dist/src/control-plane/skills/archive.js +169 -0
- package/dist/src/control-plane/skills/routes.js +41 -0
- package/dist/src/control-plane/skills/service.js +29 -0
- package/dist/src/control-plane/skills/store.js +233 -0
- package/dist/src/control-plane/skills/types.js +5 -0
- package/dist/src/control-plane/sqlite-transaction.js +15 -0
- package/dist/src/control-plane/vaults/mcp-oauth-validate.js +165 -0
- package/dist/src/control-plane/vaults/oauth-refresh-ticker.js +43 -0
- package/dist/src/control-plane/vaults/oauth-refresh.js +448 -0
- package/dist/src/control-plane/vaults/routes.js +66 -0
- package/dist/src/control-plane/vaults/service.js +553 -0
- package/dist/src/control-plane/vaults/store.js +691 -0
- package/dist/src/control-plane/vaults/types.js +1 -0
- package/dist/src/control-plane/wake-loop.js +65 -0
- package/dist/src/control-plane/wiring.js +92 -0
- package/dist/src/control-plane/workspace.js +4 -0
- package/dist/src/control-plane/workspaces/store.js +158 -0
- package/dist/src/egress-proxy-main.js +103 -0
- package/dist/src/main.js +124 -0
- package/dist/src/types/agents.js +1 -0
- package/dist/src/types/common.js +1 -0
- package/dist/src/types/environments.js +1 -0
- package/dist/src/types/events.js +121 -0
- package/dist/src/types/files.js +1 -0
- package/dist/src/types/json.js +19 -0
- package/dist/src/types/sessions.js +1 -0
- package/dist/ui/managed-agents-console/README.md +52 -0
- package/dist/ui/managed-agents-console/docs/agents.md +23 -0
- package/dist/ui/managed-agents-console/docs/console.md +23 -0
- package/dist/ui/managed-agents-console/docs/dreams.md +5 -0
- package/dist/ui/managed-agents-console/docs/environments.md +27 -0
- package/dist/ui/managed-agents-console/docs/events.md +19 -0
- package/dist/ui/managed-agents-console/docs/files.md +17 -0
- package/dist/ui/managed-agents-console/docs/github.md +11 -0
- package/dist/ui/managed-agents-console/docs/integrations.md +19 -0
- package/dist/ui/managed-agents-console/docs/memory.md +11 -0
- package/dist/ui/managed-agents-console/docs/migration.md +17 -0
- package/dist/ui/managed-agents-console/docs/multiagent.md +11 -0
- package/dist/ui/managed-agents-console/docs/outcomes.md +11 -0
- package/dist/ui/managed-agents-console/docs/overview.md +41 -0
- package/dist/ui/managed-agents-console/docs/permissions.md +24 -0
- package/dist/ui/managed-agents-console/docs/quickstart.md +51 -0
- package/dist/ui/managed-agents-console/docs/reference.md +27 -0
- package/dist/ui/managed-agents-console/docs/sandbox-reference.md +19 -0
- package/dist/ui/managed-agents-console/docs/sandbox-security.md +15 -0
- package/dist/ui/managed-agents-console/docs/scheduled-deployments.md +5 -0
- package/dist/ui/managed-agents-console/docs/self-hosted-sandboxes.md +15 -0
- package/dist/ui/managed-agents-console/docs/session-operations.md +21 -0
- package/dist/ui/managed-agents-console/docs/sessions.md +21 -0
- package/dist/ui/managed-agents-console/docs/skills.md +15 -0
- package/dist/ui/managed-agents-console/docs/tools.md +23 -0
- package/dist/ui/managed-agents-console/docs/vaults.md +19 -0
- package/dist/ui/managed-agents-console/docs/webhooks.md +11 -0
- package/dist/ui/managed-agents-console/index.html +47 -0
- package/dist/ui/managed-agents-console/serve.mjs +116 -0
- package/dist/ui/managed-agents-console/src/agents-files.jsx +273 -0
- package/dist/ui/managed-agents-console/src/api.js +1043 -0
- package/dist/ui/managed-agents-console/src/app.jsx +633 -0
- package/dist/ui/managed-agents-console/src/auth.jsx +215 -0
- package/dist/ui/managed-agents-console/src/console.css +733 -0
- package/dist/ui/managed-agents-console/src/data.js +188 -0
- package/dist/ui/managed-agents-console/src/detail.jsx +719 -0
- package/dist/ui/managed-agents-console/src/docs.jsx +200 -0
- package/dist/ui/managed-agents-console/src/environments.jsx +365 -0
- package/dist/ui/managed-agents-console/src/forms.jsx +494 -0
- package/dist/ui/managed-agents-console/src/icons.jsx +48 -0
- package/dist/ui/managed-agents-console/src/skills.jsx +21 -0
- package/dist/ui/managed-agents-console/src/sse.js +185 -0
- package/dist/ui/managed-agents-console/src/states.jsx +90 -0
- package/dist/ui/managed-agents-console/src/tweaks-panel.jsx +541 -0
- package/dist/ui/managed-agents-console/src/ui.jsx +190 -0
- package/dist/ui/managed-agents-console/src/vaults-data.js +89 -0
- package/dist/ui/managed-agents-console/src/vaults.jsx +171 -0
- package/dist/ui/managed-agents-console/vendor/babel.min.js +4 -0
- package/dist/ui/managed-agents-console/vendor/react-dom.production.min.js +267 -0
- package/dist/ui/managed-agents-console/vendor/react.production.min.js +31 -0
- package/dist/ui/openapi-docs/VENDOR.md +27 -0
- package/dist/ui/openapi-docs/index.html +16 -0
- package/dist/ui/openapi-docs/swagger-initializer.js +14 -0
- package/dist/ui/openapi-docs/vendor/LICENSE +202 -0
- package/dist/ui/openapi-docs/vendor/NOTICE +2 -0
- package/dist/ui/openapi-docs/vendor/swagger-ui-bundle.js +2 -0
- package/dist/ui/openapi-docs/vendor/swagger-ui-standalone-preset.js +2 -0
- package/dist/ui/openapi-docs/vendor/swagger-ui.css +3 -0
- package/package.json +53 -0
|
@@ -0,0 +1,733 @@
|
|
|
1
|
+
/* console.css — OMA Managed Agents console · dense graphite theme
|
|
2
|
+
CMA-inspired visual language, with OMA branding and behavior. */
|
|
3
|
+
|
|
4
|
+
:root {
|
|
5
|
+
/* dense, neutral graphite surfaces */
|
|
6
|
+
--bg: #181916;
|
|
7
|
+
--surface: #11120f;
|
|
8
|
+
--surface-2: #20211e;
|
|
9
|
+
--raised: #30312d;
|
|
10
|
+
--hover: rgba(255,255,255,.045);
|
|
11
|
+
|
|
12
|
+
--border: #292a26;
|
|
13
|
+
--border-2: #41423d;
|
|
14
|
+
|
|
15
|
+
--ink: #f1f0eb;
|
|
16
|
+
--soft: #b8b8b0;
|
|
17
|
+
--faint: #898a82;
|
|
18
|
+
--dim: #66675f;
|
|
19
|
+
|
|
20
|
+
/* single accent */
|
|
21
|
+
--accent: #e6b04b;
|
|
22
|
+
--accent-2: #f0c873;
|
|
23
|
+
--accent-ink: #1a1a16;
|
|
24
|
+
--accent-wash: rgba(230,176,75,.14);
|
|
25
|
+
--accent-line: rgba(230,176,75,.34);
|
|
26
|
+
|
|
27
|
+
/* semantic */
|
|
28
|
+
--green:#66c28c; --green-wash:rgba(102,194,140,.14);
|
|
29
|
+
--red: #ec8170; --red-wash:rgba(236,129,112,.14);
|
|
30
|
+
--idle: #9a9b94; --idle-wash:rgba(154,155,148,.12);
|
|
31
|
+
|
|
32
|
+
/* role tints (event scanning) */
|
|
33
|
+
--r-user:#d98fb0; --r-user-bg:rgba(217,143,176,.13);
|
|
34
|
+
--r-agent:#7ba4e6; --r-agent-bg:rgba(123,164,230,.13);
|
|
35
|
+
--r-tool:#d6ab5e; --r-tool-bg:rgba(214,171,94,.13);
|
|
36
|
+
--r-span:#5fc187; --r-span-bg:rgba(95,193,135,.13);
|
|
37
|
+
--r-sys:#9aa2ae; --r-sys-bg:rgba(154,162,174,.11);
|
|
38
|
+
|
|
39
|
+
--shadow: 0 1px 0 rgba(255,255,255,.025) inset, 0 12px 30px -18px rgba(0,0,0,.7);
|
|
40
|
+
--r-sm:7px; --r-md:9px; --r-lg:12px;
|
|
41
|
+
|
|
42
|
+
--font: 'Geist', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
43
|
+
--mono: 'Geist Mono', ui-monospace, 'SF Mono', 'JetBrains Mono', monospace;
|
|
44
|
+
|
|
45
|
+
--row-pad: 12px; /* density-controlled */
|
|
46
|
+
--gutter: 30px;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
:root.darker { --bg:#10110f; --surface:#0d0e0c; --surface-2:#181916; --raised:#282925; }
|
|
50
|
+
:root.compact { --row-pad:7px; --gutter:18px; }
|
|
51
|
+
|
|
52
|
+
* { box-sizing:border-box; }
|
|
53
|
+
html,body { margin:0; height:100%; }
|
|
54
|
+
body {
|
|
55
|
+
background:var(--bg); color:var(--ink);
|
|
56
|
+
font-family:var(--font); font-size:14px; line-height:1.5;
|
|
57
|
+
-webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
|
|
58
|
+
}
|
|
59
|
+
::selection { background:var(--accent-wash); }
|
|
60
|
+
.mono { font-family:var(--mono); font-feature-settings:"tnum" 1, "ss01" 1; letter-spacing:-.1px; }
|
|
61
|
+
.scroll { overflow:auto; scrollbar-width:thin; scrollbar-color:var(--border-2) transparent; }
|
|
62
|
+
.scroll::-webkit-scrollbar { width:9px; height:9px; }
|
|
63
|
+
.scroll::-webkit-scrollbar-thumb { background:var(--border-2); border-radius:9px; border:2px solid transparent; background-clip:padding-box; }
|
|
64
|
+
.scroll::-webkit-scrollbar-thumb:hover { background:rgba(255,255,255,.2); background-clip:padding-box; }
|
|
65
|
+
|
|
66
|
+
/* ───────── app shell ───────── */
|
|
67
|
+
.app { display:grid; grid-template-columns:248px 1fr; height:100vh; min-height:100dvh; }
|
|
68
|
+
.sidebar {
|
|
69
|
+
background:#0f100e; border-right:1px solid var(--border);
|
|
70
|
+
display:flex; flex-direction:column; padding:16px 14px; gap:3px; min-width:0;
|
|
71
|
+
}
|
|
72
|
+
.brand { display:flex; align-items:center; gap:10px; padding:5px 8px 7px; }
|
|
73
|
+
.brand-mark {
|
|
74
|
+
width:26px; height:26px; border-radius:7px; flex:0 0 auto;
|
|
75
|
+
background:linear-gradient(150deg,var(--accent),#c98a2e);
|
|
76
|
+
display:flex; align-items:center; justify-content:center;
|
|
77
|
+
color:var(--accent-ink); font-weight:700; font-size:14px;
|
|
78
|
+
box-shadow:0 0 0 1px rgba(0,0,0,.2), 0 2px 8px -2px rgba(234,180,76,.5);
|
|
79
|
+
}
|
|
80
|
+
.brand-name { font-weight:600; font-size:16px; letter-spacing:-.25px; }
|
|
81
|
+
.brand-name small { display:block; font-size:11.5px; color:var(--faint); font-weight:400; letter-spacing:0; }
|
|
82
|
+
|
|
83
|
+
.workspace-switcher { position:relative; }
|
|
84
|
+
.ws {
|
|
85
|
+
margin:10px 2px 15px; padding:9px 10px; border:1px solid var(--border);
|
|
86
|
+
border-radius:var(--r-md); background:#141512; display:flex; align-items:center; gap:9px;
|
|
87
|
+
cursor:pointer; transition:border-color .15s, background .15s; width:calc(100% - 4px); color:var(--ink); font:inherit; text-align:left;
|
|
88
|
+
}
|
|
89
|
+
.ws:hover { border-color:var(--border-2); }
|
|
90
|
+
.ws-dot { width:16px; height:16px; border-radius:5px; background:var(--surface-2); border:1px solid var(--border-2); flex:0 0 auto; }
|
|
91
|
+
.ws-name { font-size:13px; font-weight:500; flex:1; }
|
|
92
|
+
.ws-chev { color:var(--faint); }
|
|
93
|
+
.workspace-menu { position:absolute; z-index:20; top:48px; left:2px; right:2px; padding:5px; border:1px solid var(--border-2); border-radius:var(--r-md); background:var(--surface); box-shadow:0 12px 28px rgba(0,0,0,.32); }
|
|
94
|
+
.workspace-menu-label { padding:6px 8px 4px; color:var(--faint); font-size:11px; font-weight:600; text-transform:uppercase; letter-spacing:.06em; }
|
|
95
|
+
.workspace-menu-note { padding:8px; color:var(--soft); font-size:12px; }
|
|
96
|
+
.workspace-menu-item { display:block; width:100%; border:0; border-radius:var(--r-sm); padding:8px; background:transparent; color:var(--ink); cursor:pointer; font:inherit; font-size:13px; text-align:left; }
|
|
97
|
+
.workspace-menu-item:hover { background:var(--hover); }
|
|
98
|
+
.workspace-menu-item small { display:block; margin-top:2px; color:var(--faint); font-size:10px; }
|
|
99
|
+
.workspace-signout { margin-top:4px; border-top:1px solid var(--border); color:var(--soft); }
|
|
100
|
+
|
|
101
|
+
.nav-label { font-size:10.5px; font-weight:650; letter-spacing:.09em; color:var(--dim); padding:11px 9px 6px; text-transform:uppercase; }
|
|
102
|
+
.nav-item {
|
|
103
|
+
display:flex; align-items:center; gap:10px; padding:8px 10px; border-radius:var(--r-sm);
|
|
104
|
+
border:0; width:100%; background:transparent; color:var(--soft); cursor:pointer; font:inherit; font-size:13.5px; font-weight:450; text-align:left;
|
|
105
|
+
transition:background .12s, color .12s; position:relative; user-select:none;
|
|
106
|
+
}
|
|
107
|
+
.nav-item svg { width:16px; height:16px; flex:0 0 auto; opacity:.85; }
|
|
108
|
+
.nav-item:hover { background:var(--hover); color:var(--ink); }
|
|
109
|
+
.nav-item.active { background:#1d1e1a; color:var(--ink); font-weight:550; }
|
|
110
|
+
.nav-item.active::before { content:""; position:absolute; left:-14px; top:7px; bottom:7px; width:3px; border-radius:0 3px 3px 0; background:var(--accent); }
|
|
111
|
+
.nav-item.dim { color:var(--faint); }
|
|
112
|
+
.nav-item.dim:hover { color:var(--soft); }
|
|
113
|
+
.sidebar-spacer { flex:1; }
|
|
114
|
+
.sidebar-foot { border-top:1px solid var(--border); margin-top:8px; padding-top:10px; }
|
|
115
|
+
|
|
116
|
+
.main { display:flex; flex-direction:column; min-width:0; overflow:hidden; }
|
|
117
|
+
.main-scroll { flex:1; overflow:auto; padding:32px var(--gutter) 48px; }
|
|
118
|
+
|
|
119
|
+
/* ───────── page chrome ───────── */
|
|
120
|
+
.page-head { display:flex; align-items:flex-start; justify-content:space-between; gap:16px; margin-bottom:22px; }
|
|
121
|
+
.page-head > div:first-child { flex:1; min-width:0; }
|
|
122
|
+
.page-title { font-size:25px; font-weight:600; letter-spacing:-.55px; margin:0; }
|
|
123
|
+
.page-sub { color:var(--soft); font-size:14px; margin-top:4px; }
|
|
124
|
+
.crumbs { display:flex; align-items:center; gap:8px; color:var(--soft); font-size:13px; margin-bottom:14px; white-space:nowrap; }
|
|
125
|
+
.crumbs a { color:var(--soft); text-decoration:none; cursor:pointer; }
|
|
126
|
+
.crumbs a:hover { color:var(--ink); }
|
|
127
|
+
.crumbs .sep { color:var(--dim); }
|
|
128
|
+
|
|
129
|
+
/* ───────── controls ───────── */
|
|
130
|
+
.btn {
|
|
131
|
+
display:inline-flex; align-items:center; gap:7px; height:34px; padding:0 14px;
|
|
132
|
+
border-radius:var(--r-md); border:1px solid var(--border-2); background:#292a26;
|
|
133
|
+
color:var(--ink); font:inherit; font-size:13.5px; font-weight:500; cursor:pointer;
|
|
134
|
+
transition:background .14s, border-color .14s, transform .05s; white-space:nowrap;
|
|
135
|
+
}
|
|
136
|
+
.btn:hover { background:#353631; border-color:#595a52; }
|
|
137
|
+
.btn:active { transform:translateY(1px); }
|
|
138
|
+
.btn:disabled,.btn:disabled:hover {
|
|
139
|
+
opacity:.5; cursor:not-allowed; transform:none; background:var(--surface-2);
|
|
140
|
+
border-color:var(--border-2);
|
|
141
|
+
}
|
|
142
|
+
.btn svg { width:15px; height:15px; }
|
|
143
|
+
.btn-primary { background:#f4f3ed; color:#1a1a16; border-color:transparent; font-weight:600; }
|
|
144
|
+
.btn-primary:hover { background:#fffefa; }
|
|
145
|
+
.btn-ghost { background:transparent; border-color:transparent; color:var(--soft); }
|
|
146
|
+
.btn-ghost:hover { background:var(--hover); color:var(--ink); }
|
|
147
|
+
.btn-accent { background:var(--accent); color:var(--accent-ink); border-color:transparent; font-weight:600; }
|
|
148
|
+
.btn-accent:hover { background:var(--accent-2); }
|
|
149
|
+
.btn-sm { height:28px; padding:0 11px; font-size:12.5px; border-radius:var(--r-sm); }
|
|
150
|
+
.btn-icon { width:34px; padding:0; justify-content:center; }
|
|
151
|
+
.btn-danger { color:var(--red); }
|
|
152
|
+
.btn-danger:hover { background:var(--red-wash); border-color:transparent; }
|
|
153
|
+
.btn.ro { opacity:.55; }
|
|
154
|
+
.action-wrap { display:flex; flex-direction:column; align-items:flex-end; gap:4px; }
|
|
155
|
+
.endpoint-hint { color:var(--faint); font-size:10.5px; line-height:1; }
|
|
156
|
+
|
|
157
|
+
.field {
|
|
158
|
+
display:flex; align-items:center; gap:8px; height:34px; padding:0 11px;
|
|
159
|
+
border:1px solid var(--border); border-radius:var(--r-md); background:#242521;
|
|
160
|
+
color:var(--soft); font-size:13px; transition:border-color .15s;
|
|
161
|
+
}
|
|
162
|
+
.field:focus-within { border-color:var(--accent-line); }
|
|
163
|
+
.field svg { width:15px; height:15px; color:var(--faint); flex:0 0 auto; }
|
|
164
|
+
.field input { background:none; border:none; outline:none; color:var(--ink); font:inherit; font-size:13px; width:100%; }
|
|
165
|
+
.field input::placeholder { color:var(--faint); }
|
|
166
|
+
.result-count { color:var(--faint); font-size:11.5px; white-space:nowrap; }
|
|
167
|
+
.select { cursor:pointer; gap:6px; }
|
|
168
|
+
.select b { color:var(--ink); font-weight:500; }
|
|
169
|
+
.select .chev { margin-left:auto; color:var(--faint); }
|
|
170
|
+
.toolbar { display:flex; align-items:center; gap:10px; margin-bottom:14px; flex-wrap:wrap; }
|
|
171
|
+
.grow { flex:1; }
|
|
172
|
+
|
|
173
|
+
/* ───────── pills / badges / status ───────── */
|
|
174
|
+
.pill {
|
|
175
|
+
display:inline-flex; align-items:center; gap:6px; height:23px; padding:0 9px;
|
|
176
|
+
border-radius:999px; background:var(--surface-2); border:1px solid var(--border);
|
|
177
|
+
color:var(--soft); font-size:12px; font-weight:500; white-space:nowrap;
|
|
178
|
+
}
|
|
179
|
+
.pill svg { width:12px; height:12px; opacity:.8; }
|
|
180
|
+
.badge {
|
|
181
|
+
display:inline-flex; align-items:center; gap:6px; padding:2px 8px; border-radius:999px;
|
|
182
|
+
font-size:11.5px; font-weight:550; line-height:1.5; white-space:nowrap;
|
|
183
|
+
}
|
|
184
|
+
.badge .dot { width:6px; height:6px; border-radius:50%; flex:0 0 auto; }
|
|
185
|
+
.st-running,.st-active { color:var(--green); background:var(--green-wash); }
|
|
186
|
+
.st-running .dot,.st-active .dot { background:var(--green); box-shadow:0 0 0 3px var(--green-wash); }
|
|
187
|
+
.st-rescheduling { color:var(--accent); background:var(--accent-wash); }
|
|
188
|
+
.st-rescheduling .dot { background:var(--accent); box-shadow:0 0 0 3px var(--accent-wash); }
|
|
189
|
+
.st-idle { color:var(--soft); background:var(--idle-wash); }
|
|
190
|
+
.st-idle .dot { background:var(--idle); }
|
|
191
|
+
.st-error { color:var(--red); background:var(--red-wash); }
|
|
192
|
+
.st-error .dot { background:var(--red); }
|
|
193
|
+
.st-archived,.st-terminated { color:var(--faint); background:var(--idle-wash); }
|
|
194
|
+
.st-archived .dot,.st-terminated .dot { background:var(--faint); }
|
|
195
|
+
.st-open { color:var(--accent); background:var(--accent-wash); }
|
|
196
|
+
.st-open .dot { background:var(--accent); }
|
|
197
|
+
.st-action { color:var(--accent); background:var(--accent-wash); }
|
|
198
|
+
.st-action .dot { background:var(--accent); box-shadow:0 0 0 3px var(--accent-wash); }
|
|
199
|
+
|
|
200
|
+
/* ───────── panel / table ───────── */
|
|
201
|
+
.panel { background:transparent; border:1px solid var(--border); border-radius:var(--r-lg); box-shadow:none; }
|
|
202
|
+
.table { width:100%; }
|
|
203
|
+
.thead, .trow { display:flex; align-items:center; gap:14px; padding:0 16px; }
|
|
204
|
+
.thead { height:42px; border-bottom:1px solid var(--border); }
|
|
205
|
+
.th { font-size:11.5px; font-weight:600; color:var(--faint); letter-spacing:.02em; text-transform:none; }
|
|
206
|
+
.trow {
|
|
207
|
+
min-height:0; padding-top:var(--row-pad); padding-bottom:var(--row-pad);
|
|
208
|
+
border-bottom:1px solid var(--border); cursor:pointer; transition:background .1s;
|
|
209
|
+
}
|
|
210
|
+
.trow:last-child { border-bottom:none; }
|
|
211
|
+
.trow:hover { background:#1d1e1a; }
|
|
212
|
+
.trow.sel { background:var(--accent-wash); }
|
|
213
|
+
.trow.sel::before { content:""; }
|
|
214
|
+
.td { min-width:0; font-size:13.5px; }
|
|
215
|
+
.td.ell { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
|
|
216
|
+
.cell-strong { font-weight:500; color:var(--ink); white-space:nowrap; }
|
|
217
|
+
.cell-sub { font-size:11.5px; color:var(--faint); margin-top:2px; }
|
|
218
|
+
.checkbox { width:15px; height:15px; border-radius:4px; border:1.5px solid var(--border-2); flex:0 0 auto; cursor:pointer; }
|
|
219
|
+
.checkbox.on { background:var(--accent); border-color:var(--accent); }
|
|
220
|
+
.kebab { color:var(--faint); cursor:pointer; padding:4px; border-radius:5px; line-height:0; }
|
|
221
|
+
.kebab:hover { background:var(--hover); color:var(--ink); }
|
|
222
|
+
|
|
223
|
+
.empty { padding:48px; text-align:center; color:var(--faint); font-size:13.5px; }
|
|
224
|
+
.pager { display:flex; gap:6px; margin-top:14px; }
|
|
225
|
+
.pager .btn { width:32px; height:30px; padding:0; justify-content:center; }
|
|
226
|
+
|
|
227
|
+
/* ───────── tabs (segmented) ───────── */
|
|
228
|
+
.tabs { display:inline-flex; padding:3px; gap:2px; background:var(--bg); border:1px solid var(--border); border-radius:var(--r-md); }
|
|
229
|
+
.tab { padding:5px 13px; border-radius:var(--r-sm); font-size:13px; font-weight:500; color:var(--soft); cursor:pointer; transition:background .12s,color .12s; }
|
|
230
|
+
.tab:hover { color:var(--ink); }
|
|
231
|
+
.tab.active { background:var(--surface-2); color:var(--ink); box-shadow:0 1px 2px rgba(0,0,0,.25); }
|
|
232
|
+
|
|
233
|
+
/* ───────── session detail ───────── */
|
|
234
|
+
.sess-head { display:flex; align-items:flex-start; justify-content:space-between; gap:16px; margin-bottom:14px; }
|
|
235
|
+
.sess-title { display:flex; align-items:center; gap:12px; }
|
|
236
|
+
.sess-title h1 { font-size:21px; font-weight:600; letter-spacing:-.3px; margin:0; white-space:nowrap; }
|
|
237
|
+
.meta-row { display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-top:9px; color:var(--soft); }
|
|
238
|
+
.meta-row .m { display:inline-flex; align-items:center; gap:5px; font-size:12.5px; white-space:nowrap; }
|
|
239
|
+
.meta-row .m svg { width:13px; height:13px; opacity:.7; }
|
|
240
|
+
.meta-row .dotsep { color:var(--dim); }
|
|
241
|
+
|
|
242
|
+
.detail-grid { display:grid; grid-template-columns:1fr 340px; gap:14px; min-height:0; }
|
|
243
|
+
.detail-grid.threecol { grid-template-columns:150px 1fr 320px; }
|
|
244
|
+
.detail-grid.full { grid-template-columns:1fr; }
|
|
245
|
+
.detail-grid > * { min-width:0; }
|
|
246
|
+
.stream { display:flex; flex-direction:column; min-height:0; }
|
|
247
|
+
.stream-body { min-height:0; }
|
|
248
|
+
|
|
249
|
+
.scrubber { height:24px; border-radius:7px; background:var(--bg); border:1px solid var(--border); position:relative; margin-bottom:12px; overflow:hidden; }
|
|
250
|
+
.scrubber .fill { position:absolute; left:0; top:0; bottom:0; background:var(--accent-wash); }
|
|
251
|
+
.scrubber .hd { position:absolute; top:3px; bottom:3px; width:3px; border-radius:3px; background:var(--accent); }
|
|
252
|
+
|
|
253
|
+
/* event rows */
|
|
254
|
+
.ev { display:flex; align-items:center; gap:11px; padding:10px 14px; border-bottom:1px solid var(--border); cursor:pointer; transition:background .1s; }
|
|
255
|
+
.ev:last-child { border-bottom:none; }
|
|
256
|
+
.ev:hover { background:var(--hover); }
|
|
257
|
+
.ev.sel { background:var(--accent-wash); box-shadow:inset 2.5px 0 0 var(--accent); }
|
|
258
|
+
.role { display:inline-flex; align-items:center; justify-content:center; width:52px; height:21px; flex:0 0 auto; border-radius:5px; font-size:11px; font-weight:600; letter-spacing:.01em; }
|
|
259
|
+
.role.user { color:var(--r-user); background:var(--r-user-bg); }
|
|
260
|
+
.role.agent { color:var(--r-agent); background:var(--r-agent-bg); }
|
|
261
|
+
.role.tool { color:var(--r-tool); background:var(--r-tool-bg); }
|
|
262
|
+
.role.span { color:var(--r-span); background:var(--r-span-bg); }
|
|
263
|
+
.role.sys { color:var(--r-sys); background:var(--r-sys-bg); }
|
|
264
|
+
.ev-text { flex:1; min-width:0; font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; color:var(--ink); }
|
|
265
|
+
.ev-type { flex:0 0 auto; font-size:12px; color:var(--soft); }
|
|
266
|
+
.ev-tok { font-size:11.5px; color:var(--faint); flex:0 0 auto; }
|
|
267
|
+
.ev-time { font-size:11.5px; color:var(--faint); flex:0 0 auto; width:50px; text-align:right; }
|
|
268
|
+
|
|
269
|
+
/* type filter chips */
|
|
270
|
+
.chips { display:flex; gap:7px; flex-wrap:wrap; margin-bottom:12px; }
|
|
271
|
+
.chip { display:inline-flex; align-items:center; gap:6px; padding:4px 10px; border-radius:999px; border:1px solid var(--border); background:var(--surface-2); color:var(--soft); font-size:12px; font-weight:500; cursor:pointer; transition:.12s; }
|
|
272
|
+
.chip:hover { border-color:var(--border-2); color:var(--ink); }
|
|
273
|
+
.chip.on { background:var(--accent-wash); border-color:var(--accent-line); color:var(--accent); }
|
|
274
|
+
.chip .x { width:12px; height:12px; border-radius:3px; border:1.5px solid currentColor; opacity:.5; }
|
|
275
|
+
.chip.on .x { background:var(--accent); border-color:var(--accent); opacity:1; }
|
|
276
|
+
|
|
277
|
+
/* detail / inspector panel */
|
|
278
|
+
.inspector { display:flex; flex-direction:column; min-height:0; }
|
|
279
|
+
.insp-head { display:flex; align-items:center; gap:10px; padding:14px 16px; border-bottom:1px solid var(--border); }
|
|
280
|
+
.insp-head h3 { margin:0; font-size:15px; font-weight:600; }
|
|
281
|
+
.insp-body { padding:14px 16px; display:flex; flex-direction:column; gap:13px; }
|
|
282
|
+
.sec-label { font-size:11px; font-weight:600; letter-spacing:.05em; text-transform:uppercase; color:var(--faint); }
|
|
283
|
+
.kv { display:flex; align-items:center; justify-content:space-between; gap:12px; font-size:12.5px; }
|
|
284
|
+
.kv .k { color:var(--soft); }
|
|
285
|
+
.kv .v { color:var(--ink); }
|
|
286
|
+
.divider { height:1px; background:var(--border); }
|
|
287
|
+
.content-block { font-size:13px; line-height:1.6; color:var(--ink); }
|
|
288
|
+
|
|
289
|
+
.code { background:#14171c; border:1px solid var(--border); border-radius:var(--r-sm); padding:12px 13px; overflow:auto; }
|
|
290
|
+
.darker .code { background:#0d0f13; }
|
|
291
|
+
.code pre { margin:0; font-family:var(--mono); font-size:12px; line-height:1.65; color:#c7cdd6; white-space:pre; }
|
|
292
|
+
.code .k { color:var(--r-agent); } .code .s { color:var(--green); } .code .n { color:var(--accent); } .code .p { color:var(--faint); }
|
|
293
|
+
|
|
294
|
+
/* composer */
|
|
295
|
+
.composer { display:flex; align-items:center; gap:10px; padding:9px 10px 9px 14px; border:1px solid var(--border); border-radius:var(--r-lg); background:var(--surface); margin-top:12px; transition:border-color .15s; }
|
|
296
|
+
.composer:focus-within { border-color:var(--accent-line); }
|
|
297
|
+
.composer input { flex:1; background:none; border:none; outline:none; color:var(--ink); font:inherit; font-size:13.5px; }
|
|
298
|
+
.composer input::placeholder { color:var(--faint); }
|
|
299
|
+
|
|
300
|
+
/* section rail (three-col) */
|
|
301
|
+
.rail { display:flex; flex-direction:column; gap:3px; }
|
|
302
|
+
.rail-item { display:flex; align-items:center; gap:9px; padding:8px 10px; border-radius:var(--r-sm); color:var(--soft); font-size:13px; cursor:pointer; transition:.12s; }
|
|
303
|
+
.rail-item svg { width:15px; height:15px; opacity:.8; }
|
|
304
|
+
.rail-item:hover { background:var(--hover); color:var(--ink); }
|
|
305
|
+
.rail-item.active { background:var(--accent-wash); color:var(--ink); font-weight:550; }
|
|
306
|
+
|
|
307
|
+
/* span waterfall */
|
|
308
|
+
.axis { display:flex; justify-content:space-between; padding:0 4px 0 158px; margin-bottom:14px; }
|
|
309
|
+
.axis span { font-size:11px; color:var(--faint); }
|
|
310
|
+
.span-row { display:flex; align-items:center; gap:12px; height:30px; }
|
|
311
|
+
.span-label { width:150px; flex:0 0 auto; display:flex; align-items:center; gap:8px; min-width:0; }
|
|
312
|
+
.span-track { flex:1; position:relative; height:26px; }
|
|
313
|
+
.span-track::before { content:""; position:absolute; left:0; right:0; top:50%; border-top:1px dashed var(--border); }
|
|
314
|
+
.span-bar { position:absolute; top:2px; height:22px; border-radius:5px; display:flex; align-items:center; padding:0 8px; font-size:10.5px; border:1px solid; white-space:nowrap; overflow:hidden; }
|
|
315
|
+
.span-bar.model { background:var(--r-agent-bg); border-color:var(--r-agent); color:var(--r-agent); }
|
|
316
|
+
.span-bar.tool { background:var(--r-tool-bg); border-color:var(--r-tool); color:var(--r-tool); }
|
|
317
|
+
.span-bar.open { background:var(--accent-wash); border-color:var(--accent-line); color:var(--accent); border-style:dashed; }
|
|
318
|
+
.span-bar.error { background:var(--red-wash); border-color:var(--red); color:var(--red); }
|
|
319
|
+
.span-note { display:flex; justify-content:space-between; gap:12px; color:var(--faint); font-size:12px; margin-bottom:12px; }
|
|
320
|
+
.legend { display:flex; gap:18px; margin-top:18px; padding-top:16px; border-top:1px solid var(--border); }
|
|
321
|
+
.legend span { display:inline-flex; align-items:center; gap:7px; font-size:12px; color:var(--soft); }
|
|
322
|
+
.legend i { width:13px; height:13px; border-radius:4px; border:1px solid; }
|
|
323
|
+
|
|
324
|
+
/* agent detail */
|
|
325
|
+
.section { margin-bottom:22px; }
|
|
326
|
+
.prompt-box { background:#0d0e0c; border:1px solid var(--border); border-radius:var(--r-md); padding:14px 15px; font-size:13px; line-height:1.62; color:var(--soft); }
|
|
327
|
+
.tool-card { display:flex; align-items:center; gap:12px; padding:12px 14px; }
|
|
328
|
+
.tool-ico { width:34px; height:34px; border-radius:8px; background:var(--surface-2); border:1px solid var(--border); display:flex; align-items:center; justify-content:center; color:var(--accent); flex:0 0 auto; }
|
|
329
|
+
.disclosure { display:flex; align-items:center; justify-content:space-between; padding:11px 14px; border-top:1px solid var(--border); cursor:pointer; }
|
|
330
|
+
.linked { display:flex; align-items:center; justify-content:space-between; padding:9px 0; border-bottom:1px solid var(--border); font-size:13px; }
|
|
331
|
+
.linked:last-child { border-bottom:none; }
|
|
332
|
+
|
|
333
|
+
/* files */
|
|
334
|
+
.dl { display:inline-flex; align-items:center; gap:6px; color:var(--accent); font-size:13px; cursor:pointer; font-weight:500; white-space:nowrap; }
|
|
335
|
+
a.dl { text-decoration:none; }
|
|
336
|
+
.dl:hover { text-decoration:underline; }
|
|
337
|
+
.file-ico { width:22px; height:26px; border-radius:4px; border:1px solid var(--border-2); background:var(--surface-2); flex:0 0 auto; display:flex; align-items:center; justify-content:center; color:var(--faint); font-size:9px; font-weight:700; }
|
|
338
|
+
.inert { color:var(--faint); font-size:12px; }
|
|
339
|
+
.trow.inert-row { opacity:.5; cursor:default; }
|
|
340
|
+
.trow.inert-row:hover { background:transparent; }
|
|
341
|
+
|
|
342
|
+
.api-banner {
|
|
343
|
+
position:fixed; right:18px; bottom:18px; z-index:30;
|
|
344
|
+
display:flex; align-items:center; gap:8px;
|
|
345
|
+
max-width:360px; padding:9px 12px; border-radius:var(--r-md);
|
|
346
|
+
border:1px solid var(--accent-line); background:var(--accent-wash);
|
|
347
|
+
color:var(--accent); font-size:12.5px; font-weight:550;
|
|
348
|
+
box-shadow:var(--shadow);
|
|
349
|
+
}
|
|
350
|
+
.api-banner.warn { max-width:520px; }
|
|
351
|
+
.modebar {
|
|
352
|
+
display:flex; align-items:center; gap:9px; padding:9px var(--gutter);
|
|
353
|
+
min-height:38px; border-bottom:1px solid var(--border); background:var(--surface);
|
|
354
|
+
color:var(--soft); font-size:12.5px;
|
|
355
|
+
}
|
|
356
|
+
.modebar svg { color:var(--accent); flex:0 0 auto; }
|
|
357
|
+
.mode-main { color:var(--ink); font-weight:600; white-space:nowrap; }
|
|
358
|
+
.mode-copy { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
|
|
359
|
+
.mode-warn { margin-left:auto; max-width:45%; color:var(--accent); font-weight:550; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
|
|
360
|
+
.mode-demo,.mode-error { background:var(--accent-wash); border-bottom-color:var(--accent-line); }
|
|
361
|
+
.inline-warn {
|
|
362
|
+
display:flex; align-items:flex-start; gap:8px; margin:-6px 0 18px;
|
|
363
|
+
max-width:820px; padding:9px 12px; border-radius:var(--r-md);
|
|
364
|
+
border:1px solid var(--accent-line); background:var(--accent-wash);
|
|
365
|
+
color:var(--accent); font-size:12.5px; font-weight:550;
|
|
366
|
+
}
|
|
367
|
+
.inline-warn svg { flex:0 0 auto; margin-top:2px; }
|
|
368
|
+
.inline-note {
|
|
369
|
+
display:flex; align-items:flex-start; gap:8px; margin:-6px 0 18px;
|
|
370
|
+
max-width:820px; padding:9px 12px; border-radius:var(--r-md);
|
|
371
|
+
border:1px solid var(--line); background:var(--surface-2);
|
|
372
|
+
color:var(--text-muted); font-size:12.5px; font-weight:550;
|
|
373
|
+
}
|
|
374
|
+
.inline-note svg { flex:0 0 auto; margin-top:2px; color:var(--text-dim); }
|
|
375
|
+
.inline-ok {
|
|
376
|
+
display:flex; align-items:flex-start; gap:8px; margin:-6px 0 18px;
|
|
377
|
+
max-width:820px; padding:9px 12px; border-radius:var(--r-md);
|
|
378
|
+
border:1px solid rgba(95,193,135,.28); background:var(--green-wash);
|
|
379
|
+
color:var(--green); font-size:12.5px; font-weight:550;
|
|
380
|
+
}
|
|
381
|
+
.inline-ok svg { flex:0 0 auto; margin-top:2px; }
|
|
382
|
+
|
|
383
|
+
/* ───────── readiness / environments ───────── */
|
|
384
|
+
.readiness-summary {
|
|
385
|
+
display:flex; align-items:flex-start; justify-content:space-between; gap:18px;
|
|
386
|
+
padding:18px 20px; margin-bottom:14px;
|
|
387
|
+
}
|
|
388
|
+
.readiness-summary h2 { margin:0; font-size:18px; letter-spacing:-.2px; }
|
|
389
|
+
.readiness-summary p { max-width:760px; margin:5px 0 0; color:var(--soft); font-size:13.5px; line-height:1.6; }
|
|
390
|
+
.readiness-grid { display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:14px; }
|
|
391
|
+
.readiness-card { padding:16px; display:flex; flex-direction:column; gap:14px; align-items:flex-start; }
|
|
392
|
+
.readiness-card-head { display:flex; gap:12px; align-items:flex-start; }
|
|
393
|
+
.readiness-card h3 { margin:0; font-size:14.5px; font-weight:600; }
|
|
394
|
+
.readiness-card p { margin:4px 0 0; color:var(--soft); font-size:12.5px; line-height:1.55; }
|
|
395
|
+
.readiness-mark {
|
|
396
|
+
width:30px; height:30px; border-radius:8px; display:flex; align-items:center; justify-content:center; flex:0 0 auto;
|
|
397
|
+
}
|
|
398
|
+
.readiness-mark.ok { color:var(--green); background:var(--green-wash); }
|
|
399
|
+
.readiness-mark.todo { color:var(--accent); background:var(--accent-wash); }
|
|
400
|
+
.env-preset {
|
|
401
|
+
display:flex; gap:12px; align-items:flex-start; padding:12px 14px;
|
|
402
|
+
border:1px solid var(--border); border-radius:var(--r-md); background:var(--bg);
|
|
403
|
+
}
|
|
404
|
+
.env-preset-grid { display:grid; grid-template-columns:1fr 1fr; gap:9px; }
|
|
405
|
+
.env-choice {
|
|
406
|
+
appearance:none; font:inherit; text-align:left; display:flex; gap:10px; align-items:flex-start;
|
|
407
|
+
padding:11px 12px; border:1px solid var(--border); border-radius:var(--r-md);
|
|
408
|
+
background:var(--bg); color:var(--ink); cursor:pointer; transition:border-color .12s, background .12s;
|
|
409
|
+
}
|
|
410
|
+
.env-choice:hover { border-color:var(--border-2); }
|
|
411
|
+
.env-choice.on { border-color:var(--accent-line); background:var(--accent-wash); }
|
|
412
|
+
.env-choice .dot-r { width:15px; height:15px; border-radius:50%; border:2px solid var(--border-2); flex:0 0 auto; position:relative; margin-top:2px; }
|
|
413
|
+
.env-choice.on .dot-r { border-color:var(--accent); }
|
|
414
|
+
.env-choice.on .dot-r::after { content:""; position:absolute; inset:3px; border-radius:50%; background:var(--accent); }
|
|
415
|
+
.env-choice .r-main { display:block; font-size:13px; font-weight:550; color:var(--ink); }
|
|
416
|
+
.env-choice .r-sub { display:block; margin-top:2px; font-size:11.5px; line-height:1.45; color:var(--faint); }
|
|
417
|
+
.env-actions { display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
|
|
418
|
+
.env-host-preview {
|
|
419
|
+
min-height:36px; max-height:120px; overflow:auto; margin:5px 0 0;
|
|
420
|
+
padding:8px 9px; border:1px solid var(--border); border-radius:var(--r-sm);
|
|
421
|
+
background:#0d0e0c; color:var(--soft); font-size:11.5px; line-height:1.55; white-space:pre-wrap;
|
|
422
|
+
}
|
|
423
|
+
.env-config { margin-top:4px; color:var(--faint); font-size:11.5px; white-space:normal; overflow-wrap:anywhere; }
|
|
424
|
+
.trow.env-row { cursor:default; }
|
|
425
|
+
.trow.env-row:hover { background:transparent; }
|
|
426
|
+
|
|
427
|
+
/* misc */
|
|
428
|
+
.fade-in { }
|
|
429
|
+
|
|
430
|
+
/* ───────── documentation ───────── */
|
|
431
|
+
.docs-app { height:100vh; min-height:100dvh; background:var(--bg); }
|
|
432
|
+
.docs-shell { display:grid; grid-template-columns:244px minmax(0, 1fr) 188px; height:100%; min-height:0; }
|
|
433
|
+
.docs-nav { padding:20px 14px 28px; border-right:1px solid var(--border); background:var(--surface); overflow:auto; }
|
|
434
|
+
.docs-nav-brand { display:flex; width:100%; align-items:center; gap:9px; padding:0 5px 18px; border:0; background:transparent; color:var(--ink); font:inherit; font-size:13.5px; font-weight:600; text-align:left; cursor:pointer; }
|
|
435
|
+
.docs-nav-brand .brand-mark { width:23px; height:23px; border-radius:6px; font-size:12px; }
|
|
436
|
+
.docs-nav-brand small { display:block; color:var(--faint); font-size:10.5px; font-weight:400; }
|
|
437
|
+
.docs-nav-group { margin:0 0 15px; }
|
|
438
|
+
.docs-nav-label { padding:0 7px 5px; color:var(--dim); font-size:10.5px; font-weight:600; letter-spacing:.075em; text-transform:uppercase; }
|
|
439
|
+
.docs-nav-link, .docs-toc button { appearance:none; width:100%; border:0; background:transparent; font:inherit; text-align:left; cursor:pointer; }
|
|
440
|
+
.docs-nav-link { display:block; padding:6px 8px; border-radius:var(--r-sm); color:var(--soft); font-size:12.5px; }
|
|
441
|
+
.docs-nav-link:hover { background:var(--hover); color:var(--ink); }
|
|
442
|
+
.docs-nav-link.active { background:var(--accent-wash); color:var(--ink); font-weight:550; box-shadow:inset 2px 0 var(--accent); }
|
|
443
|
+
.docs-nav-footer { margin:20px 5px 0; padding-top:9px; border-top:1px solid var(--border); }
|
|
444
|
+
.docs-nav-api { display:flex; align-items:center; gap:8px; padding:5px 2px; color:var(--soft); font-size:12px; text-decoration:none; }
|
|
445
|
+
.docs-nav-api:hover { color:var(--accent); }
|
|
446
|
+
.docs-nav-console { display:flex; align-items:center; gap:8px; width:100%; padding:5px 2px; border:0; background:transparent; color:var(--soft); font:inherit; font-size:12px; text-align:left; cursor:pointer; }
|
|
447
|
+
.docs-nav-console:hover { color:var(--accent); }
|
|
448
|
+
.docs-article { padding:42px clamp(30px, 5vw, 76px) 70px; overflow:auto; }
|
|
449
|
+
.docs-article > * { max-width:760px; }
|
|
450
|
+
.docs-crumbs { margin-bottom:13px; color:var(--faint); font-size:12.5px; }
|
|
451
|
+
.docs-crumbs span { margin:0 7px; color:var(--dim); }
|
|
452
|
+
.docs-article h1 { margin:0 0 14px; color:var(--ink); font-size:31px; line-height:1.12; letter-spacing:-.7px; }
|
|
453
|
+
.docs-article h2 { scroll-margin-top:20px; margin:38px 0 10px; color:var(--ink); font-size:19px; line-height:1.25; letter-spacing:-.25px; }
|
|
454
|
+
.docs-article h3 { scroll-margin-top:20px; margin:26px 0 8px; color:var(--ink); font-size:15px; line-height:1.35; }
|
|
455
|
+
.docs-article p, .docs-article li { color:var(--soft); font-size:14px; line-height:1.72; }
|
|
456
|
+
.docs-article p { margin:0 0 14px; }
|
|
457
|
+
.docs-article a { color:var(--accent-2); text-underline-offset:3px; }
|
|
458
|
+
.docs-article code { border:1px solid var(--border); border-radius:4px; background:var(--bg); padding:1px 4px; color:#d6dae0; font-family:var(--mono); font-size:.9em; }
|
|
459
|
+
.docs-page-actions { display:flex; justify-content:flex-end; gap:8px; margin:0 0 18px; }
|
|
460
|
+
.docs-inline-link { padding:0; border:0; background:transparent; color:var(--accent-2); font:inherit; text-decoration:underline; text-underline-offset:3px; cursor:pointer; }
|
|
461
|
+
.docs-inline-link:hover { color:var(--accent); }
|
|
462
|
+
.docs-loading { display:flex; align-items:center; gap:8px; padding:18px 0; color:var(--soft); font-size:13px; }
|
|
463
|
+
.docs-loading.error { color:var(--red); }
|
|
464
|
+
.docs-list { margin:15px 0; padding-left:21px; }
|
|
465
|
+
.docs-list li { margin:6px 0; }
|
|
466
|
+
.docs-lede { margin:0 0 22px !important; color:#c7ccd5 !important; font-size:17px !important; line-height:1.55 !important; }
|
|
467
|
+
.docs-callout { display:flex; align-items:flex-start; gap:10px; margin:20px 0; padding:12px 14px; border:1px solid rgba(123,164,230,.34); border-radius:var(--r-md); background:rgba(123,164,230,.1); color:#aac2ed; font-size:12.5px; line-height:1.55; }
|
|
468
|
+
.docs-callout.warn { border-color:var(--accent-line); background:var(--accent-wash); color:var(--accent-2); }
|
|
469
|
+
.docs-callout svg { flex:0 0 auto; margin-top:2px; }
|
|
470
|
+
.docs-card-grid { display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:12px; margin:26px 0 6px; }
|
|
471
|
+
.docs-card { appearance:none; min-height:122px; display:flex; align-items:flex-start; gap:10px; padding:15px; border:1px solid var(--border); border-radius:var(--r-lg); background:var(--surface); color:var(--ink); font:inherit; text-align:left; cursor:pointer; box-shadow:var(--shadow); transition:border-color .14s, background .14s, transform .05s; }
|
|
472
|
+
.docs-card:hover { border-color:var(--accent-line); background:var(--surface-2); }
|
|
473
|
+
.docs-card:active { transform:translateY(1px); }
|
|
474
|
+
.docs-card-icon { display:flex; align-items:center; justify-content:center; width:30px; height:30px; border-radius:8px; background:var(--accent-wash); color:var(--accent); flex:0 0 auto; }
|
|
475
|
+
.docs-card strong { display:block; margin:1px 0 4px; font-size:13px; }
|
|
476
|
+
.docs-card small { display:block; color:var(--soft); font-size:11.5px; line-height:1.5; }
|
|
477
|
+
.docs-card-arrow { margin-left:auto; color:var(--faint); flex:0 0 auto; }
|
|
478
|
+
.docs-table-wrap { overflow:auto; margin:16px 0; border:1px solid var(--border); border-radius:var(--r-md); }
|
|
479
|
+
.docs-table { width:100%; min-width:520px; border-collapse:collapse; text-align:left; font-size:13px; }
|
|
480
|
+
.docs-table th, .docs-table td { padding:11px 14px; border-bottom:1px solid var(--border); vertical-align:top; line-height:1.55; }
|
|
481
|
+
.docs-table tr:last-child th, .docs-table tr:last-child td { border-bottom:0; }
|
|
482
|
+
.docs-table thead th { background:var(--surface-2); color:var(--soft); font-size:11.5px; font-weight:600; text-transform:uppercase; letter-spacing:.035em; }
|
|
483
|
+
.docs-table tbody th { width:30%; color:var(--ink); font-weight:550; }
|
|
484
|
+
.docs-table td { color:var(--soft); }
|
|
485
|
+
.docs-steps { display:flex; flex-direction:column; gap:15px; margin:17px 0; padding:0; list-style:none; counter-reset:docs-step; }
|
|
486
|
+
.docs-steps li { position:relative; min-height:38px; padding-left:48px; }
|
|
487
|
+
.docs-steps li::before { counter-increment:docs-step; content:counter(docs-step); position:absolute; left:0; top:1px; display:flex; align-items:center; justify-content:center; width:28px; height:28px; border-radius:50%; background:var(--accent-wash); color:var(--accent); font-size:12px; font-weight:650; }
|
|
488
|
+
.docs-steps strong, .docs-steps span { display:block; }
|
|
489
|
+
.docs-steps strong { color:var(--ink); font-weight:600; }
|
|
490
|
+
.docs-steps span { margin-top:2px; color:var(--soft); font-size:13px; line-height:1.55; }
|
|
491
|
+
.docs-steps.compact { gap:11px; }
|
|
492
|
+
.docs-code { margin:16px 0; padding:14px 16px; overflow:auto; border:1px solid var(--border); border-radius:var(--r-md); background:#14171c; color:#d5dae2; font-family:var(--mono); font-size:12.5px; line-height:1.65; }
|
|
493
|
+
.docs-code code { padding:0; border:0; background:transparent; color:inherit; }
|
|
494
|
+
.docs-toc { padding:46px 20px; border-left:1px solid var(--border); background:var(--bg); overflow:auto; }
|
|
495
|
+
.docs-toc strong { display:block; margin:0 0 10px; color:var(--soft); font-size:12px; font-weight:600; }
|
|
496
|
+
.docs-toc button { padding:4px 0; color:var(--faint); font-size:12px; line-height:1.45; }
|
|
497
|
+
.docs-toc button.nested { padding-left:10px; font-size:11.5px; }
|
|
498
|
+
.docs-toc button:hover { color:var(--accent-2); }
|
|
499
|
+
.docs-nav-brand:focus-visible, .docs-nav-link:focus-visible, .docs-nav-console:focus-visible, .docs-toc button:focus-visible, .docs-card:focus-visible { outline:2px solid var(--accent); outline-offset:2px; }
|
|
500
|
+
|
|
501
|
+
@media (max-width:1120px) {
|
|
502
|
+
.docs-shell { grid-template-columns:216px minmax(0, 1fr); }
|
|
503
|
+
.docs-toc { display:none; }
|
|
504
|
+
.docs-card-grid { grid-template-columns:1fr; }
|
|
505
|
+
}
|
|
506
|
+
@media (max-width:760px) {
|
|
507
|
+
.docs-shell { grid-template-columns:1fr; overflow:auto; }
|
|
508
|
+
.docs-nav { border-right:0; border-bottom:1px solid var(--border); padding:14px; overflow:visible; }
|
|
509
|
+
.docs-nav-group { display:inline-block; vertical-align:top; min-width:150px; margin:0 14px 0 0; }
|
|
510
|
+
.docs-nav-brand { padding-bottom:12px; }
|
|
511
|
+
.docs-nav-api { display:none; }
|
|
512
|
+
.docs-article { padding:28px 20px 52px; overflow:visible; }
|
|
513
|
+
.docs-article h1 { font-size:27px; }
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/* Documentation reference refresh: a dense editorial shell inspired by the
|
|
517
|
+
CMA information architecture, using OMA's own mark, copy, and navigation. */
|
|
518
|
+
.docs-app { background:#10110f; color:#dfdfd8; }
|
|
519
|
+
.docs-shell { grid-template-columns:304px minmax(0,1fr) 268px; grid-template-rows:60px minmax(0,1fr); background:#10110f; }
|
|
520
|
+
.docs-topbar { grid-column:1 / -1; display:flex; align-items:center; gap:24px; padding:0 20px; border-bottom:1px solid #2b2c28; background:#161714; }
|
|
521
|
+
.docs-topbar-brand { display:flex; align-items:center; gap:10px; min-width:280px; padding:0; border:0; background:transparent; color:#f4f2eb; font-family:ui-serif,Georgia,Cambria,serif; font-size:18px; font-weight:600; letter-spacing:-.015em; cursor:pointer; }
|
|
522
|
+
.docs-topbar-brand .brand-mark { width:22px; height:22px; border-radius:6px; font-family:var(--font); font-size:12px; }
|
|
523
|
+
.docs-topbar-nav { display:flex; align-items:center; justify-content:center; gap:8px; flex:1; }
|
|
524
|
+
.docs-topbar-nav span { padding:8px 13px; border-radius:9px; color:#969790; font-size:14px; }
|
|
525
|
+
.docs-topbar-nav .active { background:#22231f; color:#efeee8; }
|
|
526
|
+
.docs-topbar-actions { display:flex; align-items:center; justify-content:flex-end; gap:18px; min-width:280px; }
|
|
527
|
+
.docs-topbar-link, .docs-topbar-console { display:flex; align-items:center; gap:7px; border:0; background:transparent; color:#b8b9b1; font:inherit; font-size:13px; text-decoration:none; cursor:pointer; }
|
|
528
|
+
.docs-topbar-link:hover { color:#f4f2eb; }
|
|
529
|
+
.docs-topbar-console { padding:7px 11px; border:1px solid #393a35; border-radius:8px; color:#e7e5de; }
|
|
530
|
+
.docs-topbar-console:hover { border-color:#63645c; background:#20211e; }
|
|
531
|
+
.docs-nav { grid-column:1; grid-row:2; display:flex; flex-direction:column; min-height:0; padding:18px 14px 16px; border-right:1px solid #282925; background:#11120f; }
|
|
532
|
+
.docs-search { display:flex; align-items:center; gap:8px; margin-bottom:20px; padding:9px 11px; border:1px solid #3b3c37; border-radius:9px; background:#292a26; color:#8e8f87; }
|
|
533
|
+
.docs-search input { width:100%; min-width:0; border:0; outline:0; background:transparent; color:#edede6; font:inherit; font-size:13px; }
|
|
534
|
+
.docs-search input::placeholder { color:#989991; }
|
|
535
|
+
.docs-search kbd { padding:1px 4px; border:1px solid #4b4c45; border-radius:4px; color:#979890; font:inherit; font-size:10px; }
|
|
536
|
+
.docs-nav-group { margin:0 0 19px; }
|
|
537
|
+
.docs-nav-label { padding:0 5px 7px; color:#edede7; font-size:13px; font-weight:650; letter-spacing:0; text-transform:none; }
|
|
538
|
+
.docs-nav-link { padding:6px 7px; border-radius:7px; color:#b9bab2; font-size:13px; line-height:1.35; }
|
|
539
|
+
.docs-nav-link:hover { color:#f2f1eb; background:#1d1e1a; }
|
|
540
|
+
.docs-nav-link.active { background:#242520; color:#f6f5ef; font-weight:550; box-shadow:none; }
|
|
541
|
+
.docs-nav-empty { padding:8px 7px; color:#969790; font-size:12px; }
|
|
542
|
+
.docs-nav-footer { margin-top:auto; margin-bottom:0; padding:16px 7px 2px; border-top:1px solid #292a26; color:#b6b7af; font-size:12px; }
|
|
543
|
+
.docs-nav-footer small { display:block; margin-top:2px; color:#7d7e77; font-size:11px; }
|
|
544
|
+
.docs-main { grid-column:2; grid-row:2; min-width:0; overflow:auto; }
|
|
545
|
+
.docs-article { width:min(960px,calc(100% - 96px)); margin:0 auto; padding:39px 0 90px; overflow:visible; }
|
|
546
|
+
.docs-crumbs { margin-bottom:14px; color:#8e8f87; font-size:13px; }
|
|
547
|
+
.docs-crumbs span { margin:0 8px; color:#5e5f58; }
|
|
548
|
+
.docs-title-row { display:flex; align-items:flex-start; justify-content:space-between; gap:24px; margin-bottom:14px; }
|
|
549
|
+
.docs-title-row h1, .docs-article > h1 { margin:0; color:#f6f4ee; font-family:ui-serif,Georgia,Cambria,serif; font-size:37px; font-weight:500; letter-spacing:-.022em; line-height:1.16; }
|
|
550
|
+
.docs-page-actions { position:relative; display:flex; flex:0 0 auto; margin:5px 0 0; border:1px solid #3c3d37; border-radius:9px; background:#20211e; }
|
|
551
|
+
.docs-copy-main, .docs-copy-caret { display:flex; align-items:center; gap:8px; border:0; background:transparent; color:#e6e5de; font:inherit; font-size:13px; cursor:pointer; }
|
|
552
|
+
.docs-copy-main { padding:8px 11px 8px 13px; border-radius:8px 0 0 8px; }
|
|
553
|
+
.docs-copy-caret { padding:7px 10px; border-left:1px solid #3c3d37; border-radius:0 8px 8px 0; font-size:17px; line-height:1; }
|
|
554
|
+
.docs-copy-main:hover, .docs-copy-caret:hover { background:#292a26; }
|
|
555
|
+
.docs-copy-main:disabled { cursor:wait; opacity:.55; }
|
|
556
|
+
.docs-copy-menu { position:absolute; top:calc(100% + 7px); right:0; z-index:5; width:222px; padding:5px; border:1px solid #454640; border-radius:10px; background:#2b2c28; box-shadow:0 16px 38px rgba(0,0,0,.38); }
|
|
557
|
+
.docs-copy-menu button { display:flex; align-items:center; gap:9px; width:100%; padding:8px 9px; border:0; border-radius:6px; background:transparent; color:#eeece5; font:inherit; font-size:12.5px; text-align:left; cursor:pointer; }
|
|
558
|
+
.docs-copy-menu button:hover { background:#3a3b35; }
|
|
559
|
+
.docs-article h2 { scroll-margin-top:82px; margin:56px 0 15px; color:#f2f0ea; font-family:ui-serif,Georgia,Cambria,serif; font-size:27px; font-weight:500; letter-spacing:-.015em; line-height:1.27; }
|
|
560
|
+
.docs-article h3 { scroll-margin-top:82px; margin:28px 0 9px; color:#ecebe4; font-size:16px; line-height:1.35; }
|
|
561
|
+
.docs-article p, .docs-article li { color:#c5c5bd; font-size:15.5px; line-height:1.72; }
|
|
562
|
+
.docs-article p { margin:0 0 18px; }
|
|
563
|
+
.docs-article > p:first-of-type { color:#aaaba4; font-size:20px; line-height:1.52; }
|
|
564
|
+
.docs-article a, .docs-inline-link { color:#e8e6df; text-decoration-color:#5f6059; }
|
|
565
|
+
.docs-article a:hover, .docs-inline-link:hover { color:#fff; text-decoration-color:#a4a59c; }
|
|
566
|
+
.docs-article code { border-color:#3a3b35; border-radius:5px; background:#1d1e1a; padding:2px 5px; color:#dfded6; }
|
|
567
|
+
.docs-lede { color:#aaaba4 !important; font-size:20px !important; line-height:1.52 !important; }
|
|
568
|
+
.docs-callout { gap:12px; margin:24px 0; padding:15px 17px; border-color:rgba(92,151,237,.55); border-radius:10px; background:rgba(61,100,152,.17); color:#adc8ef; font-size:14px; line-height:1.6; }
|
|
569
|
+
.docs-callout.warn { border-color:rgba(234,180,76,.55); background:rgba(234,180,76,.1); color:#edd29b; }
|
|
570
|
+
.docs-card-grid { gap:16px; margin:28px 0 8px; }
|
|
571
|
+
.docs-card { min-height:148px; padding:19px; border-color:#353630; border-radius:12px; background:#151613; color:#ecebe4; box-shadow:none; }
|
|
572
|
+
.docs-card:hover { border-color:#696a61; background:#1b1c18; }
|
|
573
|
+
.docs-card-icon { background:transparent; }
|
|
574
|
+
.docs-table-wrap { margin:12px 0 28px; border:0; border-radius:0; }
|
|
575
|
+
.docs-table { font-size:14px; }
|
|
576
|
+
.docs-table th, .docs-table td { padding:13px 20px 13px 0; border-bottom-color:#30312c; line-height:1.58; }
|
|
577
|
+
.docs-table thead th { background:transparent; color:#f0efe8; font-size:14px; text-transform:none; letter-spacing:0; }
|
|
578
|
+
.docs-table tbody th { width:23%; color:#acada6; }
|
|
579
|
+
.docs-table td { color:#bbbcb4; }
|
|
580
|
+
.docs-steps li::before { width:27px; height:27px; border:1px solid #4b4c45; border-radius:6px; background:#1b1c18; color:#e6e4dc; }
|
|
581
|
+
.docs-code { border-color:#32332e; border-radius:9px; background:#171815; color:#d7d6ce; }
|
|
582
|
+
.docs-toc { grid-column:3; grid-row:2; padding:86px 28px 40px 14px; border-left:1px solid #282925; background:#11120f; }
|
|
583
|
+
.docs-toc strong { margin:0 0 12px; padding-left:14px; border-left:2px solid #e6e5de; color:#eeece5; font-size:13px; }
|
|
584
|
+
.docs-toc button { padding:5px 0 5px 16px; color:#989991; font-size:13px; }
|
|
585
|
+
.docs-toc button.nested { padding-left:27px; font-size:12px; }
|
|
586
|
+
.docs-toc button:hover { color:#efede7; }
|
|
587
|
+
.docs-topbar-brand:focus-visible, .docs-nav-link:focus-visible, .docs-topbar-console:focus-visible, .docs-toc button:focus-visible, .docs-card:focus-visible, .docs-search:focus-within { outline:2px solid var(--accent); outline-offset:2px; }
|
|
588
|
+
|
|
589
|
+
@media (max-width:1180px) {
|
|
590
|
+
.docs-shell { grid-template-columns:250px minmax(0,1fr); }
|
|
591
|
+
.docs-toc { display:none; }
|
|
592
|
+
.docs-article { width:min(800px,calc(100% - 64px)); }
|
|
593
|
+
}
|
|
594
|
+
@media (max-width:760px) {
|
|
595
|
+
.docs-app { height:auto; min-height:100dvh; }
|
|
596
|
+
.docs-shell { grid-template-columns:1fr; grid-template-rows:auto auto auto; height:auto; overflow:visible; }
|
|
597
|
+
.docs-topbar { grid-column:1; padding:0 15px; min-height:56px; }
|
|
598
|
+
.docs-topbar-brand, .docs-topbar-actions { min-width:0; }
|
|
599
|
+
.docs-topbar-brand { font-size:16px; }
|
|
600
|
+
.docs-topbar-nav, .docs-topbar-link { display:none; }
|
|
601
|
+
.docs-topbar-actions { margin-left:auto; }
|
|
602
|
+
.docs-nav { grid-column:1; grid-row:2; max-height:265px; border-right:0; border-bottom:1px solid #282925; }
|
|
603
|
+
.docs-main { grid-column:1; grid-row:3; overflow:visible; }
|
|
604
|
+
.docs-article { width:auto; margin:0; padding:28px 20px 58px; }
|
|
605
|
+
.docs-title-row { display:block; }
|
|
606
|
+
.docs-title-row h1 { font-size:30px; }
|
|
607
|
+
.docs-page-actions { display:inline-flex; margin-top:17px; }
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
/* ───────── live streaming ───────── */
|
|
611
|
+
.badge.live .dot { animation:livepulse 1.4s ease-in-out infinite; }
|
|
612
|
+
@keyframes livepulse { 0%,100%{ opacity:1; box-shadow:0 0 0 0 var(--green-wash); } 50%{ opacity:.45; box-shadow:0 0 0 4px var(--green-wash); } }
|
|
613
|
+
|
|
614
|
+
.stream.live { max-height:calc(100vh - 320px); min-height:300px; overflow-y:auto; }
|
|
615
|
+
.stream.live .panel { overflow:visible; }
|
|
616
|
+
.stream.live .ev { opacity:1; animation:evIn .3s cubic-bezier(.2,.7,.3,1); }
|
|
617
|
+
@keyframes evIn { from{ transform:translateY(7px); } to{ transform:none; } }
|
|
618
|
+
|
|
619
|
+
.working-row { animation:none !important; }
|
|
620
|
+
.working { display:inline-flex; align-items:center; gap:4px; width:52px; justify-content:center; flex:0 0 auto; }
|
|
621
|
+
.working i { width:5px; height:5px; border-radius:50%; background:var(--accent); animation:dotpulse 1.1s ease-in-out infinite; }
|
|
622
|
+
.working i:nth-child(2){ animation-delay:.18s; } .working i:nth-child(3){ animation-delay:.36s; }
|
|
623
|
+
@keyframes dotpulse { 0%,100%{ opacity:.25; transform:translateY(0); } 40%{ opacity:1; transform:translateY(-2px); } }
|
|
624
|
+
|
|
625
|
+
.composer input:disabled { opacity:.6; cursor:not-allowed; }
|
|
626
|
+
.composer.ro { border-style:dashed; }
|
|
627
|
+
|
|
628
|
+
/* ───────── modals / forms ───────── */
|
|
629
|
+
.overlay { position:fixed; inset:0; z-index:200; background:rgba(0,0,0,.72); backdrop-filter:blur(4px); display:flex; align-items:flex-start; justify-content:center; padding:60px 20px; overflow:auto; }
|
|
630
|
+
.modal { width:100%; max-width:540px; background:#383936; border:1px solid #5a5b55; border-radius:12px; box-shadow:0 28px 76px -18px rgba(0,0,0,.78); animation:modalIn .2s cubic-bezier(.2,.7,.3,1); }
|
|
631
|
+
@keyframes modalIn { from{ transform:translateY(-10px); } to{ transform:none; } }
|
|
632
|
+
.modal-head { display:flex; align-items:flex-start; gap:12px; padding:18px 20px 14px; border-bottom:1px solid var(--border); }
|
|
633
|
+
.modal-head .ic { width:34px; height:34px; border-radius:9px; background:var(--accent-wash); color:var(--accent); display:flex; align-items:center; justify-content:center; flex:0 0 auto; }
|
|
634
|
+
.modal-head h2 { margin:0; font-size:17px; font-weight:600; letter-spacing:-.2px; }
|
|
635
|
+
.modal-head p { margin:3px 0 0; font-size:12.5px; color:var(--soft); }
|
|
636
|
+
.modal-head .x { margin-left:auto; }
|
|
637
|
+
.modal-body { padding:18px 20px; display:flex; flex-direction:column; gap:16px; max-height:60vh; overflow:auto; }
|
|
638
|
+
.modal-foot { display:flex; align-items:center; gap:10px; justify-content:flex-end; padding:14px 20px; border-top:1px solid var(--border); }
|
|
639
|
+
.modal-foot .left { margin-right:auto; color:var(--faint); font-size:12px; }
|
|
640
|
+
|
|
641
|
+
.form-row { display:flex; flex-direction:column; gap:7px; }
|
|
642
|
+
.form-row.two { display:grid; grid-template-columns:1fr 1fr; gap:14px; }
|
|
643
|
+
.form-label { font-size:12.5px; font-weight:550; color:var(--soft); display:flex; align-items:center; gap:7px; }
|
|
644
|
+
.form-label .opt { color:var(--faint); font-weight:400; font-size:11.5px; }
|
|
645
|
+
.input, .textarea, .selectbox {
|
|
646
|
+
width:100%; background:#242521; border:1px solid var(--border); border-radius:var(--r-md);
|
|
647
|
+
color:var(--ink); font:inherit; font-size:13.5px; padding:9px 11px; outline:none; transition:border-color .15s;
|
|
648
|
+
}
|
|
649
|
+
.input:focus, .textarea:focus, .selectbox:focus { border-color:var(--accent-line); }
|
|
650
|
+
.modal .input, .modal .textarea, .modal .selectbox { background:#4a4b46; border-color:#5d5e58; }
|
|
651
|
+
.modal .input:focus, .modal .textarea:focus, .modal .selectbox:focus { border-color:#71aaf3; box-shadow:0 0 0 1px #71aaf3; }
|
|
652
|
+
.input::placeholder, .textarea::placeholder { color:var(--faint); }
|
|
653
|
+
.textarea { resize:vertical; min-height:74px; line-height:1.55; font-family:var(--mono); font-size:12.5px; }
|
|
654
|
+
.selectbox { appearance:none; cursor:pointer; background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%236d7480' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>"); background-repeat:no-repeat; background-position:right 11px center; padding-right:32px; }
|
|
655
|
+
.field-hint { font-size:11.5px; color:var(--faint); }
|
|
656
|
+
.seg-tools { display:flex; flex-wrap:wrap; gap:8px; }
|
|
657
|
+
.tool-toggle { appearance:none; font-family:inherit; display:inline-flex; align-items:center; gap:7px; padding:6px 11px; border-radius:999px; border:1px solid var(--border); background:var(--surface-2); color:var(--soft); font-size:12.5px; font-weight:500; cursor:pointer; transition:.12s; }
|
|
658
|
+
.tool-toggle:hover { border-color:var(--border-2); color:var(--ink); }
|
|
659
|
+
.tool-toggle.on { background:var(--accent-wash); border-color:var(--accent-line); color:var(--accent); }
|
|
660
|
+
.tool-toggle .chk { width:13px; height:13px; border-radius:4px; border:1.5px solid currentColor; opacity:.55; display:flex; align-items:center; justify-content:center; }
|
|
661
|
+
.tool-toggle.on .chk { background:var(--accent); border-color:var(--accent); opacity:1; }
|
|
662
|
+
.radio-set { display:flex; flex-direction:column; gap:8px; }
|
|
663
|
+
.radio { display:flex; align-items:center; gap:10px; padding:10px 12px; border:1px solid var(--border); border-radius:var(--r-md); background:var(--bg); cursor:pointer; transition:border-color .12s; }
|
|
664
|
+
.radio:hover { border-color:var(--border-2); }
|
|
665
|
+
.radio.on { border-color:var(--accent-line); background:var(--accent-wash); }
|
|
666
|
+
.radio .dot-r { width:15px; height:15px; border-radius:50%; border:2px solid var(--border-2); flex:0 0 auto; position:relative; }
|
|
667
|
+
.radio.on .dot-r { border-color:var(--accent); }
|
|
668
|
+
.radio.on .dot-r::after { content:""; position:absolute; inset:3px; border-radius:50%; background:var(--accent); }
|
|
669
|
+
.radio .r-main { font-size:13px; color:var(--ink); }
|
|
670
|
+
.radio .r-sub { font-size:11.5px; color:var(--faint); margin-top:1px; }
|
|
671
|
+
.radio .r-mono { font-family:var(--mono); }
|
|
672
|
+
|
|
673
|
+
/* ───────── tool-confirmation card (requires_action) ───────── */
|
|
674
|
+
.confirm-card { border:1px solid var(--accent-line); border-radius:var(--r-lg); background:var(--accent-wash); margin-top:12px; overflow:hidden; }
|
|
675
|
+
.confirm-card .cc-head { display:flex; align-items:center; gap:10px; padding:13px 16px; }
|
|
676
|
+
.confirm-card .cc-ic { width:30px; height:30px; border-radius:8px; background:var(--accent); color:var(--accent-ink); display:flex; align-items:center; justify-content:center; flex:0 0 auto; }
|
|
677
|
+
.confirm-card .cc-title { font-size:14px; font-weight:600; }
|
|
678
|
+
.confirm-card .cc-label { font-size:10.5px; font-weight:600; letter-spacing:.06em; text-transform:uppercase; color:var(--accent); }
|
|
679
|
+
.confirm-card .cc-body { padding:0 16px 14px; }
|
|
680
|
+
.confirm-card .cc-tool { display:flex; align-items:center; gap:9px; background:#0d0e0c; border:1px solid var(--border); border-radius:var(--r-md); padding:10px 12px; font-family:var(--mono); font-size:12.5px; color:#d3d3cb; }
|
|
681
|
+
.darker .confirm-card .cc-tool { background:#080906; }
|
|
682
|
+
.confirm-card .cc-tool .tn { color:var(--r-tool); font-weight:500; }
|
|
683
|
+
.confirm-card .cc-actions { display:flex; gap:9px; padding:0 16px 14px; }
|
|
684
|
+
.confirm-resolved { display:flex; align-items:center; gap:8px; padding:10px 16px 14px; font-size:12.5px; }
|
|
685
|
+
.confirm-resolved.allow { color:var(--green); }
|
|
686
|
+
.confirm-resolved.deny { color:var(--red); }
|
|
687
|
+
|
|
688
|
+
/* ───────── action menu (dropdown) ───────── */
|
|
689
|
+
.menu-wrap { position:relative; }
|
|
690
|
+
.menu { position:absolute; right:0; top:calc(100% + 6px); z-index:50; min-width:210px; background:#353632; border:1px solid #50514b; border-radius:var(--r-md); box-shadow:0 16px 38px -12px rgba(0,0,0,.72); padding:5px; animation:modalIn .14s ease; }
|
|
691
|
+
.menu-item { display:flex; align-items:center; gap:10px; padding:8px 10px; border-radius:var(--r-sm); font-size:13px; color:var(--ink); cursor:pointer; white-space:nowrap; }
|
|
692
|
+
.menu-item:hover { background:var(--hover); }
|
|
693
|
+
.menu-item svg { width:15px; height:15px; color:var(--soft); }
|
|
694
|
+
.menu-item.danger { color:var(--red); } .menu-item.danger svg { color:var(--red); }
|
|
695
|
+
.menu-sep { height:1px; background:var(--border); margin:4px 2px; }
|
|
696
|
+
|
|
697
|
+
/* small confirm dialog */
|
|
698
|
+
.modal.sm { max-width:420px; }
|
|
699
|
+
.modal.sm .modal-body { gap:0; }
|
|
700
|
+
.confirm-msg { font-size:13.5px; color:var(--soft); line-height:1.6; }
|
|
701
|
+
.confirm-msg b { color:var(--ink); font-weight:600; }
|
|
702
|
+
.modal-head .ic.danger { background:var(--red-wash); color:var(--red); }
|
|
703
|
+
|
|
704
|
+
/* ───────── loading / empty / error states ───────── */
|
|
705
|
+
.skel { background:var(--surface-2); background-image:linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,.05) 50%, rgba(255,255,255,0) 100%); background-size:240% 100%; background-repeat:no-repeat; border-radius:6px; animation:shimmer 1.3s ease-in-out infinite; }
|
|
706
|
+
@keyframes shimmer { 0%{ background-position:140% 0; } 100%{ background-position:-140% 0; } }
|
|
707
|
+
@media (prefers-reduced-motion:reduce){ .skel{ animation:none; } }
|
|
708
|
+
.skel-row { display:flex; align-items:center; gap:14px; padding:var(--row-pad) 16px; border-bottom:1px solid var(--border); }
|
|
709
|
+
.skel-row:last-child { border-bottom:none; }
|
|
710
|
+
.skel-dot { width:15px; height:15px; border-radius:4px; flex:0 0 auto; }
|
|
711
|
+
.skel-pill { height:21px; border-radius:999px; }
|
|
712
|
+
|
|
713
|
+
.state { display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; padding:60px 24px; gap:5px; }
|
|
714
|
+
.state-ic { width:50px; height:50px; border-radius:14px; background:var(--surface-2); border:1px solid var(--border); display:flex; align-items:center; justify-content:center; color:var(--faint); margin-bottom:8px; }
|
|
715
|
+
.state-ic.err { background:var(--red-wash); border-color:transparent; color:var(--red); }
|
|
716
|
+
.state h3 { margin:0; font-size:16px; font-weight:600; letter-spacing:-.2px; }
|
|
717
|
+
.state p { margin:2px 0 0; font-size:13.5px; color:var(--soft); max-width:400px; line-height:1.6; }
|
|
718
|
+
.state .actions { display:flex; gap:10px; margin-top:14px; }
|
|
719
|
+
.err-envelope { width:100%; max-width:440px; margin-top:16px; text-align:left; }
|
|
720
|
+
.err-envelope .req { display:flex; align-items:center; gap:8px; justify-content:center; margin-top:10px; font-size:12px; color:var(--faint); }
|
|
721
|
+
.err-envelope .req .mono { color:var(--soft); }
|
|
722
|
+
.banner { display:flex; align-items:center; gap:11px; padding:11px 14px; border-radius:var(--r-md); background:var(--red-wash); border:1px solid rgba(229,127,99,.25); margin-bottom:14px; }
|
|
723
|
+
.banner svg { color:var(--red); flex:0 0 auto; }
|
|
724
|
+
.banner .b-main { font-size:13px; color:var(--ink); font-weight:500; }
|
|
725
|
+
.banner .b-sub { font-size:12px; color:var(--soft); }
|
|
726
|
+
.banner .mono { color:var(--soft); }
|
|
727
|
+
|
|
728
|
+
|
|
729
|
+
|
|
730
|
+
|
|
731
|
+
@media (prefers-reduced-motion:reduce){
|
|
732
|
+
.badge.live .dot, .working i, .stream.live .ev { animation:none !important; }
|
|
733
|
+
}
|