/* Console 2.0 — Verdict cluster: floating bottom-center, the app's main control. ▽ perturb · ↺ undo · △ commit, + A/B toggle. Long-press perturb = full re-roll. Rests at low opacity, full on hover. */ function ThumbIcon({ size = 24, down = false }) { // Minimal line-icon thumb, hairline stroke in currentColor. return ( ); } window.ThumbIcon = ThumbIcon; function VerdictCluster({ onPerturb, onUndo, onCommit, onReroll, canUndo, ab, onToggleAB, onHoldA, firstSession }) { const [hover, setHover] = React.useState(false); const lp = React.useRef(null); const firedReroll = React.useRef(false); const perturbDown = () => { firedReroll.current = false; lp.current = setTimeout(() => { firedReroll.current = true; onReroll(); }, 600); }; const perturbUp = () => { clearTimeout(lp.current); if (!firedReroll.current) onPerturb(); }; const big = (extra) => ({ width: 64, height: 64, borderRadius: '50%', fontSize: 26, cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', fontFamily: 'var(--font-mono)', border: '1px solid var(--glass-line)', transition: 'transform var(--dur-fast) var(--ease-console), background var(--dur-fast)', ...extra, }); return (
setHover(true)} onPointerLeave={() => setHover(false)} style={{ position: 'absolute', bottom: 28, left: '50%', transform: 'translateX(-50%)', display: 'flex', alignItems: 'center', gap: 'var(--sp-3)', padding: 'var(--sp-2) var(--sp-3)', background: 'var(--glass)', backdropFilter: 'blur(14px)', WebkitBackdropFilter: 'blur(14px)', border: '1px solid var(--glass-line)', borderRadius: 'var(--r-pill)', boxShadow: 'var(--shadow-2)', opacity: hover || firstSession ? 1 : 0.55, transition: 'opacity var(--dur-med) var(--ease-console)', zIndex: 40, }} >
onHoldA(true)} onPointerUp={() => onHoldA(false)} onPointerLeave={() => onHoldA(false)} onClick={onToggleAB} style={{ display: 'flex', borderRadius: 'var(--r-pill)', overflow: 'hidden', border: '1px solid var(--glass-line)', cursor: 'pointer', userSelect: 'none' }}> {['A', 'B'].map((k) => ( {k} ))}
); } window.VerdictCluster = VerdictCluster;