betterwithage Claude Opus 4.7 commited on
Commit
394e14f
·
verified ·
1 Parent(s): 29fb288

deploy(hf): sync szl-holdings/a11oy@main derived COPY set

Browse files

Reusable Dockerfile-COPY-derived deploy from szl-holdings/a11oy main.
Files: 773 Pruned: 0
Derived from Dockerfile COPY sources (NO hand-maintained allowlist).

Signed-off-by: SZL Holdings <noreply@szlholdings.ai>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

a11oy_landing.html CHANGED
@@ -17,10 +17,19 @@
17
  <link rel="icon" href="/social-preview.svg" />
18
  <style>
19
  :root{
20
- --bg:#070b16; --deep:#0a0f1e; --surface:#10161f; --border:#22304a;
21
- --teal:#39d8c8; --teal-soft:#39d8c833; --violet:#6a7bff; --gold:#cda64a;
22
- --ink:#eaf1f7; --sub:#9fb2c9; --ghost:#64768f;
23
- --ok:#39d8c8; --warn:#cda64a; --down:#e06a6a;
 
 
 
 
 
 
 
 
 
24
  --r:16px; --maxw:1180px;
25
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,Helvetica,Arial,sans-serif;
26
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;
@@ -28,9 +37,10 @@
28
  *{box-sizing:border-box}
29
  html,body{margin:0;padding:0}
30
  body{
 
31
  background:
32
- radial-gradient(1200px 700px at 70% -10%, #14213a 0%, transparent 60%),
33
- radial-gradient(900px 600px at 10% 10%, #0d1830 0%, transparent 55%),
34
  var(--bg);
35
  color:var(--ink); font-family:var(--sans); line-height:1.55;
36
  -webkit-font-smoothing:antialiased; overflow-x:hidden;
@@ -42,7 +52,7 @@
42
  /* ---- nav ---- */
43
  header.nav{position:sticky;top:0;z-index:40;
44
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
45
- background:linear-gradient(180deg,#070b16cc,#070b1688);
46
  border-bottom:1px solid var(--border)}
47
  .nav .wrap{display:flex;align-items:center;gap:18px;height:64px}
48
  .brand{display:flex;align-items:center;gap:11px;font-weight:700;letter-spacing:.2px}
@@ -50,42 +60,95 @@
50
  .brand .sub{color:var(--ghost);font-weight:500;font-size:12px;letter-spacing:2px;text-transform:uppercase}
51
  .nav nav{margin-left:auto;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
52
  .nav nav a{padding:8px 13px;border-radius:10px;color:var(--sub);font-size:14px;font-weight:500;transition:.15s}
53
- .nav nav a:hover{color:var(--ink);background:#ffffff0e}
54
- .btn{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border-radius:11px;
55
- font-weight:600;font-size:14px;border:1px solid transparent;cursor:pointer;transition:.15s;white-space:nowrap}
56
- .btn-primary{background:linear-gradient(135deg,var(--teal),#2bb6a8);color:#04130f;
57
- box-shadow:0 6px 24px -8px var(--teal)}
58
- .btn-primary:hover{transform:translateY(-1px);box-shadow:0 10px 30px -8px var(--teal)}
59
- .btn-ghost{border-color:var(--border);color:var(--ink);background:#ffffff08}
60
- .btn-ghost:hover{border-color:var(--teal);color:var(--teal)}
61
- .btn-violet{background:linear-gradient(135deg,var(--violet),#5566e8);color:#fff;
62
- box-shadow:0 6px 24px -8px var(--violet)}
63
- .btn-violet:hover{transform:translateY(-1px);box-shadow:0 10px 30px -8px var(--violet)}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
 
65
  /* ---- hero ---- */
66
  .hero{position:relative;min-height:90vh;display:flex;align-items:center;overflow:hidden}
 
 
67
  #hero-canvas{position:absolute;inset:0;width:100%;height:100%;z-index:0;display:block}
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  .hero-fallback{position:absolute;inset:0;z-index:0;display:none;
69
- background:radial-gradient(600px 600px at 65% 45%, #39d8c81f, transparent 70%)}
70
  .hero .wrap{position:relative;z-index:2;padding-top:48px;padding-bottom:48px}
71
  .hero-inner{max-width:720px}
72
- .eyebrow{display:inline-flex;align-items:center;gap:9px;padding:6px 13px;border-radius:999px;
73
- border:1px solid var(--teal-soft);background:#39d8c812;color:var(--teal);
 
 
74
  font-size:12.5px;font-weight:600;letter-spacing:.4px;margin-bottom:22px}
75
  .eyebrow .dot{width:7px;height:7px;border-radius:50%;background:var(--teal);
76
  box-shadow:0 0 0 0 var(--teal);animation:pulse 2.4s infinite}
77
- @keyframes pulse{0%{box-shadow:0 0 0 0 #39d8c8aa}70%{box-shadow:0 0 0 9px #39d8c800}100%{box-shadow:0 0 0 0 #39d8c800}}
78
- h1.title{font-size:clamp(2.4rem,5.8vw,4.2rem);line-height:1.04;margin:0 0 18px;
79
- font-weight:760;letter-spacing:-1.5px}
80
- h1.title .grad{background:linear-gradient(120deg,var(--teal),var(--violet));
81
- -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
82
- .lede{font-size:clamp(1.06rem,2vw,1.32rem);color:var(--sub);max-width:620px;margin:0 0 28px}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  .lede b{color:var(--ink);font-weight:600}
84
  .cta-row{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:30px}
 
 
85
  .hero-stats{display:flex;gap:14px;flex-wrap:wrap}
86
  .stat{padding:13px 17px;border-radius:13px;border:1px solid var(--border);
87
- background:linear-gradient(180deg,#ffffff0c,#ffffff04);min-width:150px;backdrop-filter:blur(6px)}
88
- .stat .k{font-size:1.55rem;font-weight:720;font-family:var(--mono);line-height:1.1}
 
89
  .stat .l{font-size:11.5px;color:var(--ghost);text-transform:uppercase;letter-spacing:1.1px;margin-top:3px}
90
  .stat .k.teal{color:var(--teal)}
91
 
@@ -100,29 +163,33 @@
100
  @media(max-width:900px){.g3{grid-template-columns:1fr}}
101
 
102
  .card{padding:26px;border-radius:var(--r);border:1px solid var(--border);
103
- background:linear-gradient(180deg,#ffffff0b,#ffffff05);position:relative;overflow:hidden;
104
- display:flex;flex-direction:column}
105
  .card::before{content:"";position:absolute;inset:0;border-radius:var(--r);padding:1px;
106
- background:linear-gradient(135deg,#39d8c855,transparent 40%);
107
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
108
- -webkit-mask-composite:xor;mask-composite:exclude;opacity:.6;pointer-events:none}
109
  .card h3{margin:0 0 8px;font-size:1.18rem;font-weight:700}
110
  .card p{margin:0;color:var(--sub);font-size:.97rem}
 
111
  .card .ic{width:40px;height:40px;border-radius:11px;display:grid;place-items:center;
112
- background:#39d8c815;border:1px solid var(--teal-soft);color:var(--teal);margin-bottom:15px;font-size:19px}
 
113
  .card .golinks{margin-top:auto;display:flex;gap:14px;flex-wrap:wrap;padding-top:16px}
114
  .card a.go{color:var(--teal);font-family:var(--mono);font-size:12.5px}
115
  .card a.go:hover{text-decoration:underline}
116
  .card .num{position:absolute;top:18px;right:22px;font-family:var(--mono);font-size:13px;color:var(--ghost)}
117
 
118
  /* ---- vertical (killinchu) ---- */
119
- .vert{padding:34px;border-radius:var(--r);border:1px solid #6a7bff44;
120
- background:linear-gradient(135deg,#6a7bff14,#ffffff05);position:relative;overflow:hidden;
 
121
  display:grid;grid-template-columns:1.3fr .7fr;gap:26px;align-items:center}
122
  @media(max-width:840px){.vert{grid-template-columns:1fr}}
123
  .vert .pmark{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;
124
  font-family:var(--mono);font-weight:720;font-size:15px;
125
- background:#6a7bff18;border:1px solid #6a7bff44;color:var(--violet);margin-bottom:14px}
 
126
  .vert h3{font-size:1.6rem;font-weight:740;margin:0 0 4px;letter-spacing:-.4px}
127
  .vert .tag{font-size:12px;color:var(--ghost);text-transform:uppercase;letter-spacing:1.4px;margin-bottom:14px}
128
  .vert p{color:var(--sub);margin:0 0 6px;font-size:1.02rem}
@@ -135,15 +202,15 @@
135
  .chip{display:inline-flex;align-items:center;gap:7px;padding:5px 11px;border-radius:999px;
136
  font-size:12px;font-weight:600;font-family:var(--mono);border:1px solid var(--border)}
137
  .chip .dot{width:8px;height:8px;border-radius:50%}
138
- .chip.live{color:var(--ok);border-color:#39d8c855;background:#39d8c810}
139
  .chip.live .dot{background:var(--ok);box-shadow:0 0 8px var(--ok)}
140
- .chip.down{color:var(--down);border-color:#e06a6a55;background:#e06a6a10}
141
  .chip.down .dot{background:var(--down)}
142
 
143
  /* ---- evidence band ---- */
144
  .evidence{display:flex;align-items:center;justify-content:space-between;gap:24px;flex-wrap:wrap;
145
  padding:26px 30px;border-radius:var(--r);border:1px solid var(--border);
146
- background:linear-gradient(180deg,#ffffff09,#ffffff04)}
147
  .evidence .et{max-width:640px}
148
  .evidence h3{margin:0 0 6px;font-size:1.15rem;font-weight:700}
149
  .evidence p{margin:0;color:var(--sub);font-size:.97rem}
@@ -167,7 +234,7 @@
167
  <a class="brand" href="/" aria-label="a11oy home">
168
  <svg width="30" height="30" viewBox="0 0 32 32" fill="none" aria-hidden="true">
169
  <defs><linearGradient id="lg" x1="0" y1="0" x2="1" y2="1">
170
- <stop offset="0" stop-color="#39d8c8"/><stop offset="1" stop-color="#6a7bff"/></linearGradient></defs>
171
  <circle cx="16" cy="16" r="13" stroke="url(#lg)" stroke-width="2"/>
172
  <circle cx="16" cy="16" r="5" fill="url(#lg)"/>
173
  <path d="M16 3v8M16 21v8M3 16h8M21 16h8" stroke="url(#lg)" stroke-width="1.6" opacity=".7"/>
@@ -186,6 +253,8 @@
186
  <!-- ============================ HERO / FLAGSHIP ============================ -->
187
  <section class="hero">
188
  <canvas id="hero-canvas"></canvas>
 
 
189
  <div class="hero-fallback" id="hero-fallback"></div>
190
  <div class="wrap">
191
  <div class="hero-inner">
@@ -273,7 +342,7 @@
273
  </section>
274
 
275
  <!-- ====================== THE ONE VERTICAL: killinchu ====================== -->
276
- <section class="band" style="background:linear-gradient(180deg,#0a0f1e00,#0a0f1e88)">
277
  <div class="wrap">
278
  <p class="kick">The vertical it already runs</p>
279
  <h2>Where governed inference earns its keep.</h2>
 
17
  <link rel="icon" href="/social-preview.svg" />
18
  <style>
19
  :root{
20
+ /* PALETTE (2026-06-30 elegant dark refresh)
21
+ Anthropic/NVIDIA-grade: deep near-black canvas, ONE restrained teal accent,
22
+ violet as secondary. Accent glows softly — never floods. */
23
+ --bg:#05070d; --deep:#070b16; --surface:#0d1220; --border:#1e2d46;
24
+ --teal:#2ec4b6; /* restrained teal — was #39d8c8 (too bright/saturated) */
25
+ --teal-soft:rgba(46,196,182,0.12);
26
+ --teal-dim:rgba(46,196,182,0.06);
27
+ --violet:#5a6de8; /* muted violet — was #6a7bff */
28
+ --gold:#cda64a;
29
+ --ink:#eaf1f7; /* near-white hero text */
30
+ --sub:#b8c4d6; /* body copy — WCAG AA on dark bg */
31
+ --ghost:#64768f;
32
+ --ok:#2ec4b6; --warn:#cda64a; --down:#e06a6a;
33
  --r:16px; --maxw:1180px;
34
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,Helvetica,Arial,sans-serif;
35
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;
 
37
  *{box-sizing:border-box}
38
  html,body{margin:0;padding:0}
39
  body{
40
+ /* Deep near-black base — NO more bright radial gradients that wash the page */
41
  background:
42
+ radial-gradient(ellipse 900px 500px at 75% -5%, #0c1530 0%, transparent 55%),
43
+ radial-gradient(ellipse 700px 400px at 5% 15%, #090e1e 0%, transparent 50%),
44
  var(--bg);
45
  color:var(--ink); font-family:var(--sans); line-height:1.55;
46
  -webkit-font-smoothing:antialiased; overflow-x:hidden;
 
52
  /* ---- nav ---- */
53
  header.nav{position:sticky;top:0;z-index:40;
54
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
55
+ background:linear-gradient(180deg,rgba(5,7,13,0.94),rgba(5,7,13,0.78));
56
  border-bottom:1px solid var(--border)}
57
  .nav .wrap{display:flex;align-items:center;gap:18px;height:64px}
58
  .brand{display:flex;align-items:center;gap:11px;font-weight:700;letter-spacing:.2px}
 
60
  .brand .sub{color:var(--ghost);font-weight:500;font-size:12px;letter-spacing:2px;text-transform:uppercase}
61
  .nav nav{margin-left:auto;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
62
  .nav nav a{padding:8px 13px;border-radius:10px;color:var(--sub);font-size:14px;font-weight:500;transition:.15s}
63
+ .nav nav a:hover{color:var(--ink);background:rgba(255,255,255,0.06)}
64
+
65
+ /* Buttons — elegant, not loud */
66
+ .btn{display:inline-flex;align-items:center;gap:8px;padding:10px 20px;border-radius:9px;
67
+ font-weight:600;font-size:14px;border:1px solid transparent;cursor:pointer;
68
+ transition:all .18s cubic-bezier(0.16,1,0.3,1);white-space:nowrap;letter-spacing:.01em}
69
+ /* Primary: solid teal with dark text — confident, not gradient-gaudy */
70
+ .btn-primary{
71
+ background:var(--teal);color:#03201d;border-color:var(--teal);
72
+ box-shadow:0 0 0 0 rgba(46,196,182,0.0)}
73
+ .btn-primary:hover{
74
+ background:#38d4c7;border-color:#38d4c7;
75
+ box-shadow:0 4px 20px -4px rgba(46,196,182,0.35);
76
+ transform:translateY(-1px)}
77
+ /* Ghost: refined outline */
78
+ .btn-ghost{border-color:var(--border);color:var(--sub);background:rgba(255,255,255,0.04)}
79
+ .btn-ghost:hover{border-color:rgba(46,196,182,0.5);color:var(--teal);background:var(--teal-dim)}
80
+ /* Violet CTA */
81
+ .btn-violet{
82
+ background:var(--violet);color:#fff;border-color:var(--violet);
83
+ box-shadow:0 0 0 0 rgba(90,109,232,0.0)}
84
+ .btn-violet:hover{
85
+ background:#6b7ff0;border-color:#6b7ff0;
86
+ box-shadow:0 4px 20px -4px rgba(90,109,232,0.35);
87
+ transform:translateY(-1px)}
88
 
89
  /* ---- hero ---- */
90
  .hero{position:relative;min-height:90vh;display:flex;align-items:center;overflow:hidden}
91
+
92
+ /* Canvas sits at z-index:0 — renders the holographic mesh */
93
  #hero-canvas{position:absolute;inset:0;width:100%;height:100%;z-index:0;display:block}
94
+
95
+ /* DARK SCRIM: sits BETWEEN canvas (z:0) and text (z:2).
96
+ Ensures the deep near-black dominates even on devices where the canvas is bright.
97
+ On mobile especially this guarantees legibility regardless of WebGL rendering. */
98
+ .hero-scrim{
99
+ position:absolute;inset:0;z-index:1;pointer-events:none;
100
+ /* Radial: keep the glowing core visible at centre-right, crush edges to near-black */
101
+ background:
102
+ radial-gradient(ellipse 65% 70% at 68% 50%, transparent 0%, rgba(5,7,13,0.55) 55%, rgba(5,7,13,0.88) 100%),
103
+ /* Left half where text lives: very dark */
104
+ linear-gradient(to right, rgba(5,7,13,0.82) 0%, rgba(5,7,13,0.50) 45%, rgba(5,7,13,0.15) 100%)
105
+ }
106
+
107
  .hero-fallback{position:absolute;inset:0;z-index:0;display:none;
108
+ background:radial-gradient(600px 600px at 65% 45%, rgba(46,196,182,0.06), transparent 70%)}
109
  .hero .wrap{position:relative;z-index:2;padding-top:48px;padding-bottom:48px}
110
  .hero-inner{max-width:720px}
111
+
112
+ /* Eyebrow pill — subtle, not a glowing mint slab */
113
+ .eyebrow{display:inline-flex;align-items:center;gap:9px;padding:6px 14px;border-radius:999px;
114
+ border:1px solid rgba(46,196,182,0.22);background:rgba(46,196,182,0.06);color:var(--teal);
115
  font-size:12.5px;font-weight:600;letter-spacing:.4px;margin-bottom:22px}
116
  .eyebrow .dot{width:7px;height:7px;border-radius:50%;background:var(--teal);
117
  box-shadow:0 0 0 0 var(--teal);animation:pulse 2.4s infinite}
118
+ @keyframes pulse{
119
+ 0% {box-shadow:0 0 0 0 rgba(46,196,182,0.6)}
120
+ 70% {box-shadow:0 0 0 8px rgba(46,196,182,0.0)}
121
+ 100%{box-shadow:0 0 0 0 rgba(46,196,182,0.0)}
122
+ }
123
+
124
+ /* Hero h1: near-white for plain words, accent ONLY on "signs its work" */
125
+ h1.title{
126
+ font-size:clamp(2.4rem,5.8vw,4.2rem);line-height:1.04;margin:0 0 18px;
127
+ font-weight:760;letter-spacing:-1.5px;
128
+ color:var(--ink); /* #eaf1f7 — high-contrast near-white */
129
+ /* Subtle text shadow to punch through any residual canvas glow */
130
+ text-shadow:0 2px 20px rgba(5,7,13,0.8),0 1px 4px rgba(5,7,13,0.6)
131
+ }
132
+ /* Accent only on the "signs its work" span — teal/violet gradient */
133
+ h1.title .grad{
134
+ background:linear-gradient(110deg, var(--teal) 0%, #7b8ff5 100%);
135
+ -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
136
+ /* Filter drop shadow preserves legibility of gradient text */
137
+ filter:drop-shadow(0 1px 8px rgba(5,7,13,0.7))
138
+ }
139
+
140
+ /* Body: #b8c4d6 — WCAG AA (5.8:1 on #05070d) */
141
+ .lede{font-size:clamp(1.06rem,2vw,1.24rem);color:var(--sub);max-width:600px;margin:0 0 28px;
142
+ text-shadow:0 1px 8px rgba(5,7,13,0.5)}
143
  .lede b{color:var(--ink);font-weight:600}
144
  .cta-row{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:30px}
145
+
146
+ /* Hero stats: frosted dark cards */
147
  .hero-stats{display:flex;gap:14px;flex-wrap:wrap}
148
  .stat{padding:13px 17px;border-radius:13px;border:1px solid var(--border);
149
+ background:rgba(255,255,255,0.04);min-width:150px;
150
+ backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
151
+ .stat .k{font-size:1.55rem;font-weight:720;font-family:var(--mono);line-height:1.1;color:var(--ink)}
152
  .stat .l{font-size:11.5px;color:var(--ghost);text-transform:uppercase;letter-spacing:1.1px;margin-top:3px}
153
  .stat .k.teal{color:var(--teal)}
154
 
 
163
  @media(max-width:900px){.g3{grid-template-columns:1fr}}
164
 
165
  .card{padding:26px;border-radius:var(--r);border:1px solid var(--border);
166
+ background:linear-gradient(180deg,rgba(255,255,255,0.045),rgba(255,255,255,0.018));
167
+ position:relative;overflow:hidden;display:flex;flex-direction:column}
168
  .card::before{content:"";position:absolute;inset:0;border-radius:var(--r);padding:1px;
169
+ background:linear-gradient(135deg,rgba(46,196,182,0.18),transparent 40%);
170
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
171
+ -webkit-mask-composite:xor;mask-composite:exclude;opacity:.5;pointer-events:none}
172
  .card h3{margin:0 0 8px;font-size:1.18rem;font-weight:700}
173
  .card p{margin:0;color:var(--sub);font-size:.97rem}
174
+ /* Icon: no filled circle — use outline approach, less "AI template" */
175
  .card .ic{width:40px;height:40px;border-radius:11px;display:grid;place-items:center;
176
+ background:rgba(46,196,182,0.07);border:1px solid rgba(46,196,182,0.18);
177
+ color:var(--teal);margin-bottom:15px;font-size:19px}
178
  .card .golinks{margin-top:auto;display:flex;gap:14px;flex-wrap:wrap;padding-top:16px}
179
  .card a.go{color:var(--teal);font-family:var(--mono);font-size:12.5px}
180
  .card a.go:hover{text-decoration:underline}
181
  .card .num{position:absolute;top:18px;right:22px;font-family:var(--mono);font-size:13px;color:var(--ghost)}
182
 
183
  /* ---- vertical (killinchu) ---- */
184
+ .vert{padding:34px;border-radius:var(--r);border:1px solid rgba(90,109,232,0.25);
185
+ background:linear-gradient(135deg,rgba(90,109,232,0.07),rgba(255,255,255,0.02));
186
+ position:relative;overflow:hidden;
187
  display:grid;grid-template-columns:1.3fr .7fr;gap:26px;align-items:center}
188
  @media(max-width:840px){.vert{grid-template-columns:1fr}}
189
  .vert .pmark{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;
190
  font-family:var(--mono);font-weight:720;font-size:15px;
191
+ background:rgba(90,109,232,0.10);border:1px solid rgba(90,109,232,0.28);
192
+ color:var(--violet);margin-bottom:14px}
193
  .vert h3{font-size:1.6rem;font-weight:740;margin:0 0 4px;letter-spacing:-.4px}
194
  .vert .tag{font-size:12px;color:var(--ghost);text-transform:uppercase;letter-spacing:1.4px;margin-bottom:14px}
195
  .vert p{color:var(--sub);margin:0 0 6px;font-size:1.02rem}
 
202
  .chip{display:inline-flex;align-items:center;gap:7px;padding:5px 11px;border-radius:999px;
203
  font-size:12px;font-weight:600;font-family:var(--mono);border:1px solid var(--border)}
204
  .chip .dot{width:8px;height:8px;border-radius:50%}
205
+ .chip.live{color:var(--ok);border-color:rgba(46,196,182,0.35);background:rgba(46,196,182,0.06)}
206
  .chip.live .dot{background:var(--ok);box-shadow:0 0 8px var(--ok)}
207
+ .chip.down{color:var(--down);border-color:rgba(224,106,106,0.35);background:rgba(224,106,106,0.06)}
208
  .chip.down .dot{background:var(--down)}
209
 
210
  /* ---- evidence band ---- */
211
  .evidence{display:flex;align-items:center;justify-content:space-between;gap:24px;flex-wrap:wrap;
212
  padding:26px 30px;border-radius:var(--r);border:1px solid var(--border);
213
+ background:linear-gradient(180deg,rgba(255,255,255,0.04),rgba(255,255,255,0.015))}
214
  .evidence .et{max-width:640px}
215
  .evidence h3{margin:0 0 6px;font-size:1.15rem;font-weight:700}
216
  .evidence p{margin:0;color:var(--sub);font-size:.97rem}
 
234
  <a class="brand" href="/" aria-label="a11oy home">
235
  <svg width="30" height="30" viewBox="0 0 32 32" fill="none" aria-hidden="true">
236
  <defs><linearGradient id="lg" x1="0" y1="0" x2="1" y2="1">
237
+ <stop offset="0" stop-color="#2ec4b6"/><stop offset="1" stop-color="#5a6de8"/></linearGradient></defs>
238
  <circle cx="16" cy="16" r="13" stroke="url(#lg)" stroke-width="2"/>
239
  <circle cx="16" cy="16" r="5" fill="url(#lg)"/>
240
  <path d="M16 3v8M16 21v8M3 16h8M21 16h8" stroke="url(#lg)" stroke-width="1.6" opacity=".7"/>
 
253
  <!-- ============================ HERO / FLAGSHIP ============================ -->
254
  <section class="hero">
255
  <canvas id="hero-canvas"></canvas>
256
+ <!-- Dark scrim: sits between canvas and text to guarantee legibility on all devices -->
257
+ <div class="hero-scrim" aria-hidden="true"></div>
258
  <div class="hero-fallback" id="hero-fallback"></div>
259
  <div class="wrap">
260
  <div class="hero-inner">
 
342
  </section>
343
 
344
  <!-- ====================== THE ONE VERTICAL: killinchu ====================== -->
345
+ <section class="band" style="background:linear-gradient(180deg,rgba(10,15,30,0),rgba(10,15,30,0.6))">
346
  <div class="wrap">
347
  <p class="kick">The vertical it already runs</p>
348
  <h2>Where governed inference earns its keep.</h2>
static-vendor/a11oy-operator-widget.js CHANGED
@@ -1,5 +1,5 @@
1
  /* a11oy-operator-widget.js — floating governed-operator widget for SZL surfaces.
2
- * Version: 3.0.0Chaski agent surface, wired to the LIVE a11oy/killinchu
3
  * substrate (real SSE chat + agentic loop + v4 ledger). No character codenames.
4
  *
5
  * The operator widget is a persistent, honest interface to the substrate. It is
@@ -7,8 +7,8 @@
7
  * and surfaces notifications (receipt minted, gate denied, build status,
8
  * doctrine drift). It ROUTES questions to the substrate backends — it has NO
9
  * model of its own — and is HONEST when a backend is unreachable (it never
10
- * fabricates an answer). The agent surface is named "Chaski" (the runner who
11
- * carries the message), per SZL doctrine.
12
  *
13
  * Auto-detection: the widget detects the host organ from the page origin
14
  * (killinchu -> /api/killinchu, otherwise -> /api/a11oy) and calls SAME-ORIGIN
@@ -76,7 +76,7 @@
76
  '<path d="M32 16 L32 48 M16 32 L48 32" stroke="#c9b787" stroke-width="1.4" opacity="0.55"/>' +
77
  '<circle cx="32" cy="32" r="4.5" fill="#c9b787"/>' +
78
  '<text x="32" y="59" font-family="ui-monospace,monospace" font-size="9" fill="#9fb4cc" ' +
79
- 'text-anchor="middle" letter-spacing="1">CHASKI</text></svg>'
80
  );
81
 
82
  // ---- Small DOM helpers ----
@@ -243,7 +243,7 @@
243
  headAvatar,
244
  el('div', { class: 'aow-head-text' }, [
245
  el('span', { class: 'aow-eyebrow', text: 'a11oy operator' }),
246
- el('span', { class: 'aow-head-name', text: 'Chaski \u2014 governed agent surface' }),
247
  ]),
248
  statusEl,
249
  closeBtn,
@@ -261,7 +261,7 @@
261
  onclick: function () { open(); quickAction('verify'); }
262
  });
263
  var qaAgent = el('button', {
264
- class: 'aow-qa-btn', type: 'button', title: 'Run the governed Chaski agentic loop on a task',
265
  text: '\u26A1 Agent',
266
  onclick: function () { open(); quickAction('agent'); }
267
  });
@@ -333,7 +333,7 @@
333
  if (!thread.length) {
334
  var em = el('div', { class: 'aow-empty' });
335
  em.innerHTML =
336
- '<strong>a11oy operator \u2014 Chaski</strong><br>' +
337
  'Ask the substrate anything, or use the buttons above. I route to the live ' +
338
  esc(CFG.organ) + ' backend and stay honest when it is unreachable \u2014 I never fabricate.' +
339
  '<br><br><small style="color:#6b7a96">Surface: <em>' + esc(CFG.surface) + '</em> \u2022 organ: <em>' + esc(CFG.organ) + '</em></small>';
@@ -505,7 +505,7 @@
505
 
506
  } else if (kind === 'agent') {
507
  var task = 'Summarise the governance posture of the ' + CFG.surface + ' surface: what is proven, what is experimental, what is roadmap. Be honest and cite.';
508
- pushMsg('user', '\u26A1 Run Chaski agent: ' + task);
509
  disableQA(true);
510
  runAgent(task, function () { disableQA(false); });
511
 
 
1
  /* a11oy-operator-widget.js — floating governed-operator widget for SZL surfaces.
2
+ * Version: 3.0.1a11oy Code agent surface, wired to the LIVE a11oy/killinchu
3
  * substrate (real SSE chat + agentic loop + v4 ledger). No character codenames.
4
  *
5
  * The operator widget is a persistent, honest interface to the substrate. It is
 
7
  * and surfaces notifications (receipt minted, gate denied, build status,
8
  * doctrine drift). It ROUTES questions to the substrate backends — it has NO
9
  * model of its own — and is HONEST when a backend is unreachable (it never
10
+ * fabricates an answer). The agent surface is branded "a11oy Code" in the UI.
11
+ * Internal codename: Chaski (internal only, not user-visible).
12
  *
13
  * Auto-detection: the widget detects the host organ from the page origin
14
  * (killinchu -> /api/killinchu, otherwise -> /api/a11oy) and calls SAME-ORIGIN
 
76
  '<path d="M32 16 L32 48 M16 32 L48 32" stroke="#c9b787" stroke-width="1.4" opacity="0.55"/>' +
77
  '<circle cx="32" cy="32" r="4.5" fill="#c9b787"/>' +
78
  '<text x="32" y="59" font-family="ui-monospace,monospace" font-size="9" fill="#9fb4cc" ' +
79
+ 'text-anchor="middle" letter-spacing="1">Code</text></svg>'
80
  );
81
 
82
  // ---- Small DOM helpers ----
 
243
  headAvatar,
244
  el('div', { class: 'aow-head-text' }, [
245
  el('span', { class: 'aow-eyebrow', text: 'a11oy operator' }),
246
+ el('span', { class: 'aow-head-name', text: 'a11oy Code \u2014 governed agent surface' }),
247
  ]),
248
  statusEl,
249
  closeBtn,
 
261
  onclick: function () { open(); quickAction('verify'); }
262
  });
263
  var qaAgent = el('button', {
264
+ class: 'aow-qa-btn', type: 'button', title: 'Run the governed a11oy Code agentic loop on a task',
265
  text: '\u26A1 Agent',
266
  onclick: function () { open(); quickAction('agent'); }
267
  });
 
333
  if (!thread.length) {
334
  var em = el('div', { class: 'aow-empty' });
335
  em.innerHTML =
336
+ '<strong>a11oy Code</strong><br>' +
337
  'Ask the substrate anything, or use the buttons above. I route to the live ' +
338
  esc(CFG.organ) + ' backend and stay honest when it is unreachable \u2014 I never fabricate.' +
339
  '<br><br><small style="color:#6b7a96">Surface: <em>' + esc(CFG.surface) + '</em> \u2022 organ: <em>' + esc(CFG.organ) + '</em></small>';
 
505
 
506
  } else if (kind === 'agent') {
507
  var task = 'Summarise the governance posture of the ' + CFG.surface + ' surface: what is proven, what is experimental, what is roadmap. Be honest and cite.';
508
+ pushMsg('user', '\u26A1 Run a11oy Code agent: ' + task);
509
  disableQA(true);
510
  runAgent(task, function () { disableQA(false); });
511
 
static/a11oy_landing.js CHANGED
@@ -17,7 +17,18 @@
17
  *
18
  * PERF: capped DPR, instanced points (single draw call), 60fps target. Honors
19
  * prefers-reduced-motion (renders one static frame) and downshifts particle count
20
- * on small / low-DPR devices. Signed-off-by: Stephen P. Lutar Jr.
 
 
 
 
 
 
 
 
 
 
 
21
  * ========================================================================== */
22
  import * as THREE from "three";
23
 
@@ -26,9 +37,10 @@ const REDUCED = window.matchMedia &&
26
  const MOBILE = Math.min(window.innerWidth, window.innerHeight) < 720 ||
27
  /Mobi|Android/i.test(navigator.userAgent);
28
 
29
- const TEAL = new THREE.Color(0x39d8c8);
30
- const DEEP = new THREE.Color(0x6a7bff);
31
- const DIM = new THREE.Color(0x1b2740);
 
32
 
33
  export function mountHero(canvas) {
34
  let renderer;
@@ -43,7 +55,7 @@ export function mountHero(canvas) {
43
 
44
  const DPR = Math.min(window.devicePixelRatio || 1, MOBILE ? 1.5 : 2);
45
  renderer.setPixelRatio(DPR);
46
- renderer.setClearColor(0x000000, 0);
47
 
48
  const scene = new THREE.Scene();
49
  const camera = new THREE.PerspectiveCamera(46, 1, 0.1, 100);
@@ -85,20 +97,22 @@ export function mountHero(canvas) {
85
  uniform vec3 uTeal; uniform vec3 uDeep;
86
  void main(){
87
  float fres = pow(1.0 - max(dot(normalize(vN), normalize(vView)), 0.0), 2.4);
88
- // Λ-pulse: the shell brightens toward the advisory ceiling, never to 1.0
89
  float pulse = 0.5 + 0.5*sin(uTime*1.6);
90
- float glow = fres * (0.55 + 0.45*pulse) * uLambda;
 
91
  vec3 col = mix(uDeep, uTeal, fres);
92
- gl_FragColor = vec4(col * glow, clamp(glow,0.0,0.92));
 
93
  }`,
94
  });
95
  const core = new THREE.Mesh(coreGeo, coreMat);
96
  root.add(core);
97
 
98
- // wire lattice over the core (deny-by-default cage)
99
  const cage = new THREE.LineSegments(
100
  new THREE.EdgesGeometry(new THREE.IcosahedronGeometry(1.62, 1)),
101
- new THREE.LineBasicMaterial({ color: 0x39d8c8, transparent: true, opacity: 0.18 })
102
  );
103
  root.add(cage);
104
 
@@ -166,18 +180,20 @@ export function mountHero(canvas) {
166
  if (d > 0.5) discard;
167
  float a = smoothstep(0.5, 0.0, d);
168
  vec3 col = mix(uDim, uTeal, vGate) * (vGate>0.5 ? vTw : 0.5);
169
- gl_FragColor = vec4(col, a * (vGate>0.5 ? 0.95 : 0.4));
 
170
  }`,
171
  });
172
  const points = new THREE.Points(pGeo, pMat);
173
  root.add(points);
174
 
175
- // ---- soft additive halo sprite (fake bloom, no postprocessing) -----------
 
176
  const halo = new THREE.Sprite(new THREE.SpriteMaterial({
177
  map: makeHaloTexture(), transparent: true, blending: THREE.AdditiveBlending,
178
- depthWrite: false, opacity: 0.55, color: 0x39d8c8,
179
  }));
180
- halo.scale.set(9, 9, 1);
181
  scene.add(halo);
182
 
183
  // ---- resize ---------------------------------------------------------------
@@ -237,15 +253,16 @@ export function mountHero(canvas) {
237
  }
238
 
239
  // radial-gradient halo texture, built in-canvas (no asset, no CDN)
 
240
  function makeHaloTexture() {
241
  const s = 256;
242
  const c = document.createElement("canvas");
243
  c.width = c.height = s;
244
  const g = c.getContext("2d");
245
  const grad = g.createRadialGradient(s/2, s/2, 0, s/2, s/2, s/2);
246
- grad.addColorStop(0.0, "rgba(57,216,200,0.55)");
247
- grad.addColorStop(0.25, "rgba(57,216,200,0.18)");
248
- grad.addColorStop(1.0, "rgba(57,216,200,0.0)");
249
  g.fillStyle = grad;
250
  g.fillRect(0, 0, s, s);
251
  const tex = new THREE.CanvasTexture(c);
 
17
  *
18
  * PERF: capped DPR, instanced points (single draw call), 60fps target. Honors
19
  * prefers-reduced-motion (renders one static frame) and downshifts particle count
20
+ * on small / low-DPR devices.
21
+ *
22
+ * VISUAL FIX (2026-06-30): Tamed the canvas from blinding-cyan flood to a
23
+ * restrained, elegant dark field. Key changes:
24
+ * - Core glow opacity: clamped to 0.40 max (was 0.92) — whispers, doesn't shout
25
+ * - Halo sprite: opacity 0.10 (was 0.55), scale 7×7 (was 9×9)
26
+ * - Particle alpha: gate-pass 0.45 (was 0.95), denied 0.18 (was 0.40)
27
+ * - Canvas renderer alpha: transparent over deep near-black page bg (#05070d)
28
+ * - Colors desaturated: teal at 30% brightness, dim at near-black for particles
29
+ * - Net effect: holographic mesh whispers on deep dark, never floods
30
+ *
31
+ * Signed-off-by: Stephen P. Lutar Jr. <stephenlutar2@gmail.com>
32
  * ========================================================================== */
33
  import * as THREE from "three";
34
 
 
37
  const MOBILE = Math.min(window.innerWidth, window.innerHeight) < 720 ||
38
  /Mobi|Android/i.test(navigator.userAgent);
39
 
40
+ // Desaturated, restrained palette — hairlines on near-black, not bright floods
41
+ const TEAL = new THREE.Color(0x1a6b63); // deep teal — was 0x39d8c8 (too bright)
42
+ const DEEP = new THREE.Color(0x2a3578); // muted violet — was 0x6a7bff (too bright)
43
+ const DIM = new THREE.Color(0x0a0f1c); // near-black for denied particles
44
 
45
  export function mountHero(canvas) {
46
  let renderer;
 
55
 
56
  const DPR = Math.min(window.devicePixelRatio || 1, MOBILE ? 1.5 : 2);
57
  renderer.setPixelRatio(DPR);
58
+ renderer.setClearColor(0x000000, 0); // fully transparent — page bg shows through
59
 
60
  const scene = new THREE.Scene();
61
  const camera = new THREE.PerspectiveCamera(46, 1, 0.1, 100);
 
97
  uniform vec3 uTeal; uniform vec3 uDeep;
98
  void main(){
99
  float fres = pow(1.0 - max(dot(normalize(vN), normalize(vView)), 0.0), 2.4);
100
+ // Λ-pulse: the shell breathes gently restrained, not flooding
101
  float pulse = 0.5 + 0.5*sin(uTime*1.6);
102
+ // TAMED: glow multiplier capped elegant whisper, not a bright flood
103
+ float glow = fres * (0.28 + 0.18*pulse) * uLambda;
104
  vec3 col = mix(uDeep, uTeal, fres);
105
+ // max alpha 0.40 — ensures the dark page bg always dominates
106
+ gl_FragColor = vec4(col * glow, clamp(glow,0.0,0.40));
107
  }`,
108
  });
109
  const core = new THREE.Mesh(coreGeo, coreMat);
110
  root.add(core);
111
 
112
+ // wire lattice over the core (deny-by-default cage) — very dim hairlines
113
  const cage = new THREE.LineSegments(
114
  new THREE.EdgesGeometry(new THREE.IcosahedronGeometry(1.62, 1)),
115
+ new THREE.LineBasicMaterial({ color: 0x1a4a46, transparent: true, opacity: 0.14 })
116
  );
117
  root.add(cage);
118
 
 
180
  if (d > 0.5) discard;
181
  float a = smoothstep(0.5, 0.0, d);
182
  vec3 col = mix(uDim, uTeal, vGate) * (vGate>0.5 ? vTw : 0.5);
183
+ // TAMED: max alpha 0.45 gate-pass, 0.18 denied — subtle field on dark bg
184
+ gl_FragColor = vec4(col, a * (vGate>0.5 ? 0.45 : 0.18));
185
  }`,
186
  });
187
  const points = new THREE.Points(pGeo, pMat);
188
  root.add(points);
189
 
190
+ // ---- soft additive halo sprite (fake bloom) very restrained -----------
191
+ // TAMED: opacity 0.10 (was 0.55), scale 7×7 (was 9×9) — barely perceptible glow
192
  const halo = new THREE.Sprite(new THREE.SpriteMaterial({
193
  map: makeHaloTexture(), transparent: true, blending: THREE.AdditiveBlending,
194
+ depthWrite: false, opacity: 0.10, color: 0x1a6b63,
195
  }));
196
+ halo.scale.set(7, 7, 1);
197
  scene.add(halo);
198
 
199
  // ---- resize ---------------------------------------------------------------
 
253
  }
254
 
255
  // radial-gradient halo texture, built in-canvas (no asset, no CDN)
256
+ // TAMED: core stop 0.18 (was 0.55) — barely-visible glow ring on dark bg
257
  function makeHaloTexture() {
258
  const s = 256;
259
  const c = document.createElement("canvas");
260
  c.width = c.height = s;
261
  const g = c.getContext("2d");
262
  const grad = g.createRadialGradient(s/2, s/2, 0, s/2, s/2, s/2);
263
+ grad.addColorStop(0.0, "rgba(26,107,99,0.18)"); // was rgba(57,216,200,0.55)
264
+ grad.addColorStop(0.25, "rgba(26,107,99,0.06)"); // was rgba(57,216,200,0.18)
265
+ grad.addColorStop(1.0, "rgba(26,107,99,0.0)");
266
  g.fillStyle = grad;
267
  g.fillRect(0, 0, s, s);
268
  const tex = new THREE.CanvasTexture(c);