betterwithage commited on
Commit
a3d2f4d
·
verified ·
1 Parent(s): a09d9f9

chore(sync): mirror front-door files to Space (hf-sync)

Browse files

Automated front-door sync from szl-holdings/a11oy main via hf-sync.
Added/updated: cathedral.html, console/docs.html, console/index.html, console/pricing.html, console/throne-room.html, console/throne-room.js, pages/api-keys.html, pages/audit.html, pages/ayni.html, pages/brain-dual.html, pages/brain-jack.html, pages/brain.html, pages/chaski.html, pages/codex-kernel.html, pages/company.html, pages/compliance.html, pages/console.html, pages/counter-uas.html, pages/cued-engagement.html, pages/docs.html, pages/evidence.html, pages/gap-report.html, pages/hatun-mcp.html, pages/hub.html, pages/integrations.html, pages/landing.html, pages/mesh.html, pages/observability.html, pages/operator_organ.html, pages/pricing.html, pages/run-all.html, pages/sdk.html, pages/security.html, pages/status.html, pages/substrate.html, pages/superpowers.html, pages/throne-room.html, pages/throne-room.js, pages/uds.html, pages/upgrades.html, pages/wallpa.html, pages/warhacker.html, pages/wasi-rikuq.html, pages/wires.html, static/a11oy_cathedral.js
Deleted (gone from GitHub main): (none)

Keeps the served front-door (pages/*.html, console/*.html) identical
to GitHub main so an HF factory rebuild never drops a GitHub edit or
keeps serving a page that was deleted on GitHub.

Files changed (2) hide show
  1. pages/console.html +129 -0
  2. pages/landing.html +11 -0
pages/console.html CHANGED
@@ -173,6 +173,87 @@ pre.out{font-family:var(--mono);font-size:11.5px;line-height:1.55;color:var(--pa
173
  .content{padding:.85rem .85rem 1.6rem;}
174
  .card{padding:.85rem .9rem;}
175
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
  .menu-btn{display:none;background:none;border:1px solid var(--gold-line);color:var(--gold);border-radius:6px;padding:.2rem .5rem;cursor:pointer;font-family:var(--mono);font-size:11px;}
177
  /* ===== VISUALS =====
178
  Heights use clamp(min, fold-relative, max) so the PRIMARY viz of each tab
@@ -1758,6 +1839,54 @@ function toggleSide(force){
1758
  const mb=document.querySelector('.menu-btn');if(mb)mb.setAttribute('aria-expanded',String(open));
1759
  }
1760
  window.toggleSide=toggleSide;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1761
  /* Expose the VIEWS registry + go() so the additive batch-1 module (a later script block)
1762
  can override VIEWS[tab].render. const bindings do NOT auto-attach to window, so we do it
1763
  explicitly here. This is the single source of truth the batch module mutates in place. */
 
173
  .content{padding:.85rem .85rem 1.6rem;}
174
  .card{padding:.85rem .9rem;}
175
  }
