@repobit/dex-system-design 0.24.17 → 0.24.19
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 +15 -0
- package/package.json +4 -4
- package/src/components/ai-guardian-demo.stories.js +454 -33
- package/src/components/bento-grid/bento-grid.css.js +12 -1
- package/src/components/bento-grid/bento-grid.js +59 -1
- package/src/components/bento-grid/bento-grid.stories.js +45 -0
- package/src/components/comparison-panel/comparison-panel.css.js +52 -1
- package/src/components/comparison-panel/comparison-panel.js +6 -1
- package/src/components/compatibility-table/compatibility-table.css.js +29 -13
- package/src/components/compatibility-table/compatibility-table.js +13 -7
- package/src/components/cta-banner/cta-banner.css.js +11 -0
- package/src/components/cta-banner/cta-banner.js +7 -0
- package/src/components/footer/footer-lp.css.js +10 -21
- package/src/components/footer/footer-lp.js +3 -18
- package/src/components/footer/footer-nav-menu.css.js +0 -2
- package/src/components/footer/footer.css.js +18 -35
- package/src/components/footer/footer.js +5 -1
- package/src/components/header/header-code.css.js +208 -10
- package/src/components/header/header-code.js +148 -5
- package/src/components/header/header-code.stories.js +83 -27
- package/src/components/page-switcher/page-switcher.js +1 -1
- package/src/components/paragraph/paragraph.js +6 -0
- package/src/components/quick-answer/quick-answer.css.js +2 -0
- package/src/components/quick-answer/quick-answer.js +1 -1
- package/src/components/terminal/terminal-message.css.js +153 -13
- package/src/components/terminal/terminal-message.js +37 -11
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,21 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [0.24.19](https://github.com/bitdefender/dex-core/compare/@repobit/dex-system-design@0.24.18...@repobit/dex-system-design@0.24.19) (2026-09-23)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **DEX-1014:** adjustments for AI Bitdefender
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## [0.24.18](https://github.com/bitdefender/dex-core/compare/@repobit/dex-system-design@0.24.17...@repobit/dex-system-design@0.24.18) (2026-09-23)
|
|
14
|
+
|
|
15
|
+
**Note:** Version bump only for package @repobit/dex-system-design
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
6
21
|
## [0.24.17](https://github.com/bitdefender/dex-core/compare/@repobit/dex-system-design@0.24.16...@repobit/dex-system-design@0.24.17) (2026-09-21)
|
|
7
22
|
|
|
8
23
|
**Note:** Version bump only for package @repobit/dex-system-design
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@repobit/dex-system-design",
|
|
3
|
-
"version": "0.24.
|
|
3
|
+
"version": "0.24.19",
|
|
4
4
|
"description": "Design system based on Web Components.",
|
|
5
5
|
"author": "Iordache Matei Cezar <miordache@bitdefender.com>",
|
|
6
6
|
"homepage": "https://github.com/bitdefender/dex-core#readme",
|
|
@@ -76,8 +76,8 @@
|
|
|
76
76
|
"url": "https://github.com/bitdefender/dex-core/issues"
|
|
77
77
|
},
|
|
78
78
|
"dependencies": {
|
|
79
|
-
"@repobit/dex-store": "1.6.
|
|
80
|
-
"@repobit/dex-store-elements": "2.1.
|
|
79
|
+
"@repobit/dex-store": "1.6.35",
|
|
80
|
+
"@repobit/dex-store-elements": "2.1.5",
|
|
81
81
|
"lit": "^3.3.2"
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|
|
@@ -94,5 +94,5 @@
|
|
|
94
94
|
"volta": {
|
|
95
95
|
"node": "24.14.0"
|
|
96
96
|
},
|
|
97
|
-
"gitHead": "
|
|
97
|
+
"gitHead": "09e86b2eb429cec7fadc15b6aa945152ab500a19"
|
|
98
98
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LitElement, html } from "lit";
|
|
1
|
+
import { LitElement, html, nothing } from "lit";
|
|
2
2
|
import "./accordion/accordion-bg.js";
|
|
3
3
|
import "./accordion/accordion.js";
|
|
4
4
|
import "./agent-endpoints/agent-endpoints.js";
|
|
@@ -576,7 +576,7 @@ function skillScannerBody() {
|
|
|
576
576
|
|
|
577
577
|
<section id="anchor-3-section">
|
|
578
578
|
<div style="padding: 24px 24px 48px;">
|
|
579
|
-
<bd-p kind="normal" style="color: var(--color-blue-500); font-weight: 600; margin: 0 0 8px
|
|
579
|
+
<bd-p kind="normal" style="color: var(--color-blue-500); font-weight: 600; margin: 0 0 8px;">Detection coverage</bd-p>
|
|
580
580
|
<bd-h as="h2" font-weight="700" style="margin: 0 0 8px;">What it detects</bd-h>
|
|
581
581
|
<bd-p kind="regular" style="color: var(--color-neutral-700); margin: 0 0 24px; max-width: 72ch">
|
|
582
582
|
Agent Skill Scanner runs 71 behavioural detectors across 16 threat categories, including code execution, obfuscation, reverse shells, crypto-mining, persistence, time bombs and stealth natural-language directives. It also extracts 18 indicator types from every text file: URLs, IPs, base64 blobs, dangerous shell commands, secret env-var names and invisible Unicode characters among them.
|
|
@@ -620,11 +620,6 @@ function skillScannerBody() {
|
|
|
620
620
|
<bd-bento-grid
|
|
621
621
|
title="How it works"
|
|
622
622
|
>
|
|
623
|
-
<!--
|
|
624
|
-
Iconițele exacte din poză (stive/layers, scut+lupă, eprubetă,
|
|
625
|
-
ceas, lacăt deschis, lupă+insectă) nu există în setul curent de
|
|
626
|
-
iconițe -- am ales cele mai apropiate semantic ca placeholder.
|
|
627
|
-
-->
|
|
628
623
|
<bd-bento-item title="Layered analysis" tone="tint">
|
|
629
624
|
<bd-analysis-icon slot="icon" width="32" height="32" color="#006DFF"></bd-analysis-icon>
|
|
630
625
|
<bd-p color="var(--color-neutral-600)">Local indicator extraction feeds a server-side LLM that produces the report: a risk level, a plain-language summary, and per-file findings. Enough to decide, without wading through raw indicators.</bd-p>
|
|
@@ -883,15 +878,433 @@ function skillScannerBody() {
|
|
|
883
878
|
</div>
|
|
884
879
|
</bd-agent-endpoints>
|
|
885
880
|
</section>
|
|
886
|
-
|
|
887
|
-
<!--
|
|
888
|
-
TODO: daca mai exista sectiuni sub asta pentru Skill Scanner,
|
|
889
|
-
se adauga cand vine continutul.
|
|
890
|
-
-->
|
|
891
881
|
`;
|
|
892
882
|
}
|
|
893
883
|
|
|
884
|
+
function vpnBody() {
|
|
885
|
+
return html`
|
|
886
|
+
<bd-header-code
|
|
887
|
+
variant="tint"
|
|
888
|
+
eyebrow="Privacy for autonomous AI agents"
|
|
889
|
+
title="Bitdefender VPN for AI Agents"
|
|
890
|
+
description="Each prompt gets a fresh, disposable container scoped to a specific location, so your agent's traffic isn't tied to your home connection or your personal IP."
|
|
891
|
+
meta-spec="macOS 13+ · Apple silicon (M1 or later) · 31 MB"
|
|
892
|
+
.metaFacts=${[
|
|
893
|
+
{ label: "PLATFORM", value: "macOS" },
|
|
894
|
+
{ label: "STATUS", value: "External beta" },
|
|
895
|
+
{ label: "PRICE", value: "Free during beta" },
|
|
896
|
+
{ label: "MADE BY", value: "Bitdefender" },
|
|
897
|
+
{ label: "WINDOWS", value: "To follow" }
|
|
898
|
+
]}
|
|
899
|
+
>
|
|
900
|
+
<span slot="breadcrumb">Bitdefender AI</span>
|
|
901
|
+
<span slot="breadcrumb">vpn-for-agents</span>
|
|
902
|
+
|
|
903
|
+
<bd-button-link
|
|
904
|
+
slot="primary-button"
|
|
905
|
+
label="Download for macOS"
|
|
906
|
+
kind="primary"
|
|
907
|
+
size="md"
|
|
908
|
+
font-size="18px"
|
|
909
|
+
font-weight="600"
|
|
910
|
+
>Download for macOS</bd-button-link>
|
|
911
|
+
|
|
912
|
+
<bd-button-link
|
|
913
|
+
slot="secondary-button"
|
|
914
|
+
label="See how it works"
|
|
915
|
+
kind="primary-outline"
|
|
916
|
+
size="md"
|
|
917
|
+
font-size="18px"
|
|
918
|
+
font-weight="600"
|
|
919
|
+
>See how it works</bd-button-link>
|
|
920
|
+
|
|
921
|
+
<span slot="badge">EXTERNAL BETA</span>
|
|
922
|
+
|
|
923
|
+
<span
|
|
924
|
+
slot="annotation-top"
|
|
925
|
+
style="display: inline-flex; align-items: center; background: var(--color-blue-50, #eaf2ff); border: 1px solid var(--color-blue-200, #bcd7ff); color: var(--color-blue-600, #1d5fd6); font-family: var(--typography-fontFamily-mono, monospace); font-size: 12px; font-weight: 600; padding: 6px 14px; border-radius: 999px; white-space: nowrap;"
|
|
926
|
+
>exit: frankfurt · server IP</span>
|
|
927
|
+
|
|
928
|
+
<span
|
|
929
|
+
slot="annotation-bottom"
|
|
930
|
+
style="display: inline-flex; align-items: center; background: var(--color-green-50, #e9faf0); border: 1px solid var(--color-green-200, #b7ecc9); color: var(--color-green-700, #1b7f42); font-family: var(--typography-fontFamily-mono, monospace); font-size: 12px; font-weight: 600; padding: 6px 14px; border-radius: 999px; white-space: nowrap;"
|
|
931
|
+
>tunnel closed — session cleared</span>
|
|
932
|
+
|
|
933
|
+
<bd-terminal-message
|
|
934
|
+
slot="terminal-content"
|
|
935
|
+
show-titlebar
|
|
936
|
+
variant="flush"
|
|
937
|
+
caption="// illustrative — every connection closes when the prompt ends"
|
|
938
|
+
.lines=${[
|
|
939
|
+
{ type: "title", text: "VPN for AI Agents · connection log", live: true },
|
|
940
|
+
{ type: "row", label: "MCP", text: "vpn_connect(location: frankfurt)", badge: "Open", badgeColor: "green" },
|
|
941
|
+
{ type: "row", label: "REQUEST", text: "agent reaches insurer-compare.com", badge: "Server IP", badgeColor: "green" },
|
|
942
|
+
{ type: "row", label: "NETWORK", text: "hotel Wi-Fi, unencrypted", badge: "Protected", badgeColor: "green" },
|
|
943
|
+
{ type: "row", label: "MCP", text: "vpn_safefetch(location: frankfurt, url: insurer-compare.com)", badge: "Scanned", badgeColor: "amber" },
|
|
944
|
+
{ type: "row", label: "MCP", text: "vpn_disconnect(location: frankfurt) — prompt ends", badge: "Closed — session cleared", badgeColor: "neutral" }
|
|
945
|
+
]}
|
|
946
|
+
></bd-terminal-message>
|
|
947
|
+
</bd-header-code>
|
|
948
|
+
|
|
949
|
+
<section>
|
|
950
|
+
<div style="max-width: 1200px; margin: 0 auto;">
|
|
951
|
+
<bd-quick-answer
|
|
952
|
+
label="Quick answer"
|
|
953
|
+
text="Bitdefender VPN for AI Agents is a macOS VPN scoped to AI-agent traffic. Each prompt gets its own container, scoped to a specific location and destroyed when the prompt ends, so no cookies, cache, or session state carries over. It covers what Claude Desktop, Cursor, Codex, and OpenCode route through Bitdefender's MCP tools. Free with no traffic caps during beta, currently in external beta."
|
|
954
|
+
></bd-quick-answer>
|
|
955
|
+
</div>
|
|
956
|
+
</section>
|
|
957
|
+
|
|
958
|
+
<div style="max-width: 1200px; margin: 0 auto;">
|
|
959
|
+
<bd-anchor-nav
|
|
960
|
+
aria-label="VPN for AI Agents sections"
|
|
961
|
+
sticky-top="65px"
|
|
962
|
+
.items=${[
|
|
963
|
+
{ title: "Overview" },
|
|
964
|
+
{ title: "Protection" },
|
|
965
|
+
{ title: "Use cases" },
|
|
966
|
+
{ title: "How it works" },
|
|
967
|
+
{ title: "Requirements" },
|
|
968
|
+
{ title: "Why trust it" },
|
|
969
|
+
{ title: "FAQ" }
|
|
970
|
+
]}
|
|
971
|
+
style="margin-bottom: 0;"
|
|
972
|
+
>
|
|
973
|
+
</bd-anchor-nav>
|
|
974
|
+
|
|
975
|
+
<section id="anchor-1-section" style="margin-top: 0; padding-top: 0;">
|
|
976
|
+
<div style="padding: 48px 24px 24px;">
|
|
977
|
+
<bd-overview
|
|
978
|
+
title="What is VPN for AI Agents?"
|
|
979
|
+
description="VPN for AI Agents routes what Claude Desktop, Cursor, Codex, and OpenCode send over the network through Bitdefender's VPN servers instead of yours. Each prompt opens its own connection, exits on the VPN server's IP, and disappears the moment the prompt ends. No cookies, cache, or session state carries over to the next prompt. Requests the agent makes with its own built-in tools, outside Bitdefender's MCP server, are not routed through the VPN."
|
|
980
|
+
.facts=${[
|
|
981
|
+
{ label: "CATEGORY", value: "Agent privacy & networking" },
|
|
982
|
+
{ label: "PLATFORM", value: "macOS (initial)" },
|
|
983
|
+
{ label: "RUNS AS", value: "Broker + MCP server" },
|
|
984
|
+
{ label: "AGENTS", value: "Claude Desktop, Cursor, Codex, OpenCode" },
|
|
985
|
+
{ label: "MODEL", value: "Free during beta, no traffic caps" }
|
|
986
|
+
]}
|
|
987
|
+
></bd-overview>
|
|
988
|
+
</div>
|
|
989
|
+
</section>
|
|
990
|
+
|
|
991
|
+
<section id="anchor-2-section">
|
|
992
|
+
<div style="padding: 24px 24px 48px;">
|
|
993
|
+
<bd-bento-grid
|
|
994
|
+
variant="equal"
|
|
995
|
+
equal-columns="3"
|
|
996
|
+
background="tint"
|
|
997
|
+
eyebrow="Protection"
|
|
998
|
+
title="What does VPN for AI Agents protect against?"
|
|
999
|
+
description="Each protection is structural: every request the agent routes through Bitdefender's MCP tools gets it automatically, with no setting to remember."
|
|
1000
|
+
>
|
|
1001
|
+
<bd-bento-item>
|
|
1002
|
+
<span slot="icon" style="color: var(--color-blue-500, #006DFF); font-weight: 700; font-family: var(--typography-fontFamily-mono, monospace); font-size: 14px; letter-spacing: 0.05em;">01</span>
|
|
1003
|
+
<bd-h as="h5" fontWeight="700" style="margin: 0 0 8px;">IP masking</bd-h>
|
|
1004
|
+
<bd-p color="var(--color-neutral-600)">When your agent reaches a site, it sees the VPN server's exit IP. Not your home address or IP-based location.</bd-p>
|
|
1005
|
+
</bd-bento-item>
|
|
1006
|
+
|
|
1007
|
+
<bd-bento-item>
|
|
1008
|
+
<span slot="icon" style="color: var(--color-blue-500, #006DFF); font-weight: 700; font-family: var(--typography-fontFamily-mono, monospace); font-size: 14px; letter-spacing: 0.05em;">02</span>
|
|
1009
|
+
<bd-h as="h5" fontWeight="700" style="margin: 0 0 8px;">Per-prompt encryption</bd-h>
|
|
1010
|
+
<bd-p color="var(--color-neutral-600)">Every request opens its own encrypted tunnel from your device to Bitdefender, so whoever runs the Wi-Fi you're on can't read what the agent sends.</bd-p>
|
|
1011
|
+
</bd-bento-item>
|
|
1012
|
+
|
|
1013
|
+
<bd-bento-item>
|
|
1014
|
+
<span slot="icon" style="color: var(--color-blue-500, #006DFF); font-weight: 700; font-family: var(--typography-fontFamily-mono, monospace); font-size: 14px; letter-spacing: 0.05em;">03</span>
|
|
1015
|
+
<bd-h as="h5" fontWeight="700" style="margin: 0 0 8px;">Session isolation</bd-h>
|
|
1016
|
+
<bd-p color="var(--color-neutral-600)">Each tunnel closes the moment the prompt ends. If a site sees two of your agent's requests, it has no network-level way to tell they came from the same prompt.</bd-p>
|
|
1017
|
+
</bd-bento-item>
|
|
1018
|
+
|
|
1019
|
+
<bd-bento-item>
|
|
1020
|
+
<span slot="icon" style="color: var(--color-blue-500, #006DFF); font-weight: 700; font-family: var(--typography-fontFamily-mono, monospace); font-size: 14px; letter-spacing: 0.05em;">04</span>
|
|
1021
|
+
<bd-h as="h5" fontWeight="700" style="margin: 0 0 8px;">Clean-IP browsing</bd-h>
|
|
1022
|
+
<bd-p color="var(--color-neutral-600)">Every request exits on the VPN server's IP rather than the same home address every time, useful for QA and monitoring work that needs a neutral, non-residential vantage point.</bd-p>
|
|
1023
|
+
</bd-bento-item>
|
|
1024
|
+
|
|
1025
|
+
<bd-bento-item>
|
|
1026
|
+
<span slot="icon" style="color: var(--color-blue-500, #006DFF); font-weight: 700; font-family: var(--typography-fontFamily-mono, monospace); font-size: 14px; letter-spacing: 0.05em;">05</span>
|
|
1027
|
+
<bd-h as="h5" fontWeight="700" style="margin: 0 0 8px;">Regional routing</bd-h>
|
|
1028
|
+
<bd-p color="var(--color-neutral-600)">Need to see a page the way a visitor from a specific country would? Route that one request through a Bitdefender server there, just for that prompt.</bd-p>
|
|
1029
|
+
</bd-bento-item>
|
|
1030
|
+
</bd-bento-grid>
|
|
1031
|
+
</div>
|
|
1032
|
+
</section>
|
|
1033
|
+
|
|
1034
|
+
<section id="anchor-3-section">
|
|
1035
|
+
<div style="padding: 24px 24px 48px;">
|
|
1036
|
+
<bd-bento-grid
|
|
1037
|
+
variant="equal"
|
|
1038
|
+
equal-columns="3"
|
|
1039
|
+
eyebrow="Who it's for"
|
|
1040
|
+
title="Built for agents that act on your behalf"
|
|
1041
|
+
description="VPN for AI Agents is aimed at people running agents that reach the open web — for research, QA, or comparison tasks — and want the traffic to be private and encrypted, without changing how the agent works."
|
|
1042
|
+
>
|
|
1043
|
+
<bd-bento-item>
|
|
1044
|
+
<bd-h as="h5" font-weight="700" style="margin: 0 0 8px;">IP privacy toward the sites you reach</bd-h>
|
|
1045
|
+
<bd-p color="var(--color-neutral-600)">If your agent sends dozens of requests a day, none of them carry your home IP, which makes it harder for sites to correlate requests to a single household, whether it's a research task or a run of price comparisons across competitors.</bd-p>
|
|
1046
|
+
</bd-bento-item>
|
|
1047
|
+
|
|
1048
|
+
<bd-bento-item>
|
|
1049
|
+
<bd-h as="h5" font-weight="700" style="margin: 0 0 8px;">QA on geolocalized pages</bd-h>
|
|
1050
|
+
<bd-p color="var(--color-neutral-600)">Your team ships a pricing page with different content for five countries. Route the agent through the German exit and check that version renders the way a visitor there would actually see it.</bd-p>
|
|
1051
|
+
</bd-bento-item>
|
|
1052
|
+
|
|
1053
|
+
<bd-bento-item>
|
|
1054
|
+
<bd-h as="h5" font-weight="700" style="margin: 0 0 8px;">Agents on untrusted networks</bd-h>
|
|
1055
|
+
<bd-p color="var(--color-neutral-600)">You're running a research agent from a conference or a café. The tunnel encrypts what it sends, so whoever runs that Wi-Fi can't read it.</bd-p>
|
|
1056
|
+
</bd-bento-item>
|
|
1057
|
+
</bd-bento-grid>
|
|
1058
|
+
|
|
1059
|
+
<bd-p kind="regular" style="color: var(--color-neutral-500); font-style: italic; margin-top: 24px; max-width: 90ch;">
|
|
1060
|
+
VPN for AI Agents changes the network path a request takes, not the rules of the site it reaches. It isn't a workaround for anyone's terms of service — more on that below.
|
|
1061
|
+
</bd-p>
|
|
1062
|
+
</div>
|
|
1063
|
+
|
|
1064
|
+
<bd-comparison-panel
|
|
1065
|
+
variant="dark"
|
|
1066
|
+
title="What it is, and what it isn't"
|
|
1067
|
+
description="VPN for AI Agents secures the network path your agent's traffic takes. It is not a device-wide VPN, a content filter, or a way to hide what the agent is doing from the AI provider."
|
|
1068
|
+
positive-title="VPN for AI Agents is"
|
|
1069
|
+
negative-title="VPN for AI Agents is not"
|
|
1070
|
+
.positiveItems=${[
|
|
1071
|
+
"A VPN scoped to agent traffic only — Claude Desktop, Cursor, Codex, and OpenCode.",
|
|
1072
|
+
"A fresh, isolated container per prompt — not a persistent tunnel.",
|
|
1073
|
+
"IP masking for every request routed through it.",
|
|
1074
|
+
"Free during beta, and standalone.",
|
|
1075
|
+
"Built for macOS first."
|
|
1076
|
+
]}
|
|
1077
|
+
.negativeItems=${[
|
|
1078
|
+
"A device-wide VPN — the browser and other apps are unaffected.",
|
|
1079
|
+
"A way to hide prompts from the AI provider — the model behind your agent still receives prompts and account identity as normal.",
|
|
1080
|
+
"A guarantee every request is protected — only traffic the agent sends through Bitdefender's MCP tools is covered.",
|
|
1081
|
+
"An always-on tunnel — it opens and closes with each prompt.",
|
|
1082
|
+
"A way to bypass a site's terms of service, rate limits, or an existing IP ban — those decisions belong to the destination site, not to Bitdefender."
|
|
1083
|
+
]}
|
|
1084
|
+
></bd-comparison-panel>
|
|
1085
|
+
</section>
|
|
1086
|
+
<section id="anchor-4-section">
|
|
1087
|
+
<div style="padding: 24px 24px 48px;">
|
|
1088
|
+
<bd-bento-grid
|
|
1089
|
+
variant="equal"
|
|
1090
|
+
equal-columns="3"
|
|
1091
|
+
eyebrow="How it works"
|
|
1092
|
+
title="Arrives quietly, protects automatically"
|
|
1093
|
+
description="Setup happens once. Protection happens every prompt, without the user thinking about it."
|
|
1094
|
+
>
|
|
1095
|
+
<bd-bento-item>
|
|
1096
|
+
<span slot="icon" style="color: var(--color-blue-500, #006DFF); font-weight: 700; font-family: var(--typography-fontFamily-mono, monospace); font-size: 14px; letter-spacing: 0.05em;">01</span>
|
|
1097
|
+
<bd-h as="h5" fontWeight="700" style="margin: 0 0 8px;">Install & sign in</bd-h>
|
|
1098
|
+
<bd-p color="var(--color-neutral-600)">Download the macOS installer and run it. VPN for AI Agents runs as a lightweight macOS component you install once, no separate app to manage. First run: choose which agents to protect, consent to telemetry, sign in once.</bd-p>
|
|
1099
|
+
</bd-bento-item>
|
|
1100
|
+
|
|
1101
|
+
<bd-bento-item>
|
|
1102
|
+
<span slot="icon" style="color: var(--color-blue-500, #006DFF); font-weight: 700; font-family: var(--typography-fontFamily-mono, monospace); font-size: 14px; letter-spacing: 0.05em;">02</span>
|
|
1103
|
+
<bd-h as="h5" fontWeight="700" style="margin: 0 0 8px;">Restart to activate</bd-h>
|
|
1104
|
+
<bd-p color="var(--color-neutral-600)">Claude Desktop, Cursor, Codex, or OpenCode restarts once to pick up the new MCP configuration. No files to edit, nothing else to configure.</bd-p>
|
|
1105
|
+
</bd-bento-item>
|
|
1106
|
+
|
|
1107
|
+
<bd-bento-item>
|
|
1108
|
+
<span slot="icon" style="color: var(--color-blue-500, #006DFF); font-weight: 700; font-family: var(--typography-fontFamily-mono, monospace); font-size: 14px; letter-spacing: 0.05em;">03</span>
|
|
1109
|
+
<bd-h as="h5" fontWeight="700" style="margin: 0 0 8px;">Automatic for every MCP call</bd-h>
|
|
1110
|
+
<bd-p color="var(--color-neutral-600)">The tunnel opens when the agent calls a Bitdefender tool and closes when the prompt ends. No cookies, cache, or session state carries over to the next prompt, and idle containers close on their own.</bd-p>
|
|
1111
|
+
</bd-bento-item>
|
|
1112
|
+
</bd-bento-grid>
|
|
1113
|
+
|
|
1114
|
+
<div style="background: var(--color-yellow-50, #fffbeb); border: 1px solid var(--color-yellow-300, #fcd34d); border-radius: var(--radius-xl, 12px); padding: 16px 20px; color: var(--color-yellow-800, #92400e); margin-top: 24px;">
|
|
1115
|
+
<bd-p kind="small" style="margin:0;">External beta on macOS. Downloads the macOS beta installer (.dmg). Windows to follow.</bd-p>
|
|
1116
|
+
</div>
|
|
1117
|
+
</div>
|
|
1118
|
+
</section>
|
|
1119
|
+
|
|
1120
|
+
<section id="anchor-5-section">
|
|
1121
|
+
<div style="padding: 24px 24px 48px;">
|
|
1122
|
+
<bd-p kind="normal" style="color: var(--color-blue-500); font-weight: 600; margin: 0 0 8px;">System requirements</bd-p>
|
|
1123
|
+
<bd-h as="h2" font-weight="700" style="margin: 0 0 8px;">What it needs to run</bd-h>
|
|
1124
|
+
<bd-p kind="regular" style="color: var(--color-neutral-700); margin: 0 0 24px;">
|
|
1125
|
+
The floor is set by the container engine that isolates each prompt, not by the VPN itself. Figures are from the beta build.
|
|
1126
|
+
</bd-p>
|
|
894
1127
|
|
|
1128
|
+
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 24px;">
|
|
1129
|
+
<bd-compatibility-table
|
|
1130
|
+
variant="light"
|
|
1131
|
+
background="bordered"
|
|
1132
|
+
light-columns="1"
|
|
1133
|
+
title="Minimum"
|
|
1134
|
+
.rows=${[
|
|
1135
|
+
{ label: "macOS", value: "13 or later" },
|
|
1136
|
+
{ label: "Processor", value: "Apple silicon" },
|
|
1137
|
+
{ label: "Memory", value: "8 GB" },
|
|
1138
|
+
{ label: "Free disk", value: "About 10 GB" },
|
|
1139
|
+
{ label: "Max exit locations at once", value: "4" }
|
|
1140
|
+
]}
|
|
1141
|
+
></bd-compatibility-table>
|
|
1142
|
+
|
|
1143
|
+
<bd-compatibility-table
|
|
1144
|
+
variant="light"
|
|
1145
|
+
background="bordered"
|
|
1146
|
+
light-columns="1"
|
|
1147
|
+
title="Recommended for testing"
|
|
1148
|
+
.rows=${[
|
|
1149
|
+
{ label: "macOS", value: "15 or later" },
|
|
1150
|
+
{ label: "Processor", value: "Apple silicon" },
|
|
1151
|
+
{ label: "Memory", value: "16 GB or more" },
|
|
1152
|
+
{ label: "Free disk", value: "About 10 GB" },
|
|
1153
|
+
{ label: "Max exit locations at once", value: "8" }
|
|
1154
|
+
]}
|
|
1155
|
+
></bd-compatibility-table>
|
|
1156
|
+
</div>
|
|
1157
|
+
|
|
1158
|
+
<bd-p kind="regular" style="color: var(--color-neutral-500); font-style: italic; margin-top: 24px;">
|
|
1159
|
+
Intel Macs are not supported.
|
|
1160
|
+
</bd-p>
|
|
1161
|
+
</div>
|
|
1162
|
+
</section>
|
|
1163
|
+
<section id="anchor-6-section">
|
|
1164
|
+
<bd-trust-panel
|
|
1165
|
+
eyebrow="Why trust it"
|
|
1166
|
+
title="Built by Bitdefender"
|
|
1167
|
+
description="VPN for AI Agents is made by Bitdefender, the company that has protected people and organisations since 2001. The figures and recognitions below describe Bitdefender the company — not VPN for AI Agents, which is in external beta."
|
|
1168
|
+
link-label="Why millions trust Bitdefender"
|
|
1169
|
+
link-href="#"
|
|
1170
|
+
.stats=${[
|
|
1171
|
+
{ value: "50B+", label: "threats blocked every year" },
|
|
1172
|
+
{ value: "580+", label: "technology patents" },
|
|
1173
|
+
{ value: "170+", label: "countries protected" },
|
|
1174
|
+
{ value: "15+", label: "years of AI-driven security" },
|
|
1175
|
+
{ value: "50%+", label: "of employees work in R&D" },
|
|
1176
|
+
{ value: "30+", label: "law-enforcement partnerships" }
|
|
1177
|
+
]}
|
|
1178
|
+
.cards=${[
|
|
1179
|
+
{
|
|
1180
|
+
eyebrow : "Brand partnership",
|
|
1181
|
+
title : "Trusted by Ferrari as cybersecurity partner",
|
|
1182
|
+
description: "A partnership born from a passion for high performance and technological innovation — Bitdefender supports Ferrari with Advanced Threat Intelligence to improve detection and response to cyber threats.",
|
|
1183
|
+
linkLabel : "Learn more",
|
|
1184
|
+
linkHref : "#"
|
|
1185
|
+
},
|
|
1186
|
+
{
|
|
1187
|
+
eyebrow : "Brand recognition",
|
|
1188
|
+
title : "Award-winning security software you can trust. Always.",
|
|
1189
|
+
description: "Consistently top-ranked by the world's leading independent testing labs and tech publications.",
|
|
1190
|
+
linkLabel : "Learn more",
|
|
1191
|
+
linkHref : "#"
|
|
1192
|
+
}
|
|
1193
|
+
]}
|
|
1194
|
+
>
|
|
1195
|
+
<span slot="card-1-logos" style="font-weight:700; color:#006DFF; font-size:18px;">Bitdefender</span>
|
|
1196
|
+
<span slot="card-1-logos" style="font-size:12px; color:#374151; font-weight:600;">FERRARI TEAM PARTNER</span>
|
|
1197
|
+
|
|
1198
|
+
<bd-pc-mag-icon slot="card-2-logos" height="32"></bd-pc-mag-icon>
|
|
1199
|
+
<bd-av-comparatives-icon slot="card-2-logos" height="32"></bd-av-comparatives-icon>
|
|
1200
|
+
<bd-top-product-icon slot="card-2-logos" height="32"></bd-top-product-icon>
|
|
1201
|
+
<bd-best-brands-icon slot="card-2-logos" height="32"></bd-best-brands-icon>
|
|
1202
|
+
<bd-laurel-icon slot="card-2-logos" height="32"></bd-laurel-icon>
|
|
1203
|
+
</bd-trust-panel>
|
|
1204
|
+
</section>
|
|
1205
|
+
|
|
1206
|
+
<section id="anchor-7-section" class="faq">
|
|
1207
|
+
<bd-accordion-bg title="Questions about agent privacy">
|
|
1208
|
+
<bd-accordion-bg-item title="Does VPN for AI Agents hide my prompts from Claude or Anthropic?">
|
|
1209
|
+
<bd-p>No. It protects the network path your agent's requests take, not the conversation itself. The model behind your agent still receives the user's prompts and account identity as normal.</bd-p>
|
|
1210
|
+
</bd-accordion-bg-item>
|
|
1211
|
+
|
|
1212
|
+
<bd-accordion-bg-item title="Will it slow my agent down?">
|
|
1213
|
+
<bd-p>Each request opens a fresh, isolated tunnel, so there is some per-connection overhead. Real latency numbers will be published after the external beta period, based on actual usage.</bd-p>
|
|
1214
|
+
</bd-accordion-bg-item>
|
|
1215
|
+
|
|
1216
|
+
<bd-accordion-bg-item title="How is this different from a normal VPN?">
|
|
1217
|
+
<bd-p>A classic VPN keeps one persistent connection open across everything you do. VPN for AI Agents opens a new, isolated container per prompt and closes it when the prompt ends, so consecutive prompts can't be linked together.</bd-p>
|
|
1218
|
+
</bd-accordion-bg-item>
|
|
1219
|
+
|
|
1220
|
+
<bd-accordion-bg-item title="Does it work on Windows?">
|
|
1221
|
+
<bd-p>VPN for AI Agents runs on macOS at launch, with Windows to follow.</bd-p>
|
|
1222
|
+
</bd-accordion-bg-item>
|
|
1223
|
+
|
|
1224
|
+
<bd-accordion-bg-item title="How much does it cost?">
|
|
1225
|
+
<bd-p>Free during beta, with no traffic caps. It's a standalone product with its own sign-in, with no dependency on any other Bitdefender subscription. Pricing decisions, if any, will follow real usage data.</bd-p>
|
|
1226
|
+
</bd-accordion-bg-item>
|
|
1227
|
+
|
|
1228
|
+
<bd-accordion-bg-item title="Can I use this to get around a site's terms of service or an IP ban?">
|
|
1229
|
+
<bd-p>No. VPN for AI Agents changes the network path a request takes, not the rules of the site it reaches. Using it to evade rate limits, bans, or scraping restrictions is against Bitdefender's acceptable use policy and can result in the account losing access to the beta.</bd-p>
|
|
1230
|
+
</bd-accordion-bg-item>
|
|
1231
|
+
|
|
1232
|
+
<bd-accordion-bg-item title="Which exit location does the VPN use?">
|
|
1233
|
+
<bd-p>If you don't specify a location in your prompt, the agent automatically picks the closest or optimal location based on latency. If you explicitly request a country or region, the agent honors it, as long as the target site isn't geo-blocked.</bd-p>
|
|
1234
|
+
</bd-accordion-bg-item>
|
|
1235
|
+
|
|
1236
|
+
<bd-accordion-bg-item title="What happens if the tunnel fails?">
|
|
1237
|
+
<bd-p>The request is dropped inside the isolated container; there's no automatic fallback to your own IP. Depending on the situation, the agent may retry with a different exit location, abandon the request, or ask you directly whether you want to continue without the VPN.</bd-p>
|
|
1238
|
+
</bd-accordion-bg-item>
|
|
1239
|
+
|
|
1240
|
+
<bd-accordion-bg-item title="What happens to telemetry data?">
|
|
1241
|
+
<bd-p>Telemetry collection and use are covered by Bitdefender's Privacy Policy.</bd-p>
|
|
1242
|
+
</bd-accordion-bg-item>
|
|
1243
|
+
|
|
1244
|
+
<bd-accordion-bg-item title="Do you offer team features (SSO, MDM, central configuration)?">
|
|
1245
|
+
<bd-p>Not at this stage — the current beta is designed for individual developers and freelancers, not organisations.</bd-p>
|
|
1246
|
+
</bd-accordion-bg-item>
|
|
1247
|
+
|
|
1248
|
+
<bd-accordion-bg-item title="What exactly does "external beta" mean?">
|
|
1249
|
+
<bd-p>The external beta starts on September 16 and runs for one month, during which we collect feedback from users (freelance developers and AI early adopters). Current commercial terms are those of the standard consumer EULA.</bd-p>
|
|
1250
|
+
</bd-accordion-bg-item>
|
|
1251
|
+
</bd-accordion-bg>
|
|
1252
|
+
</section>
|
|
1253
|
+
<bd-cta-banner
|
|
1254
|
+
title="Give your agent an exit that disappears"
|
|
1255
|
+
description="VPN for AI Agents is now in external beta on macOS, with Windows to follow."
|
|
1256
|
+
caption="Downloads the macOS beta installer (.dmg)."
|
|
1257
|
+
>
|
|
1258
|
+
<bd-button-link
|
|
1259
|
+
slot="primary-button"
|
|
1260
|
+
label="Download for macOS"
|
|
1261
|
+
kind="white"
|
|
1262
|
+
size="md"
|
|
1263
|
+
strong
|
|
1264
|
+
>Download for macOS</bd-button-link>
|
|
1265
|
+
|
|
1266
|
+
<bd-p slot="footer" kind="small" font-family="var(--typography-fontFamily-mono, monospace)" style="color: rgba(255,255,255,0.9); max-width: 700px;">
|
|
1267
|
+
<strong>Contact & feedback.</strong> Questions or feedback about the beta? Email us at
|
|
1268
|
+
<a href="mailto:vpn-for-agents-feedback@bitdefender.com" style="color: #fff; text-decoration: underline;">vpn-for-agents-feedback@bitdefender.com</a>.
|
|
1269
|
+
</bd-p>
|
|
1270
|
+
|
|
1271
|
+
<bd-p slot="footer" kind="small" font-family="var(--typography-fontFamily-mono, monospace)" style="color: rgba(255,255,255,0.7); max-width: 900px;">
|
|
1272
|
+
Your AI agent decides when to use the VPN. Bitdefender cannot guarantee every request is routed through it. No security product guarantees complete protection. Features and availability may vary. Initially available on macOS, with Windows to follow.
|
|
1273
|
+
</bd-p>
|
|
1274
|
+
</bd-cta-banner>
|
|
1275
|
+
<section id="anchor-8-section">
|
|
1276
|
+
<bd-agent-endpoints
|
|
1277
|
+
eyebrow="For AI agents and assistants"
|
|
1278
|
+
title="Machine-readable endpoints"
|
|
1279
|
+
description="This site is built to be read by AI assistants, browsers, and agents. Structured, curated context is available at:"
|
|
1280
|
+
.endpoints=${[
|
|
1281
|
+
{ label: "/llms.txt", href: "/llms.txt" },
|
|
1282
|
+
{ label: "/llms-full.txt", href: "/llms-full.txt" },
|
|
1283
|
+
{ label: "/vpn-for-agents/index.md", href: "/vpn-for-agents/index.md" },
|
|
1284
|
+
{ label: "/sitemap.xml", href: "/sitemap.xml" },
|
|
1285
|
+
{ label: "/robots.txt", href: "/robots.txt" }
|
|
1286
|
+
]}
|
|
1287
|
+
>
|
|
1288
|
+
<div slot="rows" style="border-top: 1px solid var(--color-neutral-100); margin-top: 24px; padding-top: 24px;">
|
|
1289
|
+
<bd-p kind="regular" style="color: var(--color-neutral-700); margin: 0;">
|
|
1290
|
+
By using Bitdefender VPN for AI Agents, you confirm that you are over 16 years old and you have read and agreed to Bitdefender's
|
|
1291
|
+
<bd-link href="#" kind="primary">End User License Agreement</bd-link>
|
|
1292
|
+
and
|
|
1293
|
+
<bd-link href="#" kind="primary">Privacy Policy</bd-link>.
|
|
1294
|
+
</bd-p>
|
|
1295
|
+
</div>
|
|
1296
|
+
|
|
1297
|
+
<div slot="rows" style="border-top: 1px solid var(--color-neutral-100); margin-top: 24px; padding-top: 24px;">
|
|
1298
|
+
<bd-p kind="regular" style="color: var(--color-neutral-700); margin: 0;">
|
|
1299
|
+
Your AI agent decides when to use the VPN. Bitdefender cannot guarantee every request is routed through it. No security product guarantees complete protection. Features and availability may vary. Initially available on macOS, with Windows to follow.
|
|
1300
|
+
</bd-p>
|
|
1301
|
+
</div>
|
|
1302
|
+
</bd-agent-endpoints>
|
|
1303
|
+
</section>
|
|
1304
|
+
|
|
1305
|
+
</div>
|
|
1306
|
+
`;
|
|
1307
|
+
}
|
|
895
1308
|
function sharedFooter() {
|
|
896
1309
|
return html`
|
|
897
1310
|
<bd-footer>
|
|
@@ -950,9 +1363,9 @@ function sharedFooter() {
|
|
|
950
1363
|
}
|
|
951
1364
|
|
|
952
1365
|
// ---------------------------------------------------------------------------
|
|
953
|
-
// Wrapper interactiv: ține starea "activeTab"
|
|
954
|
-
// page-switcher (preventDefault pe anchor-ul intern) în loc să
|
|
955
|
-
// să navigheze la un URL care nu există în Storybook
|
|
1366
|
+
// Wrapper interactiv: ține starea "activeTab" (acum 3 stări) și interceptează
|
|
1367
|
+
// click-ul pe page-switcher (preventDefault pe anchor-ul intern) în loc să
|
|
1368
|
+
// lase browserul să navigheze la un URL care nu există în Storybook.
|
|
956
1369
|
// ---------------------------------------------------------------------------
|
|
957
1370
|
|
|
958
1371
|
class AiGuardianSkillScannerDemo extends LitElement {
|
|
@@ -960,20 +1373,15 @@ class AiGuardianSkillScannerDemo extends LitElement {
|
|
|
960
1373
|
activeTab: { state: true }
|
|
961
1374
|
};
|
|
962
1375
|
|
|
963
|
-
// light DOM: evenimentul de click (composed) tot ajunge aici din shadow-ul
|
|
964
|
-
// intern al bd-page-switcher / bd-link, deci putem intercepta navigarea.
|
|
965
1376
|
createRenderRoot() {
|
|
966
1377
|
return this;
|
|
967
1378
|
}
|
|
968
1379
|
|
|
969
1380
|
constructor() {
|
|
970
1381
|
super();
|
|
971
|
-
this.activeTab = "ai-guardian";
|
|
1382
|
+
this.activeTab = "ai-guardian"; // "ai-guardian" | "skill-scanner" | "vpn"
|
|
972
1383
|
}
|
|
973
1384
|
|
|
974
|
-
// Folosim fragmente "#..." în loc de căi reale (/ai-guardian/, /agent-skill-scanner/):
|
|
975
|
-
// un fragment nu navighează niciodată către altă pagină, deci nu poate da 404,
|
|
976
|
-
// indiferent cum gestionează bd-link intern click-ul.
|
|
977
1385
|
_onNavClick(event) {
|
|
978
1386
|
const path = event.composedPath();
|
|
979
1387
|
const anchor = path.find(
|
|
@@ -988,22 +1396,28 @@ class AiGuardianSkillScannerDemo extends LitElement {
|
|
|
988
1396
|
} else if (href === "#skill-scanner") {
|
|
989
1397
|
event.preventDefault();
|
|
990
1398
|
this.activeTab = "skill-scanner";
|
|
1399
|
+
} else if (href === "#vpn") {
|
|
1400
|
+
event.preventDefault();
|
|
1401
|
+
this.activeTab = "vpn";
|
|
991
1402
|
}
|
|
992
1403
|
}
|
|
993
1404
|
|
|
994
1405
|
render() {
|
|
995
|
-
const
|
|
1406
|
+
const tab = this.activeTab;
|
|
996
1407
|
|
|
997
1408
|
return html`
|
|
998
1409
|
<div @click=${this._onNavClick}>
|
|
999
1410
|
<bd-page-switcher
|
|
1000
1411
|
.items=${[
|
|
1001
|
-
{ title: "AI Guardian", href: "#ai-guardian", active:
|
|
1002
|
-
{ title: "Skill Scanner", href: "#skill-scanner", active:
|
|
1412
|
+
{ title: "AI Guardian", href: "#ai-guardian", active: tab === "ai-guardian" },
|
|
1413
|
+
{ title: "Skill Scanner", href: "#skill-scanner", active: tab === "skill-scanner" },
|
|
1414
|
+
{ title: "VPN for AI Agents", href: "#vpn", active: tab === "vpn" }
|
|
1003
1415
|
]}
|
|
1004
1416
|
></bd-page-switcher>
|
|
1005
1417
|
|
|
1006
|
-
${
|
|
1418
|
+
${tab === "ai-guardian" ? aiGuardianBody() : nothing}
|
|
1419
|
+
${tab === "skill-scanner" ? skillScannerBody() : nothing}
|
|
1420
|
+
${tab === "vpn" ? vpnBody() : nothing}
|
|
1007
1421
|
|
|
1008
1422
|
${sharedFooter()}
|
|
1009
1423
|
</div>
|
|
@@ -1025,15 +1439,15 @@ export default {
|
|
|
1025
1439
|
docs : {
|
|
1026
1440
|
description: {
|
|
1027
1441
|
component: `
|
|
1028
|
-
Interactive demo: sticky top-level product nav (\`AI Guardian\` / \`Skill Scanner\`
|
|
1029
|
-
switches, in place, between
|
|
1030
|
-
clicking a tab intercepts the anchor click and swaps local state instead
|
|
1031
|
-
following the href (which has no route in Storybook and would 404).
|
|
1442
|
+
Interactive demo: sticky top-level product nav (\`AI Guardian\` / \`Skill Scanner\` /
|
|
1443
|
+
\`VPN for AI Agents\`) switches, in place, between three full "pages" without any real
|
|
1444
|
+
navigation — clicking a tab intercepts the anchor click and swaps local state instead
|
|
1445
|
+
of following the href (which has no route in Storybook and would 404).
|
|
1032
1446
|
|
|
1033
|
-
Both anchor-nav bars use \`sticky-top="65px"\` so they pin themselves *below*
|
|
1447
|
+
Both/all anchor-nav bars use \`sticky-top="65px"\` so they pin themselves *below*
|
|
1034
1448
|
the sticky page-switcher instead of overlapping it once scrolled. That value
|
|
1035
1449
|
is an estimate — measure bd-page-switcher's real rendered height in DevTools
|
|
1036
|
-
and adjust if the
|
|
1450
|
+
and adjust if the bars still overlap or leave a gap.
|
|
1037
1451
|
|
|
1038
1452
|
**AI Guardian** page: \`bd-header-code\`, \`bd-quick-answer\`, sticky \`bd-anchor-nav\`
|
|
1039
1453
|
(9 items) wrapping \`bd-overview\`, \`bd-compatibility-table\` (default variant), the
|
|
@@ -1053,7 +1467,14 @@ for "Privacy", a \`bd-trust-panel\` + \`bd-accordion-bg\` FAQ (7 questions) unde
|
|
|
1053
1467
|
"FAQ", a \`bd-cta-banner\`, and \`bd-agent-endpoints\` with legal copy in its
|
|
1054
1468
|
\`rows\` slot.
|
|
1055
1469
|
|
|
1056
|
-
|
|
1470
|
+
**VPN for AI Agents** page: a \`bd-header-code\` using \`variant="tint"\` (light-blue
|
|
1471
|
+
gradient + perspective floor grid + stacked-card rings behind the terminal),
|
|
1472
|
+
a bordered "EXTERNAL BETA" badge, a breadcrumb, a facts/spec row via the
|
|
1473
|
+
\`meta\` slot, and two floating annotation pills around the terminal. Only
|
|
1474
|
+
the hero has been provided so far — the rest of the page follows the same
|
|
1475
|
+
pattern as the other two once that content is supplied.
|
|
1476
|
+
|
|
1477
|
+
Both/all pages share the same \`bd-footer\` at the bottom.
|
|
1057
1478
|
`
|
|
1058
1479
|
}
|
|
1059
1480
|
}
|
|
@@ -1061,6 +1482,6 @@ Both pages share the same \`bd-footer\` at the bottom.
|
|
|
1061
1482
|
};
|
|
1062
1483
|
|
|
1063
1484
|
export const Default = {
|
|
1064
|
-
name : "AI Guardian ↔ Skill Scanner (interactive)",
|
|
1485
|
+
name : "AI Guardian ↔ Skill Scanner ↔ VPN (interactive)",
|
|
1065
1486
|
render: () => html`<demo-ai-guardian-skill-scanner></demo-ai-guardian-skill-scanner>`
|
|
1066
1487
|
};
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
import { css } from "lit";
|
|
2
2
|
|
|
3
3
|
export default css`
|
|
4
|
-
|
|
4
|
+
:host {
|
|
5
5
|
display: block;
|
|
6
6
|
width: 100%;
|
|
7
7
|
box-sizing: border-box;
|
|
8
|
+
max-width: 1290px;
|
|
9
|
+
margin-inline: auto;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/* === BACKGROUND VARIANT — section-level tint, applied to the whole
|
|
13
|
+
component (header + track), not per-card. Padding compensates so the
|
|
14
|
+
tinted area doesn't hug the header/cards edge-to-edge. === */
|
|
15
|
+
:host([background="tint"]) {
|
|
16
|
+
background-color: var(--color-blue-50, #f0f6ff);
|
|
17
|
+
border-radius: var(--radius-2xl, 24px);
|
|
18
|
+
padding: var(--spacing-40, 40px) var(--spacing-32, 32px);
|
|
8
19
|
}
|
|
9
20
|
|
|
10
21
|
/* === HEADER (eyebrow / title / description) === */
|