// logo-marks.jsx // Smartmacherei Logo-Varianten. Alle nehmen die gleichen Props, // damit Tweaks global wirken: stroke, accent, accentSoft, bg, circuit (0-10), // antenna ('dish'|'waves'|'panel'|'none'), battery ('classic'|'block'|'subtle'|'none'), // extras { pv, bulb, nodes, door, wifi }, font ('inter'|'outfit') const PALETTE_DEFAULT = { bgDeep: "#071520", bgCard: "#0D2030", accent: "#3ABDD0", soft: "#8DDBEA", text: "#ffffff", }; // ── Small primitives ──────────────────────────────────────────────────────── function Pin({ x, y, dir, len = 4, sw = 1.5, color }) { // dir: 'l' 'r' 't' 'b' const dx = dir === "l" ? -len : dir === "r" ? len : 0; const dy = dir === "t" ? -len : dir === "b" ? len : 0; return ( ); } function Node({ x, y, r = 1.6, color, fill = "none" }) { return ; } // ── Antenne ───────────────────────────────────────────────────────────────── function Antenna({ kind, x, y, color, sw }) { if (kind === "none") return null; if (kind === "waves") { return ( ); } if (kind === "panel") { // Echter Starlink-Look: kleines Rechteck auf Mast return ( ); } // 'dish' (default) return ( {/* signal arcs */} ); } // ── Akku ──────────────────────────────────────────────────────────────────── function Battery({ kind, x, y, color, sw }) { if (kind === "none") return null; if (kind === "subtle") { return ( ); } if (kind === "block") { return ( ); } // classic return ( ); } // ── Circuit pins um die Wände ─────────────────────────────────────────────── // box: { x, y, w, h }; intensity 0..10 function CircuitPins({ box, intensity, color, sw, accentSoft }) { if (intensity <= 0) return null; const { x, y, w, h } = box; const out = []; // links const leftCount = Math.min(5, Math.floor(intensity * 0.45)); for (let i = 0; i < leftCount; i++) { const py = y + (h * (i + 1)) / (leftCount + 1); out.push( 6 ? 1 : 0)} sw={sw} color={color} />); if (intensity >= 7) out.push( 6 ? 1 : 0)} y={py} color={accentSoft} />); } // rechts const rightCount = Math.min(5, Math.floor(intensity * 0.45)); for (let i = 0; i < rightCount; i++) { const py = y + (h * (i + 1)) / (rightCount + 1); out.push(); if (intensity >= 7) out.push(); } // unten if (intensity >= 4) { const bottomCount = Math.min(4, Math.floor(intensity * 0.3)); for (let i = 0; i < bottomCount; i++) { const px = x + (w * (i + 1)) / (bottomCount + 1); out.push(); } } // PCB-Bahnen innen (nur bei hoher Intensität) if (intensity >= 8) { out.push( ); } return {out}; } // ── Mark A: V2-Konzept (Haus mit allem) ──────────────────────────────────── // Standard-Logo wie im Briefing function MarkA({ size = 200, p = PALETTE_DEFAULT, sw = 1.8, circuit = 4, antenna = "dish", battery = "classic", extras = {} }) { const w = size, h = size * 0.78; // Haus-Box (Wände) const box = { x: w * 0.28, y: h * 0.42, w: w * 0.44, h: h * 0.46 }; // Dach const apexX = box.x + box.w / 2; const apexY = box.y - h * 0.18; const eaveL = { x: box.x - w * 0.04, y: box.y }; const eaveR = { x: box.x + box.w + w * 0.04, y: box.y }; return ( {/* Antenne */} {/* Dach */} {/* Akku links */} {/* Wände */} {/* Tür */} {extras.door && ( )} {/* Fenster */} {extras.bulb && ( )} {/* PV auf Dach */} {extras.pv && ( )} {/* Wifi-Wellen */} {extras.wifi && ( )} {/* Schaltkreis-Pins */} ); } // ── Mark B: Puristisch ───────────────────────────────────────────────────── function MarkB({ size = 200, p = PALETTE_DEFAULT, sw = 2 }) { const w = size, h = size * 0.78; return ( {/* Tiny WLAN-dot apex */} ); } // ── Mark B2: Puristisch, dot ALTERNATIVES ───────────────────────────────── // Vier Sub-Varianten — wir zeigen sie nebeneinander function MarkB2_Pulse({ size = 200, p = PALETTE_DEFAULT, sw = 2 }) { // Größerer Dot mit Pulsring im Zentrum const w = size, h = size * 0.78; return ( ); } function MarkB2_Apex({ size = 200, p = PALETTE_DEFAULT, sw = 2 }) { // Dot AM Dachfirst (auf dem Apex-Punkt, kein WLAN drüber) const w = size, h = size * 0.78; return ( {/* Dot AUF dem Dachfirst — als "I-Punkt" */} ); } function MarkB2_Door({ size = 200, p = PALETTE_DEFAULT, sw = 2 }) { // Dot wird zur Türklinke (unten in der Wand) const w = size, h = size * 0.78; return ( {/* Tür */} {/* Dot als Klinke */} ); } function MarkB2_Ring({ size = 200, p = PALETTE_DEFAULT, sw = 2 }) { // Dot als hohler Ring statt Vollkreis const w = size, h = size * 0.78; return ( ); } // ── Mark C: Haus aus PCB-Bahnen (Schaltkreis-Haus) ───────────────────────── function MarkC({ size = 200, p = PALETTE_DEFAULT, sw = 1.6 }) { const w = size, h = size * 0.78; const box = { x: w * 0.26, y: h * 0.48, w: w * 0.48, h: h * 0.4 }; const apexX = box.x + box.w / 2; const apexY = box.y - h * 0.22; return ( {/* Dach + Wände aus Bahnen mit Knoten */} {/* PCB-Knoten an den Ecken */} {[ [box.x, box.y], [box.x + box.w, box.y], [apexX, apexY], [box.x, box.y + box.h], [box.x + box.w, box.y + box.h], ].map(([cx, cy], i) => ( ))} {/* Innere Bahnen */} ); } // ── Mark D: Monogramm SM mit Schaltkreis-Touch ───────────────────────────── function MarkD({ size = 200, p = PALETTE_DEFAULT, sw = 2 }) { const w = size, h = size * 0.78; return ( {/* Rounded square */} {/* Stylized S as house-roof + flow */} {/* Pins */} ); } // ── Mark E: Modulares Haus + Modul-Stack (Akku, Antenne als Tags) ────────── function MarkE({ size = 200, p = PALETTE_DEFAULT, sw = 1.7, antenna = "waves", battery = "classic", extras = {} }) { const w = size, h = size * 0.78; const box = { x: w * 0.32, y: h * 0.45, w: w * 0.4, h: h * 0.4 }; const apexX = box.x + box.w / 2; const apexY = box.y - h * 0.2; return ( {/* Faintes Raster im Hintergrund */} {Array.from({ length: 6 }, (_, i) => ( ))} {Array.from({ length: 4 }, (_, i) => ( ))} {/* Haus */} {/* Modul-Tags */} {/* Connection-Linien zu Modulen */} ); } // ── Mark F: Solid mit gezielten Details ──────────────────────────────────── // Gefüllte Haus-Silhouette mit ausgewählten Details: PV-Streifen, // Wand-Akku, Starlink V3 Rectangular Dish. Reduziert auf das Wesentliche. function MarkF({ size = 200, p = PALETTE_DEFAULT, sw = 0, circuit = 4, antenna = "panel", battery = "block", extras = {} }) { const w = size, h = size * 0.78; const eaveY = h * 0.5; const apexY = h * 0.22; const apexX = w * 0.5; const wallL = w * 0.3; const wallR = w * 0.7; const baseY = h * 0.88; const bg = p.bgDeep; const accent = p.accent; const soft = p.soft; return ( {/* Wand-Akku — schmales Modul links */} {battery !== "none" && ( {/* Pluspol */} {/* Indikator-Bar */} )} {/* Haupt-Silhouette gefüllt */} {/* PV-Streifen auf linker Dachhälfte (ein klarer Block) */} {(extras.pv ?? true) && ( {/* PV Trennlinie */} )} {/* Starlink V3 Dish — rechteckiges Panel rechts vom Giebel */} {antenna !== "none" && ( {(() => { const mx = apexX + w * 0.07; const my = apexY + h * 0.04; const mTop = my - h * 0.08; return ( {/* Mast */} {/* Rechteckiges Panel, gekippt */} {/* Apertur-Detail */} ); })()} )} {/* Tür (Cutout) */} {/* Fenster (Cutout) */} {/* Fenster-Kreuz */} {extras.bulb && ( )} {/* Schaltkreis-Pins (nur bei höherer Intensität) */} {circuit > 2 && ( {Array.from({ length: Math.min(3, Math.ceil(circuit * 0.3)) }, (_, i) => { const count = Math.min(3, Math.ceil(circuit * 0.3)); const py = eaveY + h * 0.1 + (h * 0.3 * (i + 1)) / (count + 1); return ; })} )} ); } // ── Wortmarke ─────────────────────────────────────────────────────────────── function Wordmark({ font = "inter", color = "#fff", soft = "#8DDBEA", showClaim = true, showOwner = false, size = 32, align = "center" }) { const ff = font === "outfit" ? "'Outfit', system-ui, sans-serif" : "'Inter', system-ui, sans-serif"; const claimSize = Math.max(9, size * 0.32); const ownerSize = Math.max(10, size * 0.36); return (
Smartmacherei
{showClaim && (
Smart für alle
)} {showOwner && (
Ing. Thomas Basting
)}
); } Object.assign(window, { MarkA, MarkB, MarkC, MarkD, MarkE, MarkF, MarkB2_Pulse, MarkB2_Apex, MarkB2_Door, MarkB2_Ring, Antenna, Battery, CircuitPins, Wordmark, PALETTE_DEFAULT, });