176
+ /* ============ RESPONSIVE HARDENING v2 (2026-06 · VISUAL/LAYOUT ONLY) ============
177
+ Mobile-first polish across phone/tablet/desktop/large display. Additive only —
178
+ no content/doctrine changes. Breakpoints at 480 / 768 / 1024px. */
179
+
180
+ /* (A) GLOBAL OVERFLOW + CANVAS GUARD — every viz canvas/svg fits its container,
181
+ never blows past the viewport or inflates document width. */
182
+ .graph3d canvas,.globe3d canvas,.cyto canvas,.echart canvas,.chartbox canvas,
183
+ .graph3d svg,.globe3d svg,.cyto svg,.echart svg,.chartbox svg,
184
+ .tl-graphbox canvas,.ln-dagbox canvas,.honey canvas{max-width:100%!important;}
185
+ .graph3d,.globe3d,.cyto,.echart,.chartbox,.tl-graphbox,.ln-dagbox{max-width:100%;overflow:hidden;}
186
+ img,svg,canvas,video{max-width:100%;}
187
+
188
+ /* (B) TABLES — wrap every data table in a horizontal-scroll container so a wide
189
+ track-board / formula list / exponent comparator scrolls INSIDE its card and
190
+ never overflows the page. .dtbl tables get a scroll-host via display:block. */
191
+ .tbl-scroll{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;}
192
+ @media (max-width:1024px){
193
+ .card>table,.card .dtbl,table.dtbl{display:block;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;white-space:nowrap;}
194
+ .card>table thead,.card .dtbl thead{white-space:nowrap;}
195
+ }
196
+
197
+ /* (C) FLOATING WIDGET SAFE-AREA — the deploy-injected reliability/Chaski badge
198
+ (#a11oy-rel-badge and any .szl-float widget) must sit inside the safe-area
199
+ inset, shrink on phones, and never sit ON TOP of card content. We reserve
200
+ bottom padding on .content so the last card clears the widget, and add a
201
+ dismissible class hook (.szl-float-hidden) toggled by the JS shim below. */
202
+ #a11oy-rel-badge,.szl-float{
203
+ right:calc(env(safe-area-inset-right,0px) + 12px)!important;
204
+ bottom:calc(env(safe-area-inset-bottom,0px) + 12px)!important;
205
+ z-index:100!important;max-width:calc(100vw - 24px);}
206
+ .szl-float-hidden{display:none!important;}
207
+ .szl-float-dismiss{position:absolute;top:-8px;right:-8px;width:20px;height:20px;line-height:18px;
208
+ text-align:center;border-radius:50%;border:1px solid var(--gold-line);background:var(--panel);
209
+ color:var(--gold);font-family:var(--mono);font-size:12px;cursor:pointer;z-index:1;padding:0;}
210
+ @media (max-width:768px){
211
+ /* shrink badge text + give the scroll content room so it is never permanently hidden */
212
+ #a11oy-rel-badge{font-size:10px!important;padding:.3rem .5rem!important;}
213
+ .content{padding-bottom:4.5rem!important;}
214
+ }
215
+
216
+ /* (D) NAV — collapsible groups + comfortable touch targets on phone/tablet.
217
+ The 50+ tab list becomes a set of tappable section headers; the active group
218
+ and 'Operate' stay open. Nav still scrolls; no dead micro-targets. */
219
+ @media (max-width:1024px){
220
+ .side{padding-bottom:2rem;}
221
+ .nav-group{margin:.5rem .4rem .25rem;padding:.55rem .55rem;cursor:pointer;position:relative;
222
+ border-radius:7px;display:flex;align-items:center;justify-content:space-between;min-height:40px;
223
+ background:var(--gold-soft);border:1px solid var(--gold-line);}
224
+ .nav-group::after{content:'▾';font-size:11px;color:var(--gold);transition:transform .18s;opacity:.8;}
225
+ .nav-group.collapsed::after{transform:rotate(-90deg);}
226
+ .nav-item.nav-hidden{display:none!important;}
227
+ .nav-item{min-height:44px;padding:.7rem .65rem;font-size:14px;}
228
+ .nav-item .ico{font-size:14px;width:18px;}
229
+ }
230
+ @media (max-width:768px){
231
+ /* sidebar drawer: tighter so it is a clear overlay, not ~80% of a small phone.
232
+ It is already position:fixed with a scrim (overlay, not push). */
233
+ .side{width:min(78vw,288px);padding-left:calc(env(safe-area-inset-left,0px) + .7rem);}
234
+ .menu-btn{min-width:44px;min-height:34px;padding:.35rem .6rem;font-size:14px;}
235
+ .topbar{padding-left:calc(env(safe-area-inset-left,0px) + .8rem);
236
+ padding-right:calc(env(safe-area-inset-right,0px) + .8rem);}
237
+ }
238
+
239
+ /* (E) TABLET (768–1024) — two-up KPIs, comfortable cards. */
240
+ @media (min-width:769px) and (max-width:1024px){
241
+ .kpis{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));}
242
+ }
243
+
244
+ /* (F) LANDSCAPE PHONE — short viewport: cap viz height to avoid a tall canvas
245
+ eating the whole fold; keep tap targets. */
246
+ @media (max-height:520px) and (orientation:landscape){
247
+ .graph3d,.graph3d.hero,.graph3d.tall,.globe3d,.cyto{height:min(82vh,300px)!important;}
248
+ .echart,.echart.tall{height:min(72vh,260px)!important;}
249
+ .chartbox,.chartbox.tall{height:min(64vh,220px)!important;}
250
+ }
251
+
252
+ /* (G) LARGE DISPLAY (>=1600px) — keep content readable, don't let it sprawl. */
253
+ @media (min-width:1600px){
254
+ .content{max-width:1500px;margin-left:auto;margin-right:auto;}
255
+ }
256
+ /* ============ END RESPONSIVE HARDENING v2 ============ */
257
  .menu-btn{display:none;background:none;border:1px solid var(--gold-line);color:var(--gold);border-radius:6px;padding:.2rem .5rem;cursor:pointer;font-family:var(--mono);font-size:11px;}
