@mdxui/named 7.0.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/index.d.ts +3 -1
- package/dist/components/index.js +240 -198
- package/dist/components/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +242 -345
- package/dist/index.js.map +1 -1
- package/dist/schemas/index.js +2 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/shared/index.d.ts +46 -35
- package/dist/shared/index.js +99 -208
- package/dist/shared/index.js.map +1 -1
- package/dist/styles.css +507 -13
- package/dist/view/index.d.ts +12 -4
- package/dist/view/index.js +936 -220
- package/dist/view/index.js.map +1 -1
- package/package.json +7 -6
package/dist/styles.css
CHANGED
|
@@ -53,11 +53,13 @@
|
|
|
53
53
|
*/
|
|
54
54
|
|
|
55
55
|
/* ──────────────────────────────────────────────────────────────────
|
|
56
|
-
FONTS — Halant (serif display) +
|
|
57
|
-
The baseline loads
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
FONTS — Halant (serif display) + Inter (body), self-contained.
|
|
57
|
+
The baseline loads both via next/font (app/layout.tsx: Halant for h1/h2
|
|
58
|
+
display, Inter for body — Hanken Grotesk / Instrument Sans are loaded there
|
|
59
|
+
too but referenced nowhere). The package can't rely on the host loading
|
|
60
|
+
either, so the envelope ships both via @font-face (Google Fonts woff2).
|
|
61
|
+
@font-face has no ordering constraint (unlike @import url()), so it is safe
|
|
62
|
+
to drop anywhere in the consumer's entry.
|
|
61
63
|
────────────────────────────────────────────────────────────────── */
|
|
62
64
|
@font-face {
|
|
63
65
|
font-family: 'Halant';
|
|
@@ -115,12 +117,15 @@
|
|
|
115
117
|
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
116
118
|
}
|
|
117
119
|
@font-face {
|
|
118
|
-
font-family: '
|
|
120
|
+
font-family: 'Inter';
|
|
119
121
|
font-style: normal;
|
|
120
|
-
font-weight:
|
|
122
|
+
font-weight: 100 900;
|
|
121
123
|
font-display: swap;
|
|
122
|
-
src: url('https://fonts.gstatic.com/s/
|
|
124
|
+
src: url('https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.woff2')
|
|
123
125
|
format('woff2');
|
|
126
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
127
|
+
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193,
|
|
128
|
+
U+2212, U+2215, U+FEFF, U+FFFD;
|
|
124
129
|
}
|
|
125
130
|
|
|
126
131
|
/* ──────────────────────────────────────────────────────────────────
|
|
@@ -210,20 +215,182 @@
|
|
|
210
215
|
--radius-section: 36px; /* large section containers */
|
|
211
216
|
--radius-image: 64px; /* hero artwork mask */
|
|
212
217
|
|
|
213
|
-
/* ----
|
|
218
|
+
/* ---- radius scale — stock Tailwind v4 ------------------------------ */
|
|
219
|
+
/* The baseline runs Tailwind's default radius scale (rounded-3xl = 1.5rem
|
|
220
|
+
cards, rounded-xl chips, rounded-md input). Host theme layers remap
|
|
221
|
+
--radius-{sm..3xl} as multiples of the preset's --radius (e.g. clay's
|
|
222
|
+
0.75rem makes rounded-3xl render 36px instead of 24px), so pin the
|
|
223
|
+
defaults inside the scope. Hosts that remap via `@theme inline` bake
|
|
224
|
+
`calc(var(--radius) * N)` into the utilities — the multipliers anchor on
|
|
225
|
+
lg = --radius, so pinning --radius to stock lg (0.5rem) reproduces the
|
|
226
|
+
whole default scale; the explicit --radius-* pins cover hosts whose
|
|
227
|
+
utilities read the scale tokens directly. --radius-section/-image above
|
|
228
|
+
stay the baseline's own additions. */
|
|
229
|
+
--radius: 0.5rem;
|
|
230
|
+
--radius-xs: 0.125rem;
|
|
231
|
+
--radius-sm: 0.25rem;
|
|
232
|
+
--radius-md: 0.375rem;
|
|
233
|
+
--radius-lg: 0.5rem;
|
|
234
|
+
--radius-xl: 0.75rem;
|
|
235
|
+
--radius-2xl: 1rem;
|
|
236
|
+
--radius-3xl: 1.5rem;
|
|
237
|
+
--radius-4xl: 2rem;
|
|
238
|
+
|
|
239
|
+
/* ---- shadows — neutral black (Tailwind v4 defaults) ---------------- */
|
|
240
|
+
/* The baseline runs stock Tailwind shadows. Host theme presets re-point
|
|
241
|
+
the --shadow-* tokens (e.g. clay's warm oklch(0.35 0.08 40) tint +
|
|
242
|
+
different geometry), and Tailwind's shadow-{sm,md,lg} utilities read
|
|
243
|
+
them — so without this pin, button/card shadows inside the named scope
|
|
244
|
+
pick up the host's tint. */
|
|
245
|
+
--shadow-2xs: 0 1px rgb(0 0 0 / 0.05);
|
|
246
|
+
--shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
247
|
+
--shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
|
|
248
|
+
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
249
|
+
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
250
|
+
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
|
|
251
|
+
--shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
|
|
252
|
+
|
|
253
|
+
/* ---- fonts — Halant display, Inter body ---------------------------- */
|
|
254
|
+
/* NOTE: do NOT write `--font-inter: var(--font-inter, …)` here — a custom
|
|
255
|
+
property referencing itself is a cycle, invalid at computed-value time,
|
|
256
|
+
and it voids every declaration that var()s it (the body font silently
|
|
257
|
+
fell back to the host font). Reference the host's token only at the
|
|
258
|
+
use site, with the packaged Inter as the var() fallback. */
|
|
214
259
|
--font-halant: 'Halant', ui-serif, Georgia, serif;
|
|
215
|
-
|
|
260
|
+
/* Template indirection: the shared h1/h2 + .font-halant rules read
|
|
261
|
+
--font-display, so other templates (executive) swap the display face by
|
|
262
|
+
re-pointing ONE token instead of fighting these rules' specificity. */
|
|
263
|
+
--font-display: var(--font-halant);
|
|
216
264
|
|
|
217
265
|
/* Paint the named surface cream + warm ink, independent of the host's
|
|
218
266
|
dark page, so the editorial sections read on cream. */
|
|
219
267
|
background: var(--color-surface);
|
|
220
268
|
color: var(--color-fg);
|
|
221
|
-
font-family:
|
|
269
|
+
font-family: var(--font-inter, 'Inter'), system-ui, -apple-system, sans-serif;
|
|
222
270
|
-webkit-font-smoothing: antialiased;
|
|
223
271
|
-moz-osx-font-smoothing: grayscale;
|
|
224
272
|
text-rendering: optimizeLegibility;
|
|
225
273
|
}
|
|
226
274
|
|
|
275
|
+
/* ──────────────────────────────────────────────────────────────────
|
|
276
|
+
ANCHOR-SCROLL POLISH (baseline globals.css): smooth scrolling for the
|
|
277
|
+
navbar's #features/#pricing/#faq jumps + clearance so the sticky nav
|
|
278
|
+
doesn't cover the section heading on arrival. `html` can't sit under the
|
|
279
|
+
dialect scope, so the smooth rule is gated with :has() — a no-op on
|
|
280
|
+
pages that don't render the named arc.
|
|
281
|
+
────────────────────────────────────────────────────────────────── */
|
|
282
|
+
html:has([data-dialect='named']) {
|
|
283
|
+
scroll-behavior: smooth;
|
|
284
|
+
}
|
|
285
|
+
[data-dialect='named'] section[id] {
|
|
286
|
+
scroll-margin-top: 80px;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/* ──────────────────────────────────────────────────────────────────
|
|
290
|
+
DARK MODE — the baseline's Anthropic-calm dark set (globals.css `.dark`,
|
|
291
|
+
verbatim): warm near-black surfaces, cream ink, the primary CTA gradient
|
|
292
|
+
inverted to cream-on-dark, hue library re-tuned with hue angles preserved.
|
|
293
|
+
Activated by the host's `.dark` class (DialectShell's <Site mode="dark">
|
|
294
|
+
sets it on an ancestor). The persona accent mapping (--color-accent-*)
|
|
295
|
+
cascades from the light block via var() — re-declaring the --hue-* values
|
|
296
|
+
here is enough, exactly like the baseline.
|
|
297
|
+
────────────────────────────────────────────────────────────────── */
|
|
298
|
+
.dark [data-dialect='named'],
|
|
299
|
+
[data-dialect='named'].dark {
|
|
300
|
+
/* ---- neo shared tokens, re-pointed to the dark baseline ----------- */
|
|
301
|
+
--background: oklch(0.155 0.005 60); /* baseline dark --color-surface */
|
|
302
|
+
--foreground: oklch(0.94 0.008 80); /* baseline dark --color-fg */
|
|
303
|
+
--card: oklch(0.23 0.008 60); /* baseline dark --color-surface-raised */
|
|
304
|
+
--card-foreground: oklch(0.94 0.008 80);
|
|
305
|
+
--popover: oklch(0.23 0.008 60);
|
|
306
|
+
--popover-foreground: oklch(0.94 0.008 80);
|
|
307
|
+
--muted: oklch(0.105 0.003 60); /* baseline dark --color-surface-sunken */
|
|
308
|
+
--muted-foreground: oklch(0.7 0.012 80); /* baseline dark --color-fg-muted */
|
|
309
|
+
/* primary CTA inverts to cream-on-dark (baseline dark --color-btn-primary-*) */
|
|
310
|
+
--primary: oklch(0.87 0.01 80);
|
|
311
|
+
--primary-foreground: oklch(0.18 0.005 60);
|
|
312
|
+
--secondary: oklch(0.23 0.008 60);
|
|
313
|
+
--secondary-foreground: oklch(0.94 0.008 80);
|
|
314
|
+
--accent: oklch(0.335 0.09 45); /* dark persimmon --hue-orange-medium */
|
|
315
|
+
--accent-foreground: oklch(0.18 0.008 80);
|
|
316
|
+
--border: oklch(0.94 0.008 80 / 0.12);
|
|
317
|
+
--input: oklch(0.94 0.008 80 / 0.12);
|
|
318
|
+
--ring: oklch(0.94 0.008 80 / 0.4);
|
|
319
|
+
--destructive: oklch(0.64 0.18 25);
|
|
320
|
+
--destructive-foreground: oklch(0.18 0.005 60);
|
|
321
|
+
|
|
322
|
+
/* ---- baseline semantic layer (verbatim from globals.css .dark) ----- */
|
|
323
|
+
--color-surface: oklch(0.155 0.005 60);
|
|
324
|
+
--color-surface-raised: oklch(0.23 0.008 60);
|
|
325
|
+
--color-surface-sunken: oklch(0.105 0.003 60);
|
|
326
|
+
|
|
327
|
+
--color-fg: oklch(0.94 0.008 80);
|
|
328
|
+
--color-fg-soft: oklch(0.82 0.01 80);
|
|
329
|
+
--color-fg-muted: oklch(0.7 0.012 80);
|
|
330
|
+
|
|
331
|
+
--color-border: oklch(0.94 0.008 80 / 0.12);
|
|
332
|
+
--color-border-strong: oklch(0.94 0.008 80 / 0.25);
|
|
333
|
+
--color-ring: oklch(0.94 0.008 80 / 0.4);
|
|
334
|
+
--color-hover: oklch(0.94 0.008 80 / 0.08);
|
|
335
|
+
|
|
336
|
+
--color-btn-primary-from: oklch(0.945 0.008 80);
|
|
337
|
+
--color-btn-primary-to: oklch(0.87 0.01 80);
|
|
338
|
+
--color-btn-primary-fg: oklch(0.18 0.005 60);
|
|
339
|
+
|
|
340
|
+
--color-destructive: oklch(0.64 0.18 25);
|
|
341
|
+
--color-destructive-fg: oklch(0.18 0.005 60);
|
|
342
|
+
|
|
343
|
+
/* ---- hue library, dark values (hue angles preserved) --------------- */
|
|
344
|
+
--hue-teal-soft: oklch(0.245 0.025 210);
|
|
345
|
+
--hue-teal-medium: oklch(0.33 0.06 210);
|
|
346
|
+
--hue-teal-strong: oklch(0.65 0.09 210);
|
|
347
|
+
|
|
348
|
+
--hue-orange-soft: oklch(0.245 0.04 48);
|
|
349
|
+
--hue-orange-medium: oklch(0.335 0.09 45);
|
|
350
|
+
--hue-orange-strong: oklch(0.72 0.15 50);
|
|
351
|
+
|
|
352
|
+
--hue-green-soft: oklch(0.245 0.035 134);
|
|
353
|
+
--hue-green-medium: oklch(0.33 0.075 134);
|
|
354
|
+
--hue-green-strong: oklch(0.73 0.14 134);
|
|
355
|
+
|
|
356
|
+
--hue-sky-blue-soft: oklch(0.245 0.035 235);
|
|
357
|
+
--hue-sky-blue-medium: oklch(0.33 0.075 235);
|
|
358
|
+
--hue-sky-blue-strong: oklch(0.73 0.14 235);
|
|
359
|
+
|
|
360
|
+
--hue-purple-soft: oklch(0.245 0.03 314);
|
|
361
|
+
--hue-purple-medium: oklch(0.33 0.07 314);
|
|
362
|
+
--hue-purple-strong: oklch(0.73 0.125 314);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/* Dark variants for the scoped utilities that bake literal light-ink values
|
|
366
|
+
(everything var()-driven above flips automatically). */
|
|
367
|
+
.dark [data-dialect='named'] .text-foreground\/70,
|
|
368
|
+
[data-dialect='named'].dark .text-foreground\/70 {
|
|
369
|
+
color: oklch(0.94 0.008 80 / 0.7);
|
|
370
|
+
}
|
|
371
|
+
.dark [data-dialect='named'] .text-foreground\/60,
|
|
372
|
+
[data-dialect='named'].dark .text-foreground\/60 {
|
|
373
|
+
color: oklch(0.94 0.008 80 / 0.6);
|
|
374
|
+
}
|
|
375
|
+
.dark [data-dialect='named'] .bg-primary\/10,
|
|
376
|
+
[data-dialect='named'].dark .bg-primary\/10 {
|
|
377
|
+
background-color: oklch(0.87 0.01 80 / 0.1);
|
|
378
|
+
}
|
|
379
|
+
.dark [data-dialect='named'] .fill-muted-foreground\/20,
|
|
380
|
+
[data-dialect='named'].dark .fill-muted-foreground\/20 {
|
|
381
|
+
fill: oklch(0.7 0.012 80 / 0.2);
|
|
382
|
+
}
|
|
383
|
+
.dark [data-dialect='named'] .stroke-muted-foreground\/20,
|
|
384
|
+
[data-dialect='named'].dark .stroke-muted-foreground\/20 {
|
|
385
|
+
stroke: oklch(0.7 0.012 80 / 0.2);
|
|
386
|
+
}
|
|
387
|
+
/* Baseline `.dark .integration-square-shadow` (globals.css) */
|
|
388
|
+
.dark [data-dialect='named'] .integration-square-shadow,
|
|
389
|
+
[data-dialect='named'].dark .integration-square-shadow {
|
|
390
|
+
box-shadow: 0px 0px 0px 1px var(--color-border),
|
|
391
|
+
0px 1px 3px 0px rgba(0, 0, 0, 0.3);
|
|
392
|
+
}
|
|
393
|
+
|
|
227
394
|
/* ════════════════════════════════════════════════════════════════════
|
|
228
395
|
NEO UTILITIES — scoped class rules.
|
|
229
396
|
Every neo utility the named markup references, defined under the subtree so
|
|
@@ -231,9 +398,20 @@
|
|
|
231
398
|
the cream baseline values.
|
|
232
399
|
════════════════════════════════════════════════════════════════════ */
|
|
233
400
|
|
|
234
|
-
/* ——
|
|
401
|
+
/* —— Display face (baseline `font-halant`; reads the template-indirected
|
|
402
|
+
--font-display so non-studio templates can swap it) ——————————————— */
|
|
235
403
|
[data-dialect='named'] .font-halant {
|
|
236
|
-
font-family: var(--font-halant);
|
|
404
|
+
font-family: var(--font-display, var(--font-halant));
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/* Baseline @layer base rule (globals.css): every section-level heading gets
|
|
408
|
+
the display treatment; h3 and below stay on the body sans. Scoped here
|
|
409
|
+
so components only specify size + variant, exactly like the baseline. */
|
|
410
|
+
[data-dialect='named'] h1,
|
|
411
|
+
[data-dialect='named'] h2 {
|
|
412
|
+
font-family: var(--font-display, var(--font-halant));
|
|
413
|
+
font-weight: 400;
|
|
414
|
+
line-height: 1.1;
|
|
237
415
|
}
|
|
238
416
|
|
|
239
417
|
/* —— Backgrounds —————————————————————————————————————————————————— */
|
|
@@ -290,6 +468,16 @@
|
|
|
290
468
|
}
|
|
291
469
|
|
|
292
470
|
/* —— Custom utilities the baseline markup relies on ———————————————— */
|
|
471
|
+
/* Primary CTA gradient (baseline @utility btn-gradient-dark) — the shared
|
|
472
|
+
Button's `default` variant. Token-driven so a persona re-pointing the
|
|
473
|
+
--color-btn-primary-* endpoints restyles every primary button at once. */
|
|
474
|
+
[data-dialect='named'] .btn-gradient-dark {
|
|
475
|
+
background: linear-gradient(
|
|
476
|
+
180deg,
|
|
477
|
+
var(--color-btn-primary-from) 0%,
|
|
478
|
+
var(--color-btn-primary-to) 100%
|
|
479
|
+
);
|
|
480
|
+
}
|
|
293
481
|
[data-dialect='named'] .card-shadow {
|
|
294
482
|
box-shadow: 0px 0.602px 0.602px -1.25px rgba(0, 0, 0, 0.36),
|
|
295
483
|
0px 2.289px 2.289px -2.5px rgba(0, 0, 0, 0.32),
|
|
@@ -317,3 +505,309 @@
|
|
|
317
505
|
transparent 83.55%
|
|
318
506
|
);
|
|
319
507
|
}
|
|
508
|
+
|
|
509
|
+
/* —— CodeWindow (shiki) ———————————————————————————————————————————— */
|
|
510
|
+
/* The template's panel owns the surface; shiki's theme background must not
|
|
511
|
+
fight it. Scoped under the dialect attr so it covers every template. */
|
|
512
|
+
[data-dialect='named'] .shiki {
|
|
513
|
+
background-color: transparent !important;
|
|
514
|
+
margin: 0;
|
|
515
|
+
font-size: inherit;
|
|
516
|
+
line-height: inherit;
|
|
517
|
+
white-space: pre;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
/* —— Marquee animation (hero tool strip) ——————————————————————————— */
|
|
521
|
+
/* The baseline defines these as `--animate-marquee` + @keyframes inside its
|
|
522
|
+
Tailwind @theme block — host builds that don't replicate that theme key
|
|
523
|
+
never generate the `animate-marquee` utility, leaving the strip frozen.
|
|
524
|
+
Ship them here. Keyframe names are global, so they carry a `named-` prefix
|
|
525
|
+
to stay collision-free; the class rules are scoped like everything else.
|
|
526
|
+
The shared Marquee component sets `--duration`/`--gap` inline. */
|
|
527
|
+
@keyframes named-marquee {
|
|
528
|
+
from {
|
|
529
|
+
transform: translateX(0);
|
|
530
|
+
}
|
|
531
|
+
to {
|
|
532
|
+
transform: translateX(calc(-100% - var(--gap)));
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
@keyframes named-marquee-vertical {
|
|
536
|
+
from {
|
|
537
|
+
transform: translateY(0);
|
|
538
|
+
}
|
|
539
|
+
to {
|
|
540
|
+
transform: translateY(calc(-100% - var(--gap)));
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
[data-dialect='named'] .animate-marquee {
|
|
544
|
+
animation: named-marquee var(--duration, 40s) linear infinite;
|
|
545
|
+
}
|
|
546
|
+
[data-dialect='named'] .animate-marquee-vertical {
|
|
547
|
+
animation: named-marquee-vertical var(--duration, 40s) linear infinite;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* @mdxui/named — EXECUTIVE template envelope ("Ledger Paper")
|
|
553
|
+
* ============================================================================
|
|
554
|
+
*
|
|
555
|
+
* The professional register of the named dialect ("Your AI CFO"): cool paper
|
|
556
|
+
* white + graphite ink, hairline rules as the structural language (no cards,
|
|
557
|
+
* no shadows), 2px corners, tabular numerals on every figure, and a single
|
|
558
|
+
* oxblood accent reserved for the primary CTA and key figures (Restrained
|
|
559
|
+
* color strategy — the accent stays under 10% of the surface).
|
|
560
|
+
*
|
|
561
|
+
* Scene: a founder or COO at a laptop in daylight, skeptical, deciding
|
|
562
|
+
* whether to hand their books to an AI agent. Light theme; rigor over vibes.
|
|
563
|
+
* Deliberately NOT navy-and-gold and NOT terminal-dark — both are the
|
|
564
|
+
* category reflexes for "finance".
|
|
565
|
+
*
|
|
566
|
+
* SCOPING — this block rides ON TOP of the studio envelope. The view renders
|
|
567
|
+
* `data-dialect="named" data-template="executive"`, so studio's bare
|
|
568
|
+
* `[data-dialect='named']` token block still matches; this selector's higher
|
|
569
|
+
* specificity (two attributes) re-points every token the executive subtree
|
|
570
|
+
* reads. Studio's scoped utility rules (.bg-background etc.) are var-driven,
|
|
571
|
+
* so they resolve to executive values here too — but executive markup writes
|
|
572
|
+
* arbitrary-value classes (`bg-(--color-surface)`) and avoids studio's
|
|
573
|
+
* literal-value utilities. Concatenated AFTER studio in dist/styles.css, so
|
|
574
|
+
* on specificity ties (e.g. studio's `.dark` block) executive wins: the
|
|
575
|
+
* dark block below restyles the ledger for ink (oxblood lifted luminous).
|
|
576
|
+
*/
|
|
577
|
+
|
|
578
|
+
/* Masthead/display face — Anton (black condensed grotesque; the cover voice).
|
|
579
|
+
Source Serif 4 survives only as the italic standfirst counter-voice. Inter
|
|
580
|
+
body ships from the studio block of the same stylesheet. */
|
|
581
|
+
@font-face {
|
|
582
|
+
font-family: 'Anton';
|
|
583
|
+
font-style: normal;
|
|
584
|
+
font-weight: 400;
|
|
585
|
+
font-display: swap;
|
|
586
|
+
src: url('https://fonts.gstatic.com/s/anton/v27/1Ptgg87LROyAm3Kz-C8CSKlv.woff2')
|
|
587
|
+
format('woff2');
|
|
588
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
589
|
+
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193,
|
|
590
|
+
U+2212, U+2215, U+FEFF, U+FFFD;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
/* Standfirst face — Source Serif 4 (variable weight, latin, + true italic). */
|
|
594
|
+
@font-face {
|
|
595
|
+
font-family: 'Source Serif 4';
|
|
596
|
+
font-style: normal;
|
|
597
|
+
font-weight: 200 900;
|
|
598
|
+
font-display: swap;
|
|
599
|
+
src: url('https://fonts.gstatic.com/s/sourceserif4/v14/vEFI2_tTDB4M7-auWDN0ahZJW1gb8te1Xb7G.woff2')
|
|
600
|
+
format('woff2');
|
|
601
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
602
|
+
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193,
|
|
603
|
+
U+2212, U+2215, U+FEFF, U+FFFD;
|
|
604
|
+
}
|
|
605
|
+
/* True italic — the hero standfirst is set in it; a synthesized slant on a
|
|
606
|
+
serif reads cheap, which defeats the standfirst's whole job. */
|
|
607
|
+
@font-face {
|
|
608
|
+
font-family: 'Source Serif 4';
|
|
609
|
+
font-style: italic;
|
|
610
|
+
font-weight: 200 900;
|
|
611
|
+
font-display: swap;
|
|
612
|
+
src: url('https://fonts.gstatic.com/s/sourceserif4/v14/vEFK2_tTDB4M7-auWDN0ahZJW1gewtW_WpzEpMs.woff2')
|
|
613
|
+
format('woff2');
|
|
614
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
615
|
+
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193,
|
|
616
|
+
U+2212, U+2215, U+FEFF, U+FFFD;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
[data-dialect='named'][data-template='executive'] {
|
|
620
|
+
/* ---- semantic layer — Ledger Paper ---------------------------------- */
|
|
621
|
+
/* surfaces: cool paper (hue 250, whisper of chroma — never #fff) */
|
|
622
|
+
--color-surface: oklch(0.975 0.004 250);
|
|
623
|
+
--color-surface-raised: oklch(0.99 0.003 250);
|
|
624
|
+
--color-surface-sunken: oklch(0.952 0.005 250);
|
|
625
|
+
|
|
626
|
+
/* ink: graphite, cool */
|
|
627
|
+
--color-fg: oklch(0.21 0.012 255);
|
|
628
|
+
--color-fg-soft: oklch(0.34 0.012 255);
|
|
629
|
+
--color-fg-muted: oklch(0.47 0.012 255);
|
|
630
|
+
|
|
631
|
+
/* hairline rules — the structural language */
|
|
632
|
+
--color-border: oklch(0.21 0.012 255 / 0.16);
|
|
633
|
+
--color-border-strong: oklch(0.21 0.012 255 / 0.45);
|
|
634
|
+
--color-ring: oklch(0.21 0.012 255 / 0.4);
|
|
635
|
+
--color-hover: oklch(0.21 0.012 255 / 0.04);
|
|
636
|
+
|
|
637
|
+
/* the one accent: oxblood — in TWO roles. `field` paints large surfaces
|
|
638
|
+
(the cover, the featured tier); `strong` is red TYPE and small marks
|
|
639
|
+
(numerals, squares). In light they share one value; dark splits them —
|
|
640
|
+
fields must stay deep (rich burgundy on ink), type must lift to stay
|
|
641
|
+
legible. Lifting a large field is what reads muddy-salmon. */
|
|
642
|
+
--color-accent-field: oklch(0.42 0.13 20);
|
|
643
|
+
--color-accent-strong: oklch(0.42 0.13 20);
|
|
644
|
+
--color-accent: oklch(0.49 0.12 20);
|
|
645
|
+
--color-accent-soft: oklch(0.93 0.02 20);
|
|
646
|
+
--color-accent-fg: oklch(0.985 0.004 250);
|
|
647
|
+
|
|
648
|
+
/* primary button: solid oxblood (the studio gradient collapses flat) */
|
|
649
|
+
--color-btn-primary-from: oklch(0.42 0.13 20);
|
|
650
|
+
--color-btn-primary-to: oklch(0.42 0.13 20);
|
|
651
|
+
--color-btn-primary-fg: oklch(0.985 0.004 250);
|
|
652
|
+
|
|
653
|
+
--color-destructive: oklch(0.58 0.18 25);
|
|
654
|
+
--color-destructive-fg: oklch(0.985 0.004 250);
|
|
655
|
+
|
|
656
|
+
/* ---- neo shared names, re-pointed (keeps shared primitives correct) -- */
|
|
657
|
+
--background: oklch(0.975 0.004 250);
|
|
658
|
+
--foreground: oklch(0.21 0.012 255);
|
|
659
|
+
--card: oklch(0.99 0.003 250);
|
|
660
|
+
--card-foreground: oklch(0.21 0.012 255);
|
|
661
|
+
--popover: oklch(0.99 0.003 250);
|
|
662
|
+
--popover-foreground: oklch(0.21 0.012 255);
|
|
663
|
+
--muted: oklch(0.952 0.005 250);
|
|
664
|
+
--muted-foreground: oklch(0.47 0.012 255);
|
|
665
|
+
--primary: oklch(0.42 0.13 20);
|
|
666
|
+
--primary-foreground: oklch(0.985 0.004 250);
|
|
667
|
+
--secondary: oklch(0.952 0.005 250);
|
|
668
|
+
--secondary-foreground: oklch(0.21 0.012 255);
|
|
669
|
+
--accent: oklch(0.49 0.12 20);
|
|
670
|
+
--accent-foreground: oklch(0.985 0.004 250);
|
|
671
|
+
--border: oklch(0.21 0.012 255 / 0.16);
|
|
672
|
+
--input: oklch(0.21 0.012 255 / 0.16);
|
|
673
|
+
--ring: oklch(0.21 0.012 255 / 0.4);
|
|
674
|
+
--destructive: oklch(0.58 0.18 25);
|
|
675
|
+
--destructive-foreground: oklch(0.985 0.004 250);
|
|
676
|
+
|
|
677
|
+
/* ---- geometry: square document corners, flat surfaces ---------------- */
|
|
678
|
+
/* 2px everywhere a radius utility appears (--radius anchors the host's
|
|
679
|
+
@theme-inline multipliers; see the studio block for the mechanism). */
|
|
680
|
+
--radius: 0.125rem;
|
|
681
|
+
--radius-xs: 0.125rem;
|
|
682
|
+
--radius-sm: 0.125rem;
|
|
683
|
+
--radius-md: 0.125rem;
|
|
684
|
+
--radius-lg: 0.125rem;
|
|
685
|
+
--radius-xl: 0.25rem;
|
|
686
|
+
--radius-2xl: 0.25rem;
|
|
687
|
+
--radius-3xl: 0.25rem;
|
|
688
|
+
--radius-4xl: 0.25rem;
|
|
689
|
+
--radius-section: 0px;
|
|
690
|
+
--radius-image: 2px;
|
|
691
|
+
|
|
692
|
+
/* no elevation — hairlines do the separating */
|
|
693
|
+
--shadow-2xs: 0 0 #0000;
|
|
694
|
+
--shadow-xs: 0 0 #0000;
|
|
695
|
+
--shadow-sm: 0 0 #0000;
|
|
696
|
+
--shadow-md: 0 0 #0000;
|
|
697
|
+
--shadow-lg: 0 0 #0000;
|
|
698
|
+
--shadow-xl: 0 0 #0000;
|
|
699
|
+
--shadow-2xl: 0 0 #0000;
|
|
700
|
+
|
|
701
|
+
/* ---- type ------------------------------------------------------------ */
|
|
702
|
+
/* Display = Anton (masthead, headings, the giant numerals). The serif is
|
|
703
|
+
demoted to the standfirst counter-voice via .exec-serif. */
|
|
704
|
+
--font-display: 'Anton', 'Arial Narrow', sans-serif;
|
|
705
|
+
--font-serif-exec: 'Source Serif 4', ui-serif, Georgia, serif;
|
|
706
|
+
|
|
707
|
+
background: var(--color-surface);
|
|
708
|
+
color: var(--color-fg);
|
|
709
|
+
font-family: var(--font-inter, 'Inter'), system-ui, -apple-system, sans-serif;
|
|
710
|
+
-webkit-font-smoothing: antialiased;
|
|
711
|
+
-moz-osx-font-smoothing: grayscale;
|
|
712
|
+
text-rendering: optimizeLegibility;
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
/* ──────────────────────────────────────────────────────────────────
|
|
716
|
+
DARK MODE — the ledger after hours: deep cool ink surfaces, paper type,
|
|
717
|
+
and the oxblood LIFTED to a luminous brick (the light-mode 0.42 L red
|
|
718
|
+
would die on ink). Everything var-driven inverts automatically — notably
|
|
719
|
+
the closing CTA band (bg --color-fg / text --color-surface) flips from
|
|
720
|
+
ink-band-on-paper to paper-band-on-ink: the bookend follows the theme.
|
|
721
|
+
Activated by the host's `.dark` class (DialectShell's <Site mode="dark">).
|
|
722
|
+
Higher specificity (3 selectors) than both the executive light block and
|
|
723
|
+
studio's dark block.
|
|
724
|
+
────────────────────────────────────────────────────────────────── */
|
|
725
|
+
.dark [data-dialect='named'][data-template='executive'],
|
|
726
|
+
[data-dialect='named'][data-template='executive'].dark {
|
|
727
|
+
/* ---- semantic layer — ink paper ------------------------------------- */
|
|
728
|
+
--color-surface: oklch(0.16 0.01 255);
|
|
729
|
+
--color-surface-raised: oklch(0.205 0.012 255);
|
|
730
|
+
--color-surface-sunken: oklch(0.125 0.008 255);
|
|
731
|
+
|
|
732
|
+
--color-fg: oklch(0.945 0.005 250);
|
|
733
|
+
--color-fg-soft: oklch(0.84 0.006 250);
|
|
734
|
+
--color-fg-muted: oklch(0.67 0.008 250);
|
|
735
|
+
|
|
736
|
+
--color-border: oklch(0.945 0.005 250 / 0.15);
|
|
737
|
+
--color-border-strong: oklch(0.945 0.005 250 / 0.45);
|
|
738
|
+
--color-ring: oklch(0.945 0.005 250 / 0.4);
|
|
739
|
+
--color-hover: oklch(0.945 0.005 250 / 0.06);
|
|
740
|
+
|
|
741
|
+
/* oxblood splits by role on ink: FIELDS stay deep (rich burgundy — a
|
|
742
|
+
lifted large field reads muddy salmon), TYPE lifts to stay legible. */
|
|
743
|
+
--color-accent-field: oklch(0.37 0.115 20);
|
|
744
|
+
--color-accent-strong: oklch(0.62 0.16 24);
|
|
745
|
+
--color-accent: oklch(0.68 0.15 26);
|
|
746
|
+
--color-accent-soft: oklch(0.28 0.06 20);
|
|
747
|
+
--color-accent-fg: oklch(0.975 0.006 250);
|
|
748
|
+
|
|
749
|
+
--color-btn-primary-from: oklch(0.55 0.15 22);
|
|
750
|
+
--color-btn-primary-to: oklch(0.55 0.15 22);
|
|
751
|
+
--color-btn-primary-fg: oklch(0.975 0.006 250);
|
|
752
|
+
|
|
753
|
+
--color-destructive: oklch(0.62 0.18 25);
|
|
754
|
+
--color-destructive-fg: oklch(0.16 0.01 255);
|
|
755
|
+
|
|
756
|
+
/* ---- neo shared names, re-pointed ----------------------------------- */
|
|
757
|
+
--background: oklch(0.16 0.01 255);
|
|
758
|
+
--foreground: oklch(0.945 0.005 250);
|
|
759
|
+
--card: oklch(0.205 0.012 255);
|
|
760
|
+
--card-foreground: oklch(0.945 0.005 250);
|
|
761
|
+
--popover: oklch(0.205 0.012 255);
|
|
762
|
+
--popover-foreground: oklch(0.945 0.005 250);
|
|
763
|
+
--muted: oklch(0.125 0.008 255);
|
|
764
|
+
--muted-foreground: oklch(0.67 0.008 250);
|
|
765
|
+
--primary: oklch(0.55 0.16 22);
|
|
766
|
+
--primary-foreground: oklch(0.975 0.006 250);
|
|
767
|
+
--secondary: oklch(0.205 0.012 255);
|
|
768
|
+
--secondary-foreground: oklch(0.945 0.005 250);
|
|
769
|
+
--accent: oklch(0.62 0.15 22);
|
|
770
|
+
--accent-foreground: oklch(0.975 0.006 250);
|
|
771
|
+
--border: oklch(0.945 0.005 250 / 0.15);
|
|
772
|
+
--input: oklch(0.945 0.005 250 / 0.15);
|
|
773
|
+
--ring: oklch(0.945 0.005 250 / 0.4);
|
|
774
|
+
--destructive: oklch(0.62 0.18 25);
|
|
775
|
+
--destructive-foreground: oklch(0.16 0.01 255);
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
/* Display headings: the shared h1/h2 rule supplies var(--font-display) →
|
|
779
|
+
Anton here. Anton is a single-cut black condensed grotesque: uppercase,
|
|
780
|
+
near-solid leading, a touch of positive tracking so large settings don't
|
|
781
|
+
weld together. */
|
|
782
|
+
[data-dialect='named'][data-template='executive'] h1,
|
|
783
|
+
[data-dialect='named'][data-template='executive'] h2 {
|
|
784
|
+
font-weight: 400;
|
|
785
|
+
text-transform: uppercase;
|
|
786
|
+
letter-spacing: 0.01em;
|
|
787
|
+
line-height: 0.92;
|
|
788
|
+
font-variant-numeric: lining-nums;
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
/* The standfirst counter-voice (true italic ships above). */
|
|
792
|
+
[data-dialect='named'][data-template='executive'] .exec-serif {
|
|
793
|
+
font-family: var(--font-serif-exec);
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
/* Figures (prices, indices) read as ledger entries everywhere. */
|
|
797
|
+
[data-dialect='named'][data-template='executive'] .exec-figure {
|
|
798
|
+
font-variant-numeric: tabular-nums lining-nums;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
/* The ledger closing signature: a double rule (totals row). */
|
|
802
|
+
[data-dialect='named'][data-template='executive'] .exec-double-rule {
|
|
803
|
+
border-top: 2px solid var(--color-border-strong);
|
|
804
|
+
position: relative;
|
|
805
|
+
}
|
|
806
|
+
[data-dialect='named'][data-template='executive'] .exec-double-rule::after {
|
|
807
|
+
content: '';
|
|
808
|
+
position: absolute;
|
|
809
|
+
top: 3px;
|
|
810
|
+
left: 0;
|
|
811
|
+
right: 0;
|
|
812
|
+
border-top: 1px solid var(--color-border);
|
|
813
|
+
}
|
package/dist/view/index.d.ts
CHANGED
|
@@ -33,6 +33,10 @@ type NamedAgentFeature = {
|
|
|
33
33
|
text: string;
|
|
34
34
|
}[];
|
|
35
35
|
code: string;
|
|
36
|
+
/** Shiki language id for the code window. Optional — the persona DSL is
|
|
37
|
+
* valid TypeScript, which is the default; the cascade may emit any
|
|
38
|
+
* language per agent (python, sql, yaml, …). */
|
|
39
|
+
language?: string;
|
|
36
40
|
badge: string;
|
|
37
41
|
};
|
|
38
42
|
type NamedAgentFeatures = {
|
|
@@ -40,7 +44,7 @@ type NamedAgentFeatures = {
|
|
|
40
44
|
description: string;
|
|
41
45
|
features: NamedAgentFeature[];
|
|
42
46
|
};
|
|
43
|
-
/** Pricing —
|
|
47
|
+
/** Pricing — single-tier vs multi-tier fork, discriminated
|
|
44
48
|
* on `variant` so both are expressible on one wire field. */
|
|
45
49
|
type NamedAgentPricingFeature = {
|
|
46
50
|
text: string;
|
|
@@ -102,7 +106,11 @@ type NamedAgentLandingContent = {
|
|
|
102
106
|
cta: NamedAgentCta;
|
|
103
107
|
};
|
|
104
108
|
|
|
105
|
-
type
|
|
106
|
-
|
|
109
|
+
type NamedAgentTemplate = 'studio' | 'executive';
|
|
110
|
+
type NamedAgentViewProps = DialectViewProps<NamedAgentLandingContent> & {
|
|
111
|
+
/** Design language for the page. Defaults to the named-agents baseline. */
|
|
112
|
+
template?: NamedAgentTemplate;
|
|
113
|
+
};
|
|
114
|
+
declare function NamedAgentView({ content, theme, mode, brandName, hostname, template }: NamedAgentViewProps): react_jsx_runtime.JSX.Element;
|
|
107
115
|
|
|
108
|
-
export { type NamedAgentCta, type NamedAgentCtaButton, type NamedAgentFaq, type NamedAgentFaqItem, type NamedAgentFeature, type NamedAgentFeatures, type NamedAgentHero, type NamedAgentLandingContent, type NamedAgentPricing, type NamedAgentPricingFeature, type NamedAgentPricingTier, NamedAgentView, type NamedAgentViewProps, NamedAgentView as default };
|
|
116
|
+
export { type NamedAgentCta, type NamedAgentCtaButton, type NamedAgentFaq, type NamedAgentFaqItem, type NamedAgentFeature, type NamedAgentFeatures, type NamedAgentHero, type NamedAgentLandingContent, type NamedAgentPricing, type NamedAgentPricingFeature, type NamedAgentPricingTier, type NamedAgentTemplate, NamedAgentView, type NamedAgentViewProps, NamedAgentView as default };
|