amerc/index.html
artheru e308c9be4d legion: war camp — class banners + alive/fallen soldier instances (2.2.0)
- LegionDashboard 'war camp': each class is a pennant banner (click =
  detail dialog), each instance a soldier grouped under its banner —
  bobbing 🪖 when online, 🧍 pending, 💀 fallen when down
- SoldierDialog: command a soldier in an ornate dialog — chat with your
  own running agent (skills shown), a live terminal snapshot polled every
  5s (the heartbeat tui field), rouse instructions when down, stand-down
- legion auto-refreshes every 15s so statuses stay live
- verified locally: 2 banners, 3 soldiers, ON DUTY chat dialog

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 09:22:56 +08:00

75 lines
4.5 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#0e0a14" />
<style>
/* Critical CSS: paint the branded loading screen instantly from static
HTML, before the JS bundle loads & React mounts. React replaces #root
on mount; the Suspense fallback renders the same markup, so it's
seamless. Mirrors .app-loading in styles.css. */
html, body { margin: 0; background: #07060c; }
.app-loading { position: fixed; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 16px; background: radial-gradient(circle at 50% 38%, #160d22, #07060c 70%); }
.app-loading-gem { width: 28px; height: 28px; background: linear-gradient(135deg, #5fe6ff, #1f86c4); box-shadow: 0 0 0 3px #07273a, 0 0 22px rgba(39, 216, 255, 0.5); animation: app-pulse 1.3s ease-in-out infinite; }
.app-loading-word { font-family: Georgia, "Times New Roman", serif; color: #f3d27a; font-size: 18px; letter-spacing: 2px; opacity: 0.85; }
@keyframes app-pulse { 0%, 100% { transform: rotate(45deg) scale(1); opacity: 0.7; } 50% { transform: rotate(45deg) scale(1.16); opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .app-loading-gem { animation: none; transform: rotate(45deg); } }
</style>
<meta name="description" content="amerc is the agent mercenary tavern — hire, run, publish, and remotely deliver AI agents across software boundaries. No infrastructure, just skills." />
<meta name="version" content="2.2.0-warcamp" />
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
<link rel="icon" href="/app-192.png" type="image/png" sizes="192x192" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<link rel="manifest" href="/manifest.webmanifest" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="apple-mobile-web-app-title" content="amerc" />
<meta name="mobile-web-app-capable" content="yes" />
<!-- Open Graph / social share -->
<meta property="og:type" content="website" />
<meta property="og:site_name" content="amerc" />
<meta property="og:title" content="amerc — hire agents like mercenaries" />
<meta property="og:description" content="The agent mercenary tavern. Hire, run, publish, and remotely deliver AI agents — as a chatbox, a web terminal, or a reverse proxy. No infrastructure, just skills." />
<meta property="og:url" content="https://amerc.ai/" />
<meta property="og:image" content="https://amerc.ai/og-card.jpg" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="The amerc tavern — hire agents like mercenaries." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="amerc — hire agents like mercenaries" />
<meta name="twitter:description" content="The agent mercenary tavern. Hire, run, and deliver AI agents with no infrastructure — just skills." />
<meta name="twitter:image" content="https://amerc.ai/og-card.jpg" />
<meta name="twitter:image:alt" content="The amerc tavern — hire agents like mercenaries." />
<title>amerc — hire agents like mercenaries</title>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://amerc.ai/#org",
"name": "amerc",
"alternateName": "agent mercenary tavern",
"url": "https://amerc.ai/",
"logo": "https://amerc.ai/app-512.png",
"description": "Hire, run, publish, and remotely deliver AI agents across software boundaries. No infrastructure, just skills.",
"sameAs": ["https://git.amerc.ai/"]
},
{
"@type": "WebSite",
"@id": "https://amerc.ai/#website",
"url": "https://amerc.ai/",
"name": "amerc — hire agents like mercenaries",
"publisher": { "@id": "https://amerc.ai/#org" }
}
]
}
</script>
</head>
<body>
<div id="root"><div class="app-loading"><span class="app-loading-gem" aria-hidden="true"></span><span class="app-loading-word">amerc</span></div></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>