// 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 (
);
}
// ── Mark B: Puristisch ─────────────────────────────────────────────────────
function MarkB({ size = 200, p = PALETTE_DEFAULT, sw = 2 }) {
const w = size, h = size * 0.78;
return (
);
}
// ── 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 (
);
}
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 (
);
}
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 (
);
}
// ── Mark D: Monogramm SM mit Schaltkreis-Touch ─────────────────────────────
function MarkD({ size = 200, p = PALETTE_DEFAULT, sw = 2 }) {
const w = size, h = size * 0.78;
return (
);
}
// ── 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 (
);
}
// ── 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 (
);
}
// ── 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,
});