| 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> | |
| ); | |
| } |