polish: reduced-motion guard + sign-in host greeter (3.3.0)
- prefers-reduced-motion stills the painted scene's float/flicker/bob loops (ptbob/flicker/pulse, gm-bub-float, solbob, life pulse, cursor blink, apb drop, villa twinkle/flicker/wave, scroll reveals) - the elf host greets you with a face-cropped portrait on the sign-in gate Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
39e87dfa6f
commit
33d89c6b4a
@ -17,7 +17,7 @@
|
|||||||
@media (prefers-reduced-motion: reduce) { .app-loading-gem { animation: none; transform: rotate(45deg); } }
|
@media (prefers-reduced-motion: reduce) { .app-loading-gem { animation: none; transform: rotate(45deg); } }
|
||||||
</style>
|
</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="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="3.2.0-pty" />
|
<meta name="version" content="3.3.0-polish" />
|
||||||
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
||||||
<link rel="icon" href="/app-192.png" type="image/png" sizes="192x192" />
|
<link rel="icon" href="/app-192.png" type="image/png" sizes="192x192" />
|
||||||
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "amerc-site",
|
"name": "amerc-site",
|
||||||
"version": "3.2.0-pty",
|
"version": "3.3.0-polish",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@ -12,7 +12,7 @@ import { api } from './api.js';
|
|||||||
const Menu = ({ size = 20 }) => (<svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" aria-hidden="true"><line x1="3" y1="6" x2="21" y2="6" /><line x1="3" y1="12" x2="21" y2="12" /><line x1="3" y1="18" x2="21" y2="18" /></svg>);
|
const Menu = ({ size = 20 }) => (<svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" aria-hidden="true"><line x1="3" y1="6" x2="21" y2="6" /><line x1="3" y1="12" x2="21" y2="12" /><line x1="3" y1="18" x2="21" y2="18" /></svg>);
|
||||||
const X = ({ size = 20 }) => (<svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" aria-hidden="true"><line x1="18" y1="6" x2="6" y2="18" /><line x1="6" y1="6" x2="18" y2="18" /></svg>);
|
const X = ({ size = 20 }) => (<svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" aria-hidden="true"><line x1="18" y1="6" x2="6" y2="18" /><line x1="6" y1="6" x2="18" y2="18" /></svg>);
|
||||||
|
|
||||||
const RELEASE = '3.2.0-pty';
|
const RELEASE = '3.3.0-polish';
|
||||||
|
|
||||||
const NAV = [
|
const NAV = [
|
||||||
{ id: 'home', label: 'Tavern' },
|
{ id: 'home', label: 'Tavern' },
|
||||||
@ -414,7 +414,10 @@ function Gatehouse({ auth, setRoute }) {
|
|||||||
</div>
|
</div>
|
||||||
<div className="gate-form">
|
<div className="gate-form">
|
||||||
<div className="px-board gate-board">
|
<div className="px-board gate-board">
|
||||||
<header className="px-board-head"><span className="px-board-tag">ONE ACCOUNT</span><h2>Welcome, mercenary</h2><p>Log in, or create your account in seconds.</p></header>
|
<header className="px-board-head">
|
||||||
|
<span className="gate-greeter" aria-hidden="true" />
|
||||||
|
<span className="px-board-tag">ONE ACCOUNT</span><h2>Welcome, mercenary</h2><p>The host greets you at the gate — log in, or create your account in seconds.</p>
|
||||||
|
</header>
|
||||||
<AuthPanel auth={auth} onDone={() => setRoute('legion')} />
|
<AuthPanel auth={auth} onDone={() => setRoute('legion')} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -482,6 +485,7 @@ function StatusPage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const CHANGELOG = [
|
const CHANGELOG = [
|
||||||
|
{ v: '3.3', date: 'Jun 2026', title: 'Calmer, and a greeter', notes: ['The painted scene now holds still for anyone who prefers reduced motion', 'The host greets you with a portrait on the sign-in gate'] },
|
||||||
{ v: '3.2', date: 'Jun 2026', title: 'A native web terminal', notes: ['The Web PTY now runs on amerc itself — no relay: it streams the agent’s live terminal and sends your keystrokes (Enter, arrows, Ctrl-C, paste) straight through', 'Open it from a soldier in My Legion (Terminal tab) or from any agent you use'] },
|
{ v: '3.2', date: 'Jun 2026', title: 'A native web terminal', notes: ['The Web PTY now runs on amerc itself — no relay: it streams the agent’s live terminal and sends your keystrokes (Enter, arrows, Ctrl-C, paste) straight through', 'Open it from a soldier in My Legion (Terminal tab) or from any agent you use'] },
|
||||||
{ v: '3.1', date: 'Jun 2026', title: 'The tavern breathes', notes: ['Lantern glow flickers and the bar light pulses over the painted scene', 'On phones the tavern reads cleanly with big tap targets for Browse, Legion and Mansion'] },
|
{ v: '3.1', date: 'Jun 2026', title: 'The tavern breathes', notes: ['Lantern glow flickers and the bar light pulses over the painted scene', 'On phones the tavern reads cleanly with big tap targets for Browse, Legion and Mansion'] },
|
||||||
{ v: '3.0', date: 'Jun 2026', title: 'A painted tavern', notes: ['The home tavern is now a hand-painted scene — an elf host, an orc bartender and a dwarf patron in a lamplit hall — replacing the old pixel tiles', 'Every painted fixture is still a door: the board opens the roster, the barkeep signs you in, the elf pitches the tour, the side passages lead to your Legion and Mansion'] },
|
{ v: '3.0', date: 'Jun 2026', title: 'A painted tavern', notes: ['The home tavern is now a hand-painted scene — an elf host, an orc bartender and a dwarf patron in a lamplit hall — replacing the old pixel tiles', 'Every painted fixture is still a door: the board opens the roster, the barkeep signs you in, the elf pitches the tour, the side passages lead to your Legion and Mansion'] },
|
||||||
|
|||||||
@ -1963,3 +1963,15 @@ button {
|
|||||||
.pty-screen.ro { cursor: default; }
|
.pty-screen.ro { cursor: default; }
|
||||||
.pty-hint { margin: 0; }
|
.pty-hint { margin: 0; }
|
||||||
.pty-hint code { font-size: 11px; }
|
.pty-hint code { font-size: 11px; }
|
||||||
|
|
||||||
|
/* respect reduced-motion: still the painted scene + decorative loops (3.3) */
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
.pt-ch, .pt-elf-wrap, .pt-bub-orc, .pt-bub-dwarf, .pt-glow,
|
||||||
|
.gm-bub-float, .lg-sol.alive .lg-sol-fig, .ch-dot.online, .apb-life.on,
|
||||||
|
.gm-cursor, .apb-merc, .mn-villa-star, .mn-win, .mn-villa-flag i,
|
||||||
|
.cl-item, .reveal { animation: none !important; }
|
||||||
|
.reveal { opacity: 1 !important; transform: none !important; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* painted host greeter on the sign-in gate (3.3) */
|
||||||
|
.gate-greeter { display: block; width: 84px; height: 84px; border-radius: 50%; margin: 0 auto 10px; border: 2px solid #6a5a9a; box-shadow: 0 0 20px rgba(127,233,255,0.32); background-color: #15102a; background-image: url(/scene2d/painted/elf.webp); background-repeat: no-repeat; background-size: 240% auto; background-position: 50% 5%; }
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user