Spaces:
Running
chore(sync): mirror front-door files to Space (hf-sync)
Browse filesAutomated 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.
- pages/console.html +129 -0
- pages/landing.html +11 -0
|
@@ -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. */
|
|
@@ -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>
|