forgedock 1.0.17 → 1.0.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.
Files changed (134) hide show
  1. package/README.md +34 -1
  2. package/bin/cross-publish.mjs +344 -0
  3. package/bin/forgedock.mjs +229 -17
  4. package/commands/autopilot.md +77 -0
  5. package/commands/design-bench.md +176 -0
  6. package/commands/design-render-critique-loop.md +103 -0
  7. package/commands/design.md +259 -0
  8. package/commands/issue.md +7 -3
  9. package/commands/orchestrate.md +121 -0
  10. package/commands/{resume.md → pipeline-resume.md} +4 -4
  11. package/commands/{status.md → pipeline-status.md} +1 -1
  12. package/commands/qa-sweep.md +37 -2
  13. package/commands/quality-gate.md +57 -0
  14. package/commands/review-pr-staging.md +158 -2
  15. package/commands/test-gate.md +929 -0
  16. package/commands/work-on/build/implement.md +5 -3
  17. package/commands/work-on.md +53 -3
  18. package/docs/CI.md +177 -0
  19. package/docs/FORGE-PROTOCOL.md +324 -0
  20. package/docs/articles/b-vs-c-baseline.md +210 -0
  21. package/docs/articles/full-abc-benchmark.md +205 -0
  22. package/docs/articles/selective-spec-loading-token-savings.md +140 -0
  23. package/docs/design/abc-benchmark.md +195 -0
  24. package/docs/design/design-architect-rationale.md +123 -0
  25. package/docs/design/design-memory.md +61 -0
  26. package/docs/design/design-spec-schema.md +248 -0
  27. package/docs/design/design-system-lint.md +150 -0
  28. package/docs/design/divergent-generation.md +106 -0
  29. package/docs/design/effects-appropriateness.md +133 -0
  30. package/docs/design/fixtures/briefs/README.md +47 -0
  31. package/docs/design/fixtures/briefs/cadence.md +39 -0
  32. package/docs/design/fixtures/briefs/plume.md +39 -0
  33. package/docs/design/fixtures/briefs/slipstream.md +39 -0
  34. package/docs/design/fixtures/briefs/tender.md +39 -0
  35. package/docs/design/fixtures/briefs/voltage.md +39 -0
  36. package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-1.html +364 -0
  37. package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-2.html +420 -0
  38. package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-3.html +506 -0
  39. package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-1.html +611 -0
  40. package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-2.html +594 -0
  41. package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-3.html +817 -0
  42. package/docs/design/fixtures/runs/b-vs-c-baseline/runs.json +175 -0
  43. package/docs/design/fixtures/runs/b-vs-c-baseline/scorecard.json +138 -0
  44. package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-1.html +373 -0
  45. package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-2.html +398 -0
  46. package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-3.html +595 -0
  47. package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-1.html +531 -0
  48. package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-2.html +565 -0
  49. package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-3.html +674 -0
  50. package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-1.html +388 -0
  51. package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-2.html +463 -0
  52. package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-3.html +568 -0
  53. package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-1.html +562 -0
  54. package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-2.html +618 -0
  55. package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-3.html +618 -0
  56. package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-1.html +364 -0
  57. package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-2.html +420 -0
  58. package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-3.html +506 -0
  59. package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-1.html +527 -0
  60. package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-2.html +445 -0
  61. package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-3.html +483 -0
  62. package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-1.html +611 -0
  63. package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-2.html +594 -0
  64. package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-3.html +817 -0
  65. package/docs/design/fixtures/runs/full-abc/runs.json +190 -0
  66. package/docs/design/fixtures/runs/full-abc/scorecard.json +144 -0
  67. package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-1.html +496 -0
  68. package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-2.html +447 -0
  69. package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-3.html +564 -0
  70. package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-1.html +373 -0
  71. package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-2.html +398 -0
  72. package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-3.html +595 -0
  73. package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-1.html +622 -0
  74. package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-2.html +475 -0
  75. package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-3.html +660 -0
  76. package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-1.html +531 -0
  77. package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-2.html +565 -0
  78. package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-3.html +674 -0
  79. package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-1.html +525 -0
  80. package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-2.html +446 -0
  81. package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-3.html +463 -0
  82. package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-1.html +388 -0
  83. package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-2.html +463 -0
  84. package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-3.html +568 -0
  85. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-1.html +1068 -0
  86. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-2.html +1423 -0
  87. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-3.html +1245 -0
  88. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-1.html +305 -0
  89. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-2.html +327 -0
  90. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-3.html +428 -0
  91. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-1.html +1270 -0
  92. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-2.html +1172 -0
  93. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-3.html +1532 -0
  94. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-1.html +315 -0
  95. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-2.html +342 -0
  96. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-3.html +353 -0
  97. package/docs/design/fixtures/runs/full-abc-opus/runs.json +190 -0
  98. package/docs/design/fixtures/runs/full-abc-opus/scorecard.json +144 -0
  99. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-1.html +345 -0
  100. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-2.html +396 -0
  101. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-3.html +502 -0
  102. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-1.html +408 -0
  103. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-2.html +446 -0
  104. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-3.html +496 -0
  105. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-1.html +813 -0
  106. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-2.html +711 -0
  107. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-3.html +721 -0
  108. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-1.html +280 -0
  109. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-2.html +291 -0
  110. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-3.html +366 -0
  111. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-1.html +1010 -0
  112. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-2.html +836 -0
  113. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-3.html +930 -0
  114. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-1.html +407 -0
  115. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-2.html +396 -0
  116. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-3.html +529 -0
  117. package/docs/design/foundations/brutalist.css +294 -0
  118. package/docs/design/foundations/editorial.css +300 -0
  119. package/docs/design/foundations/minimal-luxury.css +295 -0
  120. package/docs/design/foundations/technical.css +293 -0
  121. package/docs/design/foundations/warm-photo.css +299 -0
  122. package/docs/design/reference-corpus.md +1726 -0
  123. package/docs/design/render-critique-loop.md +57 -0
  124. package/docs/spec-graph-schema.md +397 -0
  125. package/package.json +1 -1
  126. package/scripts/bench-scorecard.mjs +239 -0
  127. package/scripts/build-spec-graph.mjs +509 -0
  128. package/scripts/check-native-conflicts.sh +200 -0
  129. package/scripts/classify-lane.sh +0 -7
  130. package/scripts/design-system-lint.mjs +993 -0
  131. package/scripts/graph-query.sh +486 -0
  132. package/scripts/transition-label.sh +10 -2
  133. package/scripts/validate-spec-graph.sh +423 -0
  134. package/templates/workflows/forgedock-review.yml +96 -0
