{"id":6706,"date":"2025-07-27T14:26:08","date_gmt":"2025-07-27T12:26:08","guid":{"rendered":"https:\/\/fvbadsaulgau.de\/?page_id=6706"},"modified":"2025-08-13T22:24:29","modified_gmt":"2025-08-13T20:24:29","slug":"fvs-jobs","status":"publish","type":"page","link":"https:\/\/fvbadsaulgau.de\/index.php\/fvs-jobs\/","title":{"rendered":"FVS Jobs"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"6706\" class=\"elementor elementor-6706\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-56185dc e-flex e-con-boxed e-con e-parent\" data-id=\"56185dc\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8328091 elementor-widget elementor-widget-image\" data-id=\"8328091\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1800\" height=\"600\" src=\"https:\/\/fvbadsaulgau.de\/wp-content\/uploads\/2025\/07\/Partner-Jobs-Logo1.png\" class=\"attachment-full size-full wp-image-6765\" alt=\"\" srcset=\"https:\/\/fvbadsaulgau.de\/wp-content\/uploads\/2025\/07\/Partner-Jobs-Logo1.png 1800w, https:\/\/fvbadsaulgau.de\/wp-content\/uploads\/2025\/07\/Partner-Jobs-Logo1-300x100.png 300w, https:\/\/fvbadsaulgau.de\/wp-content\/uploads\/2025\/07\/Partner-Jobs-Logo1-1024x341.png 1024w, https:\/\/fvbadsaulgau.de\/wp-content\/uploads\/2025\/07\/Partner-Jobs-Logo1-768x256.png 768w, https:\/\/fvbadsaulgau.de\/wp-content\/uploads\/2025\/07\/Partner-Jobs-Logo1-1536x512.png 1536w\" sizes=\"(max-width: 1800px) 100vw, 1800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3c6a472 e-flex e-con-boxed e-con e-parent\" data-id=\"3c6a472\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1206b3b elementor-widget elementor-widget-html\" data-id=\"1206b3b\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!doctype html>\n<html lang=\"de\">\n<head>\n<meta charset=\"utf-8\" \/>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" \/>\n<title>FVS Partner\u2011Jobs<\/title>\n<style>\n:root{\n  --fvs-red:#E00000; --ink:#0f1115; --muted:#6b7280; --light:#f7f8fb; --line:#ececf1; --card:#fff;\n  --max:1200px; --r-xl:18px; --r-lg:14px; --r-md:12px; --shadow-sm:0 6px 18px rgba(15,17,21,.06);\n}\n\n\/* Base *\/\n*{box-sizing:border-box} html,body{margin:0}\nbody{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial;color:var(--ink);background:#fff; -webkit-font-smoothing:antialiased}\n\n\/* Header *\/\nheader{background:#0f0f14;color:#fff;border-bottom:4px solid var(--fvs-red)}\n.header-inner{max-width:var(--max);margin:0 auto;padding:18px 16px;display:flex;gap:12px;align-items:center;justify-content:space-between;flex-wrap:wrap}\n.brand{display:flex;gap:12px;align-items:center}\n.badge{width:42px;height:42px;border-radius:50%;background:var(--fvs-red);display:grid;place-items:center;color:#fff;font-weight:800;box-shadow:0 6px 20px rgba(224,0,0,.35)}\n.header-title h1{margin:0;font-size:clamp(20px,3.4vw,28px);letter-spacing:.2px}\n.header-title p{margin:2px 0 0;color:#d7d7db;font-size:clamp(12px,2.8vw,14px)}\n.badge-pill{background:#16181d;color:#fff;border:1px solid #2b2f36;border-radius:999px;padding:8px 12px;font-size:12px}\n\n\/* Layout *\/\n.wrap{max-width:var(--max);margin:auto;padding:18px 16px}\n.grid{display:grid;grid-template-columns:repeat(12,1fr);gap:14px}\n.col-8{grid-column:span 8}.col-4{grid-column:span 4}\n@media (max-width:1060px){.col-8,.col-4{grid-column:1\/-1}}\n\n\/* Filters *\/\n.filters{\n  position:sticky;top:.5rem;z-index:10;\n  margin:16px 0;padding:12px;background:rgba(247,248,251,.9);\n  border:1px solid var(--line);backdrop-filter:saturate(140%) blur(4px);\n  border-radius:var(--r-xl);display:grid;gap:10px;grid-template-columns:repeat(12,1fr)\n}\n.field{display:flex;flex-direction:column;gap:6px}\nlabel{font-size:12px;color:#61656f}\ninput,select{\n  padding:12px;border:1px solid #ddd;border-radius:12px;background:#fff;font-size:14px;width:100%\n}\n.field.q{grid-column:span 4}\n.field.sponsor{grid-column:span 3}\n.field.ort{grid-column:span 3}\n.field.typ{grid-column:span 2}\n.actions{grid-column:span 12;display:flex;gap:10px;justify-content:flex-end}\n@media (max-width:900px){\n  .filters{grid-template-columns:1fr 1fr}\n  .field.q,.field.sponsor,.field.ort,.field.typ{grid-column:span 1}\n  .actions{grid-column:1\/-1;justify-content:stretch}\n}\n@media (max-width:520px){\n  .filters{grid-template-columns:1fr}\n}\n\n\/* Buttons \u2013 filigran, modern *\/\n.btn{\n  --bg:#fff; --fg:#0f1115; --bd:#e6e6ea; --shadow:0 4px 10px rgba(15,17,21,.06);\n  appearance:none;border:1px solid var(--bd);background:var(--bg);color:var(--fg);\n  border-radius:999px;padding:10px 14px;font-weight:700;font-size:14px;display:inline-flex;align-items:center;gap:8px;\n  cursor:pointer;transition:transform .15s ease, box-shadow .15s ease, border-color .2s ease, background .2s ease, color .2s ease;\n  box-shadow:var(--shadow); text-decoration:none;white-space:nowrap\n}\n.btn:hover{transform:translateY(-1px);box-shadow:0 8px 18px rgba(15,17,21,.1)}\n.btn:active{transform:translateY(0);box-shadow:0 4px 10px rgba(15,17,21,.08)}\n.btn:focus-visible{outline:2px solid var(--fvs-red);outline-offset:2px}\n.btn.primary{--bg:linear-gradient(180deg,#ff3b3b 0%,#e00000 100%);--fg:#fff;--bd:#d70000;--shadow:0 6px 16px rgba(224,0,0,.25)}\n.btn.primary:hover{box-shadow:0 10px 22px rgba(224,0,0,.32)}\n.btn.ghost{--bg:transparent;--fg:var(--fvs-red);--bd:rgba(224,0,0,.45);--shadow:0 0 0 rgba(0,0,0,0)}\n.btn.ghost:hover{background:rgba(224,0,0,.06);border-color:var(--fvs-red)}\n@media (max-width:520px){.btn{flex:1 1 auto;justify-content:center;padding:12px 14px}}\n.btn::after{\n  content:\"\";width:6px;height:10px;\n  mask:url('data:image\/svg+xml;utf8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"6\" height=\"10\" viewBox=\"0 0 8 12\"><path fill=\"black\" d=\"M1.41 0L0 1.41 4.58 6 0 10.59 1.41 12l6-6z\"\/><\/svg>') no-repeat 50% 50%\/contain;\n  background:currentColor;opacity:.85;transform:translateX(0);transition:transform .15s ease,opacity .15s ease\n}\n.btn:hover::after{transform:translateX(2px);opacity:1}\n\n\/* Cards *\/\n.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-xl);padding:14px;box-shadow:var(--shadow-sm)}\n.section-title{margin:0 0 6px;font-size:18px}\n.muted{color:var(--muted)}\n.empty{padding:20px;border:1px dashed #ddd;border-radius:12px;background:#fff}\n\n\/* Job cards *\/\n#jobs{display:grid;gap:10px}\n.job-card{display:grid;grid-template-columns:64px 1fr auto;gap:12px;align-items:center}\n.job-logo{\n  width:64px;height:64px;border-radius:12px;background:#fff;border:1px solid #eee;\n  display:grid;place-items:center;font-weight:800;color:var(--fvs-red);overflow:hidden\n}\n.job-logo img{max-width:100%;max-height:100%;display:block}\n.job-card h3{font-size:clamp(14px,2.8vw,15px);line-height:1.3;font-weight:650;margin:0 0 2px}\n.job-card h3 a{color:#0f1115;text-decoration:none}\n.job-card h3 a:hover{text-decoration:underline}\n.job-meta{display:flex;gap:6px;flex-wrap:wrap;margin-top:4px}\n.chip{font-size:12px;padding:5px 9px;border-radius:999px;background:#f3f4f6;color:#374151;border:1px solid #e5e7eb}\n.chip.red{background:#fff5f5;border-color:#ffd6d6;color:var(--fvs-red)}\n.job-actions{display:flex;gap:8px;align-items:center}\n@media (max-width:820px){\n  .job-card{grid-template-columns:52px 1fr;grid-auto-rows:auto}\n  .job-logo{width:52px;height:52px;border-radius:10px}\n  .job-actions{grid-column:1\/-1;justify-content:flex-start;margin-top:4px}\n}\n\n\/* Sponsor list *\/\n.sponsor-card{display:grid;grid-template-columns:54px 1fr;gap:10px;align-items:center;margin-bottom:10px}\n.sponsor-logo{width:54px;height:54px;border-radius:12px;border:1px solid #eee;display:grid;place-items:center;font-weight:800;overflow:hidden}\n.sponsor-logo img{max-width:100%;max-height:100%}\n.sponsor-card h4{margin:0 0 2px;font-size:15px;font-weight:650}\n<\/style>\n<\/head>\n<body>\n\n<header>\n  <div class=\"header-inner\">\n    <div class=\"brand\">\n      <div class=\"badge\">1904%<\/div>\n      <div class=\"header-title\">\n        <h1>FVS Partner\u2011Jobs<\/h1>\n        <p>Jobs unserer Sponsoren. Live aus WordPress.<\/p>\n      <\/div>\n    <\/div>\n    <div class=\"badge-pill\">Oberschwaben \u2013 Bad Saulgau<\/div>\n  <\/div>\n<\/header>\n\n<main class=\"wrap\">\n  <!-- Filters -->\n  <section class=\"filters\" aria-label=\"Filter\">\n    <div class=\"field q\">\n      <label for=\"q\">Suche<\/label>\n      <input id=\"q\" type=\"search\" placeholder=\"Jobtitel, Skills, Firma \u2026\" inputmode=\"search\" \/>\n    <\/div>\n    <div class=\"field sponsor\">\n      <label for=\"sponsor\">Sponsor<\/label>\n      <select id=\"sponsor\"><option value=\"\">Alle Sponsoren<\/option><\/select>\n    <\/div>\n    <div class=\"field ort\">\n      <label for=\"ort\">Ort<\/label>\n      <input id=\"ort\" placeholder=\"z.\u202fB. Bad Saulgau\" \/>\n    <\/div>\n    <div class=\"field typ\">\n      <label for=\"typ\">Art<\/label>\n      <select id=\"typ\">\n        <option value=\"\">Alle Arten<\/option>\n        <option>Vollzeit<\/option><option>Teilzeit<\/option><option>Ausbildung<\/option><option>Werkstudent<\/option><option>Befristet<\/option>\n      <\/select>\n    <\/div>\n    <div class=\"actions\">\n      <button class=\"btn primary\" id=\"apply\" type=\"button\">Filtern<\/button>\n      <button class=\"btn ghost\" id=\"reset\" type=\"button\">Zur\u00fccksetzen<\/button>\n    <\/div>\n  <\/section>\n\n  <!-- Grid -->\n  <section class=\"grid\" style=\"align-items:start\">\n    <!-- Jobs -->\n    <div class=\"col-8\">\n      <h2 class=\"section-title\">Offene Stellen<\/h2>\n      <p class=\"muted\" id=\"count\">\u2013<\/p>\n      <div id=\"jobs\"><\/div>\n      <div id=\"empty\" class=\"empty\" style=\"display:none\">Keine Treffer. Filter anpassen.<\/div>\n    <\/div>\n\n    <!-- Sponsors -->\n    <aside class=\"col-4\">\n      <h2 class=\"section-title\">Unsere Sponsoren<\/h2>\n      <div id=\"sponsors\"><\/div>\n    <\/aside>\n  <\/section>\n<\/main>\n\n<script>\nconst API = 'https:\/\/fvbadsaulgau.de\/wp-json\/fvs\/v1';\nconst els = {\n  q: document.getElementById('q'),\n  sponsor: document.getElementById('sponsor'),\n  ort: document.getElementById('ort'),\n  typ: document.getElementById('typ'),\n  apply: document.getElementById('apply'),\n  reset: document.getElementById('reset'),\n  jobs: document.getElementById('jobs'),\n  sponsors: document.getElementById('sponsors'),\n  count: document.getElementById('count'),\n  empty: document.getElementById('empty'),\n};\n\n\/\/ Sponsors\nasync function loadSponsors(){\n  const res = await fetch(`${API}\/sponsors`, {credentials:'same-origin'});\n  const data = await res.json();\n\n  \/\/ Dropdown\n  data.forEach(s=>{\n    const o = document.createElement('option');\n    o.value = s.slug; o.textContent = s.name;\n    els.sponsor.appendChild(o);\n  });\n\n  \/\/ Sidebar cards (ohne Kurzvorstellung, Link: Zum Profil)\n  els.sponsors.innerHTML = '';\n  data.forEach(s=>{\n    const profile = s.profile || '#';\n    const card = document.createElement('div');\n    card.className = 'card sponsor-card';\n    card.innerHTML = `\n      <div class=\"sponsor-logo\">\n        ${s.logo ? `<img decoding=\"async\" src=\"${s.logo}\" alt=\"${s.name}\">` : (s.name||'?').slice(0,2).toUpperCase()}\n      <\/div>\n      <div>\n        <h4><a class=\"underline\" href=\"${profile}\" target=\"_blank\" rel=\"noopener\">${s.name}<\/a><\/h4>\n        <a class=\"btn ghost\" href=\"${profile}\" target=\"_blank\" rel=\"noopener\">Zum Profil<\/a>\n      <\/div>`;\n    els.sponsors.appendChild(card);\n  });\n}\n\n\/\/ Jobs\nfunction renderJobs(list){\n  els.jobs.innerHTML = '';\n  list.forEach(j=>{\n    const el = document.createElement('article');\n    el.className = 'card job-card';\n    el.innerHTML = `\n      <div class=\"job-logo\">\n        ${j.logo ? `<img decoding=\"async\" src=\"${j.logo}\" alt=\"${j.company||'Unternehmen'}\">` : (j.company||'?').slice(0,2).toUpperCase()}\n      <\/div>\n      <div>\n        <h3><a href=\"${j.link}\" target=\"_blank\" rel=\"noopener\">${j.title}<\/a><\/h3>\n        <div class=\"job-meta\">\n          <span class=\"chip red\">${j.company||''}<\/span>\n          <span class=\"chip\">${j.location||''}<\/span>\n          <span class=\"chip\">${j.type||''}<\/span>\n        <\/div>\n      <\/div>\n      <div class=\"job-actions\">\n        <a class=\"btn ghost\" href=\"${j.link}\" target=\"_blank\" rel=\"noopener\">Details<\/a>\n        <a class=\"btn primary\" href=\"${j.website||j.link}\" target=\"_blank\" rel=\"noopener\">Jetzt bewerben<\/a>\n      <\/div>`;\n    els.jobs.appendChild(el);\n  });\n  els.count.textContent = `${list.length} Job${list.length===1?'':'s'} gefunden`;\n  els.empty.style.display = list.length ? 'none' : 'block';\n}\n\nasync function loadJobs(){\n  const params = new URLSearchParams();\n  if (els.sponsor.value) params.set('sponsor', els.sponsor.value);\n  if (els.q.value.trim()) params.set('q', els.q.value.trim());\n  const res = await fetch(`${API}\/jobs?${params.toString()}`, {credentials:'same-origin'});\n  let data = await res.json();\n\n  \/\/ Client filters\n  const ort = els.ort.value.trim().toLowerCase();\n  const typ = els.typ.value.trim().toLowerCase();\n  if (ort) data = data.filter(j => (j.location||'').toLowerCase().includes(ort));\n  if (typ) data = data.filter(j => (j.type||'').toLowerCase().includes(typ));\n\n  renderJobs(data);\n}\n\nfunction setSponsor(slug){\n  els.sponsor.value = slug;\n  window.scrollTo({top:0,behavior:'smooth'});\n  loadJobs();\n}\n\n\/\/ Events\nels.apply.addEventListener('click', loadJobs);\nels.reset.addEventListener('click', ()=>{\n  els.q.value=''; els.sponsor.value=''; els.ort.value=''; els.typ.value='';\n  loadJobs();\n});\n['input','change'].forEach(ev=>[els.q,els.sponsor,els.ort,els.typ].forEach(el=>el.addEventListener(ev, loadJobs)));\n\n(async function init(){\n  await loadSponsors();\n  await loadJobs();\n  window.setSponsor = setSponsor;\n})();\n<\/script>\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>FVS Partner\u2011Jobs 1904% FVS Partner\u2011Jobs Jobs unserer Sponsoren. Live aus WordPress. Oberschwaben \u2013 Bad Saulgau Suche Sponsor Alle Sponsoren Ort Art Alle ArtenVollzeitTeilzeitAusbildungWerkstudentBefristet Filtern Zur\u00fccksetzen Offene Stellen \u2013 Keine Treffer. Filter anpassen. Unsere Sponsoren<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"sponsor":[],"class_list":["post-6706","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/fvbadsaulgau.de\/index.php\/wp-json\/wp\/v2\/pages\/6706","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fvbadsaulgau.de\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/fvbadsaulgau.de\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/fvbadsaulgau.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fvbadsaulgau.de\/index.php\/wp-json\/wp\/v2\/comments?post=6706"}],"version-history":[{"count":10,"href":"https:\/\/fvbadsaulgau.de\/index.php\/wp-json\/wp\/v2\/pages\/6706\/revisions"}],"predecessor-version":[{"id":6939,"href":"https:\/\/fvbadsaulgau.de\/index.php\/wp-json\/wp\/v2\/pages\/6706\/revisions\/6939"}],"wp:attachment":[{"href":"https:\/\/fvbadsaulgau.de\/index.php\/wp-json\/wp\/v2\/media?parent=6706"}],"wp:term":[{"taxonomy":"sponsor","embeddable":true,"href":"https:\/\/fvbadsaulgau.de\/index.php\/wp-json\/wp\/v2\/sponsor?post=6706"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}