258
  /* ===== VISUALS =====
259
  Heights use clamp(min, fold-relative, max) so the PRIMARY viz of each tab
 
1839
  const mb=document.querySelector('.menu-btn');if(mb)mb.setAttribute('aria-expanded',String(open));
1840
  }
1841
  window.toggleSide=toggleSide;
1842
+ /* ===== RESPONSIVE HARDENING v2 SHIM (VISUAL/LAYOUT ONLY) =====
1843
+ (1) Collapsible nav-groups on touch viewports so the 50+ tab rail is scannable.
1844
+ (2) Defensive hardening of the deploy-injected floating reliability/Chaski badge:
1845
+ add a dismiss control + keep it inside the safe-area. No content changes. */
1846
+ (function szlRespHarden(){
1847
+ var MQ='(max-width:1024px)';
1848
+ function isTouch(){return window.matchMedia&&window.matchMedia(MQ).matches;}
1849
+ function groupItems(g){var out=[],n=g.nextElementSibling;while(n&&!n.classList.contains('nav-group')){if(n.classList.contains('nav-item'))out.push(n);n=n.nextElementSibling;}return out;}
1850
+ function setGroup(g,collapsed){g.classList.toggle('collapsed',collapsed);groupItems(g).forEach(function(it){it.classList.toggle('nav-hidden',collapsed&&isTouch());});}
1851
+ function buildNavCollapse(){
1852
+ var groups=document.querySelectorAll('.side .nav-group');
1853
+ groups.forEach(function(g,i){
1854
+ if(g.dataset.collapseBound)return; g.dataset.collapseBound='1';
1855
+ g.setAttribute('role','button'); g.setAttribute('tabindex','0');
1856
+ // keep the group that holds the active item (and the first group) open by default
1857
+ var hasActive=groupItems(g).some(function(it){return it.classList.contains('active');});
1858
+ var startCollapsed=isTouch()&&i>0&&!hasActive;
1859
+ setGroup(g,startCollapsed);
1860
+ function toggle(){setGroup(g,!g.classList.contains('collapsed'));}
1861
+ g.addEventListener('click',toggle);
1862
+ g.addEventListener('keydown',function(e){if(e.key==='Enter'||e.key===' '){e.preventDefault();toggle();}});
1863
+ });
1864
+ }
1865
+ function syncNavForViewport(){
1866
+ var touch=isTouch();
1867
+ document.querySelectorAll('.side .nav-group').forEach(function(g){
1868
+ if(!touch){groupItems(g).forEach(function(it){it.classList.remove('nav-hidden');});}
1869
+ else{groupItems(g).forEach(function(it){it.classList.toggle('nav-hidden',g.classList.contains('collapsed'));});}
1870
+ });
1871
+ }
1872
+ function hardenFloat(){
1873
+ var b=document.getElementById('a11oy-rel-badge');
1874
+ if(b&&!b.dataset.szlHardened){b.dataset.szlHardened='1';
1875
+ if(getComputedStyle(b).position==='static')b.style.position='fixed';
1876
+ if(!b.querySelector('.szl-float-dismiss')){
1877
+ var x=document.createElement('button');x.className='szl-float-dismiss';x.type='button';
1878
+ x.setAttribute('aria-label','Dismiss reliability badge');x.textContent='×';
1879
+ x.addEventListener('click',function(ev){ev.preventDefault();ev.stopPropagation();b.classList.add('szl-float-hidden');});
1880
+ b.style.position='fixed';b.appendChild(x);
1881
+ }
1882
+ }
1883
+ }
1884
+ function init(){buildNavCollapse();hardenFloat();}
1885
+ if(document.readyState!=='loading')init();else document.addEventListener('DOMContentLoaded',init);
1886
+ // the badge + extra nav items are injected late by deploy/batch scripts — re-run a few times
1887
+ var t=0,iv=setInterval(function(){t++;buildNavCollapse();hardenFloat();if(t>10)clearInterval(iv);},700);
1888
+ var rt;window.addEventListener('resize',function(){clearTimeout(rt);rt=setTimeout(syncNavForViewport,150);});
1889
+ })();
1890
  /* Expose the VIEWS registry + go() so the additive batch-1 module (a later script block)
1891
  can override VIEWS[tab].render. const bindings do NOT auto-attach to window, so we do it
1892
  explicitly here. This is the single source of truth the batch module mutates in place. */
