@idp.global/catalog 1.1.1
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/assets/v2/draw-41d55381-b162-433d-956c-fe4cd400212e.png +0 -0
- package/assets/v2/draw-bd386bf3-ce94-4452-88da-05ae372fae35.png +0 -0
- package/assets/v2/draw-be69231a-f491-4bd3-9a47-71561ce14c15.png +0 -0
- package/assets/v2/draw-d58859a8-0615-44ec-80fe-626033c888f7.png +0 -0
- package/assets/v2/draw-db67b502-d987-4226-a5f8-d57e3f8d7ba9.png +0 -0
- package/assets/v2/draw-e6ac3ef5-5a93-464d-9d3f-5ae7b7278bdd.png +0 -0
- package/changelog.md +26 -0
- package/dist_bundle/bundle.js +6385 -0
- package/dist_ts_web/00_commitinfo_data.d.ts +8 -0
- package/dist_ts_web/00_commitinfo_data.js +9 -0
- package/dist_ts_web/elements/idp-admin-shell.d.ts +292 -0
- package/dist_ts_web/elements/idp-admin-shell.js +2615 -0
- package/dist_ts_web/elements/idp-approval-card.d.ts +25 -0
- package/dist_ts_web/elements/idp-approval-card.js +274 -0
- package/dist_ts_web/elements/idp-badge.d.ts +14 -0
- package/dist_ts_web/elements/idp-badge.js +135 -0
- package/dist_ts_web/elements/idp-button.d.ts +21 -0
- package/dist_ts_web/elements/idp-button.js +234 -0
- package/dist_ts_web/elements/idp-card.d.ts +15 -0
- package/dist_ts_web/elements/idp-card.js +139 -0
- package/dist_ts_web/elements/idp-checkbox.d.ts +23 -0
- package/dist_ts_web/elements/idp-checkbox.js +233 -0
- package/dist_ts_web/elements/idp-dashboard-window.d.ts +23 -0
- package/dist_ts_web/elements/idp-dashboard-window.js +587 -0
- package/dist_ts_web/elements/idp-data-table.d.ts +45 -0
- package/dist_ts_web/elements/idp-data-table.js +472 -0
- package/dist_ts_web/elements/idp-form-submit.d.ts +20 -0
- package/dist_ts_web/elements/idp-form-submit.js +136 -0
- package/dist_ts_web/elements/idp-form.d.ts +31 -0
- package/dist_ts_web/elements/idp-form.js +197 -0
- package/dist_ts_web/elements/idp-icon.d.ts +18 -0
- package/dist_ts_web/elements/idp-icon.js +204 -0
- package/dist_ts_web/elements/idp-inbox-preview.d.ts +18 -0
- package/dist_ts_web/elements/idp-inbox-preview.js +245 -0
- package/dist_ts_web/elements/idp-input.d.ts +26 -0
- package/dist_ts_web/elements/idp-input.js +249 -0
- package/dist_ts_web/elements/idp-landing-hero.d.ts +15 -0
- package/dist_ts_web/elements/idp-landing-hero.js +209 -0
- package/dist_ts_web/elements/idp-landing-page.d.ts +21 -0
- package/dist_ts_web/elements/idp-landing-page.js +694 -0
- package/dist_ts_web/elements/idp-mobile-frame.d.ts +14 -0
- package/dist_ts_web/elements/idp-mobile-frame.js +195 -0
- package/dist_ts_web/elements/idp-mobile-showcase.d.ts +16 -0
- package/dist_ts_web/elements/idp-mobile-showcase.js +339 -0
- package/dist_ts_web/elements/idp-select.d.ts +28 -0
- package/dist_ts_web/elements/idp-select.js +179 -0
- package/dist_ts_web/elements/idp-toggle.d.ts +15 -0
- package/dist_ts_web/elements/idp-toggle.js +134 -0
- package/dist_ts_web/elements/index.d.ts +20 -0
- package/dist_ts_web/elements/index.js +21 -0
- package/dist_ts_web/elements/tokens.d.ts +21 -0
- package/dist_ts_web/elements/tokens.js +190 -0
- package/dist_ts_web/index.d.ts +1 -0
- package/dist_ts_web/index.js +2 -0
- package/dist_ts_web/pages/index.d.ts +5 -0
- package/dist_ts_web/pages/index.js +23 -0
- package/dist_watch/bundle.js +120699 -0
- package/dist_watch/bundle.js.map +7 -0
- package/dist_watch/index.html +29 -0
- package/html/index.html +29 -0
- package/html/index.ts +39 -0
- package/license +21 -0
- package/package.json +64 -0
- package/readme.md +103 -0
- package/ts_web/00_commitinfo_data.ts +8 -0
- package/ts_web/elements/idp-admin-shell.ts +2664 -0
- package/ts_web/elements/idp-approval-card.ts +182 -0
- package/ts_web/elements/idp-badge.ts +84 -0
- package/ts_web/elements/idp-button.ts +166 -0
- package/ts_web/elements/idp-card.ts +76 -0
- package/ts_web/elements/idp-checkbox.ts +143 -0
- package/ts_web/elements/idp-dashboard-window.ts +564 -0
- package/ts_web/elements/idp-data-table.ts +407 -0
- package/ts_web/elements/idp-form-submit.ts +65 -0
- package/ts_web/elements/idp-form.ts +159 -0
- package/ts_web/elements/idp-icon.ts +263 -0
- package/ts_web/elements/idp-inbox-preview.ts +192 -0
- package/ts_web/elements/idp-input.ts +151 -0
- package/ts_web/elements/idp-landing-hero.ts +165 -0
- package/ts_web/elements/idp-landing-page.ts +655 -0
- package/ts_web/elements/idp-mobile-frame.ts +137 -0
- package/ts_web/elements/idp-mobile-showcase.ts +295 -0
- package/ts_web/elements/idp-select.ts +119 -0
- package/ts_web/elements/idp-toggle.ts +77 -0
- package/ts_web/elements/index.ts +20 -0
- package/ts_web/elements/tokens.ts +193 -0
- package/ts_web/index.ts +1 -0
- package/ts_web/pages/index.ts +26 -0
|
@@ -0,0 +1,694 @@
|
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
|
+
};
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
34
|
+
};
|
|
35
|
+
import { DeesElement, html, customElement, css } from '@design.estate/dees-element';
|
|
36
|
+
import { idpElementStyles } from './tokens.js';
|
|
37
|
+
import './idp-badge.js';
|
|
38
|
+
import './idp-button.js';
|
|
39
|
+
import './idp-icon.js';
|
|
40
|
+
import './idp-landing-hero.js';
|
|
41
|
+
let IdpLandingPage = (() => {
|
|
42
|
+
let _classDecorators = [customElement('idp-landing-page')];
|
|
43
|
+
let _classDescriptor;
|
|
44
|
+
let _classExtraInitializers = [];
|
|
45
|
+
let _classThis;
|
|
46
|
+
let _classSuper = DeesElement;
|
|
47
|
+
var IdpLandingPage = class extends _classSuper {
|
|
48
|
+
static { _classThis = this; }
|
|
49
|
+
static {
|
|
50
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
51
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
52
|
+
IdpLandingPage = _classThis = _classDescriptor.value;
|
|
53
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
54
|
+
}
|
|
55
|
+
static demo = () => html `<idp-landing-page></idp-landing-page>`;
|
|
56
|
+
static demoGroups = ['idp.global v3 full pages'];
|
|
57
|
+
static styles = [
|
|
58
|
+
...idpElementStyles,
|
|
59
|
+
css `
|
|
60
|
+
:host {
|
|
61
|
+
display: block;
|
|
62
|
+
background: var(--idp-bg);
|
|
63
|
+
color: var(--idp-fg);
|
|
64
|
+
}
|
|
65
|
+
.page {
|
|
66
|
+
min-height: 100vh;
|
|
67
|
+
background: var(--idp-bg);
|
|
68
|
+
}
|
|
69
|
+
nav {
|
|
70
|
+
position: sticky;
|
|
71
|
+
top: 0;
|
|
72
|
+
z-index: 20;
|
|
73
|
+
display: flex;
|
|
74
|
+
align-items: center;
|
|
75
|
+
justify-content: space-between;
|
|
76
|
+
gap: 24px;
|
|
77
|
+
height: 56px;
|
|
78
|
+
max-width: 1240px;
|
|
79
|
+
margin: 0 auto;
|
|
80
|
+
padding: 0 32px;
|
|
81
|
+
border-bottom: 1px solid var(--idp-border-soft);
|
|
82
|
+
background: color-mix(in srgb, var(--idp-bg), transparent 14%);
|
|
83
|
+
backdrop-filter: blur(14px) saturate(140%);
|
|
84
|
+
}
|
|
85
|
+
.nav-shell {
|
|
86
|
+
position: sticky;
|
|
87
|
+
top: 0;
|
|
88
|
+
z-index: 20;
|
|
89
|
+
border-bottom: 1px solid var(--idp-border-soft);
|
|
90
|
+
background: color-mix(in srgb, var(--idp-bg), transparent 14%);
|
|
91
|
+
}
|
|
92
|
+
.logo {
|
|
93
|
+
display: inline-flex;
|
|
94
|
+
align-items: center;
|
|
95
|
+
gap: 8px;
|
|
96
|
+
font-family: var(--idp-display);
|
|
97
|
+
font-size: 16px;
|
|
98
|
+
font-weight: 700;
|
|
99
|
+
letter-spacing: -0.015em;
|
|
100
|
+
}
|
|
101
|
+
.logo-dot {
|
|
102
|
+
width: 6px;
|
|
103
|
+
height: 6px;
|
|
104
|
+
border-radius: 999px;
|
|
105
|
+
background: var(--idp-accent);
|
|
106
|
+
box-shadow: 0 0 12px var(--idp-accent);
|
|
107
|
+
}
|
|
108
|
+
.links, .actions {
|
|
109
|
+
display: flex;
|
|
110
|
+
align-items: center;
|
|
111
|
+
gap: 6px;
|
|
112
|
+
}
|
|
113
|
+
.links a {
|
|
114
|
+
padding: 6px 12px;
|
|
115
|
+
border-radius: 5px;
|
|
116
|
+
color: var(--idp-fg-3);
|
|
117
|
+
font-size: 13px;
|
|
118
|
+
text-decoration: none;
|
|
119
|
+
}
|
|
120
|
+
.links a:hover {
|
|
121
|
+
background: var(--idp-muted);
|
|
122
|
+
color: var(--idp-fg);
|
|
123
|
+
}
|
|
124
|
+
.status {
|
|
125
|
+
display: inline-flex;
|
|
126
|
+
align-items: center;
|
|
127
|
+
gap: 6px;
|
|
128
|
+
margin-right: 8px;
|
|
129
|
+
color: var(--idp-muted-fg);
|
|
130
|
+
font-family: var(--idp-mono);
|
|
131
|
+
font-size: 11px;
|
|
132
|
+
}
|
|
133
|
+
.live-dot {
|
|
134
|
+
width: 6px;
|
|
135
|
+
height: 6px;
|
|
136
|
+
border-radius: 50%;
|
|
137
|
+
background: var(--idp-ok);
|
|
138
|
+
box-shadow: 0 0 8px var(--idp-ok);
|
|
139
|
+
}
|
|
140
|
+
.wrap {
|
|
141
|
+
max-width: 1240px;
|
|
142
|
+
margin: 0 auto;
|
|
143
|
+
padding: 0 32px;
|
|
144
|
+
}
|
|
145
|
+
.proof, .section, .manifesto, .cta, footer {
|
|
146
|
+
border-bottom: 1px solid var(--idp-border-soft);
|
|
147
|
+
}
|
|
148
|
+
.proof {
|
|
149
|
+
padding: 56px 0;
|
|
150
|
+
}
|
|
151
|
+
.proof-label {
|
|
152
|
+
margin-bottom: 28px;
|
|
153
|
+
color: var(--idp-muted-fg);
|
|
154
|
+
text-align: center;
|
|
155
|
+
font-family: var(--idp-mono);
|
|
156
|
+
font-size: 11px;
|
|
157
|
+
letter-spacing: 0.12em;
|
|
158
|
+
text-transform: uppercase;
|
|
159
|
+
}
|
|
160
|
+
.proof-row {
|
|
161
|
+
display: grid;
|
|
162
|
+
grid-template-columns: repeat(6, 1fr);
|
|
163
|
+
gap: 24px;
|
|
164
|
+
place-items: center;
|
|
165
|
+
opacity: 0.72;
|
|
166
|
+
}
|
|
167
|
+
.proof-name {
|
|
168
|
+
color: var(--idp-fg-3);
|
|
169
|
+
font-family: var(--idp-display);
|
|
170
|
+
font-size: 18px;
|
|
171
|
+
font-weight: 700;
|
|
172
|
+
letter-spacing: -0.02em;
|
|
173
|
+
}
|
|
174
|
+
.section {
|
|
175
|
+
padding: 120px 0;
|
|
176
|
+
}
|
|
177
|
+
.section.alt {
|
|
178
|
+
background: var(--idp-bg-2);
|
|
179
|
+
}
|
|
180
|
+
.section-head {
|
|
181
|
+
max-width: 760px;
|
|
182
|
+
margin: 0 auto 64px;
|
|
183
|
+
text-align: center;
|
|
184
|
+
}
|
|
185
|
+
.eyebrow {
|
|
186
|
+
display: inline-flex;
|
|
187
|
+
align-items: center;
|
|
188
|
+
gap: 8px;
|
|
189
|
+
margin-bottom: 16px;
|
|
190
|
+
color: var(--idp-muted-fg);
|
|
191
|
+
font-family: var(--idp-mono);
|
|
192
|
+
font-size: 11px;
|
|
193
|
+
letter-spacing: 0.1em;
|
|
194
|
+
text-transform: uppercase;
|
|
195
|
+
}
|
|
196
|
+
.eyebrow::before, .eyebrow::after {
|
|
197
|
+
content: '';
|
|
198
|
+
width: 24px;
|
|
199
|
+
height: 1px;
|
|
200
|
+
background: var(--idp-border-strong);
|
|
201
|
+
}
|
|
202
|
+
h2, h3, q {
|
|
203
|
+
margin: 0;
|
|
204
|
+
font-family: var(--idp-display);
|
|
205
|
+
letter-spacing: -0.03em;
|
|
206
|
+
}
|
|
207
|
+
h2 {
|
|
208
|
+
font-size: clamp(36px, 4.5vw, 56px);
|
|
209
|
+
line-height: 1.05;
|
|
210
|
+
}
|
|
211
|
+
em {
|
|
212
|
+
color: var(--idp-accent-hover);
|
|
213
|
+
font-family: var(--idp-serif);
|
|
214
|
+
font-style: italic;
|
|
215
|
+
font-weight: 400;
|
|
216
|
+
}
|
|
217
|
+
.lede {
|
|
218
|
+
max-width: 640px;
|
|
219
|
+
margin: 20px auto 0;
|
|
220
|
+
color: var(--idp-fg-3);
|
|
221
|
+
font-size: 17px;
|
|
222
|
+
line-height: 1.55;
|
|
223
|
+
}
|
|
224
|
+
.bento {
|
|
225
|
+
display: grid;
|
|
226
|
+
grid-template-columns: repeat(6, 1fr);
|
|
227
|
+
gap: 16px;
|
|
228
|
+
}
|
|
229
|
+
.tile, .tier, .chain-panel, .terminal {
|
|
230
|
+
border: 1px solid var(--idp-border-soft);
|
|
231
|
+
border-radius: 12px;
|
|
232
|
+
background: var(--idp-bg-2);
|
|
233
|
+
}
|
|
234
|
+
.tile {
|
|
235
|
+
padding: 28px;
|
|
236
|
+
}
|
|
237
|
+
.tile.col-2 { grid-column: span 2; }
|
|
238
|
+
.tile.col-3 { grid-column: span 3; }
|
|
239
|
+
.tile.tall { grid-row: span 2; }
|
|
240
|
+
.tile-tag {
|
|
241
|
+
display: inline-flex;
|
|
242
|
+
align-items: center;
|
|
243
|
+
gap: 6px;
|
|
244
|
+
margin-bottom: 14px;
|
|
245
|
+
color: var(--idp-accent-hover);
|
|
246
|
+
font-family: var(--idp-mono);
|
|
247
|
+
font-size: 10.5px;
|
|
248
|
+
font-weight: 600;
|
|
249
|
+
letter-spacing: 0.06em;
|
|
250
|
+
text-transform: uppercase;
|
|
251
|
+
}
|
|
252
|
+
.tile-tag::before {
|
|
253
|
+
content: '';
|
|
254
|
+
width: 6px;
|
|
255
|
+
height: 6px;
|
|
256
|
+
border-radius: 999px;
|
|
257
|
+
background: var(--idp-accent);
|
|
258
|
+
}
|
|
259
|
+
.tile h3 {
|
|
260
|
+
margin-bottom: 10px;
|
|
261
|
+
font-size: 24px;
|
|
262
|
+
line-height: 1.15;
|
|
263
|
+
}
|
|
264
|
+
.tile p, .tier li, .chain-step p {
|
|
265
|
+
color: var(--idp-fg-3);
|
|
266
|
+
font-size: 14px;
|
|
267
|
+
line-height: 1.55;
|
|
268
|
+
}
|
|
269
|
+
.approval-stack {
|
|
270
|
+
display: grid;
|
|
271
|
+
gap: 6px;
|
|
272
|
+
margin-top: 22px;
|
|
273
|
+
}
|
|
274
|
+
.approval-row {
|
|
275
|
+
display: grid;
|
|
276
|
+
grid-template-columns: 28px 1fr auto;
|
|
277
|
+
gap: 12px;
|
|
278
|
+
align-items: center;
|
|
279
|
+
padding: 10px 12px;
|
|
280
|
+
border: 1px solid var(--idp-border-soft);
|
|
281
|
+
border-left: 2px solid var(--idp-accent);
|
|
282
|
+
border-radius: 6px;
|
|
283
|
+
background: var(--idp-bg);
|
|
284
|
+
}
|
|
285
|
+
.avatar {
|
|
286
|
+
width: 28px;
|
|
287
|
+
height: 28px;
|
|
288
|
+
display: grid;
|
|
289
|
+
place-items: center;
|
|
290
|
+
border: 1px solid var(--idp-border);
|
|
291
|
+
border-radius: 50%;
|
|
292
|
+
background: var(--idp-card-2);
|
|
293
|
+
color: var(--idp-muted-fg);
|
|
294
|
+
font-family: var(--idp-mono);
|
|
295
|
+
font-size: 10px;
|
|
296
|
+
font-weight: 700;
|
|
297
|
+
}
|
|
298
|
+
.approval-row strong {
|
|
299
|
+
display: block;
|
|
300
|
+
color: var(--idp-fg);
|
|
301
|
+
font-size: 12.5px;
|
|
302
|
+
font-weight: 500;
|
|
303
|
+
}
|
|
304
|
+
.approval-row span.meta {
|
|
305
|
+
color: color-mix(in srgb, var(--idp-muted-fg), transparent 30%);
|
|
306
|
+
font-family: var(--idp-mono);
|
|
307
|
+
font-size: 10.5px;
|
|
308
|
+
}
|
|
309
|
+
.identity-card {
|
|
310
|
+
position: relative;
|
|
311
|
+
overflow: hidden;
|
|
312
|
+
margin-top: 22px;
|
|
313
|
+
border: 1px solid var(--idp-border);
|
|
314
|
+
border-radius: 10px;
|
|
315
|
+
padding: 20px;
|
|
316
|
+
background: linear-gradient(140deg, var(--idp-card) 0%, var(--idp-bg) 100%);
|
|
317
|
+
}
|
|
318
|
+
.identity-card::after {
|
|
319
|
+
content: '';
|
|
320
|
+
position: absolute;
|
|
321
|
+
top: -100px;
|
|
322
|
+
right: -80px;
|
|
323
|
+
width: 240px;
|
|
324
|
+
height: 240px;
|
|
325
|
+
border-radius: 50%;
|
|
326
|
+
background: radial-gradient(circle, rgba(0,105,242,0.4), transparent 65%);
|
|
327
|
+
}
|
|
328
|
+
.identity-card > * {
|
|
329
|
+
position: relative;
|
|
330
|
+
z-index: 1;
|
|
331
|
+
}
|
|
332
|
+
.chip {
|
|
333
|
+
width: 32px;
|
|
334
|
+
height: 24px;
|
|
335
|
+
margin: 18px 0 14px;
|
|
336
|
+
border-radius: 3px;
|
|
337
|
+
background: linear-gradient(135deg, #93bbfd 0%, #0050b9 80%);
|
|
338
|
+
}
|
|
339
|
+
.mono {
|
|
340
|
+
color: var(--idp-muted-fg);
|
|
341
|
+
font-family: var(--idp-mono);
|
|
342
|
+
font-size: 10.5px;
|
|
343
|
+
}
|
|
344
|
+
.metric {
|
|
345
|
+
margin-top: 8px;
|
|
346
|
+
background: linear-gradient(180deg, var(--idp-fg) 0%, var(--idp-muted-fg) 110%);
|
|
347
|
+
background-clip: text;
|
|
348
|
+
color: transparent;
|
|
349
|
+
font-family: var(--idp-display);
|
|
350
|
+
font-size: 64px;
|
|
351
|
+
font-weight: 700;
|
|
352
|
+
letter-spacing: -0.04em;
|
|
353
|
+
line-height: 1;
|
|
354
|
+
}
|
|
355
|
+
.metric span {
|
|
356
|
+
font-size: 24px;
|
|
357
|
+
}
|
|
358
|
+
.devices-row {
|
|
359
|
+
display: grid;
|
|
360
|
+
grid-template-columns: repeat(4, 1fr);
|
|
361
|
+
gap: 8px;
|
|
362
|
+
margin-top: 22px;
|
|
363
|
+
}
|
|
364
|
+
.dev-cell {
|
|
365
|
+
padding: 14px 10px;
|
|
366
|
+
border: 1px solid var(--idp-border-soft);
|
|
367
|
+
border-radius: 6px;
|
|
368
|
+
background: var(--idp-bg);
|
|
369
|
+
text-align: center;
|
|
370
|
+
}
|
|
371
|
+
.dev-icon {
|
|
372
|
+
width: 32px;
|
|
373
|
+
height: 32px;
|
|
374
|
+
display: inline-flex;
|
|
375
|
+
align-items: center;
|
|
376
|
+
justify-content: center;
|
|
377
|
+
margin-bottom: 8px;
|
|
378
|
+
border: 1px solid rgba(96,165,250,0.35);
|
|
379
|
+
border-radius: 9px;
|
|
380
|
+
color: var(--idp-accent-hover);
|
|
381
|
+
}
|
|
382
|
+
.dev-name {
|
|
383
|
+
color: var(--idp-fg);
|
|
384
|
+
font-size: 12px;
|
|
385
|
+
font-weight: 500;
|
|
386
|
+
}
|
|
387
|
+
.dev-sub {
|
|
388
|
+
color: var(--idp-muted-fg);
|
|
389
|
+
font-family: var(--idp-mono);
|
|
390
|
+
font-size: 10px;
|
|
391
|
+
}
|
|
392
|
+
.chain-grid, .dev-grid {
|
|
393
|
+
display: grid;
|
|
394
|
+
grid-template-columns: 1fr 1fr;
|
|
395
|
+
gap: 48px;
|
|
396
|
+
}
|
|
397
|
+
.chain-steps {
|
|
398
|
+
display: grid;
|
|
399
|
+
gap: 28px;
|
|
400
|
+
}
|
|
401
|
+
.chain-step {
|
|
402
|
+
display: grid;
|
|
403
|
+
grid-template-columns: 70px 1fr;
|
|
404
|
+
gap: 16px;
|
|
405
|
+
padding-bottom: 24px;
|
|
406
|
+
border-bottom: 1px solid var(--idp-border-soft);
|
|
407
|
+
}
|
|
408
|
+
.chain-step > div {
|
|
409
|
+
color: var(--idp-accent-hover);
|
|
410
|
+
font-family: var(--idp-mono);
|
|
411
|
+
font-size: 11px;
|
|
412
|
+
font-weight: 600;
|
|
413
|
+
letter-spacing: 0.08em;
|
|
414
|
+
}
|
|
415
|
+
.chain-panel {
|
|
416
|
+
overflow: hidden;
|
|
417
|
+
background: var(--idp-bg);
|
|
418
|
+
}
|
|
419
|
+
.chain-head {
|
|
420
|
+
display: flex;
|
|
421
|
+
justify-content: space-between;
|
|
422
|
+
padding: 14px 18px;
|
|
423
|
+
border-bottom: 1px solid var(--idp-border-soft);
|
|
424
|
+
color: var(--idp-muted-fg);
|
|
425
|
+
font-family: var(--idp-mono);
|
|
426
|
+
font-size: 11px;
|
|
427
|
+
letter-spacing: 0.08em;
|
|
428
|
+
text-transform: uppercase;
|
|
429
|
+
}
|
|
430
|
+
.chain-block {
|
|
431
|
+
display: grid;
|
|
432
|
+
grid-template-columns: auto 1fr auto;
|
|
433
|
+
gap: 12px;
|
|
434
|
+
margin: 8px 14px;
|
|
435
|
+
padding: 14px 16px;
|
|
436
|
+
border: 1px solid var(--idp-border-soft);
|
|
437
|
+
border-radius: 8px;
|
|
438
|
+
color: var(--idp-muted-fg);
|
|
439
|
+
font-family: var(--idp-mono);
|
|
440
|
+
font-size: 11px;
|
|
441
|
+
}
|
|
442
|
+
.chain-block.idp {
|
|
443
|
+
border-left: 2px solid var(--idp-accent);
|
|
444
|
+
background: var(--idp-accent-soft);
|
|
445
|
+
}
|
|
446
|
+
.tiers {
|
|
447
|
+
display: grid;
|
|
448
|
+
grid-template-columns: repeat(3, 1fr);
|
|
449
|
+
gap: 16px;
|
|
450
|
+
}
|
|
451
|
+
.tier {
|
|
452
|
+
position: relative;
|
|
453
|
+
display: flex;
|
|
454
|
+
flex-direction: column;
|
|
455
|
+
padding: 28px;
|
|
456
|
+
}
|
|
457
|
+
.tier.featured {
|
|
458
|
+
border-color: var(--idp-accent);
|
|
459
|
+
background: linear-gradient(180deg, var(--idp-accent-soft) 0%, var(--idp-bg-2) 40%);
|
|
460
|
+
}
|
|
461
|
+
.tier-name {
|
|
462
|
+
margin-bottom: 10px;
|
|
463
|
+
color: var(--idp-muted-fg);
|
|
464
|
+
font-family: var(--idp-mono);
|
|
465
|
+
font-size: 11px;
|
|
466
|
+
letter-spacing: 0.08em;
|
|
467
|
+
text-transform: uppercase;
|
|
468
|
+
}
|
|
469
|
+
.price {
|
|
470
|
+
margin: 12px 0 20px;
|
|
471
|
+
font-family: var(--idp-display);
|
|
472
|
+
font-size: 40px;
|
|
473
|
+
font-weight: 700;
|
|
474
|
+
}
|
|
475
|
+
.tier ul {
|
|
476
|
+
flex: 1;
|
|
477
|
+
margin: 0 0 24px;
|
|
478
|
+
padding-left: 20px;
|
|
479
|
+
}
|
|
480
|
+
.dev-text p {
|
|
481
|
+
color: var(--idp-fg-3);
|
|
482
|
+
}
|
|
483
|
+
.tags {
|
|
484
|
+
display: flex;
|
|
485
|
+
flex-wrap: wrap;
|
|
486
|
+
gap: 6px;
|
|
487
|
+
margin: 18px 0 22px;
|
|
488
|
+
}
|
|
489
|
+
.tags span {
|
|
490
|
+
padding: 4px 10px;
|
|
491
|
+
border: 1px solid var(--idp-border);
|
|
492
|
+
border-radius: 999px;
|
|
493
|
+
background: var(--idp-bg-2);
|
|
494
|
+
color: var(--idp-fg-3);
|
|
495
|
+
font-family: var(--idp-mono);
|
|
496
|
+
font-size: 10.5px;
|
|
497
|
+
}
|
|
498
|
+
.terminal {
|
|
499
|
+
overflow: hidden;
|
|
500
|
+
background: var(--idp-bg);
|
|
501
|
+
}
|
|
502
|
+
.term-bar {
|
|
503
|
+
display: flex;
|
|
504
|
+
gap: 6px;
|
|
505
|
+
padding: 10px 14px;
|
|
506
|
+
border-bottom: 1px solid var(--idp-border-soft);
|
|
507
|
+
}
|
|
508
|
+
.tdot {
|
|
509
|
+
width: 11px;
|
|
510
|
+
height: 11px;
|
|
511
|
+
border-radius: 50%;
|
|
512
|
+
}
|
|
513
|
+
.red { background: #ff5f57; }
|
|
514
|
+
.yellow { background: #ffbd2e; }
|
|
515
|
+
.green { background: #28c840; }
|
|
516
|
+
pre {
|
|
517
|
+
min-height: 300px;
|
|
518
|
+
margin: 0;
|
|
519
|
+
padding: 22px 24px;
|
|
520
|
+
color: var(--idp-fg-3);
|
|
521
|
+
font-family: var(--idp-mono);
|
|
522
|
+
font-size: 13px;
|
|
523
|
+
line-height: 1.85;
|
|
524
|
+
}
|
|
525
|
+
.manifesto, .cta {
|
|
526
|
+
padding: 120px 0;
|
|
527
|
+
text-align: center;
|
|
528
|
+
}
|
|
529
|
+
q {
|
|
530
|
+
display: block;
|
|
531
|
+
max-width: 980px;
|
|
532
|
+
margin: 0 auto;
|
|
533
|
+
font-family: var(--idp-serif);
|
|
534
|
+
font-size: clamp(32px, 4vw, 48px);
|
|
535
|
+
font-style: italic;
|
|
536
|
+
line-height: 1.2;
|
|
537
|
+
quotes: none;
|
|
538
|
+
}
|
|
539
|
+
q::before, q::after {
|
|
540
|
+
content: none;
|
|
541
|
+
}
|
|
542
|
+
.cta {
|
|
543
|
+
position: relative;
|
|
544
|
+
overflow: hidden;
|
|
545
|
+
}
|
|
546
|
+
.cta::before {
|
|
547
|
+
content: '';
|
|
548
|
+
position: absolute;
|
|
549
|
+
left: 50%;
|
|
550
|
+
top: 50%;
|
|
551
|
+
width: 800px;
|
|
552
|
+
height: 600px;
|
|
553
|
+
transform: translate(-50%, -50%);
|
|
554
|
+
background: radial-gradient(ellipse, rgba(59,130,246,0.15) 0%, transparent 60%);
|
|
555
|
+
}
|
|
556
|
+
.cta .wrap {
|
|
557
|
+
position: relative;
|
|
558
|
+
}
|
|
559
|
+
.cta p {
|
|
560
|
+
max-width: 560px;
|
|
561
|
+
margin: 24px auto 32px;
|
|
562
|
+
color: var(--idp-fg-3);
|
|
563
|
+
}
|
|
564
|
+
footer {
|
|
565
|
+
padding: 64px 0 28px;
|
|
566
|
+
border-bottom: 0;
|
|
567
|
+
}
|
|
568
|
+
.footer-cols {
|
|
569
|
+
display: grid;
|
|
570
|
+
grid-template-columns: 2fr 1fr 1fr 1fr;
|
|
571
|
+
gap: 48px;
|
|
572
|
+
margin-bottom: 48px;
|
|
573
|
+
}
|
|
574
|
+
.footer-brand p, .footer-col a, .footer-bottom {
|
|
575
|
+
color: var(--idp-muted-fg);
|
|
576
|
+
font-size: 13px;
|
|
577
|
+
}
|
|
578
|
+
.footer-col {
|
|
579
|
+
display: grid;
|
|
580
|
+
gap: 9px;
|
|
581
|
+
}
|
|
582
|
+
.footer-col h4 {
|
|
583
|
+
margin: 0;
|
|
584
|
+
color: var(--idp-fg-3);
|
|
585
|
+
font-family: var(--idp-mono);
|
|
586
|
+
font-size: 11px;
|
|
587
|
+
letter-spacing: 0.1em;
|
|
588
|
+
text-transform: uppercase;
|
|
589
|
+
}
|
|
590
|
+
.footer-bottom {
|
|
591
|
+
display: flex;
|
|
592
|
+
justify-content: space-between;
|
|
593
|
+
padding-top: 22px;
|
|
594
|
+
border-top: 1px solid var(--idp-border-soft);
|
|
595
|
+
font-family: var(--idp-mono);
|
|
596
|
+
font-size: 11px;
|
|
597
|
+
}
|
|
598
|
+
@media (max-width: 1100px) {
|
|
599
|
+
.links { display: none; }
|
|
600
|
+
.bento { grid-template-columns: repeat(2, 1fr); }
|
|
601
|
+
.tile.col-2, .tile.col-3 { grid-column: span 2; }
|
|
602
|
+
.chain-grid, .dev-grid { grid-template-columns: 1fr; }
|
|
603
|
+
.tiers { grid-template-columns: 1fr; max-width: 520px; margin: 0 auto; }
|
|
604
|
+
.footer-cols { grid-template-columns: 1fr 1fr; }
|
|
605
|
+
}
|
|
606
|
+
@media (max-width: 720px) {
|
|
607
|
+
nav, .wrap { padding-left: 20px; padding-right: 20px; }
|
|
608
|
+
.status, .actions .ghost { display: none; }
|
|
609
|
+
.proof-row { grid-template-columns: repeat(2, 1fr); }
|
|
610
|
+
.bento { grid-template-columns: 1fr; }
|
|
611
|
+
.tile.col-2, .tile.col-3 { grid-column: span 1; }
|
|
612
|
+
.section, .manifesto, .cta { padding: 80px 0; }
|
|
613
|
+
.footer-cols { grid-template-columns: 1fr; }
|
|
614
|
+
}
|
|
615
|
+
`,
|
|
616
|
+
];
|
|
617
|
+
renderNav() {
|
|
618
|
+
return html `
|
|
619
|
+
<div class="nav-shell">
|
|
620
|
+
<nav>
|
|
621
|
+
<div class="logo">idp<span class="logo-dot"></span>global</div>
|
|
622
|
+
<div class="links"><a href="#product">Product</a><a href="#features">Features</a><a href="#chain">On-chain</a><a href="#pricing">Pricing</a><a href="#developers">Developers</a></div>
|
|
623
|
+
<div class="actions"><span class="status"><span class="live-dot"></span>All systems normal</span><idp-button variant="ghost" size="sm">Sign in</idp-button><idp-button variant="accent" size="sm">Claim identity</idp-button></div>
|
|
624
|
+
</nav>
|
|
625
|
+
</div>
|
|
626
|
+
`;
|
|
627
|
+
}
|
|
628
|
+
renderFeatures() {
|
|
629
|
+
return html `
|
|
630
|
+
<section class="section" id="features">
|
|
631
|
+
<div class="wrap">
|
|
632
|
+
<div class="section-head"><div class="eyebrow">Capabilities</div><h2>Native on every screen <em>you already carry.</em></h2><p class="lede">Approvals on iPhone. Tap-to-auth via NFC. Lock-screen actions on Apple Watch. The same identity, one tap away on any device.</p></div>
|
|
633
|
+
<div class="bento">
|
|
634
|
+
<div class="tile col-3 tall"><div class="tile-tag">Push approvals</div><h3>Approve or deny <em>in one tap.</em></h3><p>Every login, OAuth grant, and sensitive action triggers a real-time approval.</p><div class="approval-stack">${['GitHub OAuth|repo:read - 2 min ago|approved|ok', 'CLI login - MacBook Pro|Berlin - just now|pending|accent', 'Unknown device|Lagos - 1 hr ago|denied|error', 'NFC tap - door 4F|HQ - 12 min ago|approved|ok'].map((rowArg) => { const row = rowArg.split('|'); return html `<div class="approval-row"><div class="avatar">${row[0].slice(0, 2).toUpperCase()}</div><div><strong>${row[0]}</strong><span class="meta">${row[1]}</span></div><idp-badge variant=${row[3]}>${row[2]}</idp-badge></div>`; })}</div></div>
|
|
635
|
+
<div class="tile col-3"><div class="tile-tag">NFC tap-to-auth</div><h3>Tap to <em>authenticate.</em></h3><p>Hold your phone to any compatible reader. Identity token exchanges in under a second.</p><div class="identity-card"><h3>Alex Mercer</h3><div class="mono">@alexmercer - Personal</div><div class="chip"></div><div class="mono">did:idp:0x4a3f...c819</div></div></div>
|
|
636
|
+
<div class="tile col-3"><div class="tile-tag">Four platforms</div><h3>iPhone, Watch, iPad, Mac.</h3><p>Every device you carry is a trusted authenticator.</p><div class="devices-row">${[
|
|
637
|
+
['iPhone', 'phone'],
|
|
638
|
+
['Watch', 'smartphone-nfc'],
|
|
639
|
+
['iPad', 'device'],
|
|
640
|
+
['Mac', 'monitor'],
|
|
641
|
+
].map((deviceArg) => html `<div class="dev-cell"><div class="dev-icon"><idp-icon name=${deviceArg[1]} size="18"></idp-icon></div><div class="dev-name">${deviceArg[0]}</div><div class="dev-sub">trusted</div></div>`)}</div><div class="mono" style="margin-top:14px">One approval, anywhere - synchronized end-to-end.</div></div>
|
|
642
|
+
<div class="tile col-2"><div class="tile-tag">Average approval</div><h3>Sub-second auth.</h3><p>Push delivery, biometric prompt, and signed response under a second.</p><div class="metric">0.8<span>sec</span></div></div>
|
|
643
|
+
<div class="tile col-2"><div class="tile-tag">Audit-grade</div><h3>Every action, <em>on the record.</em></h3><p>Tamper-evident audit trail per identity and organization.</p></div>
|
|
644
|
+
<div class="tile col-2"><div class="tile-tag">Recovery</div><h3>Lose a phone? Not your identity.</h3><p>Multi-device recovery or social-recovery quorum. No vendor lockout.</p></div>
|
|
645
|
+
</div>
|
|
646
|
+
</div>
|
|
647
|
+
</section>
|
|
648
|
+
`;
|
|
649
|
+
}
|
|
650
|
+
renderChain() {
|
|
651
|
+
return html `
|
|
652
|
+
<section class="section alt" id="chain"><div class="wrap"><div class="section-head"><div class="eyebrow">Cardano-anchored</div><h2>Your identity outlives <em>any single server.</em></h2><p class="lede">Every identity is anchored to the Cardano mainnet, independently verifiable and recoverable.</p></div><div class="chain-grid"><div class="chain-steps">${[['01 / 03', 'Immutable record', 'Your identity hash is written to Cardano at creation and on every key rotation.'], ['02 / 03', 'Synced on every change', 'Profile updates, device additions, and revocations are anchored to the chain.'], ['03 / 03', 'Independently verifiable', 'Any compatible resolver can verify your identity directly against the public ledger.']].map((stepArg) => html `<div class="chain-step"><div>${stepArg[0]}</div><section><h3>${stepArg[1]}</h3><p>${stepArg[2]}</p></section></div>`)}</div><div class="chain-panel"><div class="chain-head"><span>Cardano mainnet</span><idp-badge variant="accent">live</idp-badge></div>${['#9 841 220', '#9 841 221', '#9 841 222', '#9 841 223'].map((blockArg, indexArg) => html `<div class="chain-block ${indexArg === 1 || indexArg === 2 ? 'idp' : ''}"><span>${blockArg}</span><span>${indexArg === 1 ? 'did:idp:0x4a3f...c819' : indexArg === 2 ? 'did:idp:0x9b12...f034' : 'confirmed block'}</span><strong>${indexArg === 1 || indexArg === 2 ? 'idp.global' : 'confirmed'}</strong></div>`)}</div></div></div></section>
|
|
653
|
+
`;
|
|
654
|
+
}
|
|
655
|
+
renderPricing() {
|
|
656
|
+
const tiers = [
|
|
657
|
+
['Personal', 'For one person.', '$0', ['One portable identity', 'Push approval on devices', 'NFC tap-to-authenticate', 'Anchored on Cardano'], 'Claim your identity'],
|
|
658
|
+
['Family & Org', 'For teams under 1,000.', '$0', ['Multi-member organization', 'Role-based access control', 'Shared OAuth client registry', 'Full audit trail'], 'Start an organization'],
|
|
659
|
+
['Enterprise', 'Above $1M ARR.', 'Fair', ['Self-hosted and air-gap deployable', 'Compliance and audit support', 'Global admin across orgs', 'Priority SLA'], 'Talk to us'],
|
|
660
|
+
];
|
|
661
|
+
return html `<section class="section" id="pricing"><div class="wrap"><div class="section-head"><div class="eyebrow">Pricing</div><h2>The same identity, <em>at every scale.</em></h2><p class="lede">Free for the first thousand users. Fair contribution above that. No hard paywalls.</p></div><div class="tiers">${tiers.map((tierArg, indexArg) => html `<div class="tier ${indexArg === 1 ? 'featured' : ''}"><div class="tier-name">${tierArg[0]}</div><h3>${tierArg[1]}</h3><div class="price">${tierArg[2]}</div><ul>${tierArg[3].map((itemArg) => html `<li>${itemArg}</li>`)}</ul><idp-button variant=${indexArg === 1 ? 'accent' : 'ghost'}>${tierArg[4]}</idp-button></div>`)}</div></div></section>`;
|
|
662
|
+
}
|
|
663
|
+
renderDevelopers() {
|
|
664
|
+
return html `
|
|
665
|
+
<section class="section alt" id="developers"><div class="wrap dev-grid"><div class="dev-text"><div class="eyebrow">For developers</div><h2>No black boxes <em>in your identity stack.</em></h2><p>idp.global is fully open source and MIT licensed. Read the cryptography. Verify the Cardano sync. Run it on your own metal.</p><div class="tags">${['MIT licensed', 'OAuth 2 / OIDC', 'Self-hostable', 'Air-gappable', 'Cardano native', 'SOC 2'].map((tagArg) => html `<span>${tagArg}</span>`)}</div><idp-button variant="accent">View source</idp-button></div><div class="terminal"><div class="term-bar"><span class="tdot red"></span><span class="tdot yellow"></span><span class="tdot green"></span></div><pre><code>$ idp identity create
|
|
666
|
+
OK Identity created - did:idp:0x4a3f...c819
|
|
667
|
+
OK Confirmed on-chain - permanent
|
|
668
|
+
|
|
669
|
+
$ idp login github.com
|
|
670
|
+
OK Push sent - iPhone 15 Pro
|
|
671
|
+
OK Approved - Watch - 0.8s</code></pre></div></div></section>
|
|
672
|
+
`;
|
|
673
|
+
}
|
|
674
|
+
render() {
|
|
675
|
+
return html `
|
|
676
|
+
<div class="page">
|
|
677
|
+
${this.renderNav()}
|
|
678
|
+
<idp-landing-hero></idp-landing-hero>
|
|
679
|
+
<section class="proof"><div class="wrap"><div class="proof-label">Built for identity at every scale</div><div class="proof-row">${['Open Source', 'Self-hostable', 'Cardano anchored', 'OIDC ready', 'Passkey first', 'Free for everyone'].map((nameArg) => html `<div class="proof-name">${nameArg}</div>`)}</div></div></section>
|
|
680
|
+
${this.renderFeatures()}${this.renderChain()}${this.renderPricing()}${this.renderDevelopers()}
|
|
681
|
+
<section class="manifesto"><div class="wrap"><div class="eyebrow">Why we built this</div><q>Identity should not be a product the user is sold.<br/>It should be a permanent <em>fact</em>, owned by the person it describes.</q></div></section>
|
|
682
|
+
<section class="cta"><div class="wrap"><h2>Claim your identity.<br/><em>Free, forever.</em></h2><p>Sixty seconds to claim, anchored to Cardano on submission. No credit card. No vendor lock-in.</p><idp-button variant="accent" size="lg">Claim your identity</idp-button></div></section>
|
|
683
|
+
<footer><div class="wrap"><div class="footer-cols"><div class="footer-brand"><div class="logo">idp<span class="logo-dot"></span>global</div><p>An open identity provider for everyone. Anchored on Cardano. Built in the open. Yours forever.</p></div><div class="footer-col"><h4>Product</h4><a>For individuals</a><a>For organizations</a><a>Cardano sync</a></div><div class="footer-col"><h4>Developers</h4><a>Documentation</a><a>Self-hosting</a><a>SDKs</a></div><div class="footer-col"><h4>Company</h4><a>Manifesto</a><a>Security</a><a>Privacy</a></div></div><div class="footer-bottom"><span>© 2026 idp.global - MIT - Anchored to Cardano</span><span>Source - Community</span></div></div></footer>
|
|
684
|
+
</div>
|
|
685
|
+
`;
|
|
686
|
+
}
|
|
687
|
+
static {
|
|
688
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
689
|
+
}
|
|
690
|
+
};
|
|
691
|
+
return IdpLandingPage = _classThis;
|
|
692
|
+
})();
|
|
693
|
+
export { IdpLandingPage };
|
|
694
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRwLWxhbmRpbmctcGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9pZHAtbGFuZGluZy1wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUF1QixNQUFNLDZCQUE2QixDQUFDO0FBQ3pHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxlQUFlLENBQUM7QUFDdkIsT0FBTyx1QkFBdUIsQ0FBQztJQVNsQixjQUFjOzRCQUQxQixhQUFhLENBQUMsa0JBQWtCLENBQUM7Ozs7c0JBQ0UsV0FBVzs4QkFBbkIsU0FBUSxXQUFXOzs7O1lBQS9DLDZLQWdvQkM7Ozs7UUEvbkJRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFBLHVDQUF1QyxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRWpELE1BQU0sQ0FBQyxNQUFNLEdBQUc7WUFDckIsR0FBRyxnQkFBZ0I7WUFDbkIsR0FBRyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|