@@ -0,0 +1,475 @@
1
+ <!--
2
+ ARCHETYPE: minimal-luxury
3
+ SIGNATURE MOVE: "The ledger line" — every section is separated by a single pixel rule that bleeds
4
+ edge to edge at full viewport width, giving the layout the quality of a financial document or
5
+ a well-typeset annual report. Numbers are set in large, almost decorative numerals with extreme
6
+ letter-spacing and their labels in a much smaller, uppercase, spaced weight — creating a
7
+ deliberate tension between display size and informational density. The hero has zero imagery;
8
+ the product communicates through a single, perfectly typeset API response object rendered as
9
+ editorial matter.
10
+ EFFECTS PLAN:
11
+ - Page enters: each section fades up on scroll (IntersectionObserver, 60ms stagger per child)
12
+ - Nav: border-bottom appears only on scroll (JS scroll listener)
13
+ - Numbers: slow count-up with easeOutQuart (no library)
14
+ - Hover on CTA: background fill sweeps left-to-right via clip-path
15
+ - Absolutely no carousel, parallax, or particle effects
16
+ NEGATIVES CHECKED:
17
+ N1: No purple/blue gradient — pure white bg, warm ink #0F0E0C, brass accent #B8943F
18
+ N2: No Inter — Playfair Display (display) + DM Sans (body)
19
+ N3: Not everything centered — ragged left on hero, right-aligned numerals, asymmetric grid
20
+ N4: No 3 icon cards — 4-column spec table, a prose capability list, and a 2-col quote block
21
+ N5: Radius: 0 on most elements, 2px on one CTA, 100px on pill tags
22
+ N6: Not Tailwind palette — custom brass/ink/cream
23
+ N7: Not the skeleton — hero with type, stat band, two-col prose, quote, CTA
24
+ N8: No blobs
25
+ N9: No glass
26
+ N10: Deliberate hierarchy via type size, weight, tracking
27
+ N11: Real specifics: 47 countries, p99 47ms, 99.99%, 80+ methods
28
+ N12: Motion is subtle and purposeful
29
+ -->
30
+ <!DOCTYPE html>
31
+ <html lang="en">
32
+ <head>
33
+ <meta charset="UTF-8" />
34
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
35
+ <title>Tender — Payments Infrastructure for Internet Businesses</title>
36
+ <script src="https://cdn.tailwindcss.com"></script>
37
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
38
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
39
+ <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,500;0,700;1,400;1,500&family=DM+Sans:wght@300;400;500&family=DM+Mono:wght@400;500&display=swap" rel="stylesheet" />
40
+ <script>
41
+ tailwind.config = {
42
+ theme: {
43
+ extend: {
44
+ fontFamily: {
45
+ display: ['Playfair Display', 'serif'],
46
+ body: ['DM Sans', 'sans-serif'],
47
+ mono: ['DM Mono', 'monospace'],
48
+ },
49
+ colors: {
50
+ ink: '#0F0E0C',
51
+ cream: '#F7F5F0',
52
+ parchment: '#EDE9E1',
53
+ brass: '#B8943F',
54
+ brassDark: '#8A6D2A',
55
+ brassLight: '#D4AE60',
56
+ mist: '#8A8680',
57
+ faint: '#C8C4BC',
58
+ }
59
+ }
60
+ }
61
+ }
62
+ </script>
63
+ <style>
64
+ body {
65
+ font-family: 'DM Sans', sans-serif;
66
+ background: #F7F5F0;
67
+ color: #0F0E0C;
68
+ }
69
+
70
+ .font-display { font-family: 'Playfair Display', serif; }
71
+ .font-mono { font-family: 'DM Mono', monospace; }
72
+
73
+ /* Ledger rule */
74
+ .ledger {
75
+ border-top: 1px solid #C8C4BC;
76
+ width: 100vw;
77
+ margin-left: calc(-50vw + 50%);
78
+ }
79
+
80
+ /* Fade-up on scroll */
81
+ .reveal {
82
+ opacity: 0;
83
+ transform: translateY(20px);
84
+ transition: opacity 0.6s ease, transform 0.6s ease;
85
+ }
86
+ .reveal.visible {
87
+ opacity: 1;
88
+ transform: none;
89
+ }
90
+
91
+ /* CTA sweep hover */
92
+ .cta-sweep {
93
+ position: relative;
94
+ overflow: hidden;
95
+ z-index: 0;
96
+ }
97
+ .cta-sweep::before {
98
+ content: '';
99
+ position: absolute;
100
+ inset: 0;
101
+ background: #0F0E0C;
102
+ transform: translateX(-101%);
103
+ transition: transform 0.35s cubic-bezier(0.77,0,0.175,1);
104
+ z-index: -1;
105
+ }
106
+ .cta-sweep:hover::before { transform: translateX(0); }
107
+ .cta-sweep:hover { color: #F7F5F0; border-color: #0F0E0C; }
108
+
109
+ /* Number display */
110
+ .stat-number {
111
+ font-family: 'Playfair Display', serif;
112
+ font-weight: 400;
113
+ letter-spacing: -0.03em;
114
+ line-height: 1;
115
+ }
116
+
117
+ /* Nav sticky */
118
+ nav.scrolled {
119
+ border-bottom-color: #C8C4BC;
120
+ }
121
+
122
+ /* Fine rule inside content */
123
+ .rule-fine {
124
+ border: none;
125
+ border-top: 1px solid #EDE9E1;
126
+ }
127
+ </style>
128
+ </head>
129
+ <body class="bg-[#F7F5F0] text-[#0F0E0C]">
130
+
131
+ <!-- NAV -->
132
+ <nav id="main-nav" class="sticky top-0 z-50 bg-[#F7F5F0] border-b border-transparent transition-colors duration-200">
133
+ <div class="max-w-6xl mx-auto px-8 h-16 flex items-center justify-between">
134
+ <a href="#" class="flex items-center gap-3">
135
+ <!-- Wordmark -->
136
+ <span class="font-display text-[18px] font-medium tracking-[-0.02em] text-[#0F0E0C]">Tender</span>
137
+ <span class="w-1 h-1 rounded-full bg-[#B8943F] mt-0.5"></span>
138
+ </a>
139
+ <div class="hidden md:flex items-center gap-8">
140
+ <a href="#" class="text-[13px] font-body text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Products</a>
141
+ <a href="#" class="text-[13px] font-body text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Pricing</a>
142
+ <a href="#" class="text-[13px] font-body text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Docs</a>
143
+ <a href="#" class="text-[13px] font-body text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Company</a>
144
+ </div>
145
+ <div class="flex items-center gap-4">
146
+ <a href="#" class="text-[13px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Sign in</a>
147
+ <a href="#" class="cta-sweep text-[13px] font-medium border border-[#0F0E0C] text-[#0F0E0C] px-5 py-2 rounded-sm transition-colors duration-300">Start building</a>
148
+ </div>
149
+ </div>
150
+ </nav>
151
+
152
+ <!-- HERO — TYPOGRAPHIC, ASYMMETRIC -->
153
+ <section class="max-w-6xl mx-auto px-8 pt-20 pb-24">
154
+ <div class="grid grid-cols-1 lg:grid-cols-12 gap-16 items-start reveal">
155
+ <!-- Main heading — spans 7 cols -->
156
+ <div class="lg:col-span-7">
157
+ <div class="font-mono text-[11px] text-[#B8943F] tracking-[0.15em] uppercase mb-8">Payments Infrastructure — Since 2019</div>
158
+ <h1 class="font-display text-[52px] md:text-[68px] font-medium leading-[1.05] tracking-[-0.02em] text-[#0F0E0C] mb-8">
159
+ Every payment<br/>
160
+ your business<br/>
161
+ will ever take<span class="text-[#B8943F]">.</span>
162
+ </h1>
163
+ <p class="text-[17px] font-light leading-[1.75] text-[#8A8680] max-w-[420px] mb-10">
164
+ A single integration for accepting cards and local methods globally, running subscription and usage billing, sending marketplace payouts, and screening fraud. Operating in 47 countries.
165
+ </p>
166
+ <div class="flex items-center gap-4">
167
+ <a href="#" class="cta-sweep font-medium text-[14px] border border-[#0F0E0C] text-[#0F0E0C] px-7 py-3.5 rounded-sm transition-colors duration-300 inline-block">
168
+ Start integrating →
169
+ </a>
170
+ <a href="#" class="text-[14px] text-[#B8943F] hover:text-[#8A6D2A] transition-colors underline underline-offset-4 decoration-[#D4AE60]">
171
+ Read the docs
172
+ </a>
173
+ </div>
174
+ </div>
175
+
176
+ <!-- API object — editorial treatment -->
177
+ <div class="lg:col-span-5 pt-2">
178
+ <div class="border border-[#C8C4BC] bg-[#0F0E0C] rounded-[2px] overflow-hidden">
179
+ <div class="flex items-center justify-between px-5 py-3 border-b border-[#1E1C18]">
180
+ <span class="font-mono text-[11px] text-[#8A8680]">PaymentIntent · succeeded</span>
181
+ <span class="font-mono text-[11px] text-[#B8943F]">201 OK</span>
182
+ </div>
183
+ <pre class="p-5 font-mono text-[12px] leading-relaxed overflow-x-auto text-[#C8C4BC]"><code><span class="text-[#5A5650]">{</span>
184
+ <span class="text-[#B8943F]">"id"</span><span class="text-[#5A5650]">:</span> <span class="text-[#8BAD8B]">"pi_3PkXq2..."</span><span class="text-[#5A5650]">,</span>
185
+ <span class="text-[#B8943F]">"object"</span><span class="text-[#5A5650]">:</span> <span class="text-[#8BAD8B]">"payment_intent"</span><span class="text-[#5A5650]">,</span>
186
+ <span class="text-[#B8943F]">"amount"</span><span class="text-[#5A5650]">:</span> <span class="text-[#C8A060]">49900</span><span class="text-[#5A5650]">,</span>
187
+ <span class="text-[#B8943F]">"currency"</span><span class="text-[#5A5650]">:</span> <span class="text-[#8BAD8B]">"eur"</span><span class="text-[#5A5650]">,</span>
188
+ <span class="text-[#B8943F]">"status"</span><span class="text-[#5A5650]">:</span> <span class="text-[#8BAD8B]">"succeeded"</span><span class="text-[#5A5650]">,</span>
189
+ <span class="text-[#B8943F]">"payment_method"</span><span class="text-[#5A5650]">:</span> <span class="text-[#8BAD8B]">"sepa_debit"</span><span class="text-[#5A5650]">,</span>
190
+ <span class="text-[#B8943F]">"fraud_score"</span><span class="text-[#5A5650]">:</span> <span class="text-[#C8A060]">9</span><span class="text-[#5A5650]">,</span>
191
+ <span class="text-[#B8943F]">"fx_rate"</span><span class="text-[#5A5650]">:</span> <span class="text-[#C8A060]">1.0842</span><span class="text-[#5A5650]">,</span>
192
+ <span class="text-[#B8943F]">"settled_currency"</span><span class="text-[#5A5650]">:</span> <span class="text-[#8BAD8B]">"usd"</span><span class="text-[#5A5650]">,</span>
193
+ <span class="text-[#B8943F]">"livemode"</span><span class="text-[#5A5650]">:</span> <span class="text-[#9B7B9B]">true</span><span class="text-[#5A5650]">,</span>
194
+ <span class="text-[#B8943F]">"created"</span><span class="text-[#5A5650]">:</span> <span class="text-[#C8A060]">1750982411</span>
195
+ <span class="text-[#5A5650]">}</span></code></pre>
196
+ </div>
197
+ <div class="mt-3 flex items-center gap-2">
198
+ <div class="w-1.5 h-1.5 rounded-full bg-[#5A9B6A]"></div>
199
+ <span class="font-mono text-[11px] text-[#8A8680]">Response time: 44ms · Fraud screened · SEPA settled</span>
200
+ </div>
201
+ </div>
202
+ </div>
203
+ </section>
204
+
205
+ <!-- LEDGER RULE -->
206
+ <div class="ledger"></div>
207
+
208
+ <!-- STAT BAND -->
209
+ <section class="max-w-6xl mx-auto px-8 py-16">
210
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-0 reveal">
211
+ <div class="pr-8 md:border-r border-[#EDE9E1]">
212
+ <div class="stat-number text-[52px] text-[#0F0E0C]">47</div>
213
+ <div class="font-mono text-[10px] text-[#8A8680] tracking-[0.12em] uppercase mt-1">Countries</div>
214
+ </div>
215
+ <div class="px-8 md:border-r border-[#EDE9E1]">
216
+ <div class="stat-number text-[52px] text-[#0F0E0C]">99<span class="text-[30px]">.99%</span></div>
217
+ <div class="font-mono text-[10px] text-[#8A8680] tracking-[0.12em] uppercase mt-1">Uptime SLA</div>
218
+ </div>
219
+ <div class="px-8 md:border-r border-[#EDE9E1]">
220
+ <div class="stat-number text-[52px] text-[#B8943F]">47<span class="text-[26px]">ms</span></div>
221
+ <div class="font-mono text-[10px] text-[#8A8680] tracking-[0.12em] uppercase mt-1">p99 Latency</div>
222
+ </div>
223
+ <div class="pl-8">
224
+ <div class="stat-number text-[52px] text-[#0F0E0C]">80<span class="text-[30px]">+</span></div>
225
+ <div class="font-mono text-[10px] text-[#8A8680] tracking-[0.12em] uppercase mt-1">Payment Methods</div>
226
+ </div>
227
+ </div>
228
+ </section>
229
+
230
+ <!-- LEDGER RULE -->
231
+ <div class="ledger"></div>
232
+
233
+ <!-- CAPABILITY PROSE — TWO COLUMN -->
234
+ <section class="max-w-6xl mx-auto px-8 py-20">
235
+ <div class="grid grid-cols-1 lg:grid-cols-12 gap-16 reveal">
236
+ <div class="lg:col-span-4">
237
+ <div class="font-mono text-[11px] text-[#B8943F] tracking-[0.12em] uppercase mb-5">What it does</div>
238
+ <h2 class="font-display text-[34px] font-medium leading-[1.15] tracking-[-0.015em]">
239
+ One platform.<br/>
240
+ <em class="font-normal">Four essential<br/>capabilities.</em>
241
+ </h2>
242
+ </div>
243
+ <div class="lg:col-span-8">
244
+ <div class="space-y-8">
245
+ <!-- Global Payments -->
246
+ <div class="grid grid-cols-12 gap-6 pb-8 border-b border-[#EDE9E1]">
247
+ <div class="col-span-1">
248
+ <div class="font-mono text-[11px] text-[#C8C4BC] mt-1">01</div>
249
+ </div>
250
+ <div class="col-span-3">
251
+ <div class="text-[14px] font-medium text-[#0F0E0C]">Global Payments</div>
252
+ </div>
253
+ <div class="col-span-8">
254
+ <p class="text-[14px] text-[#8A8680] leading-relaxed mb-3">Visa, Mastercard, Amex, SEPA, UPI, PIX, GrabPay, iDEAL, and 75 more local methods. Automatic currency conversion at mid-market rates. A single checkout element that renders the right method for each customer's location.</p>
255
+ <div class="flex flex-wrap gap-1.5">
256
+ <span class="font-mono text-[10px] bg-[#EDE9E1] text-[#8A8680] px-2.5 py-1 rounded-full">Cards</span>
257
+ <span class="font-mono text-[10px] bg-[#EDE9E1] text-[#8A8680] px-2.5 py-1 rounded-full">SEPA</span>
258
+ <span class="font-mono text-[10px] bg-[#EDE9E1] text-[#8A8680] px-2.5 py-1 rounded-full">UPI</span>
259
+ <span class="font-mono text-[10px] bg-[#EDE9E1] text-[#8A8680] px-2.5 py-1 rounded-full">PIX</span>
260
+ <span class="font-mono text-[10px] bg-[#EDE9E1] text-[#8A8680] px-2.5 py-1 rounded-full">FX Conversion</span>
261
+ </div>
262
+ </div>
263
+ </div>
264
+
265
+ <!-- Billing -->
266
+ <div class="grid grid-cols-12 gap-6 pb-8 border-b border-[#EDE9E1]">
267
+ <div class="col-span-1">
268
+ <div class="font-mono text-[11px] text-[#C8C4BC] mt-1">02</div>
269
+ </div>
270
+ <div class="col-span-3">
271
+ <div class="text-[14px] font-medium text-[#0F0E0C]">Subscription & Usage Billing</div>
272
+ </div>
273
+ <div class="col-span-8">
274
+ <p class="text-[14px] text-[#8A8680] leading-relaxed">Flat-rate, tiered, per-seat, and metered billing models. Real-time usage meters, automated dunning, configurable retry schedules, and prorated upgrades. Invoices generated and emailed automatically.</p>
275
+ </div>
276
+ </div>
277
+
278
+ <!-- Payouts -->
279
+ <div class="grid grid-cols-12 gap-6 pb-8 border-b border-[#EDE9E1]">
280
+ <div class="col-span-1">
281
+ <div class="font-mono text-[11px] text-[#C8C4BC] mt-1">03</div>
282
+ </div>
283
+ <div class="col-span-3">
284
+ <div class="text-[14px] font-medium text-[#0F0E0C]">Marketplace Payouts</div>
285
+ </div>
286
+ <div class="col-span-8">
287
+ <p class="text-[14px] text-[#8A8680] leading-relaxed">Connect accounts for your sellers, vendors, or contractors. Configurable split rules — percentage, fixed, or tiered. Same-day payouts in USD, EUR, and GBP. Tax form collection handled.</p>
288
+ </div>
289
+ </div>
290
+
291
+ <!-- Fraud -->
292
+ <div class="grid grid-cols-12 gap-6">
293
+ <div class="col-span-1">
294
+ <div class="font-mono text-[11px] text-[#C8C4BC] mt-1">04</div>
295
+ </div>
296
+ <div class="col-span-3">
297
+ <div class="text-[14px] font-medium text-[#0F0E0C]">Fraud & Compliance</div>
298
+ </div>
299
+ <div class="col-span-8">
300
+ <p class="text-[14px] text-[#8A8680] leading-relaxed">ML fraud scoring on every transaction. Adaptive 3DS2 authentication. KYC/AML for regulated markets. PCI DSS Level 1 — card data never touches your servers. SOC 2 Type II audited.</p>
301
+ </div>
302
+ </div>
303
+ </div>
304
+ </div>
305
+ </div>
306
+ </section>
307
+
308
+ <!-- LEDGER RULE -->
309
+ <div class="ledger"></div>
310
+
311
+ <!-- TRUST QUOTES — ASYMMETRIC -->
312
+ <section class="max-w-6xl mx-auto px-8 py-20">
313
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-0 reveal">
314
+ <div class="pr-0 lg:pr-16 lg:border-r border-[#EDE9E1]">
315
+ <div class="font-mono text-[11px] text-[#B8943F] tracking-[0.12em] uppercase mb-8">From the team at Cartlane</div>
316
+ <blockquote class="font-display text-[22px] font-medium leading-[1.4] text-[#0F0E0C] mb-6">
317
+ "We replaced three payment processors with Tender in a weekend sprint. The fraud scoring alone paid for the migration."
318
+ </blockquote>
319
+ <div class="flex items-center gap-3">
320
+ <div class="w-8 h-8 rounded-full bg-[#EDE9E1] flex items-center justify-center">
321
+ <span class="font-mono text-[11px] text-[#8A8680]">AK</span>
322
+ </div>
323
+ <div>
324
+ <div class="text-[13px] font-medium text-[#0F0E0C]">Akira Kondo</div>
325
+ <div class="text-[12px] text-[#8A8680]">CTO, Cartlane</div>
326
+ </div>
327
+ </div>
328
+ </div>
329
+ <div class="pt-16 lg:pt-0 lg:pl-16">
330
+ <div class="font-mono text-[11px] text-[#B8943F] tracking-[0.12em] uppercase mb-8">From the team at Vesper</div>
331
+ <blockquote class="font-display text-[22px] font-medium leading-[1.4] text-[#0F0E0C] mb-6">
332
+ "Global checkout used to mean a different vendor per region. With Tender it's one integration and we're live in 14 new markets."
333
+ </blockquote>
334
+ <div class="flex items-center gap-3">
335
+ <div class="w-8 h-8 rounded-full bg-[#EDE9E1] flex items-center justify-center">
336
+ <span class="font-mono text-[11px] text-[#8A8680]">SC</span>
337
+ </div>
338
+ <div>
339
+ <div class="text-[13px] font-medium text-[#0F0E0C]">Sarah Chen</div>
340
+ <div class="text-[12px] text-[#8A8680]">VP Engineering, Vesper</div>
341
+ </div>
342
+ </div>
343
+ </div>
344
+ </div>
345
+ </section>
346
+
347
+ <!-- LEDGER RULE -->
348
+ <div class="ledger"></div>
349
+
350
+ <!-- COMPLIANCE BAND -->
351
+ <section class="bg-[#EDE9E1]">
352
+ <div class="max-w-6xl mx-auto px-8 py-10">
353
+ <div class="flex flex-col md:flex-row items-center justify-between gap-6 reveal">
354
+ <div class="font-mono text-[11px] text-[#8A8680] tracking-[0.1em] uppercase">Compliance & certifications</div>
355
+ <div class="flex items-center gap-8 flex-wrap justify-center">
356
+ <span class="font-mono text-[12px] text-[#0F0E0C] font-medium">PCI DSS L1</span>
357
+ <span class="text-[#C8C4BC]">·</span>
358
+ <span class="font-mono text-[12px] text-[#0F0E0C] font-medium">SOC 2 Type II</span>
359
+ <span class="text-[#C8C4BC]">·</span>
360
+ <span class="font-mono text-[12px] text-[#0F0E0C] font-medium">ISO 27001</span>
361
+ <span class="text-[#C8C4BC]">·</span>
362
+ <span class="font-mono text-[12px] text-[#0F0E0C] font-medium">GDPR</span>
363
+ <span class="text-[#C8C4BC]">·</span>
364
+ <span class="font-mono text-[12px] text-[#0F0E0C] font-medium">PSD2</span>
365
+ <span class="text-[#C8C4BC]">·</span>
366
+ <span class="font-mono text-[12px] text-[#0F0E0C] font-medium">MAS TRM</span>
367
+ </div>
368
+ <div class="flex items-center gap-2">
369
+ <div class="w-1.5 h-1.5 rounded-full bg-[#5A9B6A]"></div>
370
+ <span class="font-mono text-[11px] text-[#8A8680]">Operational</span>
371
+ </div>
372
+ </div>
373
+ </div>
374
+ </section>
375
+
376
+ <!-- FINAL CTA -->
377
+ <section class="max-w-6xl mx-auto px-8 py-28">
378
+ <div class="max-w-2xl reveal">
379
+ <div class="font-mono text-[11px] text-[#B8943F] tracking-[0.12em] uppercase mb-6">Get started</div>
380
+ <h2 class="font-display text-[44px] font-medium leading-[1.1] tracking-[-0.02em] mb-8">
381
+ Start accepting<br/>
382
+ payments in a<br/>
383
+ <em class="font-normal text-[#B8943F]">single afternoon.</em>
384
+ </h2>
385
+ <p class="text-[16px] text-[#8A8680] leading-relaxed max-w-[380px] mb-10">
386
+ Free to start. No minimum volume. Full test mode with clock control, fraud simulation, and every card failure case.
387
+ </p>
388
+ <div class="flex items-center gap-4">
389
+ <a href="#" class="cta-sweep font-medium text-[14px] border border-[#0F0E0C] text-[#0F0E0C] px-8 py-4 rounded-[2px] transition-colors duration-300 inline-block">
390
+ Start integrating →
391
+ </a>
392
+ <a href="#" class="cta-sweep font-medium text-[14px] border border-[#C8C4BC] text-[#8A8680] px-8 py-4 rounded-[2px] transition-colors duration-300 inline-block">
393
+ View the docs
394
+ </a>
395
+ </div>
396
+ </div>
397
+ </section>
398
+
399
+ <!-- LEDGER RULE -->
400
+ <div class="ledger"></div>
401
+
402
+ <!-- FOOTER -->
403
+ <footer class="max-w-6xl mx-auto px-8 py-12">
404
+ <div class="grid grid-cols-2 md:grid-cols-5 gap-8 mb-12">
405
+ <div class="col-span-2 md:col-span-1">
406
+ <span class="font-display text-[16px] font-medium tracking-[-0.01em] text-[#0F0E0C] block mb-3">Tender<span class="text-[#B8943F]">.</span></span>
407
+ <p class="text-[12px] text-[#8A8680] leading-relaxed">Payments infrastructure for internet businesses.</p>
408
+ </div>
409
+ <div>
410
+ <div class="font-mono text-[10px] text-[#C8C4BC] uppercase tracking-widest mb-3">Products</div>
411
+ <div class="space-y-2">
412
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Payments</a>
413
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Billing</a>
414
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Connect</a>
415
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Fraud</a>
416
+ </div>
417
+ </div>
418
+ <div>
419
+ <div class="font-mono text-[10px] text-[#C8C4BC] uppercase tracking-widest mb-3">Developers</div>
420
+ <div class="space-y-2">
421
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">API Reference</a>
422
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">SDKs</a>
423
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Webhooks</a>
424
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Changelog</a>
425
+ </div>
426
+ </div>
427
+ <div>
428
+ <div class="font-mono text-[10px] text-[#C8C4BC] uppercase tracking-widest mb-3">Company</div>
429
+ <div class="space-y-2">
430
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">About</a>
431
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Blog</a>
432
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Careers</a>
433
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Status</a>
434
+ </div>
435
+ </div>
436
+ <div>
437
+ <div class="font-mono text-[10px] text-[#C8C4BC] uppercase tracking-widest mb-3">Legal</div>
438
+ <div class="space-y-2">
439
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Privacy</a>
440
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">Terms</a>
441
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">PCI Cert</a>
442
+ <a href="#" class="block text-[12px] text-[#8A8680] hover:text-[#0F0E0C] transition-colors">SOC 2 Report</a>
443
+ </div>
444
+ </div>
445
+ </div>
446
+ <div class="border-t border-[#EDE9E1] pt-6 flex items-center justify-between">
447
+ <span class="font-mono text-[11px] text-[#C8C4BC]">© 2026 Tender Payments Inc. All rights reserved.</span>
448
+ <span class="font-mono text-[11px] text-[#C8C4BC]">PCI DSS L1 · SOC 2 Type II · ISO 27001</span>
449
+ </div>
450
+ </footer>
451
+
452
+ <script>
453
+ // Nav border on scroll
454
+ const nav = document.getElementById('main-nav');
455
+ window.addEventListener('scroll', () => {
456
+ nav.classList.toggle('scrolled', window.scrollY > 10);
457
+ });
458
+
459
+ // Reveal on scroll
460
+ const reveals = document.querySelectorAll('.reveal');
461
+ const observer = new IntersectionObserver((entries) => {
462
+ entries.forEach((entry, i) => {
463
+ if (entry.isIntersecting) {
464
+ setTimeout(() => entry.target.classList.add('visible'), i * 60);
465
+ observer.unobserve(entry.target);
466
+ }
467
+ });
468
+ }, { threshold: 0.1 });
469
+ reveals.forEach(el => observer.observe(el));
470
+
471
+ // First reveal is visible immediately
472
+ if (reveals[0]) reveals[0].classList.add('visible');
473
+ </script>
474
+ </body>
475
+ </html>