const SLIDES = [ { EN: { eyebrow: 'SERVICE · MANAGED SERVICES', title: ['Infrastructure', 'that doesn\u2019t', 'get in the way.'], italicWord: 'doesn\u2019t', body: 'Streamline business processes through automation, optimized IT infrastructure, and proactive system management\u2014reducing downtime and improving productivity.', metric: { value: '42%', label: 'Infra spend reduced' }, secondary: { value: '2.1\u00d7', label: 'Throughput' } }, DE: { eyebrow: 'SERVICE · MANAGED SERVICES', title: ['Infrastruktur,', 'die nicht im', 'Weg steht.'], italicWord: 'nicht', body: 'Optimieren Sie Gesch\u00e4ftsprozesse durch Automatisierung, eine optimierte IT-Infrastruktur und proaktives Systemmanagement \u2014 weniger Ausfallzeiten, h\u00f6here Produktivit\u00e4t.', metric: { value: '42%', label: 'Infrastrukturkosten reduziert' }, secondary: { value: '2.1\u00d7', label: 'Durchsatz' } }, bg: 'dark', diagram: 'architecture' }, { EN: { eyebrow: 'SERVICE · MEDICAL DEVICE INTEGRATION', title: ['Lab instruments, X-ray', 'systems and EMR/EHR,', 'finally talking.'], italicWord: 'finally', body: 'HL7, FHIR and DICOM integrations that connect lab analyzers, X-ray systems and EMR/EHR \u2014 automated, bidirectional, audit-ready.', metric: { value: '0', label: 'Manual errors' }, secondary: { value: '2×', label: 'Faster turnaround' } }, DE: { eyebrow: 'SERVICE · INTEGRATION MEDIZINTECHNIK', title: ['Laborger\u00e4te, R\u00f6ntgen-', 'systeme und EMR/EHR,', 'endlich verbunden.'], italicWord: 'endlich', body: 'HL7-, FHIR- und DICOM-Integrationen, die Laboranalyseger\u00e4te, R\u00f6ntgensysteme und EMR/EHR verbinden \u2014 automatisiert, bidirektional, audit-sicher.', metric: { value: '0', label: 'Manuelle Fehler' }, secondary: { value: '2×', label: 'Schnellere Bearbeitung' } }, bg: 'paper', diagram: 'medlab' }, { EN: { eyebrow: 'SERVICE · AI SOLUTIONS & SIMULATION', title: ['From complex data', 'to smart', 'decisions—powered by AI'], italicWord: 'smart', body: 'Address industry-specific challenges with customized AI models and simulation environments.', metric: { value: '6.4×', label: 'Faster simulation' }, secondary: { value: 'GPU', label: 'Accelerated compute' } }, DE: { eyebrow: 'SERVICE · KI-L\u00d6SUNGEN & SIMULATION', title: ['Von komplexen Daten', 'zu klugen', 'Entscheidungen \u2014 mit KI'], italicWord: 'klugen', body: 'L\u00f6sen Sie branchenspezifische Herausforderungen mit ma\u00dfgeschneiderten KI-Modellen und Simulationsumgebungen.', metric: { value: '6.4×', label: 'Schnellere Simulation' }, secondary: { value: 'GPU', label: 'Beschleunigte Rechenleistung' } }, bg: 'dark', diagram: 'aivis' }]; function Diagram({ kind, dark, hovered }) { const stroke = dark ? '#1F1F22' : '#DFE0E1'; const node = dark ? '#111114' : '#FFFFFF'; const nodeBorder = dark ? '#2A2A2D' : '#DFE0E1'; const dim = dark ? '#2A2A2D' : '#C5C6C8'; const text = dark ? '#6C6C65' : '#929596'; const liveGlow = dark ? 'url(#glowDark)' : 'url(#glowLight)'; if (kind === 'architecture') { const accentOpacity = hovered ? 0.5 : 0.28; const nodeStroke = hovered ? '#DF3E6F' : nodeBorder; return ( {/* Central hub */} CORE {/* Orbital ring */} {/* 6 satellite nodes */} {[0, 1, 2, 3, 4, 5].map((i) => { const angle = i / 6 * Math.PI * 2 - Math.PI / 2; const r = 110; const nx = 350 + Math.cos(angle) * r; const ny = 246 + Math.sin(angle) * r; const labels = ['CLOUD', 'SECURITY', 'DATA', 'NETWORK', 'DEVOPS', 'SUPPORT']; const accent = i === 1 || i === 4; const isHoverAccent = hovered && (i === 0 || i === 3); return ( {(accent || isHoverAccent) && } {labels[i]} ); })} {/* Outer metric pills */} {[ { x: 128, y: 80, label: 'UPTIME', value: '99.98%', accent: true }, { x: 490, y: 341, label: 'REGIONS', value: '5' }, { x: 490, y: 80, label: 'ALERTS', value: '0' }]. map((m) => {m.accent && } {m.label} {m.value} )} ); } if (kind === 'pipeline') { const stages = ['SOURCE', 'INGEST', 'TRANSFORM', 'WAREHOUSE', 'SERVE']; return ( {/* Horizontal track */} {stages.map((s, i) => { const x = 80 + i * 135; const accent = i === 2; return ( {accent && } {s} {['t+0', 't+12', 't+45', 't+58', 't+60'][i]} ); })} {/* Mini histograms above each stage */} {stages.map((s, i) => { const x = 80 + i * 135 - 40; return ( {[...Array(8)].map((_, j) => { const h = 20 + (i * 3 + j * 7) % 50; return ; })} ); })} {/* Latency callout */} P95 LATENCY 412 ms ▼ 38% ); } // medlab — bidirectional lab ↔ hospital data exchange if (kind === 'medlab') { const LAB_INSTRUMENTS = ['Analyzer A', 'Centrifuge', 'Sequencer', 'Imager']; const HOSPITAL_SYSTEMS = ['EMR / EHR', 'LIS', 'PACS', 'HIS']; // 20% smaller: box w=128,h=45, spacing=72, hub=96×64 const boxW = 102, boxH = 36, rowGap = 58, startY = 112; const hubX = 311, hubY = 220, hubW = 77, hubH = 51; const hubCX = hubX + hubW / 2, hubCY = hubY + hubH / 2; return ( {/* HL7 Central Hub */} HL7 / FHIR Integration Engine {/* Lab instruments — left column */} {LAB_INSTRUMENTS.map((name, i) => { const y = startY + i * rowGap; const bx = 52, by = y; const bCX = bx + boxW, bCY = by + boxH / 2; return ( LAB {name} {/* Result arrow → hub */} {/* Order arrow ← hub */} ); })} {/* Hospital systems — right column */} {HOSPITAL_SYSTEMS.map((name, i) => { const y = startY + i * rowGap; const bx = 548, by = y; const bCX = bx, bCY = by + boxH / 2; const hubRX = hubX + hubW; return ( HOSPITAL {name} {/* Result arrow → hospital */} {/* Order arrow ← hospital */} ); })} {/* Status badges */} CONNECTED LIVE SYNC ); } // aivis — AI neural network + simulation visualization if (kind === 'aivis') { const layers = [ { label: 'INPUT', nodes: 4, x: 100 }, { label: 'HIDDEN', nodes: 6, x: 240 }, { label: 'ATTENTION', nodes: 6, x: 380 }, { label: 'OUTPUT', nodes: 3, x: 520 }, ]; const nodeR = 13; const totalH = 493; const getY = (count, idx) => (totalH / 2) + (idx - (count - 1) / 2) * 56; // Active path through the network — pink data flow const activePath = [ { layer: 0, node: 1 }, { layer: 1, node: 2 }, { layer: 2, node: 3 }, { layer: 3, node: 1 }, ]; const isActiveNode = (li, ni) => activePath.some(p => p.layer === li && p.node === ni); const isActiveEdge = (li, ai, bi) => { const a = activePath.find(p => p.layer === li); const b = activePath.find(p => p.layer === li + 1); return a && b && a.node === ai && b.node === bi; }; return ( {/* Decorative orbital rings around active path */} {/* Connections between layers */} {layers.slice(0, -1).map((layerA, li) => { const layerB = layers[li + 1]; return [...Array(layerA.nodes)].map((_, ai) => [...Array(layerB.nodes)].map((_, bi) => { const y1 = getY(layerA.nodes, ai); const y2 = getY(layerB.nodes, bi); const active = isActiveEdge(li, ai, bi); if (active) return null; // render active edges in second pass on top return ( ); }) ); })} {/* Active path edges — render on top with glow */} {layers.slice(0, -1).map((layerA, li) => { const layerB = layers[li + 1]; const a = activePath.find(p => p.layer === li); const b = activePath.find(p => p.layer === li + 1); if (!a || !b) return null; const y1 = getY(layerA.nodes, a.node); const y2 = getY(layerB.nodes, b.node); return ( {/* Animated dot traveling along edge */} ); })} {/* Nodes */} {layers.map((layer, li) => ( [...Array(layer.nodes)].map((_, ni) => { const y = getY(layer.nodes, ni); const isOutput = li === layers.length - 1; const active = isActiveNode(li, ni); return ( {active && ( <> )} {active && } {isOutput && !active && } ); }) ))} {/* Layer labels */} {layers.map((layer) => ( {layer.label} ))} {/* Top-left telemetry strip */} PIPELINE STATUS Inference active {/* Right-side metric cards */} {[ { y: 80, label: 'MODEL', value: 'CFD / FEA', accent: '#DF3E6F' }, { y: 152, label: 'COMPUTE', value: 'GPU ×8', accent: '#4A5D7E' }, { y: 224, label: 'PARAMS', value: '4.2B', accent: '#929596' }, ].map((m) => ( {m.label} {m.value} ))} {/* Speedup hero card */} SPEEDUP 6.4× vs CPU baseline {/* Bottom waveform / signal */} LATENCY · 24ms {[...Array(40)].map((_, i) => { const h = 6 + Math.abs(Math.sin(i * 0.6) * 14) + (i % 3) * 2; const isAccent = i > 18 && i < 26; return ( ); })} NEURAL PIPELINE · GPU-ACCELERATED · REAL-TIME INFERENCE ); } // matrix const cols = 14,rows = 9; return ( {[...Array(rows)].map((_, r) => [...Array(cols)].map((_, c) => { const seed = (r * 7 + c * 13) % 17; const filled = seed > 4; const accent = seed === 5 || seed === 11; return ( ); }) )} CONTROL COVERAGE · SOC 2 · ISO 27001 · HIPAA 126 / 126 CONTROLS · 0 EXCEPTIONS ); } function SlideContent({ slide, lang, dark, idx, total, go }) { const t = slide[lang] || slide.EN; const fg = dark ? 'var(--gs-900)' : 'var(--gs-900)'; const fgMuted = dark ? 'var(--gs-600)' : 'var(--gs-600)'; const eyebrowColor = dark ? 'var(--gs-500)' : 'var(--fg-muted)'; const borderColor = dark ? 'rgba(0,0,0,0.1)' : 'var(--border)'; const cardBg = dark ? 'rgba(0,0,0,0.05)' : 'rgba(0,0,0,0.03)'; const [diagramHovered, setDiagramHovered] = React.useState(false); return (
{/* Left — copy */} {(() => { const [leftHovered, setLeftHovered] = React.useState(false); return (
setLeftHovered(true)} onMouseLeave={() => setLeftHovered(false)} style={{ padding: '44px 52px 40px', display: 'flex', flexDirection: 'column', justifyContent: 'space-between', borderRight: `1px solid ${borderColor}`, position: 'relative', background: dark ? (leftHovered ? '#D8D9DB' : '#EDEEEF') : (leftHovered ? '#F0F0F0' : '#fff'), transition: 'background 400ms var(--ease-standard)', }}> {/* Hover glow overlay */}
{/* Eyebrow with animated progress line */}
{t.eyebrow}
{/* Slide progress bar */}
{/* Read the brief — top right */}

{t.title.map((line, i) => { const parts = line.split(t.italicWord); if (parts.length === 2) { return ( {parts[0]} {t.italicWord} {parts[1]} ); } return {line}; })}

{t.body}

{/* Bottom — metrics + CTA */}
{[t.metric, t.secondary].map((m, i) =>
{i === 0 &&
}
{m.label}
{m.value}
)}
); })()} {/* Right — diagram */}
setDiagramHovered(true)} onMouseLeave={() => setDiagramHovered(false)} style={{ position: 'relative', background: dark ? diagramHovered ? 'var(--gs-200)' : 'var(--gs-100)' : diagramHovered ? 'var(--gs-200)' : 'var(--gs-100)', overflow: 'hidden', cursor: 'crosshair', transition: 'background 400ms var(--ease-standard)' }}> {/* Decorative corner glow — expands on hover */}
{/* Centre glow on hover */} {diagramHovered &&
} {/* Diagram with scale on hover */}
{/* Gradient fade on left edge */}
LIVE
); } function Slider({ lang = 'EN' }) { const [idx, setIdx] = React.useState(0); const [paused, setPaused] = React.useState(false); const total = SLIDES.length; const touch = React.useRef({ x: 0, y: 0, t: 0, active: false }); React.useEffect(() => { if (paused) return; const t = setTimeout(() => setIdx((i) => (i + 1) % total), 6500); return () => clearTimeout(t); }, [idx, paused, total]); const go = (n) => setIdx((n + total) % total); const slide = SLIDES[idx]; const dark = slide.bg === 'dark'; const onTouchStart = (e) => { const tc = e.touches[0]; touch.current = { x: tc.clientX, y: tc.clientY, t: Date.now(), active: true }; setPaused(true); }; const onTouchEnd = (e) => { if (!touch.current.active) return; const tc = e.changedTouches[0]; const dx = tc.clientX - touch.current.x; const dy = tc.clientY - touch.current.y; const dt = Date.now() - touch.current.t; touch.current.active = false; // horizontal swipe, not too slow, not mostly vertical if (Math.abs(dx) > 40 && Math.abs(dx) > Math.abs(dy) * 1.2 && dt < 800) { if (dx < 0) go(idx + 1); else go(idx - 1); } // brief unpause delay for autoplay setTimeout(() => setPaused(false), 4000); }; return (
setPaused(true)} onMouseLeave={() => setPaused(false)} onTouchStart={onTouchStart} onTouchEnd={onTouchEnd}>
{/* Sliding track */}
{SLIDES.map((s, i) =>
)}
{/* Bottom controls bar */}
{/* Progress dots + counter */}
{String(idx + 1).padStart(2, '0')} / {String(total).padStart(2, '0')}
{SLIDES.map((_, i) =>
{/* Prev / Next */}
{/* Top-left corner ticker */}
GREY SPACE IT SERVICES GMBH
); } function arrowBtn(dark) { return { width: 44, height: 44, borderRadius: 999, border: `1px solid ${dark ? '#2A2A2D' : 'var(--border)'}`, background: dark ? 'rgba(10,10,11,0.65)' : 'rgba(255,255,255,0.85)', color: dark ? '#fff' : 'var(--gs-900)', fontSize: 16, cursor: 'pointer', fontFamily: 'inherit', backdropFilter: 'blur(8px)', transition: 'background 160ms var(--ease-standard), transform 160ms var(--ease-standard)' }; } window.Slider = Slider;