front-end-sample / TicketUI_general.txt
algorembrant's picture
Upload 2 files
d579b78 verified
import { useState, useEffect, useRef } from "react";
/* ============================================================
TICKETPUNCH UI β€” Complete Cyberpunk Design System
Font: IBM Plex Mono | Palette: Dark / White / Gold / Red / Peach
============================================================ */
const FontInjector = () => (
<style>{`
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&display=swap');
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
/* ── DARK ── */
--d-900: #060606;
--d-800: #0A0A0A;
--d-700: #0f0f0f;
--d-600: #1e1e1e;
--d-500: #2a2a2a;
/* ── WHITE ── */
--w-100: #FFFFFF;
--w-200: #EFEFEF;
--w-300: #CDCDCD;
--w-400: #AAAAAA;
--w-500: #888888;
/* ── GOLD ── */
--g-100: #FFF4CC;
--g-300: #FFD700;
--g-500: #C8960C;
--g-700: #7A5800;
--g-900: #3D2C00;
/* ── RED ── */
--r-100: #FFE5E5;
--r-300: #FF6666;
--r-500: #FF3333;
--r-700: #CC0000;
--r-900: #550000;
/* ── PEACH ── */
--p-100: #FFF0EB;
--p-300: #FFBFA8;
--p-500: #FF8C69;
--p-700: #C45A35;
--p-900: #5C2010;
/* ── SEMANTIC ALIASES ── */
--bg: var(--d-900);
--surface: var(--d-800);
--header: var(--d-700);
--border-1: var(--d-600);
--border-2: var(--d-500);
--text-primary: var(--w-100);
--text-6: #383838;
--font: 'IBM Plex Mono', monospace;
--tooth: 9px;
}
body { background: var(--bg); color: var(--text-primary); font-family: var(--font); }
::-webkit-scrollbar { width: 4px; }
::-webkit-scrollbar-track { background: var(--bg); }
::-webkit-scrollbar-thumb { background: var(--border-2); }
@keyframes pulse-dot { 0%,100%{opacity:1} 50%{opacity:0.2} }
@keyframes scroll-up { 0%{transform:translateY(0)} 100%{transform:translateY(-50%)} }
@keyframes spin-slow { from{transform:rotate(0deg)} to{transform:rotate(360deg)} }
@keyframes progress-fill { from{width:0} to{width:var(--fill)} }
@keyframes toast-in { from{transform:translateX(120%);opacity:0} to{transform:translateX(0);opacity:1} }
.pulse-anim { animation: pulse-dot 1400ms ease-in-out infinite; }
.scroll-anim { animation: scroll-up 12s linear infinite; }
.spin-slow { animation: spin-slow 8s linear infinite; }
.toast-anim { animation: toast-in 0.3s ease forwards; }
.punched-frame { position: relative; }
.punched-frame::before,
.punched-frame::after {
content: '';
position: absolute;
left: 0; right: 0;
height: var(--tooth);
z-index: 20;
pointer-events: none;
background: repeating-linear-gradient(
90deg,
transparent 0px, transparent 8px,
var(--bg) 8px, var(--bg) 18px
);
}
.punched-frame::before { top: 0; }
.punched-frame::after { bottom: 0; }
`}</style>
);
const GrainOverlay = ({ strength = 0.18 }) => {
const canvasRef = useRef(null);
useEffect(() => {
const canvas = canvasRef.current;
if (!canvas) return;
const ctx = canvas.getContext("2d");
const W = 256, H = 256;
canvas.width = W; canvas.height = H;
const imageData = ctx.createImageData(W, H);
const data = imageData.data;
for (let i = 0; i < data.length; i += 4) {
const v = (Math.random() * 255) | 0;
data[i] = data[i+1] = data[i+2] = v;
data[i+3] = (strength * 255) | 0;
}
ctx.putImageData(imageData, 0, 0);
}, [strength]);
return (
<canvas ref={canvasRef} style={{
position:"absolute", inset:0, width:"100%", height:"100%",
pointerEvents:"none", mixBlendMode:"overlay", opacity:0.9, zIndex:5
}}/>
);
};
const GeometricOverlay = () => (
<svg style={{ position:"absolute", inset:0, width:"100%", height:"100%", pointerEvents:"none", zIndex:4, opacity:0.07 }} preserveAspectRatio="xMidYMid slice">
<defs>
<pattern id="lattice" width="32" height="32" patternUnits="userSpaceOnUse">
<path d="M 32 0 L 0 0 0 32" fill="none" stroke="white" strokeWidth="0.5"/>
<circle cx="0" cy="0" r="1" fill="white" opacity="0.5"/>
</pattern>
</defs>
<rect width="100%" height="100%" fill="url(#lattice)"/>
<circle cx="50%" cy="50%" r="80" fill="none" stroke="white" strokeWidth="0.5"/>
<circle cx="50%" cy="50%" r="140" fill="none" stroke="white" strokeWidth="0.3"/>
<line x1="50%" y1="0" x2="50%" y2="100%" stroke="white" strokeWidth="0.3"/>
<line x1="0" y1="50%" x2="100%" y2="50%" stroke="white" strokeWidth="0.3"/>
<polygon points="50%,10% 90%,90% 10%,90%" fill="none" stroke="white" strokeWidth="0.4" opacity="0.5"/>
</svg>
);
const PunchHoles = () => (
<>
{[{top:"3px",left:"4px"},{top:"3px",right:"4px"},{bottom:"3px",left:"4px"},{bottom:"3px",right:"4px"}].map((pos,i) => (
<div key={i} style={{
position:"absolute", ...pos, width:9, height:9, borderRadius:"50%",
background:"radial-gradient(circle, var(--bg) 4px, transparent 4px)",
border:"1px solid var(--d-500)", zIndex:25, pointerEvents:"none",
}}/>
))}
</>
);
const Punched = ({ children, style={}, className="" }) => (
<div className={`punched-frame ${className}`} style={{ position:"relative", ...style }}>
<PunchHoles/>
{children}
</div>
);
const TicketShell = ({ children, stubHeight=60, style={} }) => (
<Punched style={style}>
<div style={{ background:"var(--surface)", border:"1px solid var(--border-1)",
boxShadow:"0 40px 100px rgba(0,0,0,0.95)", position:"relative", overflow:"hidden" }}>
<svg style={{ position:"absolute", inset:0, width:"100%", height:"100%", pointerEvents:"none", zIndex:6 }}>
<rect x="8" y="8" width="calc(100% - 16px)" height="calc(100% - 16px)"
fill="none" stroke="var(--d-500)" strokeWidth="1" strokeDasharray="4 3"/>
</svg>
<GrainOverlay/>
<GeometricOverlay/>
{stubHeight > 0 && (
<div style={{ position:"absolute", bottom:stubHeight, left:0, right:0, zIndex:8,
borderTop:"1px dashed var(--border-2)", display:"flex", alignItems:"center", justifyContent:"center" }}>
<span style={{ background:"var(--surface)", padding:"0 8px", fontSize:7, color:"var(--w-500)",
letterSpacing:"0.2em", fontFamily:"var(--font)" }}>βœ‚ TEAR</span>
</div>
)}
{children}
</div>
</Punched>
);
const Barcode = ({ value="OMEGA-7749-XX", width=120, height=28 }) => {
const bars = [];
for (let i = 0; i < 48; i++)
bars.push({ x: i*(width/48), w: Math.random()>0.5?1.5:0.8, o: 0.4+Math.random()*0.6 });
return (
<div style={{ display:"flex", flexDirection:"column", alignItems:"center", gap:2 }}>
<svg width={width} height={height} style={{ display:"block" }}>
{bars.map((b,i) => <rect key={i} x={b.x} y={0} width={b.w} height={height} fill="var(--w-300)" opacity={b.o}/>)}
</svg>
<span style={{ fontSize:6, letterSpacing:"0.28em", color:"var(--w-500)", fontFamily:"var(--font)", textTransform:"uppercase" }}>{value}</span>
</div>
);
};
const StatusPill = ({ status="active", label, pulse=true }) => {
const colors = {
active: "var(--g-300)",
inactive: "var(--w-500)",
warning: "var(--p-500)",
danger: "var(--r-500)",
pending: "var(--g-100)",
};
const color = colors[status] || colors.active;
return (
<div style={{ display:"inline-flex", alignItems:"center", gap:6, padding:"3px 8px",
border:`1px solid ${color}33`, background:`${color}0d`, borderRadius:2 }}>
<div className={pulse?"pulse-anim":""} style={{ width:5, height:5, borderRadius:"50%",
background:color, boxShadow:`0 0 6px ${color}` }}/>
<span style={{ fontSize:8, letterSpacing:"0.28em", color, fontFamily:"var(--font)", textTransform:"uppercase" }}>
{label || status}
</span>
</div>
);
};
const TerminalMask = ({ lines=[], size=120 }) => {
const defaultLines = [
"CLASSIFIED // OMEGA PROTOCOL","ACCESS GRANTED β€” NEXUS-7","THREAT LEVEL: CRITICAL",
"SYNC: 99.7% COMPLETE","FIREWALL: ACTIVE","ENCRYPTION: AES-512",
"NODE: 192.168.0.77","UPTIME: 847:22:11","AGENT: SPECTRE-9","STATUS: OPERATIONAL",...lines
];
const doubled = [...defaultLines, ...defaultLines];
return (
<div style={{ width:size, height:size, borderRadius:"50%", overflow:"hidden", position:"relative",
border:"1px solid var(--d-500)", background:"var(--bg)",
boxShadow:"inset 0 0 20px rgba(0,0,0,0.8), 0 0 20px rgba(0,0,0,0.6)" }}>
<div className="scroll-anim" style={{ position:"absolute", width:"100%", paddingTop:8 }}>
{doubled.map((line,i) => (
<div key={i} style={{ padding:"1.5px 8px", fontSize:6.5, letterSpacing:"0.18em",
color: i%3===0 ? "var(--g-300)" : "var(--w-500)",
fontFamily:"var(--font)", textTransform:"uppercase", whiteSpace:"nowrap", overflow:"hidden" }}>{line}</div>
))}
</div>
<div style={{ position:"absolute", inset:0, borderRadius:"50%",
background:"radial-gradient(circle, transparent 40%, var(--bg) 80%)", pointerEvents:"none" }}/>
</div>
);
};
const Divider = ({ label }) => (
<div style={{ display:"flex", alignItems:"center", gap:10, padding:"4px 0" }}>
<div style={{ flex:1, height:1, background:"var(--border-1)" }}/>
{label
? <span style={{ fontSize:7, letterSpacing:"0.28em", color:"var(--w-500)", textTransform:"uppercase", fontFamily:"var(--font)" }}>{label}</span>
: <svg width="8" height="8"><polygon points="4,0 8,4 4,8 0,4" fill="var(--d-500)"/></svg>
}
<div style={{ flex:1, height:1, background:"var(--border-1)" }}/>
</div>
);
const SectionLabel = ({ children, sub }) => (
<div style={{ marginBottom:20 }}>
<div style={{ display:"flex", alignItems:"center", gap:8 }}>
<div style={{ width:2, height:14, background:"var(--g-300)" }}/>
<span style={{ fontSize:9.5, fontWeight:700, letterSpacing:"0.34em", textTransform:"uppercase",
fontFamily:"var(--font)", color:"var(--w-100)" }}>{children}</span>
</div>
{sub && <div style={{ marginTop:4, marginLeft:10, fontSize:7, letterSpacing:"0.2em",
color:"var(--g-700)", textTransform:"uppercase", fontFamily:"var(--font)" }}>{sub}</div>}
</div>
);
const Micro = ({ children, color="var(--text-6)" }) => (
<span style={{ fontSize:7, letterSpacing:"0.28em", color, fontFamily:"var(--font)", textTransform:"uppercase" }}>{children}</span>
);
// ── 1. HEADER ──────────────────────────────────────────────────
const Header = ({ activeTab, setActiveTab }) => {
const navItems = ["DASHBOARD","INTEL","ASSETS","COMMS","SYSTEM"];
return (
<Punched style={{ zIndex:100 }}>
<div style={{ position:"relative", background:"var(--header)", borderBottom:"1px solid var(--border-1)",
height:52, display:"flex", alignItems:"center", padding:"0 24px", gap:24, overflow:"hidden" }}>
<GrainOverlay strength={0.1}/>
<div style={{ display:"flex", alignItems:"center", gap:10, zIndex:7 }}>
<svg width="18" height="18" viewBox="0 0 18 18">
<polygon points="9,1 17,5 17,13 9,17 1,13 1,5" fill="none" stroke="var(--g-300)" strokeWidth="1.5"/>
<polygon points="9,5 13,7 13,11 9,13 5,11 5,7" fill="var(--g-500)" opacity="0.3"/>
<circle cx="9" cy="9" r="2" fill="var(--g-300)"/>
</svg>
<div>
<div style={{ fontSize:11, fontWeight:700, letterSpacing:"0.22em", textTransform:"uppercase",
fontFamily:"var(--font)", color:"var(--w-100)" }}>NEXUS</div>
<div style={{ fontSize:6.5, letterSpacing:"0.34em", color:"var(--g-500)", textTransform:"uppercase", fontFamily:"var(--font)" }}>OMEGA PROTOCOL</div>
</div>
</div>
<div style={{ width:1, height:28, background:"var(--border-1)", zIndex:7 }}/>
<div style={{ display:"flex", gap:2, zIndex:7 }}>
{navItems.map(item => (
<button key={item} onClick={() => setActiveTab(item)} style={{
background: activeTab===item ? "rgba(255,215,0,0.06)" : "transparent",
border: activeTab===item ? "1px solid var(--g-700)" : "1px solid transparent",
color: activeTab===item ? "var(--g-300)" : "var(--w-500)",
padding:"5px 12px", cursor:"pointer", fontFamily:"var(--font)",
fontSize:8, letterSpacing:"0.22em", textTransform:"uppercase", transition:"all 0.2s"
}}>
{item}
{activeTab===item && <div style={{ width:"100%", height:1, background:"var(--g-300)", marginTop:2 }}/>}
</button>
))}
</div>
<div style={{ flex:1 }}/>
<div style={{ display:"flex", alignItems:"center", gap:14, zIndex:7 }}>
<StatusPill status="active" label="SYS ONLINE"/>
<div style={{ textAlign:"right" }}>
<div style={{ fontSize:8, letterSpacing:"0.2em", color:"var(--w-300)", textTransform:"uppercase", fontFamily:"var(--font)" }}>AGT-09</div>
<div style={{ fontSize:6.5, letterSpacing:"0.18em", color:"var(--g-500)", textTransform:"uppercase", fontFamily:"var(--font)" }}>CLEARANCE: OMEGA</div>
</div>
<div style={{ width:28, height:28, borderRadius:"50%", border:"1px solid var(--g-700)",
background:"var(--surface)", display:"flex", alignItems:"center", justifyContent:"center",
fontSize:9, color:"var(--g-300)", fontFamily:"var(--font)" }}>Ξ©</div>
</div>
</div>
</Punched>
);
};
// ── 2. BUTTON ──────────────────────────────────────────────────
const Button = ({ variant="primary", children, icon, size="md", disabled, onClick }) => {
const sizes = { sm:"4px 10px", md:"7px 16px", lg:"10px 22px" };
const fontSizes = { sm:7.5, md:8.5, lg:9.5 };
const bases = {
primary: { bg:"var(--g-300)", color:"var(--d-900)", border:"1px solid var(--g-300)" },
secondary: { bg:"rgba(255,215,0,0.06)", color:"var(--g-300)", border:"1px solid var(--g-700)" },
outline: { bg:"transparent", color:"var(--w-100)", border:"1px solid var(--w-300)" },
ghost: { bg:"transparent", color:"var(--w-500)", border:"1px solid transparent" },
danger: { bg:"rgba(255,51,51,0.10)", color:"var(--r-500)", border:"1px solid var(--r-700)" },
success: { bg:"rgba(255,215,0,0.08)", color:"var(--g-300)", border:"1px solid var(--g-700)" },
};
const s = bases[variant] || bases.primary;
return (
<button onClick={onClick} disabled={disabled} style={{
background:s.bg, color:s.color, border:s.border,
padding:sizes[size], fontFamily:"var(--font)",
fontSize:fontSizes[size], letterSpacing:"0.22em", textTransform:"uppercase",
cursor:disabled?"not-allowed":"pointer", opacity:disabled?0.4:1,
display:"inline-flex", alignItems:"center", gap:6,
position:"relative", overflow:"hidden", transition:"all 0.2s", outline:"none",
}}>
{["top:2px;left:2px","top:2px;right:2px","bottom:2px;left:2px","bottom:2px;right:2px"].map((pos,i) => {
const st = pos.split(";").reduce((a,p)=>{ const [k,v]=p.split(":"); a[k]=v; return a; },{});
return <div key={i} style={{ position:"absolute", ...st, width:2, height:2, background:s.color, opacity:0.5 }}/>;
})}
{icon && <span style={{ fontSize:fontSizes[size]*1.1 }}>{icon}</span>}
{children}
</button>
);
};
// ── 3. INPUT ───────────────────────────────────────────────────
const Input = ({ placeholder, label, type="text", value, onChange, prefix, suffix, hint }) => (
<div style={{ display:"flex", flexDirection:"column", gap:5 }}>
{label && <label style={{ fontSize:7.5, letterSpacing:"0.28em", color:"var(--g-500)", textTransform:"uppercase", fontFamily:"var(--font)" }}>{label}</label>}
<div style={{ position:"relative", background:"var(--surface)", border:"1px solid var(--border-1)",
display:"flex", alignItems:"center", overflow:"hidden" }}>
{prefix && <span style={{ padding:"0 8px", fontSize:8, color:"var(--g-500)", fontFamily:"var(--font)", borderRight:"1px solid var(--border-1)" }}>{prefix}</span>}
<input type={type} placeholder={placeholder} value={value} onChange={onChange} style={{
flex:1, background:"transparent", border:"none", outline:"none",
color:"var(--w-100)", fontFamily:"var(--font)", fontSize:9, letterSpacing:"0.14em", padding:"9px 12px",
}}/>
{suffix && <span style={{ padding:"0 8px", fontSize:8, color:"var(--g-500)", fontFamily:"var(--font)", borderLeft:"1px solid var(--border-1)" }}>{suffix}</span>}
<div style={{ position:"absolute", inset:2, border:"1px dashed var(--border-1)", pointerEvents:"none" }}/>
</div>
{hint && <div style={{ fontSize:7, letterSpacing:"0.18em", color:"var(--g-700)", fontFamily:"var(--font)", textTransform:"uppercase" }}>{hint}</div>}
</div>
);
// ── 4. CARD ────────────────────────────────────────────────────
const Card = ({ children, title, sub, tag, style={} }) => (
<Punched style={style}>
<div style={{ position:"relative", background:"var(--surface)", border:"1px solid var(--border-1)", overflow:"hidden" }}>
<GrainOverlay strength={0.12}/>
{["top:0;left:0","top:0;right:0","bottom:0;left:0","bottom:0;right:0"].map((pos,i) => {
const st = pos.split(";").reduce((a,p)=>{ const [k,v]=p.split(":"); a[k]=v; return a; },{});
return (
<div key={i} style={{ position:"absolute", ...st, width:12, height:12, zIndex:7,
borderTop: i<2 ? "1px solid var(--g-700)" : "none",
borderBottom: i>=2 ? "1px solid var(--g-700)" : "none",
borderLeft: (i===0||i===2) ? "1px solid var(--g-700)" : "none",
borderRight: (i===1||i===3) ? "1px solid var(--g-700)" : "none",
}}/>
);
})}
{(title||sub||tag) && (
<div style={{ padding:"10px 14px 8px", borderBottom:"1px solid var(--border-1)", position:"relative", zIndex:7 }}>
<div style={{ display:"flex", justifyContent:"space-between", alignItems:"flex-start" }}>
<div>
{title && <div style={{ fontSize:9.5, fontWeight:600, letterSpacing:"0.22em", textTransform:"uppercase",
fontFamily:"var(--font)", color:"var(--w-100)" }}>{title}</div>}
{sub && <div style={{ fontSize:7, letterSpacing:"0.18em", color:"var(--g-500)", textTransform:"uppercase",
fontFamily:"var(--font)", marginTop:3 }}>{sub}</div>}
</div>
{tag && <div style={{ fontSize:7, padding:"2px 7px", border:"1px solid var(--g-700)", color:"var(--g-500)",
letterSpacing:"0.2em", textTransform:"uppercase", fontFamily:"var(--font)" }}>{tag}</div>}
</div>
</div>
)}
<div style={{ padding:14, position:"relative", zIndex:7 }}>{children}</div>
</div>
</Punched>
);
// ── 5. BADGE ───────────────────────────────────────────────────
const Badge = ({ children, variant="default" }) => {
const vars = {
default: { bg:"var(--surface)", color:"var(--w-400)", border:"1px solid var(--border-2)" },
active: { bg:"rgba(255,215,0,0.08)", color:"var(--g-300)", border:"1px solid var(--g-700)" },
danger: { bg:"rgba(255,51,51,0.08)", color:"var(--r-500)", border:"1px solid var(--r-700)" },
warning: { bg:"rgba(255,140,105,0.08)", color:"var(--p-500)", border:"1px solid var(--p-700)" },
omega: { bg:"rgba(255,244,204,0.05)", color:"var(--g-100)", border:"1px solid var(--g-700)" },
};
const v = vars[variant] || vars.default;
return (
<span style={{ ...v, display:"inline-block", padding:"2px 7px", fontSize:7,
letterSpacing:"0.22em", textTransform:"uppercase", fontFamily:"var(--font)" }}>{children}</span>
);
};
// ── 6. PROGRESS BAR ────────────────────────────────────────────
const ProgressBar = ({ value=65, label, color="var(--g-300)" }) => (
<div style={{ display:"flex", flexDirection:"column", gap:4 }}>
{label && (
<div style={{ display:"flex", justifyContent:"space-between" }}>
<Micro color="var(--w-500)">{label}</Micro>
<Micro color="var(--g-500)">{value}%</Micro>
</div>
)}
<div style={{ height:3, background:"var(--border-1)", position:"relative", overflow:"hidden" }}>
<div style={{ "--fill":`${value}%`, width:`${value}%`, height:"100%", background:color,
animation:"progress-fill 1.5s ease forwards", boxShadow:`0 0 8px ${color}` }}/>
{[25,50,75].map(t => (
<div key={t} style={{ position:"absolute", top:0, left:`${t}%`, width:1, height:"100%", background:"var(--border-2)" }}/>
))}
</div>
</div>
);
// ── 7. SPINNER ─────────────────────────────────────────────────
const Spinner = ({ size=32 }) => (
<div style={{ position:"relative", width:size, height:size }}>
<div className="spin-slow" style={{ width:"100%", height:"100%",
border:"1px solid var(--border-2)", borderTop:"1px solid var(--g-300)", borderRadius:"50%" }}/>
<div style={{ position:"absolute", inset:4, border:"1px dashed var(--g-700)", borderRadius:"50%" }}/>
<div style={{ position:"absolute", inset:"50%", transform:"translate(-50%,-50%)",
width:4, height:4, background:"var(--g-300)", borderRadius:"50%" }}/>
</div>
);
// ── 8. TABS ────────────────────────────────────────────────────
const Tabs = ({ tabs, active, onSelect }) => (
<div style={{ borderBottom:"1px solid var(--border-1)", display:"flex", gap:0 }}>
{tabs.map((tab,i) => (
<button key={i} onClick={() => onSelect(i)} style={{
background: active===i ? "rgba(255,215,0,0.04)" : "transparent",
border:"none", borderBottom: active===i ? "1px solid var(--g-300)" : "1px solid transparent",
color: active===i ? "var(--g-300)" : "var(--w-500)",
padding:"8px 16px", cursor:"pointer", fontFamily:"var(--font)",
fontSize:8, letterSpacing:"0.22em", textTransform:"uppercase", position:"relative", marginBottom:-1,
}}>
{active===i && <div style={{ position:"absolute", top:0, left:0, right:0, height:1, background:"var(--g-700)" }}/>}
{tab}
</button>
))}
</div>
);
// ── 9. ACCORDION ───────────────────────────────────────────────
const AccordionItem = ({ title, children }) => {
const [open, setOpen] = useState(false);
return (
<div style={{ borderBottom:"1px solid var(--border-1)" }}>
<button onClick={() => setOpen(!open)} style={{
width:"100%", background:"transparent", border:"none", padding:"10px 14px",
display:"flex", justifyContent:"space-between", alignItems:"center",
cursor:"pointer", color:"var(--w-300)", fontFamily:"var(--font)",
fontSize:8.5, letterSpacing:"0.22em", textTransform:"uppercase",
}}>
<span>{title}</span>
<svg width="10" height="10" style={{ transform:open?"rotate(180deg)":"rotate(0deg)", transition:"transform 0.2s" }}>
<polygon points="5,7 0,0 10,0" fill="var(--g-500)"/>
</svg>
</button>
{open && (
<div style={{ padding:"8px 14px 12px", color:"var(--w-500)", fontSize:8.5, lineHeight:1.7,
fontFamily:"var(--font)", letterSpacing:"0.1em", borderTop:"1px dashed var(--border-1)" }}>
{children}
</div>
)}
</div>
);
};
// ── 10. TOOLTIP ────────────────────────────────────────────────
const Tooltip = ({ label, children }) => {
const [show, setShow] = useState(false);
return (
<div style={{ position:"relative", display:"inline-block" }}
onMouseEnter={() => setShow(true)} onMouseLeave={() => setShow(false)}>
{children}
{show && (
<div style={{ position:"absolute", bottom:"calc(100% + 6px)", left:"50%", transform:"translateX(-50%)",
background:"var(--header)", border:"1px solid var(--g-700)", padding:"5px 10px",
whiteSpace:"nowrap", zIndex:200, pointerEvents:"none" }}>
<span style={{ fontSize:7.5, letterSpacing:"0.18em", color:"var(--g-300)",
fontFamily:"var(--font)", textTransform:"uppercase" }}>{label}</span>
<div style={{ position:"absolute", bottom:-4, left:"50%", transform:"translateX(-50%)", width:6, height:4,
background:"var(--header)", borderRight:"1px solid var(--g-700)", borderBottom:"1px solid var(--g-700)",
transformOrigin:"center", rotate:"45deg" }}/>
</div>
)}
</div>
);
};
// ── 11. DATA TABLE ─────────────────────────────────────────────
const DataTable = ({ columns, rows }) => (
<Punched>
<div style={{ border:"1px solid var(--border-1)", overflow:"hidden", position:"relative" }}>
<GrainOverlay strength={0.08}/>
<div style={{ display:"grid", gridTemplateColumns:`repeat(${columns.length}, 1fr)`,
borderBottom:"1px solid var(--border-2)", background:"var(--header)", position:"relative", zIndex:7 }}>
{columns.map((col,i) => (
<div key={i} style={{ padding:"8px 12px", fontSize:7.5, letterSpacing:"0.22em",
textTransform:"uppercase", color:"var(--g-500)", fontFamily:"var(--font)",
borderRight: i<columns.length-1 ? "1px solid var(--border-1)" : "none" }}>
{col}
</div>
))}
</div>
{rows.map((row,ri) => (
<div key={ri} style={{ display:"grid", gridTemplateColumns:`repeat(${columns.length}, 1fr)`,
borderBottom: ri<rows.length-1 ? "1px solid var(--border-1)" : "none",
background: ri%2===0 ? "transparent" : "rgba(255,215,0,0.01)", position:"relative", zIndex:7 }}>
{row.map((cell,ci) => (
<div key={ci} style={{ padding:"7px 12px", fontSize:8, letterSpacing:"0.12em",
color: ci===0 ? "var(--w-200)" : "var(--w-500)", fontFamily:"var(--font)",
borderRight: ci<row.length-1 ? "1px solid var(--border-1)" : "none" }}>
{cell}
</div>
))}
</div>
))}
</div>
</Punched>
);
// ── 12. TOGGLE ─────────────────────────────────────────────────
const Toggle = ({ checked, onChange, label }) => (
<div style={{ display:"flex", alignItems:"center", gap:10 }}>
<div onClick={onChange} style={{ cursor:"pointer", width:40, height:16, position:"relative",
background: checked ? "rgba(255,215,0,0.1)" : "var(--surface)",
border:`1px solid ${checked ? "var(--g-700)" : "var(--border-1)"}` }}>
{[...Array(8)].map((_,i) => (
<div key={i} style={{ position:"absolute", top:2, bottom:2, left:4+i*4, width:1,
background:"var(--border-2)", opacity:checked?1:0.4 }}/>
))}
<div style={{ position:"absolute", top:1, width:12, height:12,
background: checked ? "var(--g-300)" : "var(--border-2)",
left: checked ? "calc(100% - 14px)" : 1,
transition:"all 0.2s", boxShadow: checked ? "0 0 8px var(--g-500)" : "none",
display:"flex", alignItems:"center", justifyContent:"center",
fontSize:5, color: checked ? "var(--d-900)" : "transparent" }}>β– </div>
</div>
{label && <span style={{ fontSize:8, letterSpacing:"0.18em", color:"var(--w-400)",
fontFamily:"var(--font)", textTransform:"uppercase" }}>{label}</span>}
</div>
);
// ── 13. ALERT ──────────────────────────────────────────────────
const Alert = ({ type="info", title, message, onClose }) => {
const types = {
info: { color:"var(--w-300)", border:"var(--border-2)", icon:"β—ˆ" },
success: { color:"var(--g-300)", border:"var(--g-700)", icon:"βœ“" },
warning: { color:"var(--p-500)", border:"var(--p-700)", icon:"⚠" },
danger: { color:"var(--r-500)", border:"var(--r-700)", icon:"βœ•" },
};
const t = types[type] || types.info;
return (
<Punched>
<div className="toast-anim" style={{ background:"var(--surface)", border:`1px solid ${t.border}`,
padding:"10px 14px", position:"relative", overflow:"hidden", display:"flex", gap:10, alignItems:"flex-start" }}>
<GrainOverlay strength={0.1}/>
<span style={{ fontSize:14, color:t.color, zIndex:7 }}>{t.icon}</span>
<div style={{ flex:1, zIndex:7 }}>
{title && <div style={{ fontSize:9, fontWeight:600, letterSpacing:"0.2em", color:t.color,
textTransform:"uppercase", fontFamily:"var(--font)", marginBottom:3 }}>{title}</div>}
<div style={{ fontSize:8, letterSpacing:"0.14em", color:"var(--w-500)", fontFamily:"var(--font)" }}>{message}</div>
</div>
{onClose && <button onClick={onClose} style={{ background:"none", border:"none",
color:"var(--w-500)", cursor:"pointer", fontSize:10, zIndex:7 }}>Γ—</button>}
</div>
</Punched>
);
};
// ── 14. BREADCRUMBS ────────────────────────────────────────────
const Breadcrumbs = ({ items }) => (
<div style={{ display:"flex", alignItems:"center", gap:6 }}>
{items.map((item,i) => (
<div key={i} style={{ display:"flex", alignItems:"center", gap:6 }}>
<span style={{ fontSize:8, letterSpacing:"0.18em",
color: i===items.length-1 ? "var(--g-300)" : "var(--w-500)",
textTransform:"uppercase", fontFamily:"var(--font)", cursor:i<items.length-1?"pointer":"default" }}>
{item}
</span>
{i<items.length-1 && (
<svg width="6" height="6"><polygon points="3,0 6,3 3,6 0,3" fill="var(--g-700)"/></svg>
)}
</div>
))}
</div>
);
// ── 15. STEPPER ────────────────────────────────────────────────
const Stepper = ({ steps, current }) => (
<div style={{ display:"flex", alignItems:"center" }}>
{steps.map((step,i) => (
<div key={i} style={{ display:"flex", alignItems:"center", flex:i<steps.length-1?1:"none" }}>
<div style={{ display:"flex", flexDirection:"column", alignItems:"center", gap:4 }}>
<div style={{ width:24, height:24,
border:`1px solid ${i<=current ? "var(--g-300)" : "var(--border-2)"}`,
background: i<current ? "var(--g-300)" : i===current ? "rgba(255,215,0,0.1)" : "transparent",
display:"flex", alignItems:"center", justifyContent:"center",
fontSize:7.5, color: i<current ? "var(--d-900)" : i===current ? "var(--g-300)" : "var(--w-500)",
fontFamily:"var(--font)", fontWeight:700, letterSpacing:"0.1em" }}>
{i<current ? "βœ“" : i+1}
</div>
<span style={{ fontSize:7, letterSpacing:"0.16em",
color: i<=current ? "var(--g-300)" : "var(--w-500)",
textTransform:"uppercase", fontFamily:"var(--font)", whiteSpace:"nowrap" }}>{step}</span>
</div>
{i<steps.length-1 && (
<div style={{ flex:1, height:1, background: i<current ? "var(--g-500)" : "var(--border-1)",
margin:"0 8px", marginBottom:14 }}/>
)}
</div>
))}
</div>
);
// ── 16. SELECT ─────────────────────────────────────────────────
const Select = ({ label, options, value, onChange }) => {
const [open, setOpen] = useState(false);
return (
<div style={{ position:"relative", display:"flex", flexDirection:"column", gap:5 }}>
{label && <label style={{ fontSize:7.5, letterSpacing:"0.28em", color:"var(--g-500)",
textTransform:"uppercase", fontFamily:"var(--font)" }}>{label}</label>}
<div onClick={() => setOpen(!open)} style={{ background:"var(--surface)", border:"1px solid var(--border-1)",
padding:"9px 12px", cursor:"pointer", display:"flex", justifyContent:"space-between",
alignItems:"center", position:"relative" }}>
<span style={{ fontSize:9, letterSpacing:"0.14em", fontFamily:"var(--font)",
color: value ? "var(--w-100)" : "var(--w-500)" }}>
{value || "β€” SELECT OPTION β€”"}
</span>
<svg width="8" height="8" style={{ transform:open?"rotate(180deg)":"none", transition:"transform 0.2s" }}>
<polygon points="4,6 0,0 8,0" fill="var(--g-500)"/>
</svg>
<div style={{ position:"absolute", inset:2, border:"1px dashed var(--border-1)", pointerEvents:"none" }}/>
</div>
{open && (
<div style={{ position:"absolute", top:"calc(100% + 2px)", left:0, right:0, background:"var(--header)",
border:"1px solid var(--g-700)", zIndex:100, overflow:"hidden" }}>
{options.map((opt,i) => (
<div key={i} onClick={() => { onChange(opt); setOpen(false); }} style={{
padding:"8px 12px", cursor:"pointer", fontSize:8.5, letterSpacing:"0.14em",
fontFamily:"var(--font)", color:"var(--w-400)", textTransform:"uppercase",
borderBottom: i<options.length-1 ? "1px solid var(--border-1)" : "none", transition:"background 0.1s",
}}
onMouseEnter={e => e.currentTarget.style.background="rgba(255,215,0,0.05)"}
onMouseLeave={e => e.currentTarget.style.background="transparent"}>
<div style={{ display:"flex", alignItems:"center", gap:8 }}>
<div style={{ width:3, height:3, background:"var(--g-500)" }}/>{opt}
</div>
</div>
))}
</div>
)}
</div>
);
};
// ── 17. MODAL ──────────────────────────────────────────────────
const Modal = ({ open, onClose, title, children }) => {
if (!open) return null;
return (
<div style={{ position:"fixed", inset:0, background:"rgba(0,0,0,0.85)", zIndex:1000,
display:"flex", alignItems:"center", justifyContent:"center", backdropFilter:"blur(4px)" }}>
<div style={{ position:"relative", maxWidth:480, width:"90%", maxHeight:"80vh", overflow:"hidden" }}>
<TicketShell stubHeight={0}>
<div style={{ padding:"20px 20px 16px", position:"relative", zIndex:8 }}>
<div style={{ display:"flex", justifyContent:"space-between", alignItems:"center", marginBottom:16 }}>
<div>
<div style={{ fontSize:7, letterSpacing:"0.28em", color:"var(--g-700)",
fontFamily:"var(--font)", textTransform:"uppercase", marginBottom:4 }}>// CLASSIFIED DIALOGUE</div>
<div style={{ fontSize:11, fontWeight:700, letterSpacing:"0.22em", textTransform:"uppercase",
fontFamily:"var(--font)", color:"var(--g-300)" }}>{title}</div>
</div>
<button onClick={onClose} style={{ background:"transparent", border:"1px solid var(--g-700)",
color:"var(--g-500)", width:24, height:24, cursor:"pointer", fontFamily:"var(--font)", fontSize:10,
display:"flex", alignItems:"center", justifyContent:"center" }}>Γ—</button>
</div>
<Divider/>
<div style={{ marginTop:14, color:"var(--w-400)", fontSize:8.5, lineHeight:1.7,
letterSpacing:"0.12em", fontFamily:"var(--font)" }}>{children}</div>
<div style={{ marginTop:18, display:"flex", gap:8, justifyContent:"flex-end" }}>
<Button variant="ghost" onClick={onClose}>CANCEL</Button>
<Button variant="primary" onClick={onClose}>CONFIRM</Button>
</div>
</div>
</TicketShell>
</div>
</div>
);
};
// ── 18. AVATAR ─────────────────────────────────────────────────
const Avatar = ({ initials="Ξ©", status }) => (
<div style={{ position:"relative", width:40, height:40 }}>
<div style={{ width:"100%", height:"100%", borderRadius:"50%", background:"var(--surface)",
border:"1px solid var(--g-700)", display:"flex", alignItems:"center", justifyContent:"center",
overflow:"hidden", position:"relative" }}>
<GeometricOverlay/>
<span style={{ fontSize:13, color:"var(--g-300)", fontFamily:"var(--font)", zIndex:7 }}>{initials}</span>
</div>
{status && (
<div className="pulse-anim" style={{ position:"absolute", bottom:1, right:1, width:7, height:7,
borderRadius:"50%", background:"var(--g-300)", border:"1px solid var(--bg)",
boxShadow:"0 0 6px var(--g-500)" }}/>
)}
</div>
);
// ── 19. FIELDSET ───────────────────────────────────────────────
const Fieldset = ({ legend, children }) => (
<div style={{ border:"1px solid var(--border-1)", padding:"14px 16px", position:"relative", marginTop:8 }}>
<div style={{ position:"absolute", top:-7, left:12, background:"var(--bg)", padding:"0 6px",
fontSize:7, letterSpacing:"0.28em", color:"var(--g-500)", textTransform:"uppercase", fontFamily:"var(--font)" }}>
{legend}
</div>
<div style={{ display:"flex", flexDirection:"column", gap:14 }}>{children}</div>
</div>
);
// ── 20. STAT CARD ──────────────────────────────────────────────
const StatCard = ({ label, value, unit, change, trend }) => (
<Punched>
<div style={{ position:"relative", background:"var(--surface)", border:"1px solid var(--border-1)",
padding:"14px 16px", overflow:"hidden" }}>
<GrainOverlay strength={0.1}/>
<div style={{ position:"relative", zIndex:7 }}>
<div style={{ fontSize:7, letterSpacing:"0.28em", color:"var(--g-700)", textTransform:"uppercase",
fontFamily:"var(--font)", marginBottom:8 }}>{label}</div>
<div style={{ display:"flex", alignItems:"baseline", gap:4 }}>
<span style={{ fontSize:26, fontWeight:700, letterSpacing:"0.04em",
fontFamily:"var(--font)", lineHeight:1, color:"var(--w-100)" }}>{value}</span>
{unit && <span style={{ fontSize:9, color:"var(--g-500)", fontFamily:"var(--font)", letterSpacing:"0.14em" }}>{unit}</span>}
</div>
{change !== undefined && (
<div style={{ marginTop:6, fontSize:7.5, letterSpacing:"0.18em", fontFamily:"var(--font)",
color: trend==="up" ? "var(--g-300)" : trend==="down" ? "var(--r-500)" : "var(--w-500)" }}>
{trend==="up" ? "β–²" : trend==="down" ? "β–Ό" : "β€”"} {change}
</div>
)}
</div>
<div style={{ position:"absolute", bottom:-20, right:-20, width:60, height:60,
borderRadius:"50%", background:"rgba(255,215,0,0.03)", pointerEvents:"none" }}/>
</div>
</Punched>
);
// ── 21. SIDEBAR ────────────────────────────────────────────────
const Sidebar = ({ activeItem, setActiveItem }) => {
const items = [
{ icon:"β—ˆ", label:"DASHBOARD", sub:"OVERVIEW" },
{ icon:"β—‰", label:"INTEL", sub:"CLASSIFIED" },
{ icon:"β–£", label:"ASSETS", sub:"INVENTORY" },
{ icon:"β—†", label:"COMMS", sub:"ENCRYPTED" },
{ icon:"⬑", label:"ANALYTICS", sub:"METRICS" },
{ icon:"βŠ•", label:"SETTINGS", sub:"CONFIG" },
];
return (
<Punched style={{ width:160 }}>
<div style={{ background:"var(--header)", borderRight:"1px solid var(--border-1)",
display:"flex", flexDirection:"column", position:"relative", overflow:"hidden", height:"100%" }}>
<GrainOverlay strength={0.13}/>
<div style={{ position:"absolute", right:0, top:0, bottom:0, width:8,
background:"repeating-linear-gradient(180deg, transparent 0px, transparent 8px, var(--bg) 8px, var(--bg) 18px)",
zIndex:10 }}/>
<div style={{ padding:"12px 0", flex:1, position:"relative", zIndex:7 }}>
{items.map((item,i) => (
<button key={i} onClick={() => setActiveItem(item.label)} style={{
width:"100%", background: activeItem===item.label ? "rgba(255,215,0,0.05)" : "transparent",
border:"none", borderLeft: activeItem===item.label ? "2px solid var(--g-300)" : "2px solid transparent",
borderRight:"none", padding:"10px 14px", cursor:"pointer", textAlign:"left",
borderBottom: i<items.length-1 ? "1px solid var(--border-1)" : "none",
}}>
<div style={{ display:"flex", gap:8, alignItems:"center" }}>
<span style={{ fontSize:11, color: activeItem===item.label ? "var(--g-300)" : "var(--w-500)" }}>{item.icon}</span>
<div>
<div style={{ fontSize:8, fontWeight:600, letterSpacing:"0.18em", textTransform:"uppercase",
color: activeItem===item.label ? "var(--g-300)" : "var(--w-400)", fontFamily:"var(--font)" }}>{item.label}</div>
<div style={{ fontSize:6, letterSpacing:"0.2em", color:"var(--g-700)", textTransform:"uppercase", fontFamily:"var(--font)" }}>{item.sub}</div>
</div>
</div>
</button>
))}
</div>
<div style={{ padding:"12px 14px", borderTop:"1px solid var(--border-1)", position:"relative", zIndex:7 }}>
<Barcode value="AGT-09-NEXUS" width={120} height={16}/>
</div>
</div>
</Punched>
);
};
// ── 22. FOOTER ─────────────────────────────────────────────────
const Footer = () => (
<Punched style={{ marginTop:8 }}>
<div style={{ position:"relative", background:"var(--header)", borderTop:"1px solid var(--border-1)",
padding:"12px 24px", display:"flex", justifyContent:"space-between", alignItems:"center", overflow:"hidden" }}>
<GrainOverlay strength={0.1}/>
<div style={{ position:"relative", zIndex:7 }}>
<Micro color="var(--g-700)">Β© NEXUS PROTOCOL β€” OMEGA DIVISION β€” CLEARANCE REQUIRED</Micro>
</div>
<div style={{ position:"relative", zIndex:7 }}>
<Barcode value="NEXUS-FOOTER-SYS" width={100} height={14}/>
</div>
<div style={{ position:"relative", zIndex:7, display:"flex", gap:12 }}>
<Micro color="var(--g-500)">v4.7.2</Micro>
<Micro color="var(--g-700)">BUILD-20470312</Micro>
</div>
</div>
</Punched>
);
// ══════════════════════════════════════════════════════════════
// DEMO PAGE
// ══════════════════════════════════════════════════════════════
export default function TicketPunchUIDemo() {
const [activeNavTab, setActiveNavTab] = useState("DASHBOARD");
const [activeSideItem, setActiveSideItem] = useState("DASHBOARD");
const [activeTab, setActiveTab] = useState(0);
const [toggleA, setToggleA] = useState(true);
const [toggleB, setToggleB] = useState(false);
const [modalOpen, setModalOpen] = useState(false);
const [selectVal, setSelectVal] = useState("");
const [inputVal, setInputVal] = useState("");
return (
<div style={{ fontFamily:"var(--font)", background:"var(--bg)", minHeight:"100vh",
color:"var(--text-primary)", position:"relative" }}>
<FontInjector/>
{/* Ambient gold glow */}
<div style={{ position:"fixed", top:"30%", left:"50%", transform:"translate(-50%,-50%)",
width:600, height:600, borderRadius:"50%",
background:"radial-gradient(circle, rgba(255,215,0,0.025) 0%, transparent 70%)",
pointerEvents:"none", zIndex:0 }}/>
<div style={{ display:"flex", flexDirection:"column", height:"100vh", overflow:"hidden" }}>
<Header activeTab={activeNavTab} setActiveTab={setActiveNavTab}/>
<div style={{ display:"flex", flex:1, overflow:"hidden" }}>
<Sidebar activeItem={activeSideItem} setActiveItem={setActiveSideItem}/>
<div style={{ flex:1, overflow:"auto", padding:24 }}>
{/* Page Header */}
<div style={{ marginBottom:28, display:"flex", justifyContent:"space-between", alignItems:"flex-start" }}>
<div>
<Breadcrumbs items={["NEXUS","DASHBOARD","COMPONENT LAB"]}/>
<h1 style={{ fontSize:22, fontWeight:700, letterSpacing:"0.18em", textTransform:"uppercase",
fontFamily:"var(--font)", marginTop:8, lineHeight:1, color:"var(--w-100)" }}>TICKETPUNCH UI</h1>
<div style={{ fontSize:8, letterSpacing:"0.28em", color:"var(--g-700)", textTransform:"uppercase",
fontFamily:"var(--font)", marginTop:6 }}>
DESIGN SYSTEM β€” OMEGA CLASSIFICATION β€” BUILD 2047.03.12
</div>
</div>
<div style={{ display:"flex", gap:8, alignItems:"center" }}>
<StatusPill status="active" label="ALL SYSTEMS GO"/>
<Button variant="outline" size="sm">EXPORT</Button>
</div>
</div>
{/* STAT CARDS */}
<SectionLabel sub="// REAL-TIME METRICS β€” CLASSIFIED">SYSTEM OVERVIEW</SectionLabel>
<div style={{ display:"grid", gridTemplateColumns:"repeat(4, 1fr)", gap:12, marginBottom:28 }}>
<StatCard label="ACTIVE NODES" value="847" change="+12 TODAY" trend="up"/>
<StatCard label="THREAT LEVEL" value="2.7" unit="%" change="-0.4 DELTA" trend="down"/>
<StatCard label="DATA STREAMS" value="1.4" unit="TB" change="+0.2 TB" trend="up"/>
<StatCard label="UPTIME" value="99.9" unit="%" change="NOMINAL" trend="neutral"/>
</div>
{/* MAIN TICKET CARD */}
<SectionLabel sub="// TICKET SHELL β€” PRIMARY CONTAINER">CLASSIFIED INTEL BRIEF</SectionLabel>
<div style={{ marginBottom:28 }}>
<TicketShell stubHeight={68}>
<div style={{ padding:"28px 24px 80px", position:"relative", zIndex:8 }}>
<div style={{ display:"flex", gap:20, alignItems:"flex-start" }}>
<TerminalMask size={100}/>
<div style={{ flex:1 }}>
<div style={{ fontSize:7, letterSpacing:"0.34em", color:"var(--g-700)",
textTransform:"uppercase", fontFamily:"var(--font)", marginBottom:6 }}>
// OMEGA-NEXUS // DIRECTIVE 7749 // CLASSIFIED
</div>
<h2 style={{ fontSize:18, fontWeight:700, letterSpacing:"0.18em", textTransform:"uppercase",
fontFamily:"var(--font)", marginBottom:10, lineHeight:1.2, color:"var(--g-300)" }}>
OPERATION<br/>BLACKOUT
</h2>
<p style={{ fontSize:8.5, color:"var(--w-500)", lineHeight:1.8,
letterSpacing:"0.12em", fontFamily:"var(--font)", maxWidth:420 }}>
AUTHORIZED PERSONNEL ONLY. MISSION PARAMETERS LOCKED PENDING CLEARANCE VERIFICATION.
ALL COMMUNICATION ENCRYPTED VIA NEXUS-PROTOCOL AES-512.
</p>
<div style={{ marginTop:14, display:"flex", gap:8, flexWrap:"wrap" }}>
<Badge variant="omega">OMEGA-7</Badge>
<Badge variant="danger">TOP SECRET</Badge>
<Badge variant="warning">ACTIVE</Badge>
<Badge>NEXUS-PROTOCOL</Badge>
</div>
</div>
<div style={{ display:"flex", flexDirection:"column", gap:10, alignItems:"flex-end" }}>
<Barcode value="OP-7749-BX-OMEGA" width={130} height={36}/>
<Micro color="var(--g-700)">ISSUED: 2047.03.12</Micro>
</div>
</div>
</div>
<div style={{ position:"absolute", bottom:0, left:0, right:0, height:68, padding:"0 24px",
display:"flex", alignItems:"center", justifyContent:"space-between", zIndex:8 }}>
<Micro color="var(--g-700)">REF: NEXUS-OP-7749</Micro>
<div style={{ display:"flex", gap:16 }}>
<StatusPill status="active" label="MISSION ACTIVE"/>
<StatusPill status="warning" label="HIGH RISK"/>
</div>
</div>
</TicketShell>
</div>
{/* TABS + TABLE */}
<SectionLabel sub="// DATA MANAGEMENT INTERFACE">INTEL DATABASE</SectionLabel>
<div style={{ marginBottom:28 }}>
<Card>
<Tabs tabs={["AGENTS","MISSIONS","ASSETS","THREATS"]} active={activeTab} onSelect={setActiveTab}/>
<div style={{ marginTop:16 }}>
<DataTable
columns={["AGENT ID","STATUS","CLEARANCE","ASSIGNMENT","LAST ACTIVE"]}
rows={[
["AGT-001 SPECTRE", <Badge variant="active">ACTIVE</Badge>, "OMEGA", "OP-7749", "0:04:22 AGO"],
["AGT-002 PHANTOM", <Badge variant="warning">STANDBY</Badge>, "DELTA", "OP-7700", "2:14:07 AGO"],
["AGT-003 WRAITH", <Badge variant="danger">COMPROMISED</Badge>, "GAMMA", "β€”", "6:55:13 AGO"],
["AGT-004 NEXUS", <Badge>OFFLINE</Badge>, "ALPHA", "OP-7801", "1D 04H AGO"],
]}
/>
</div>
</Card>
</div>
{/* BUTTONS */}
<SectionLabel sub="// INTERACTION PRIMITIVES">BUTTON SYSTEM</SectionLabel>
<div style={{ marginBottom:28 }}>
<Card title="BUTTON VARIANTS" sub="ALL STATES + SIZES">
<div style={{ display:"flex", flexWrap:"wrap", gap:8, marginBottom:16 }}>
<Button variant="primary">EXECUTE</Button>
<Button variant="secondary">STANDBY</Button>
<Button variant="outline">CONFIRM</Button>
<Button variant="ghost">DISMISS</Button>
<Button variant="danger">ABORT</Button>
<Button variant="success">SECURE</Button>
<Button variant="primary" disabled>LOCKED</Button>
<Button variant="outline" size="sm">SMALL</Button>
<Button variant="primary" size="lg">LAUNCH SEQUENCE</Button>
<Tooltip label="OMEGA CLASSIFIED FUNCTION">
<Button variant="secondary" icon="β—ˆ">WITH ICON</Button>
</Tooltip>
</div>
<Divider label="ICON VARIANTS"/>
<div style={{ display:"flex", gap:8, marginTop:12 }}>
{["β—ˆ","β—‰","β–£","β—†","βŠ•"].map((icon,i) => (
<Button key={i} variant="secondary" size="sm" icon={icon}>{icon==="βŠ•"?"ADD":""}</Button>
))}
</div>
</Card>
</div>
{/* FORM ELEMENTS */}
<SectionLabel sub="// DATA ENTRY SYSTEM">FORM ELEMENTS</SectionLabel>
<div style={{ display:"grid", gridTemplateColumns:"1fr 1fr", gap:16, marginBottom:28 }}>
<Card title="TEXT INPUTS" sub="TERMINAL STYLE">
<div style={{ display:"flex", flexDirection:"column", gap:14 }}>
<Input label="AGENT ID" placeholder="ENTER AGENT IDENTIFIER"
value={inputVal} onChange={e => setInputVal(e.target.value)} hint="FORMAT: AGT-XXX-CLEARANCE"/>
<Input label="AUTHORIZATION CODE" placeholder="β€’β€’β€’β€’β€’β€’β€’β€’" type="password"/>
<Input label="COORDINATES" placeholder="00.000000, 00.000000" prefix="GEO" suffix="WGS84"/>
<Fieldset legend="COMMS CHANNEL">
<Input label="FREQUENCY" placeholder="XXX.XXXXX MHZ" prefix="RF"/>
<Toggle checked={toggleA} onChange={() => setToggleA(!toggleA)} label="ENCRYPTION ENABLED"/>
</Fieldset>
</div>
</Card>
<Card title="SELECTORS + TOGGLES" sub="CONTROL ELEMENTS">
<div style={{ display:"flex", flexDirection:"column", gap:14 }}>
<Select label="CLEARANCE LEVEL" options={["ALPHA","BETA","GAMMA","DELTA","OMEGA"]}
value={selectVal} onChange={setSelectVal}/>
<Select label="MISSION STATUS" options={["ACTIVE","STANDBY","COMPLETED","ABORT","CLASSIFIED"]}
value="" onChange={() => {}}/>
<Divider label="TOGGLES"/>
<Toggle checked={toggleA} onChange={() => setToggleA(!toggleA)} label="ACTIVE SURVEILLANCE"/>
<Toggle checked={toggleB} onChange={() => setToggleB(!toggleB)} label="STEALTH MODE"/>
<Toggle checked={true} onChange={() => {}} label="ENCRYPTION LAYER"/>
<Divider/>
<div>
<Micro color="var(--g-500)">PROGRESS INDICATORS</Micro>
<div style={{ marginTop:10, display:"flex", flexDirection:"column", gap:10 }}>
<ProgressBar value={87} label="UPLINK SYNC" color="var(--g-300)"/>
<ProgressBar value={44} label="THREAT SCAN" color="var(--p-500)"/>
<ProgressBar value={12} label="BREACH RISK" color="var(--r-500)"/>
</div>
</div>
</div>
</Card>
</div>
{/* STATUS + BADGES */}
<SectionLabel sub="// CLASSIFICATION LABELS">STATUS SYSTEM</SectionLabel>
<div style={{ marginBottom:28 }}>
<Card title="BADGES + STATUS PILLS" sub="ALL VARIANTS">
<div style={{ display:"flex", flexWrap:"wrap", gap:8, marginBottom:16 }}>
<StatusPill status="active"/>
<StatusPill status="inactive" label="OFFLINE"/>
<StatusPill status="warning" label="STANDBY"/>
<StatusPill status="danger" label="BREACH"/>
<StatusPill status="pending" label="SYNCING"/>
</div>
<Divider label="BADGES"/>
<div style={{ display:"flex", flexWrap:"wrap", gap:6, marginTop:12 }}>
<Badge variant="omega">OMEGA</Badge>
<Badge variant="active">ACTIVE</Badge>
<Badge variant="danger">COMPROMISED</Badge>
<Badge variant="warning">ALERT</Badge>
<Badge>DEFAULT</Badge>
<Badge>CLASSIFIED</Badge>
<Badge>NEXUS</Badge>
</div>
</Card>
</div>
{/* ACCORDION + STEPPER */}
<div style={{ display:"grid", gridTemplateColumns:"1fr 1fr", gap:16, marginBottom:28 }}>
<div>
<SectionLabel sub="// COLLAPSIBLE SECTIONS">ACCORDION</SectionLabel>
<Card>
<AccordionItem title="MISSION PARAMETERS">
PRIMARY OBJECTIVE: INFILTRATE NEXUS SIGMA NODE. SECONDARY: EXTRACT DATA PACKAGE DELTA-7.
ABORT CODE: 4419-OMEGA. DURATION: 72H MAX.
</AccordionItem>
<AccordionItem title="AGENT DOSSIER">
AGENT: SPECTRE-9 // RANK: SENIOR OPERATIVE // CLEARANCE: OMEGA //
STATUS: FIELD ACTIVE // DEPLOYMENTS: 47 COMPLETED.
</AccordionItem>
<AccordionItem title="CLASSIFIED INTEL">
[REDACTED β€” CLEARANCE LEVEL OMEGA REQUIRED. CONTACT DIVISION COMMANDER FOR ACCESS CREDENTIALS.]
</AccordionItem>
</Card>
</div>
<div>
<SectionLabel sub="// MISSION PROGRESS WIZARD">STEPPER</SectionLabel>
<Card>
<Stepper steps={["BRIEF","DEPLOY","ACTIVE","EXTRACT","DEBRIEF"]} current={2}/>
<div style={{ marginTop:20 }}>
<Divider label="CURRENT PHASE"/>
<div style={{ marginTop:12, padding:"12px", border:"1px solid var(--g-900)", position:"relative" }}>
<div style={{ fontSize:7, letterSpacing:"0.28em", color:"var(--g-300)",
fontFamily:"var(--font)", textTransform:"uppercase", marginBottom:6 }}>β–Ά PHASE 3: ACTIVE DEPLOYMENT</div>
<div style={{ fontSize:8, color:"var(--w-500)", lineHeight:1.7, letterSpacing:"0.12em", fontFamily:"var(--font)" }}>
AGENT SPECTRE-9 IS CURRENTLY ACTIVE IN THE FIELD. ALL VITALS NOMINAL.
COMMS ENCRYPTED. ETA TO OBJECTIVE: 04:22:11.
</div>
</div>
</div>
</Card>
</div>
</div>
{/* ALERTS + LOADER */}
<SectionLabel sub="// SYSTEM NOTIFICATIONS">ALERTS + LOADERS</SectionLabel>
<div style={{ display:"grid", gridTemplateColumns:"1fr 1fr", gap:16, marginBottom:28 }}>
<div style={{ display:"flex", flexDirection:"column", gap:8 }}>
<Alert type="success" title="OPERATION SECURED"
message="NEXUS NODE ALPHA SECURED. ALL OBJECTIVES COMPLETE. EXTRACTION CONFIRMED."/>
<Alert type="warning" title="SIGNAL INTERFERENCE"
message="COMMS DEGRADED ON CHANNEL 7. SWITCHING TO BACKUP FREQUENCY 449.7750 MHZ."/>
<Alert type="danger" title="BREACH DETECTED"
message="UNAUTHORIZED ACCESS ATTEMPT β€” NODE SIGMA. LOCKDOWN INITIATED. STANDBY." onClose={() => {}}/>
<Alert type="info" title="ROUTINE SCAN COMPLETE"
message="ALL SYSTEMS NOMINAL. NEXT SCHEDULED SWEEP IN 04:00:00."/>
</div>
<Card title="SYSTEM STATES" sub="LOADING INDICATORS">
<div style={{ display:"flex", gap:20, alignItems:"center", justifyContent:"center", padding:20 }}>
{[["SMALL",28],["MEDIUM",44],["LARGE",64]].map(([lbl,sz]) => (
<div key={lbl} style={{ display:"flex", flexDirection:"column", alignItems:"center", gap:8 }}>
<Spinner size={sz}/><Micro color="var(--g-500)">{lbl}</Micro>
</div>
))}
</div>
<Divider label="AVATARS"/>
<div style={{ display:"flex", gap:10, marginTop:12, alignItems:"center" }}>
<Avatar initials="Ξ©" status="active"/>
<Avatar initials="Ξ£" status="active"/>
<Avatar initials="Ξ”"/>
<Avatar initials="Ξ“"/>
<div style={{ flex:1 }}>
<div style={{ fontSize:8.5, letterSpacing:"0.16em", fontFamily:"var(--font)", color:"var(--g-300)" }}>OMEGA TEAM</div>
<div style={{ fontSize:7, letterSpacing:"0.18em", color:"var(--g-700)", fontFamily:"var(--font)",
textTransform:"uppercase", marginTop:2 }}>4 AGENTS // 2 ACTIVE</div>
</div>
</div>
</Card>
</div>
{/* MODAL TRIGGER */}
<SectionLabel sub="// OVERLAY SYSTEM">MODAL SYSTEM</SectionLabel>
<div style={{ marginBottom:28 }}>
<Card title="MODAL TRIGGER" sub="TICKET-SHELL OVERLAY">
<div style={{ display:"flex", gap:8, alignItems:"center" }}>
<Button variant="outline" onClick={() => setModalOpen(true)}>OPEN CLASSIFIED BRIEF</Button>
<Tooltip label="OPENS A FULL TICKET-SHELL MODAL">
<Button variant="ghost" icon="β—ˆ"/>
</Tooltip>
</div>
</Card>
</div>
{/* TYPOGRAPHY */}
<SectionLabel sub="// IBM PLEX MONO TYPE SYSTEM">TYPOGRAPHY</SectionLabel>
<div style={{ marginBottom:28 }}>
<Card title="TYPE SCALE + WEIGHTS">
<div style={{ display:"flex", flexDirection:"column", gap:6 }}>
{[
{ size:22, weight:700, text:"DISPLAY β€” OMEGA PROTOCOL", color:"var(--g-300)" },
{ size:16, weight:700, text:"H1 β€” CLASSIFIED DIRECTIVE", color:"var(--w-100)" },
{ size:13, weight:600, text:"H2 β€” NEXUS SYSTEM HEADER", color:"var(--w-200)" },
{ size:11, weight:600, text:"H3 β€” OPERATION BRIEFING", color:"var(--w-300)" },
{ size:9.5, weight:500, text:"H4 β€” SUBHEADING ALPHA", color:"var(--w-300)" },
{ size:8.5, weight:400, text:"BODY β€” STANDARD INTEL REPORT BODY TEXT FOR EXTENDED BRIEFINGS", color:"var(--w-400)" },
{ size:7.5, weight:400, text:"SMALL β€” SECONDARY SUPPORT LABELS AND DESCRIPTORS", color:"var(--w-500)" },
{ size:7, weight:400, text:"MICRO β€” OMEGA-7749 // COPYRIGHT NEXUS DIVISION // CLEARANCE REQUIRED", color:"var(--g-700)" },
].map((t,i) => (
<div key={i} style={{ display:"flex", alignItems:"baseline", gap:16,
borderBottom: i<7 ? "1px solid var(--border-1)" : "none", paddingBottom:6 }}>
<span style={{ fontSize:7, color:"var(--g-700)", width:28, fontFamily:"var(--font)", letterSpacing:"0.1em" }}>{t.size}PX</span>
<span style={{ fontSize:t.size, fontWeight:t.weight, letterSpacing:"0.14em",
textTransform:"uppercase", fontFamily:"var(--font)", color:t.color }}>{t.text}</span>
</div>
))}
</div>
</Card>
</div>
{/* COLOR PALETTE */}
<SectionLabel sub="// DESIGN TOKENS β€” COLOR SYSTEM">COLOR PALETTE</SectionLabel>
<div style={{ marginBottom:28 }}>
<Card title="TOKEN PALETTE" sub="TICKETPUNCH DESIGN LANGUAGE">
<div style={{ display:"grid", gridTemplateColumns:"repeat(5, 1fr)", gap:8 }}>
{[
{ scheme:"DARK", name:"D-900", val:"#060606" },
{ scheme:"DARK", name:"D-800", val:"#0A0A0A" },
{ scheme:"DARK", name:"D-700", val:"#0f0f0f" },
{ scheme:"DARK", name:"D-600", val:"#1e1e1e" },
{ scheme:"DARK", name:"D-500", val:"#2a2a2a" },
{ scheme:"WHITE", name:"W-100", val:"#FFFFFF" },
{ scheme:"WHITE", name:"W-200", val:"#EFEFEF" },
{ scheme:"WHITE", name:"W-300", val:"#CDCDCD" },
{ scheme:"WHITE", name:"W-400", val:"#AAAAAA" },
{ scheme:"WHITE", name:"W-500", val:"#888888" },
{ scheme:"GOLD", name:"G-100", val:"#FFF4CC" },
{ scheme:"GOLD", name:"G-300", val:"#FFD700" },
{ scheme:"GOLD", name:"G-500", val:"#C8960C" },
{ scheme:"GOLD", name:"G-700", val:"#7A5800" },
{ scheme:"GOLD", name:"G-900", val:"#3D2C00" },
{ scheme:"RED", name:"R-100", val:"#FFE5E5" },
{ scheme:"RED", name:"R-300", val:"#FF6666" },
{ scheme:"RED", name:"R-500", val:"#FF3333" },
{ scheme:"RED", name:"R-700", val:"#CC0000" },
{ scheme:"RED", name:"R-900", val:"#550000" },
{ scheme:"PEACH", name:"P-100", val:"#FFF0EB" },
{ scheme:"PEACH", name:"P-300", val:"#FFBFA8" },
{ scheme:"PEACH", name:"P-500", val:"#FF8C69" },
{ scheme:"PEACH", name:"P-700", val:"#C45A35" },
{ scheme:"PEACH", name:"P-900", val:"#5C2010" },
].map((c,i) => (
<div key={i} style={{ display:"flex", flexDirection:"column", gap:4 }}>
{i%5===0 && (
<div style={{ fontSize:6.5, letterSpacing:"0.22em", color:"var(--w-400)",
fontFamily:"var(--font)", textTransform:"uppercase", marginBottom:2, fontWeight:600 }}>{c.scheme}</div>
)}
{i%5!==0 && <div style={{ height:15 }}/>}
<div style={{ height:32, background:c.val, border:"1px solid var(--border-1)",
boxShadow:["GOLD","RED","PEACH"].includes(c.scheme) ? `0 0 10px ${c.val}55` : "none" }}/>
<div style={{ fontSize:6.5, letterSpacing:"0.18em", color:"var(--w-500)",
fontFamily:"var(--font)", textTransform:"uppercase" }}>{c.name}</div>
<div style={{ fontSize:6, letterSpacing:"0.12em", color:"var(--g-700)", fontFamily:"var(--font)" }}>{c.val}</div>
</div>
))}
</div>
</Card>
</div>
{/* PRIMITIVES */}
<SectionLabel sub="// CORE VISUAL PRIMITIVES">DESIGN PRIMITIVES</SectionLabel>
<div style={{ display:"grid", gridTemplateColumns:"repeat(3, 1fr)", gap:16, marginBottom:28 }}>
<Card title="GRAIN OVERLAY" sub="STATIC NOISE TEXTURE" style={{ minHeight:120 }}>
<div style={{ display:"flex", flexDirection:"column", gap:6 }}>
{[0.08,0.18,0.28].map((s,i) => (
<div key={i} style={{ position:"relative", height:28, background:"var(--header)", border:"1px solid var(--border-1)" }}>
<GrainOverlay strength={s}/>
<div style={{ position:"absolute", inset:0, display:"flex", alignItems:"center", justifyContent:"center", zIndex:7 }}>
<Micro color="var(--g-500)">{(s*100).toFixed(0)}% STRENGTH</Micro>
</div>
</div>
))}
</div>
</Card>
<Card title="BARCODES" sub="GENERATIVE PATTERN">
<div style={{ display:"flex", flexDirection:"column", gap:10 }}>
<Barcode value="OMEGA-7749-XX" width={160} height={32}/>
<Barcode value="NEXUS-ALPHA-01" width={160} height={20}/>
<Barcode value="CLASSIFIED" width={160} height={14}/>
</div>
</Card>
<Card title="TERMINAL MASK" sub="SCROLLING INTEL FEED">
<div style={{ display:"flex", gap:12, justifyContent:"center" }}>
<TerminalMask size={90}/><TerminalMask size={70}/>
</div>
</Card>
</div>
<Footer/>
</div>
</div>
</div>
<Modal open={modalOpen} onClose={() => setModalOpen(false)} title="CLASSIFIED DIRECTIVE">
<p style={{ marginBottom:12 }}>
THIS DOCUMENT CONTAINS INFORMATION OF THE HIGHEST CLASSIFICATION.
UNAUTHORIZED DISCLOSURE IS A VIOLATION OF NEXUS PROTOCOL ARTICLE 7-OMEGA.
</p>
<p>
OPERATION BLACKOUT IS AUTHORIZED BY DIVISION COMMANDER NEXUS-1.
ALL AGENTS MUST CONFIRM RECEIPT VIA SECURE CHANNEL BEFORE DEPLOYMENT.
</p>
<div style={{ marginTop:16 }}>
<Barcode value="DIRECTIVE-4419-OMEGA" width={160} height={24}/>
</div>
</Modal>
</div>
);
}