@piagent/platform 1.2.12 → 1.2.14
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/CHANGELOG.md +43 -0
- package/README.md +17 -3
- package/README.vi.md +90 -0
- package/architecture/layers.json +117 -0
- package/docs/README.md +23 -0
- package/docs/architecture.md +7 -61
- package/docs/command-reference-vietnamese.md +6 -6
- package/docs/distribution-standard.md +7 -7
- package/docs/en/README.md +13 -0
- package/docs/en/architecture.md +81 -0
- package/docs/en/maintainer-guide.md +121 -0
- package/docs/languages.json +40 -0
- package/docs/operator-manual-vietnamese.md +7 -7
- package/docs/package-architecture-notes.md +9 -0
- package/docs/quality-benchmark.md +93 -0
- package/docs/release-install-policy.md +6 -6
- package/docs/security-threat-model.md +1 -1
- package/docs/team-onboarding.md +2 -2
- package/docs/vi/README.md +13 -0
- package/docs/vi/architecture.md +81 -0
- package/docs/vi/maintainer-guide.md +121 -0
- package/docs-site/architecture.html +39 -14
- package/docs-site/assets/docs.css +407 -0
- package/docs-site/benchmark.html +341 -0
- package/docs-site/commands.html +4 -1
- package/docs-site/content/architecture.html +35 -13
- package/docs-site/content/benchmark.html +214 -0
- package/docs-site/content/index.html +5 -0
- package/docs-site/context-engine.html +6 -3
- package/docs-site/index.html +9 -1
- package/docs-site/mcp-approval.html +4 -1
- package/docs-site/mcp-auth.html +4 -1
- package/docs-site/mcp-servers.html +4 -1
- package/docs-site/mcp.html +4 -1
- package/docs-site/permissions.html +4 -1
- package/docs-site/profiles.html +4 -1
- package/docs-site/quickstart.html +4 -1
- package/docs-site/runtime.html +6 -3
- package/docs-site/scope.html +4 -1
- package/docs-site/security.html +4 -1
- package/docs-site/team.html +4 -1
- package/docs-site/workflows.html +4 -1
- package/package.json +5 -1
- package/packages/piagent-core/README.md +6 -2
- package/packages/piagent-core/capabilities/capability-core.js +3 -0
- package/packages/piagent-core/capabilities/runtime-integrity.js +18 -0
- package/packages/piagent-core/extensions/guard-types.ts +0 -37
- package/packages/piagent-core/extensions/piagent-guard.ts +170 -2099
- package/packages/piagent-core/extensions/task-state.js +22 -3
- package/packages/piagent-core/package.json +1 -1
- package/packages/piagent-core/runtime/hooks/agent-start-hook.ts +213 -0
- package/packages/piagent-core/runtime/hooks/completion-hook.ts +203 -0
- package/packages/piagent-core/runtime/hooks/input-hook.ts +122 -0
- package/packages/piagent-core/runtime/hooks/session-hooks.ts +104 -0
- package/packages/piagent-core/runtime/hooks/session-start-hook.ts +140 -0
- package/packages/piagent-core/runtime/hooks/tool-result-hook.ts +316 -0
- package/packages/piagent-core/runtime/input/chat-images.ts +299 -0
- package/packages/piagent-core/runtime/runtime-limits.ts +21 -0
- package/packages/piagent-core/runtime/session/message-signals.ts +64 -0
- package/packages/piagent-core/runtime/session/runtime-state.ts +175 -0
- package/packages/piagent-core/runtime/session/system-prompt.ts +52 -0
- package/packages/piagent-core/runtime/session/tool-result-compaction.ts +352 -0
- package/packages/piagent-core/runtime/session/usage.ts +178 -0
- package/packages/piagent-core/runtime/tools/tool-groups.ts +86 -0
- package/packages/piagent-core/runtime/workflows/input-routing.ts +113 -0
- package/packages/piagent-core/runtime/workflows/task-intake.ts +73 -0
- package/scripts/build-docs-site.mjs +10 -1
- package/scripts/check-architecture.mjs +132 -0
- package/scripts/check-doc-languages.mjs +67 -0
- package/scripts/verify-local.sh +31 -0
|
@@ -27,7 +27,8 @@
|
|
|
27
27
|
<span>Pi Agent Platform</span>
|
|
28
28
|
</a>
|
|
29
29
|
<div class="top-actions">
|
|
30
|
-
<span class="pill"><span class="pill-dot"></span>v1.2.
|
|
30
|
+
<span class="pill"><span class="pill-dot"></span>v1.2.14 docs · VI</span>
|
|
31
|
+
<a class="button" href="https://github.com/Vt-mmm/piagent/blob/main/docs/en/README.md" lang="en" target="_blank" rel="noopener noreferrer">English docs</a>
|
|
31
32
|
<a class="button social" href="https://github.com/Vt-mmm/piagent" target="_blank" rel="noopener noreferrer" aria-label="Mở GitHub repository">
|
|
32
33
|
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
|
|
33
34
|
<path d="M7 17 17 7M9 7h8v8" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
|
@@ -74,6 +75,7 @@
|
|
|
74
75
|
<a class="nav-link" href="/security">Security model</a>
|
|
75
76
|
<a class="nav-link current" href="/architecture" aria-current="page">Architecture</a>
|
|
76
77
|
<a class="nav-link" href="/context-engine">Context Engine</a>
|
|
78
|
+
<a class="nav-link" href="/benchmark">Benchmark</a>
|
|
77
79
|
<a class="nav-link" href="/runtime">Runtime tools</a>
|
|
78
80
|
<a class="nav-link" href="/team">Team usage</a>
|
|
79
81
|
</div>
|
|
@@ -94,34 +96,56 @@
|
|
|
94
96
|
<p>Repo này không nhét business logic vào core. Core chỉ giữ policy, prompts, guard, skills và scripts dùng lại được.</p>
|
|
95
97
|
</div>
|
|
96
98
|
<section class="section">
|
|
97
|
-
|
|
99
|
+
<div class="callout">
|
|
100
|
+
<strong>Chiều dependency được enforce bằng code.</strong>
|
|
101
|
+
<p><span class="inline-code">architecture/layers.json</span> là rule máy đọc; <span class="inline-code">npm run architecture:check</span> chặn dependency ngược và file vượt budget.</p>
|
|
102
|
+
</div>
|
|
98
103
|
<div class="grid cols-3">
|
|
99
104
|
<article class="card">
|
|
100
|
-
<h3 id="
|
|
101
|
-
<p><span class="inline-code">
|
|
105
|
+
<h3 id="composition">Composition</h3>
|
|
106
|
+
<p><span class="inline-code">piagent-guard.ts</span> chỉ giữ wiring, registration order và shared runtime state. File này không được tiếp tục chứa feature algorithm.</p>
|
|
102
107
|
</article>
|
|
103
108
|
<article class="card">
|
|
104
|
-
<h3 id="adapters">
|
|
105
|
-
<p><span class="inline-code">
|
|
109
|
+
<h3 id="runtime-adapters">Runtime adapters</h3>
|
|
110
|
+
<p><span class="inline-code">packages/piagent-core/runtime</span> quản lý Pi hook, command, tool, session UI, usage, log compaction và workflow input routing.</p>
|
|
106
111
|
</article>
|
|
107
112
|
<article class="card">
|
|
108
|
-
<h3 id="
|
|
109
|
-
<p
|
|
113
|
+
<h3 id="core-services">Core services</h3>
|
|
114
|
+
<p>Policy, task, context và state trả về structured decision. Core service không import runtime adapter hay Pi composition root.</p>
|
|
110
115
|
</article>
|
|
111
116
|
<article class="card">
|
|
112
|
-
<h3 id="
|
|
113
|
-
<p>
|
|
117
|
+
<h3 id="integrations">Integrations</h3>
|
|
118
|
+
<p><span class="inline-code">mcp/</span>, <span class="inline-code">capabilities/</span> và <span class="inline-code">security/</span> có ownership riêng; không nhúng task workflow vào integration.</p>
|
|
114
119
|
</article>
|
|
115
120
|
<article class="card">
|
|
116
|
-
<h3 id="
|
|
117
|
-
<p>
|
|
121
|
+
<h3 id="entrypoints">Entrypoints</h3>
|
|
122
|
+
<p><span class="inline-code">scripts/</span> parse CLI argument rồi gọi use case. Metric, policy và state transition không được duplicate trong CLI.</p>
|
|
118
123
|
</article>
|
|
119
124
|
<article class="card">
|
|
120
|
-
<h3 id="
|
|
121
|
-
<p><span class="inline-code">
|
|
125
|
+
<h3 id="product-assets">Product assets</h3>
|
|
126
|
+
<p><span class="inline-code">prompts/</span>, <span class="inline-code">skills/</span>, <span class="inline-code">subagents/</span>, <span class="inline-code">adapters/</span>, <span class="inline-code">packs/</span> và <span class="inline-code">schemas/</span> là declarative assets.</p>
|
|
122
127
|
</article>
|
|
123
128
|
</div>
|
|
124
129
|
</section>
|
|
130
|
+
|
|
131
|
+
<section class="section">
|
|
132
|
+
<div class="section-head">
|
|
133
|
+
<p class="eyebrow">Ownership</p>
|
|
134
|
+
<h2 id="state-ownership">Một state chỉ có một source of truth</h2>
|
|
135
|
+
<p>Project profile và lock có thể commit. Task evidence, telemetry, trace, capture và session history là local state. Derived index phải có policy digest và rebuild được.</p>
|
|
136
|
+
</div>
|
|
137
|
+
<div class="table-wrap">
|
|
138
|
+
<table>
|
|
139
|
+
<thead><tr><th>State</th><th>Owner</th><th>Vị trí</th><th>Commit</th></tr></thead>
|
|
140
|
+
<tbody>
|
|
141
|
+
<tr><td>Project profile + lock</td><td>Project</td><td><span class="inline-code">.pi/piagent-profile*.json</span></td><td>Có</td></tr>
|
|
142
|
+
<tr><td>Task, trace, telemetry, capture</td><td>Runtime</td><td><span class="inline-code">.pi/piagent-state/</span></td><td>Không</td></tr>
|
|
143
|
+
<tr><td>Session history</td><td>Pi</td><td>Pi session store</td><td>Không</td></tr>
|
|
144
|
+
<tr><td>Shared instructions</td><td>Project</td><td><span class="inline-code">AGENTS.md</span>, project docs</td><td>Có</td></tr>
|
|
145
|
+
</tbody>
|
|
146
|
+
</table>
|
|
147
|
+
</div>
|
|
148
|
+
</section>
|
|
125
149
|
<nav class="pager" aria-label="Trang kế tiếp">
|
|
126
150
|
<a class="pager-prev" href="/security">
|
|
127
151
|
<span class="pager-label">Trước</span>
|
|
@@ -138,6 +162,7 @@
|
|
|
138
162
|
<div class="footer-links" aria-label="External links">
|
|
139
163
|
<a href="https://piagent.io.vn" target="_blank" rel="noopener noreferrer">piagent.io.vn</a>
|
|
140
164
|
<a href="https://github.com/Vt-mmm/piagent" target="_blank" rel="noopener noreferrer">GitHub repository</a>
|
|
165
|
+
<a href="https://github.com/Vt-mmm/piagent/blob/main/docs/en/README.md" lang="en" target="_blank" rel="noopener noreferrer">English docs</a>
|
|
141
166
|
<a href="https://www.facebook.com/vinhtam0544/" target="_blank" rel="noopener noreferrer">Facebook profile</a>
|
|
142
167
|
</div>
|
|
143
168
|
</footer>
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
--danger: #ff8f8f;
|
|
15
15
|
--warning: #ffd166;
|
|
16
16
|
--ok: #8be9c8;
|
|
17
|
+
--chart-piagent: #8be9c8;
|
|
18
|
+
--chart-codex: #8fa7ff;
|
|
17
19
|
--shadow: 0 24px 90px rgba(0, 0, 0, 0.45);
|
|
18
20
|
--radius: 22px;
|
|
19
21
|
--sidebar: 294px;
|
|
@@ -978,6 +980,411 @@ tr:last-child td {
|
|
|
978
980
|
color: var(--accent);
|
|
979
981
|
}
|
|
980
982
|
|
|
983
|
+
/* Production benchmark snapshot. The charts are plain CSS so the evidence is
|
|
984
|
+
readable in the committed static HTML without a client charting runtime. */
|
|
985
|
+
.benchmark-summary {
|
|
986
|
+
padding: 28px 0 12px;
|
|
987
|
+
border-top: 1px solid var(--line);
|
|
988
|
+
border-bottom: 1px solid var(--line);
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
.benchmark-verdict {
|
|
992
|
+
display: grid;
|
|
993
|
+
grid-template-columns: minmax(0, 1fr) 180px;
|
|
994
|
+
gap: 32px;
|
|
995
|
+
align-items: center;
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
.benchmark-verdict h2 {
|
|
999
|
+
font-size: 36px;
|
|
1000
|
+
letter-spacing: 0;
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
.benchmark-verdict p:last-child {
|
|
1004
|
+
max-width: 780px;
|
|
1005
|
+
margin-top: 12px;
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
.benchmark-verdict-score {
|
|
1009
|
+
padding-left: 24px;
|
|
1010
|
+
border-left: 1px solid var(--line);
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
.benchmark-verdict-score strong {
|
|
1014
|
+
display: block;
|
|
1015
|
+
color: var(--accent);
|
|
1016
|
+
font-size: 48px;
|
|
1017
|
+
line-height: 1;
|
|
1018
|
+
letter-spacing: 0;
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
.benchmark-verdict-score span {
|
|
1022
|
+
display: block;
|
|
1023
|
+
margin-top: 8px;
|
|
1024
|
+
color: var(--muted);
|
|
1025
|
+
font-size: 12px;
|
|
1026
|
+
font-weight: 700;
|
|
1027
|
+
text-transform: uppercase;
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
.benchmark-metrics {
|
|
1031
|
+
display: grid;
|
|
1032
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
1033
|
+
margin-top: 28px;
|
|
1034
|
+
border-top: 1px solid var(--line-soft);
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
.benchmark-metric {
|
|
1038
|
+
min-width: 0;
|
|
1039
|
+
padding: 18px 18px 14px 0;
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
.benchmark-metric + .benchmark-metric {
|
|
1043
|
+
padding-left: 18px;
|
|
1044
|
+
border-left: 1px solid var(--line-soft);
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
.benchmark-metric span,
|
|
1048
|
+
.benchmark-metric small {
|
|
1049
|
+
display: block;
|
|
1050
|
+
color: var(--muted-2);
|
|
1051
|
+
font-size: 12px;
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
.benchmark-metric strong {
|
|
1055
|
+
display: block;
|
|
1056
|
+
margin: 5px 0 3px;
|
|
1057
|
+
color: var(--text);
|
|
1058
|
+
font-size: 24px;
|
|
1059
|
+
line-height: 1.2;
|
|
1060
|
+
letter-spacing: 0;
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
.benchmark-facts {
|
|
1064
|
+
display: grid;
|
|
1065
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
1066
|
+
gap: 0 24px;
|
|
1067
|
+
margin: 28px 0 0;
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
.benchmark-facts div {
|
|
1071
|
+
min-width: 0;
|
|
1072
|
+
padding: 14px 0;
|
|
1073
|
+
border-bottom: 1px solid var(--line-soft);
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
.benchmark-facts dt {
|
|
1077
|
+
color: var(--muted-2);
|
|
1078
|
+
font-size: 11px;
|
|
1079
|
+
font-weight: 700;
|
|
1080
|
+
text-transform: uppercase;
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
.benchmark-facts dd {
|
|
1084
|
+
margin: 5px 0 0;
|
|
1085
|
+
color: var(--text);
|
|
1086
|
+
font-size: 14px;
|
|
1087
|
+
overflow-wrap: anywhere;
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
.benchmark-score-chart {
|
|
1091
|
+
display: grid;
|
|
1092
|
+
gap: 13px;
|
|
1093
|
+
margin-top: 30px;
|
|
1094
|
+
padding: 22px;
|
|
1095
|
+
border: 1px solid var(--line);
|
|
1096
|
+
border-radius: 8px;
|
|
1097
|
+
background: var(--panel);
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
.benchmark-score-row,
|
|
1101
|
+
.benchmark-usage-row {
|
|
1102
|
+
display: grid;
|
|
1103
|
+
grid-template-columns: 112px minmax(120px, 1fr) 64px;
|
|
1104
|
+
gap: 14px;
|
|
1105
|
+
align-items: center;
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
.benchmark-score-row > span,
|
|
1109
|
+
.benchmark-usage-row > span {
|
|
1110
|
+
color: var(--muted);
|
|
1111
|
+
font-size: 13px;
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
.benchmark-score-row strong,
|
|
1115
|
+
.benchmark-usage-row strong {
|
|
1116
|
+
color: var(--text);
|
|
1117
|
+
font-family: "JetBrains Mono", monospace;
|
|
1118
|
+
font-size: 12px;
|
|
1119
|
+
text-align: right;
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
.benchmark-track {
|
|
1123
|
+
position: relative;
|
|
1124
|
+
width: 100%;
|
|
1125
|
+
height: 10px;
|
|
1126
|
+
overflow: hidden;
|
|
1127
|
+
border-radius: 5px;
|
|
1128
|
+
background: #24262d;
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
.benchmark-track i,
|
|
1132
|
+
.benchmark-win-track i {
|
|
1133
|
+
display: block;
|
|
1134
|
+
width: var(--bar-size);
|
|
1135
|
+
height: 100%;
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
.benchmark-score-row .benchmark-track i {
|
|
1139
|
+
background: var(--chart-piagent);
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
.benchmark-score-row.overall {
|
|
1143
|
+
padding-top: 13px;
|
|
1144
|
+
border-top: 1px solid var(--line-soft);
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
.benchmark-score-row.overall .benchmark-track i {
|
|
1148
|
+
background: var(--accent);
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
.benchmark-table-wrap code {
|
|
1152
|
+
overflow-wrap: anywhere;
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
.benchmark-table-wrap {
|
|
1156
|
+
border-radius: 8px;
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
.benchmark-table-wrap td strong {
|
|
1160
|
+
color: var(--accent);
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1163
|
+
.benchmark-legend {
|
|
1164
|
+
display: flex;
|
|
1165
|
+
flex-wrap: wrap;
|
|
1166
|
+
gap: 18px;
|
|
1167
|
+
margin-top: 28px;
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
.benchmark-legend span {
|
|
1171
|
+
display: inline-flex;
|
|
1172
|
+
align-items: center;
|
|
1173
|
+
gap: 7px;
|
|
1174
|
+
color: var(--muted);
|
|
1175
|
+
font-size: 12px;
|
|
1176
|
+
font-weight: 700;
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
.benchmark-legend i {
|
|
1180
|
+
width: 12px;
|
|
1181
|
+
height: 12px;
|
|
1182
|
+
border-radius: 3px;
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1185
|
+
.piagent-swatch,
|
|
1186
|
+
.piagent-bar,
|
|
1187
|
+
.piagent-win {
|
|
1188
|
+
background: var(--chart-piagent);
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
.codex-swatch,
|
|
1192
|
+
.codex-bar,
|
|
1193
|
+
.codex-win {
|
|
1194
|
+
background: var(--chart-codex);
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
.benchmark-usage-chart {
|
|
1198
|
+
display: grid;
|
|
1199
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1200
|
+
gap: 28px 34px;
|
|
1201
|
+
margin-top: 18px;
|
|
1202
|
+
padding: 24px;
|
|
1203
|
+
border: 1px solid var(--line);
|
|
1204
|
+
border-radius: 8px;
|
|
1205
|
+
background: var(--panel);
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1208
|
+
.benchmark-usage-group h3 {
|
|
1209
|
+
margin-bottom: 14px;
|
|
1210
|
+
font-size: 14px;
|
|
1211
|
+
letter-spacing: 0;
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1214
|
+
.benchmark-usage-row {
|
|
1215
|
+
grid-template-columns: 78px minmax(80px, 1fr) 62px;
|
|
1216
|
+
gap: 10px;
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
.benchmark-usage-row + .benchmark-usage-row {
|
|
1220
|
+
margin-top: 9px;
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
.benchmark-paired {
|
|
1224
|
+
margin-top: 28px;
|
|
1225
|
+
padding: 22px;
|
|
1226
|
+
border-left: 3px solid var(--chart-piagent);
|
|
1227
|
+
background: rgba(139, 233, 200, 0.045);
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
.benchmark-paired-head {
|
|
1231
|
+
display: grid;
|
|
1232
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1233
|
+
gap: 20px;
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
.benchmark-paired-head span,
|
|
1237
|
+
.benchmark-paired-head strong {
|
|
1238
|
+
display: block;
|
|
1239
|
+
}
|
|
1240
|
+
|
|
1241
|
+
.benchmark-paired-head span {
|
|
1242
|
+
color: var(--muted-2);
|
|
1243
|
+
font-size: 11px;
|
|
1244
|
+
font-weight: 700;
|
|
1245
|
+
text-transform: uppercase;
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1248
|
+
.benchmark-paired-head strong {
|
|
1249
|
+
margin-top: 4px;
|
|
1250
|
+
color: var(--text);
|
|
1251
|
+
font-size: 15px;
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
.benchmark-win-track {
|
|
1255
|
+
display: flex;
|
|
1256
|
+
width: 100%;
|
|
1257
|
+
height: 14px;
|
|
1258
|
+
margin: 18px 0;
|
|
1259
|
+
overflow: hidden;
|
|
1260
|
+
border-radius: 7px;
|
|
1261
|
+
background: #24262d;
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
.benchmark-paired p strong {
|
|
1265
|
+
color: var(--text);
|
|
1266
|
+
}
|
|
1267
|
+
|
|
1268
|
+
.benchmark-categories {
|
|
1269
|
+
display: grid;
|
|
1270
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
1271
|
+
gap: 12px;
|
|
1272
|
+
margin-top: 28px;
|
|
1273
|
+
}
|
|
1274
|
+
|
|
1275
|
+
.benchmark-categories > div {
|
|
1276
|
+
position: relative;
|
|
1277
|
+
min-width: 0;
|
|
1278
|
+
padding: 18px;
|
|
1279
|
+
border: 1px solid var(--line);
|
|
1280
|
+
border-radius: 8px;
|
|
1281
|
+
background: var(--panel);
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
.benchmark-categories span {
|
|
1285
|
+
color: var(--muted-2);
|
|
1286
|
+
font-size: 11px;
|
|
1287
|
+
font-weight: 700;
|
|
1288
|
+
text-transform: uppercase;
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
.benchmark-categories strong {
|
|
1292
|
+
position: absolute;
|
|
1293
|
+
top: 16px;
|
|
1294
|
+
right: 16px;
|
|
1295
|
+
color: var(--accent);
|
|
1296
|
+
font-family: "JetBrains Mono", monospace;
|
|
1297
|
+
font-size: 14px;
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1300
|
+
.benchmark-categories p {
|
|
1301
|
+
margin-top: 10px;
|
|
1302
|
+
padding-right: 40px;
|
|
1303
|
+
font-size: 13px;
|
|
1304
|
+
}
|
|
1305
|
+
|
|
1306
|
+
@media (max-width: 920px) {
|
|
1307
|
+
.benchmark-metrics,
|
|
1308
|
+
.benchmark-categories {
|
|
1309
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1310
|
+
}
|
|
1311
|
+
|
|
1312
|
+
.benchmark-metric:nth-child(3) {
|
|
1313
|
+
padding-left: 0;
|
|
1314
|
+
border-left: 0;
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1317
|
+
.benchmark-facts,
|
|
1318
|
+
.benchmark-usage-chart {
|
|
1319
|
+
grid-template-columns: 1fr;
|
|
1320
|
+
}
|
|
1321
|
+
}
|
|
1322
|
+
|
|
1323
|
+
@media (max-width: 760px) {
|
|
1324
|
+
.benchmark-verdict {
|
|
1325
|
+
grid-template-columns: 1fr;
|
|
1326
|
+
gap: 22px;
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
.benchmark-verdict-score {
|
|
1330
|
+
padding: 0;
|
|
1331
|
+
border-left: 0;
|
|
1332
|
+
}
|
|
1333
|
+
|
|
1334
|
+
.benchmark-verdict-score strong {
|
|
1335
|
+
font-size: 42px;
|
|
1336
|
+
}
|
|
1337
|
+
|
|
1338
|
+
.benchmark-score-chart,
|
|
1339
|
+
.benchmark-usage-chart,
|
|
1340
|
+
.benchmark-paired {
|
|
1341
|
+
padding: 16px;
|
|
1342
|
+
}
|
|
1343
|
+
|
|
1344
|
+
.benchmark-score-row {
|
|
1345
|
+
grid-template-columns: 88px minmax(70px, 1fr) 54px;
|
|
1346
|
+
gap: 8px;
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1349
|
+
.benchmark-paired-head {
|
|
1350
|
+
grid-template-columns: 1fr;
|
|
1351
|
+
}
|
|
1352
|
+
|
|
1353
|
+
.benchmark-table-wrap {
|
|
1354
|
+
overflow-x: auto;
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
.benchmark-table-wrap table {
|
|
1358
|
+
min-width: 680px;
|
|
1359
|
+
}
|
|
1360
|
+
|
|
1361
|
+
.benchmark-table-wrap th,
|
|
1362
|
+
.benchmark-table-wrap td {
|
|
1363
|
+
display: table-cell;
|
|
1364
|
+
width: auto;
|
|
1365
|
+
padding: 12px;
|
|
1366
|
+
}
|
|
1367
|
+
}
|
|
1368
|
+
|
|
1369
|
+
@media (max-width: 520px) {
|
|
1370
|
+
.benchmark-metrics,
|
|
1371
|
+
.benchmark-categories {
|
|
1372
|
+
grid-template-columns: 1fr;
|
|
1373
|
+
}
|
|
1374
|
+
|
|
1375
|
+
.benchmark-metric,
|
|
1376
|
+
.benchmark-metric + .benchmark-metric,
|
|
1377
|
+
.benchmark-metric:nth-child(3) {
|
|
1378
|
+
padding: 14px 0;
|
|
1379
|
+
border-left: 0;
|
|
1380
|
+
border-bottom: 1px solid var(--line-soft);
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
.benchmark-usage-row {
|
|
1384
|
+
grid-template-columns: 72px minmax(60px, 1fr) 56px;
|
|
1385
|
+
}
|
|
1386
|
+
}
|
|
1387
|
+
|
|
981
1388
|
/* An anchor target under a sticky header lands with its heading hidden. */
|
|
982
1389
|
.section[id],
|
|
983
1390
|
h2[id],
|