pages/landing.html CHANGED
@@ -129,6 +129,17 @@ a{color:inherit;text-decoration:none;} img,svg{display:block;}
129
  .ds-diff .old{background:var(--panel);} .ds-diff .new{background:var(--panel-2);}
130
  @media (max-width:680px){.ds-diff{grid-template-columns:1fr;}.ds-diff>div:first-child{border-right:0;border-bottom:1px solid var(--hairline);}}
131
  .honest{font-family:var(--mono);font-size:11.5px;color:var(--muted);border-left:2px solid var(--gold-dim);padding-left:12px;margin-top:22px;line-height:1.6;}
 
 
 
 
 
 
 
 
 
 
 
132
  </style>
133
  </head>
134
  <body>
 
129
  .ds-diff .old{background:var(--panel);} .ds-diff .new{background:var(--panel-2);}
130
  @media (max-width:680px){.ds-diff{grid-template-columns:1fr;}.ds-diff>div:first-child{border-right:0;border-bottom:1px solid var(--hairline);}}
131
  .honest{font-family:var(--mono);font-size:11.5px;color:var(--muted);border-left:2px solid var(--gold-dim);padding-left:12px;margin-top:22px;line-height:1.6;}
132
+ /* ===== RESPONSIVE HARDENING v2 (VISUAL/LAYOUT ONLY) ===== */
133
+ /* safe-area for notched phones + media never overflows its container */
134
+ img,svg,canvas,video{max-width:100%;height:auto;}
135
+ .ds-topbar__inner{padding-left:calc(env(safe-area-inset-left,0px) + 24px);padding-right:calc(env(safe-area-inset-right,0px) + 24px);}
136
+ @media (max-width:480px){
137
+ .ds-topbar__inner{height:56px;padding-left:calc(env(safe-area-inset-left,0px) + 16px);padding-right:calc(env(safe-area-inset-right,0px) + 16px);gap:10px;}
138
+ .ds-brand{font-size:15px;gap:8px;}
139
+ .ds-btn{padding:11px 15px;font-size:11.5px;gap:7px;min-height:44px;}
140
+ .ds-hero{padding-top:90px;}
141
+ }
142
+ @media (min-width:1600px){body{} .ds-section,.ds-topbar__inner{margin-left:auto;margin-right:auto;}}
143
  </style>
144
  </head>
145
  <body>