const DS4 = window.IseeITDesignSystem_37fb1f;
// Auf Modulebene, nicht im Kontakt-Render definiert: sonst bekommt React bei jedem
// Tastenanschlag einen neuen Komponententyp und baut die Fotos neu auf (Flackern).
const KZ = ({ label, children }) =>
;
const KPerson = ({ bild, name, rolle }) =>
{bild ?
:
}
{name}
{rolle}
;
function Fragen() {
const { t } = React.useContext(window.SpracheCtx);
const f = t.fragen;
return
{f.kicker}
{f.titel}
{f.qa.slice(0, -1).map((q, i) =>
{window.FETT(q.a)}
)}
{/* Die letzte Antwort ist die Brücke zum Formular: keine zuklappbare Zeile, sondern eine stehende Kachel. */}
{f.qa[f.qa.length - 1].f}
{window.FETT(f.qa[f.qa.length - 1].a)}
;
}
function Kontakt({ onGoto }) {
const { t } = React.useContext(window.SpracheCtx);
const k = t.kontakt;
const weit = window.useMedia('(min-width: 760px)');
const laeuftMit = window.useMedia('(min-width: 1000px)');
const [status, setStatus] = React.useState('offen'); // offen | sendet | danke | mailweg
const [t0] = React.useState(() => Date.now());
const [f, setF] = React.useState({ name: '', mail: '', fokus: '', land: '', profil: '', links: [], nachricht: '', firma: '', ok: false });
const [datei, setDatei] = React.useState(null);
const [dateiFehler, setDateiFehler] = React.useState('');
const [schluessel, setSchluessel] = React.useState(0);
const set = (kk) => (e) => setF({ ...f, [kk]: e.target.type === 'checkbox' ? e.target.checked : e.target.value });
const setLink = (i) => (e) => setF(v => { const l = v.links.slice(); l[i] = e.target.value; return { ...v, links: l }; });
const linkWeg = (i) => () => setF(v => ({ ...v, links: v.links.filter((_, j) => j !== i) }));
const linkDazu = () => setF(v => v.links.length >= 3 ? v : { ...v, links: v.links.concat('') });
// Anhang: nur PDF und Word, höchstens 4 MB. Geprüft wird hier für die Rechenzeit des
// Besuchers und ein zweites Mal auf dem Server — dort zählt allein die Serverprüfung.
const dateiWaehlen = (e) => {
const d = e.target.files && e.target.files[0];
setDateiFehler(''); setDatei(null);
if (!d) return;
if (!/\.(pdf|doc|docx)$/i.test(d.name)) { setDateiFehler(k.form.cvTyp); e.target.value = ''; return; }
if (d.size > 4 * 1024 * 1024) { setDateiFehler(k.form.cvGross); e.target.value = ''; return; }
const r = new FileReader();
r.onload = () => setDatei({ name: d.name, groesse: d.size, daten: String(r.result).split(',')[1] || '' });
r.onerror = () => { setDateiFehler(k.form.cvFehler); e.target.value = ''; };
r.readAsDataURL(d);
};
const dateiWeg = () => { setDatei(null); setDateiFehler(''); setSchluessel(n => n + 1); };
// Die linke Spalte („06 Schreiben Sie uns", Titel, Ansprechpartner) bleibt unter der
// Kopfzeile verankert, während das Formular rechts weiterläuft: Der Abschnittsanfang
// ist immer im Blick — genau wie beim Aufsetzen der Sektion.
const mailOk = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/.test(f.mail.trim());
const ready = f.name && mailOk && f.ok;
const absenden = () => {
if (status === 'sendet') return;
setStatus('sendet');
const links = f.links.map(s => s.trim()).filter(Boolean);
const ctrl = new AbortController();
const timer = setTimeout(() => ctrl.abort(), datei ? 30000 : 8000);
fetch('kontakt.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: f.name, mail: f.mail, fokus: f.fokus, land: f.land, profil: f.profil, links, nachricht: f.nachricht, firma: f.firma, t0, datei: datei ? { name: datei.name, daten: datei.daten } : null }), signal: ctrl.signal })
.then(r => r.json().then(j => { if (!r.ok || !j.ok) throw new Error('senden'); setStatus('danke'); }))
.catch(() => {
// Rückfallweg ohne Server: E-Mail-Programm mit fertiger Nachricht öffnen.
const betreff = encodeURIComponent('Kontakt: ' + f.name + (f.fokus ? ' · ' + f.fokus : '') + (f.land ? ' → ' + f.land : ''));
const rumpf = encodeURIComponent('Name: ' + f.name + '\nE-Mail: ' + f.mail + (f.fokus ? '\nFachgebiet: ' + f.fokus : '') + (f.land ? '\nZielland: ' + f.land : '') + (f.profil ? '\nProfil: ' + f.profil : '') + (links.length ? '\nWeitere Links: ' + links.join(' · ') : '') + (datei ? '\n\n' + k.form.mailAnhang : '') + (f.nachricht ? '\n\n' + f.nachricht : ''));
window.location.href = 'mailto:info@iseeit-talent.de?subject=' + betreff + '&body=' + rumpf;
setStatus('mailweg');
})
.finally(() => clearTimeout(timer));
};
const offen = [!f.name && k.form.offenFelder[0], !mailOk && k.form.offenFelder[1], !f.ok && k.form.offenFelder[4]].filter(Boolean).join(', ');
return
{k.kicker}
{k.titel}
{window.FETT(k.intro)}
{k.ansprechLabel}
{k.ansprechZeile}
info@iseeit-talent.de
Deutsch · English · Ελληνικά · Español
{k.danachLabel}
{k.danach.map((d, i) =>
{d.t} {d.x}
)}
{k.datenHinweis}
{(status === 'offen' || status === 'sendet') ?
{window.FETT(k.form.intro)}
{f.mail.trim() !== '' && !mailOk &&
{k.form.mailPruefen}
}
{f.links.map((v, i) =>
×
)}
{f.links.length < 3 &&
{k.form.linkDazu} }
{datei &&
{datei.name} · {Math.max(1, Math.round(datei.groesse / 1024))} KB
{k.form.cvWeg}
}
{dateiFehler &&
{dateiFehler}
}
{k.form.einwilligung} { e.preventDefault(); onGoto && onGoto('datenschutz'); }}>{k.form.datenschutzLink} } />
{!ready && {k.form.offenPrefix} {offen}.
}
{status === 'sendet' ? k.form.sendet : k.form.senden}
:
{k.form.dankeKicker}
{status === 'danke' ?
{k.form.dankeText}
:
{k.form.mailHinweis}
}
setStatus('offen')} style={{ marginTop: '22px' }}>{k.form.nochmal}
}
;
}
function SiteFooter({ page, onGoto, onNav }) {
const { t } = React.useContext(window.SpracheCtx);
const ft = t.footer;
const col = { margin: 0, font: "400 11.5px/1 var(--font-mono)", letterSpacing: '.1em', color: 'var(--sektion-tertiaer)' };
const lnk = { color: 'var(--sektion-text)' };
const karte = page === 'home' ? ft.karteHome : ft.karteSub;
const toolKarte = ft.karteTool || { kicker: t.wahl.tool.kicker, titel: t.wahl.tool.titel, unter: t.wahl.tool.unter };
const Karte = ({ href, onClick, k, pfeil, breit }) => { e.currentTarget.style.borderColor = 'var(--gold-hell)'; e.currentTarget.style.background = 'rgba(251,248,243,.09)'; }} onMouseLeave={e => { e.currentTarget.style.borderColor = 'var(--sektion-linie)'; e.currentTarget.style.background = 'rgba(251,248,243,.04)'; }}>
{k.kicker}
{k.titel}
{k.unter}
{pfeil}
;
const claimFarbe = { rot: 'color-mix(in oklab, var(--backstein-hell) 55%, var(--sektion-tertiaer))', gold: 'color-mix(in oklab, var(--gold-hell) 55%, var(--sektion-tertiaer))' };
return ;
}
const FL = {
de: ,
ch:
};
// Adressaten-Kachel im Kopf der Unternehmensseite: Flagge, Zielgruppe, sanfter Sprung zum Abschnitt.
function AdressatKachel({ land, titel, ziel }) {
const [hov, setHov] = React.useState(false);
return { e.preventDefault(); window.sanftZu(ziel, 88); }} onMouseEnter={() => setHov(true)} onMouseLeave={() => setHov(false)}
style={{ display: 'flex', alignItems: 'center', gap: '15px', background: hov ? 'var(--papier-ton)' : 'var(--karte-weiss,#FFFFFF)', border: hov ? '1px solid var(--backstein)' : '1px solid var(--linie)', padding: '18px 20px', minHeight: '64px', boxSizing: 'border-box', textDecoration: 'none', color: 'var(--tinte)', transition: 'border-color var(--dauer-hover) var(--ease), background var(--dauer-hover) var(--ease)' }}>
{FL[land]}
{titel}
↓
;
}
function UnternehmenSeite({ onGoto }) {
const { t } = React.useContext(window.SpracheCtx);
const u = t.unternehmen;
const zweiSp = window.useMedia('(min-width: 720px)');
// Vorbefüllte Anfrage-Mails: Betreff aus der sichtbaren Betreffzeile, kurzer Rumpf aus der Sprachdatei — ein Klick, absenden, fertig.
const mailAn = (betreff, text) => 'mailto:info@iseeit-talent.de?subject=' + encodeURIComponent((betreff || '').replace(/^[^:]+:\s*/, '')) + '&body=' + encodeURIComponent(text || '');
const mailKond = mailAn(u.kondBetreff, u.kondMail);
const mailPartner = mailAn(u.partnerBetreff, u.partnerMail);
const mailChFirma = 'mailto:info@iseeit-talent.de?subject=' + encodeURIComponent(t.fragen.chMailBetreff || '') + '&body=' + encodeURIComponent(t.fragen.chMail || '');
const B = ({ children }) => {children}
;
const FrageGrid = ({ titel, fragen }) =>
{titel}
;
return
{ e.preventDefault(); onGoto('home'); }}>{u.zurueck}
{u.kicker}
{u.h1}
{u.bandDe}
{u.wasTitel}
{u.wasText}
{u.rechtPunkte ?
{u.rechtTitel}
{u.rechtText}
{u.rechtPunkte.map((p, i) => {window.FETT(p)} )}
{u.rechtFuss}
: null}
{u.bandCh}
{/* Hinweis für Schweizer Arbeitgeber — von der Startseite hierher gezogen (Texte liegen weiter unter fragen.chHinweis). */}
{t.fragen.chHinweis} info@iseeit-talent.de . {t.fragen.chHinweisNach}
{u.liefernTitel}
{u.liefernText}
{u.punkte.map((p, i) => {window.FETT(p)} )}
{u.kostenChTitel}
{window.FETT(u.kostenChP1)}
{window.FETT(u.kostenChP2)}
{u.kostenChP3} info@iseeit-talent.de
;
}
Object.assign(window, { Fragen, Kontakt, SiteFooter, UnternehmenSeite });