mail ready
@@ -1 +1,63 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 650" role="img" aria-labelledby="t d"><title id="t">dilib Systemarchitektur</title><desc id="d">Vernetzte Module für künstliche Intelligenz, Datentransfer, Stammdaten und Prozesssteuerung.</desc><defs><linearGradient id="g" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#27d3dc"/><stop offset="1" stop-color="#7057ff"/></linearGradient><linearGradient id="g2" x1="0" y1="1" x2="1" y2="0"><stop stop-color="#8de36c"/><stop offset="1" stop-color="#27d3dc"/></linearGradient><filter id="s" x="-30%" y="-30%" width="160%" height="160%"><feDropShadow dx="0" dy="18" stdDeviation="18" flood-color="#071b2e" flood-opacity=".18"/></filter></defs><rect x="70" y="45" width="620" height="550" rx="56" fill="#fff" opacity=".78" filter="url(#s)"/><path d="M175 173h410M175 325h410M175 477h410M260 115v420M500 115v420" stroke="#b7d8e6" stroke-width="3" stroke-dasharray="9 12"/><g filter="url(#s)"><circle cx="380" cy="325" r="103" fill="url(#g)"/><circle cx="380" cy="325" r="78" fill="#071b2e"/><path d="M336 338c-15-28 3-71 40-75 29-3 54 20 54 49 17 6 28 21 28 39 0 24-19 43-43 43h-75c-26 0-47-21-47-47 0-22 16-41 38-45 1-12 6-24 15-34" fill="none" stroke="#fff" stroke-width="11" stroke-linecap="round"/><circle cx="350" cy="309" r="8" fill="#8de36c"/><circle cx="410" cy="293" r="8" fill="#27d3dc"/><circle cx="390" cy="355" r="8" fill="#fff"/></g><g font-family="system-ui" font-weight="800" font-size="19" text-anchor="middle"><g><circle cx="165" cy="173" r="55" fill="#fff" stroke="#27d3dc" stroke-width="4" filter="url(#s)"/><path d="M140 173h50M165 148v50" stroke="#0697aa" stroke-width="8" stroke-linecap="round"/><text x="165" y="248" fill="#071b2e">TRANSFER</text></g><g><circle cx="595" cy="173" r="55" fill="#fff" stroke="#7057ff" stroke-width="4" filter="url(#s)"/><rect x="567" y="145" width="56" height="56" rx="13" fill="none" stroke="#7057ff" stroke-width="7"/><path d="M580 161h30M580 176h30M580 190h20" stroke="#7057ff" stroke-width="5"/><text x="595" y="248" fill="#071b2e">MASTERDATA</text></g><g><circle cx="165" cy="477" r="55" fill="#fff" stroke="#8de36c" stroke-width="4" filter="url(#s)"/><path d="M165 445v64M133 477h64" stroke="#2e9c77" stroke-width="7"/><circle cx="165" cy="477" r="17" fill="#8de36c"/><text x="165" y="552" fill="#071b2e">PROCESS</text></g><g><circle cx="595" cy="477" r="55" fill="#fff" stroke="#27d3dc" stroke-width="4" filter="url(#s)"/><path d="M570 489c0-31 50-31 50 0" fill="none" stroke="#0697aa" stroke-width="7"/><circle cx="582" cy="461" r="8" fill="#7057ff"/><circle cx="607" cy="461" r="8" fill="#8de36c"/><text x="595" y="552" fill="#071b2e">IDX / OCR</text></g></g><path d="M220 187c56 16 74 35 88 72M540 187c-56 16-74 35-88 72M220 463c56-16 74-35 88-72M540 463c-56-16-74-35-88-72" stroke="url(#g)" stroke-width="7" fill="none" stroke-linecap="round"/><g fill="#fff"><circle cx="288" cy="224" r="7"/><circle cx="472" cy="224" r="7"/><circle cx="288" cy="426" r="7"/><circle cx="472" cy="426" r="7"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 650" role="img" aria-labelledby="t d">
|
||||
<title id="t">dilib Systemarchitektur</title>
|
||||
<desc id="d">Vernetzte Module für künstliche Intelligenz, Datentransfer, Stammdaten und Prozesssteuerung.</desc>
|
||||
<defs>
|
||||
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop stop-color="#27d3dc"/>
|
||||
<stop offset="1" stop-color="#7057ff"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="g2" x1="0" y1="1" x2="1" y2="0">
|
||||
<stop stop-color="#8de36c"/>
|
||||
<stop offset="1" stop-color="#27d3dc"/>
|
||||
</linearGradient>
|
||||
<filter id="s" x="-30%" y="-30%" width="160%" height="160%">
|
||||
<feDropShadow dx="0" dy="18" stdDeviation="18" flood-color="#071b2e" flood-opacity=".18"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<rect x="70" y="45" width="620" height="550" rx="56" fill="#fff" opacity=".78" filter="url(#s)"/>
|
||||
<path d="M175 173h410M175 325h410M175 477h410M260 115v420M500 115v420" stroke="#b7d8e6" stroke-width="3"
|
||||
stroke-dasharray="9 12"/>
|
||||
<g filter="url(#s)">
|
||||
<circle cx="380" cy="325" r="103" fill="url(#g)"/>
|
||||
<circle cx="380" cy="325" r="78" fill="#071b2e"/>
|
||||
<path d="M336 338c-15-28 3-71 40-75 29-3 54 20 54 49 17 6 28 21 28 39 0 24-19 43-43 43h-75c-26 0-47-21-47-47 0-22 16-41 38-45 1-12 6-24 15-34"
|
||||
fill="none" stroke="#fff" stroke-width="11" stroke-linecap="round"/>
|
||||
<circle cx="350" cy="309" r="8" fill="#8de36c"/>
|
||||
<circle cx="410" cy="293" r="8" fill="#27d3dc"/>
|
||||
<circle cx="390" cy="355" r="8" fill="#fff"/>
|
||||
</g>
|
||||
<g font-family="system-ui" font-weight="800" font-size="19" text-anchor="middle">
|
||||
<g>
|
||||
<circle cx="165" cy="173" r="55" fill="#fff" stroke="#27d3dc" stroke-width="4" filter="url(#s)"/>
|
||||
<path d="M140 173h50M165 148v50" stroke="#0697aa" stroke-width="8" stroke-linecap="round"/>
|
||||
<text x="165" y="248" fill="#071b2e">TRANSFER</text>
|
||||
</g>
|
||||
<g>
|
||||
<circle cx="595" cy="173" r="55" fill="#fff" stroke="#7057ff" stroke-width="4" filter="url(#s)"/>
|
||||
<rect x="567" y="145" width="56" height="56" rx="13" fill="none" stroke="#7057ff" stroke-width="7"/>
|
||||
<path d="M580 161h30M580 176h30M580 190h20" stroke="#7057ff" stroke-width="5"/>
|
||||
<text x="595" y="248" fill="#071b2e">MASTERDATA</text>
|
||||
</g>
|
||||
<g>
|
||||
<circle cx="165" cy="477" r="55" fill="#fff" stroke="#8de36c" stroke-width="4" filter="url(#s)"/>
|
||||
<path d="M165 445v64M133 477h64" stroke="#2e9c77" stroke-width="7"/>
|
||||
<circle cx="165" cy="477" r="17" fill="#8de36c"/>
|
||||
<text x="165" y="552" fill="#071b2e">PROCESS</text>
|
||||
</g>
|
||||
<g>
|
||||
<circle cx="595" cy="477" r="55" fill="#fff" stroke="#27d3dc" stroke-width="4" filter="url(#s)"/>
|
||||
<path d="M570 489c0-31 50-31 50 0" fill="none" stroke="#0697aa" stroke-width="7"/>
|
||||
<circle cx="582" cy="461" r="8" fill="#7057ff"/>
|
||||
<circle cx="607" cy="461" r="8" fill="#8de36c"/>
|
||||
<text x="595" y="552" fill="#071b2e">IDX / OCR</text>
|
||||
</g>
|
||||
</g>
|
||||
<path d="M220 187c56 16 74 35 88 72M540 187c-56 16-74 35-88 72M220 463c56-16 74-35 88-72M540 463c-56-16-74-35-88-72"
|
||||
stroke="url(#g)" stroke-width="7" fill="none" stroke-linecap="round"/>
|
||||
<g fill="#fff">
|
||||
<circle cx="288" cy="224" r="7"/>
|
||||
<circle cx="472" cy="224" r="7"/>
|
||||
<circle cx="288" cy="426" r="7"/>
|
||||
<circle cx="472" cy="426" r="7"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 3.5 KiB |
@@ -1 +1,32 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 630"><defs><linearGradient id="b" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#061625"/><stop offset="1" stop-color="#164f74"/></linearGradient><linearGradient id="g" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#27d3dc"/><stop offset="1" stop-color="#7057ff"/></linearGradient></defs><rect width="1200" height="630" fill="url(#b)"/><circle cx="1050" cy="80" r="280" fill="#27d3dc" opacity=".11"/><circle cx="180" cy="620" r="330" fill="#7057ff" opacity=".13"/><g transform="translate(90 100)"><circle cx="105" cy="105" r="92" fill="#fff" opacity=".08"/><circle cx="105" cy="105" r="72" fill="none" stroke="url(#g)" stroke-width="11"/><path d="M33 105h144M105 33c30 30 30 114 0 144M105 33c-30 30-30 114 0 144" fill="none" stroke="#fff" stroke-width="7"/><circle cx="160" cy="50" r="18" fill="#8de36c"/></g><text x="340" y="220" font-family="system-ui" font-size="92" font-weight="800" fill="#fff">dilibworld</text><text x="345" y="285" font-family="system-ui" font-size="34" font-weight="700" letter-spacing="4" fill="#8de6e9">GMBH</text><text x="90" y="430" font-family="system-ui" font-size="52" font-weight="750" fill="#fff">Intelligent. Secure. Connected.</text><text x="90" y="493" font-family="system-ui" font-size="29" fill="#b9d0df">Local AI and data platforms for critical business processes.</text></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 630">
|
||||
<defs>
|
||||
<linearGradient id="b" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop stop-color="#061625"/>
|
||||
<stop offset="1" stop-color="#164f74"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop stop-color="#27d3dc"/>
|
||||
<stop offset="1" stop-color="#7057ff"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect width="1200" height="630" fill="url(#b)"/>
|
||||
<circle cx="1050" cy="80" r="280" fill="#27d3dc" opacity=".11"/>
|
||||
<circle cx="180" cy="620" r="330" fill="#7057ff" opacity=".13"/>
|
||||
<g transform="translate(90 100)">
|
||||
<circle cx="105" cy="105" r="92" fill="#fff" opacity=".08"/>
|
||||
<circle cx="105" cy="105" r="72" fill="none" stroke="url(#g)" stroke-width="11"/>
|
||||
<path d="M33 105h144M105 33c30 30 30 114 0 144M105 33c-30 30-30 114 0 144" fill="none" stroke="#fff"
|
||||
stroke-width="7"/>
|
||||
<circle cx="160" cy="50" r="18" fill="#8de36c"/>
|
||||
</g>
|
||||
<text x="340" y="220" font-family="system-ui" font-size="92" font-weight="800" fill="#fff">dilibworld</text>
|
||||
<text x="345" y="285" font-family="system-ui" font-size="34" font-weight="700" letter-spacing="4" fill="#8de6e9">
|
||||
GMBH
|
||||
</text>
|
||||
<text x="90" y="430" font-family="system-ui" font-size="52" font-weight="750" fill="#fff">Intelligent. Secure.
|
||||
Connected.
|
||||
</text>
|
||||
<text x="90" y="493" font-family="system-ui" font-size="29" fill="#b9d0df">Local AI and data platforms for critical
|
||||
business processes.
|
||||
</text>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.6 KiB |
@@ -1 +1,60 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 520" role="img" aria-labelledby="t"><title id="t">Modulare dilib Plattform</title><defs><linearGradient id="g" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#27d3dc"/><stop offset="1" stop-color="#7057ff"/></linearGradient><linearGradient id="g2" x1="0" y1="1" x2="1" y2="0"><stop stop-color="#8de36c"/><stop offset="1" stop-color="#27d3dc"/></linearGradient><filter id="s" x="-30%" y="-30%" width="160%" height="160%"><feDropShadow dx="0" dy="18" stdDeviation="18" flood-color="#071b2e" flood-opacity=".18"/></filter></defs><rect width="1000" height="520" rx="28" fill="#0b2238"/><g opacity=".15" stroke="#74e8ed"><path d="M0 100h1000M0 260h1000M0 420h1000M170 0v520M500 0v520M830 0v520"/></g><g font-family="system-ui" text-anchor="middle" font-weight="750"><g transform="translate(70 95)"><rect width="180" height="105" rx="20" fill="#fff" opacity=".96"/><text x="90" y="48" font-size="21" fill="#071b2e">Partner & Systeme</text><text x="90" y="76" font-size="15" fill="#5d7185">REST · JSON · XML · CSV</text></g><g transform="translate(305 70)"><rect width="390" height="150" rx="26" fill="url(#g)"/><text x="195" y="65" font-size="30" fill="#fff">dilib Data Platform</text><text x="195" y="103" font-size="17" fill="#e9fbff">Transfer · Masterdata · Process</text></g><g transform="translate(750 95)"><rect width="180" height="105" rx="20" fill="#fff" opacity=".96"/><text x="90" y="48" font-size="21" fill="#071b2e">Lokale Systeme</text><text x="90" y="76" font-size="15" fill="#5d7185">ERP · CRM · DMS · Shop</text></g><g transform="translate(110 340)"><rect width="220" height="105" rx="20" fill="#fff" opacity=".96"/><text x="110" y="47" font-size="23" fill="#071b2e">dilibAI</text><text x="110" y="76" font-size="15" fill="#5d7185">lokal · privat · kontrolliert</text></g><g transform="translate(390 340)"><rect width="220" height="105" rx="20" fill="#fff" opacity=".96"/><text x="110" y="47" font-size="23" fill="#071b2e">dilib IDX</text><text x="110" y="76" font-size="15" fill="#5d7185">OCR · Index · Volltext</text></g><g transform="translate(670 340)"><rect width="220" height="105" rx="20" fill="#fff" opacity=".96"/><text x="110" y="47" font-size="23" fill="#071b2e">Governance</text><text x="110" y="76" font-size="15" fill="#5d7185">Rechte · Audit · Monitoring</text></g></g><g stroke="#27d3dc" stroke-width="7" fill="none" stroke-linecap="round"><path d="M250 147h55M695 147h55M500 220v70M220 340l190-120M500 340V220M780 340L590 220"/></g><g fill="#8de36c"><circle cx="278" cy="147" r="8"/><circle cx="722" cy="147" r="8"/><circle cx="500" cy="280" r="8"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 520" role="img" aria-labelledby="t">
|
||||
<title id="t">Modulare dilib Plattform</title>
|
||||
<defs>
|
||||
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop stop-color="#27d3dc"/>
|
||||
<stop offset="1" stop-color="#7057ff"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="g2" x1="0" y1="1" x2="1" y2="0">
|
||||
<stop stop-color="#8de36c"/>
|
||||
<stop offset="1" stop-color="#27d3dc"/>
|
||||
</linearGradient>
|
||||
<filter id="s" x="-30%" y="-30%" width="160%" height="160%">
|
||||
<feDropShadow dx="0" dy="18" stdDeviation="18" flood-color="#071b2e" flood-opacity=".18"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<rect width="1000" height="520" rx="28" fill="#0b2238"/>
|
||||
<g opacity=".15" stroke="#74e8ed">
|
||||
<path d="M0 100h1000M0 260h1000M0 420h1000M170 0v520M500 0v520M830 0v520"/>
|
||||
</g>
|
||||
<g font-family="system-ui" text-anchor="middle" font-weight="750">
|
||||
<g transform="translate(70 95)">
|
||||
<rect width="180" height="105" rx="20" fill="#fff" opacity=".96"/>
|
||||
<text x="90" y="48" font-size="21" fill="#071b2e">Partner & Systeme</text>
|
||||
<text x="90" y="76" font-size="15" fill="#5d7185">REST · JSON · XML · CSV</text>
|
||||
</g>
|
||||
<g transform="translate(305 70)">
|
||||
<rect width="390" height="150" rx="26" fill="url(#g)"/>
|
||||
<text x="195" y="65" font-size="30" fill="#fff">dilib Data Platform</text>
|
||||
<text x="195" y="103" font-size="17" fill="#e9fbff">Transfer · Masterdata · Process</text>
|
||||
</g>
|
||||
<g transform="translate(750 95)">
|
||||
<rect width="180" height="105" rx="20" fill="#fff" opacity=".96"/>
|
||||
<text x="90" y="48" font-size="21" fill="#071b2e">Lokale Systeme</text>
|
||||
<text x="90" y="76" font-size="15" fill="#5d7185">ERP · CRM · DMS · Shop</text>
|
||||
</g>
|
||||
<g transform="translate(110 340)">
|
||||
<rect width="220" height="105" rx="20" fill="#fff" opacity=".96"/>
|
||||
<text x="110" y="47" font-size="23" fill="#071b2e">dilibAI</text>
|
||||
<text x="110" y="76" font-size="15" fill="#5d7185">lokal · privat · kontrolliert</text>
|
||||
</g>
|
||||
<g transform="translate(390 340)">
|
||||
<rect width="220" height="105" rx="20" fill="#fff" opacity=".96"/>
|
||||
<text x="110" y="47" font-size="23" fill="#071b2e">dilib IDX</text>
|
||||
<text x="110" y="76" font-size="15" fill="#5d7185">OCR · Index · Volltext</text>
|
||||
</g>
|
||||
<g transform="translate(670 340)">
|
||||
<rect width="220" height="105" rx="20" fill="#fff" opacity=".96"/>
|
||||
<text x="110" y="47" font-size="23" fill="#071b2e">Governance</text>
|
||||
<text x="110" y="76" font-size="15" fill="#5d7185">Rechte · Audit · Monitoring</text>
|
||||
</g>
|
||||
</g>
|
||||
<g stroke="#27d3dc" stroke-width="7" fill="none" stroke-linecap="round">
|
||||
<path d="M250 147h55M695 147h55M500 220v70M220 340l190-120M500 340V220M780 340L590 220"/>
|
||||
</g>
|
||||
<g fill="#8de36c">
|
||||
<circle cx="278" cy="147" r="8"/>
|
||||
<circle cx="722" cy="147" r="8"/>
|
||||
<circle cx="500" cy="280" r="8"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 3.2 KiB |
@@ -1 +1,15 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" role="img"><defs><linearGradient id="g" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#27d3dc"/><stop offset="1" stop-color="#7057ff"/></linearGradient></defs><path d="M64 82c-22-8-31-35-17-54 12-17 35-21 52-10 14-7 32-2 40 11 19 2 33 18 33 37 0 21-17 38-38 38H73c-18 0-33-10-39-25" fill="none" stroke="url(#g)" stroke-width="10" stroke-linecap="round"/><circle cx="82" cy="56" r="7" fill="#8de36c"/><circle cx="126" cy="48" r="7" fill="#27d3dc"/><circle cx="112" cy="84" r="7" fill="#7057ff"/><path d="M92 128h40v40H92z" fill="none" stroke="#071b2e" stroke-width="8"/><path d="M101 128v-13a11 11 0 0122 0v13" fill="none" stroke="#071b2e" stroke-width="8"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" role="img">
|
||||
<defs>
|
||||
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop stop-color="#27d3dc"/>
|
||||
<stop offset="1" stop-color="#7057ff"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path d="M64 82c-22-8-31-35-17-54 12-17 35-21 52-10 14-7 32-2 40 11 19 2 33 18 33 37 0 21-17 38-38 38H73c-18 0-33-10-39-25"
|
||||
fill="none" stroke="url(#g)" stroke-width="10" stroke-linecap="round"/>
|
||||
<circle cx="82" cy="56" r="7" fill="#8de36c"/>
|
||||
<circle cx="126" cy="48" r="7" fill="#27d3dc"/>
|
||||
<circle cx="112" cy="84" r="7" fill="#7057ff"/>
|
||||
<path d="M92 128h40v40H92z" fill="none" stroke="#071b2e" stroke-width="8"/>
|
||||
<path d="M101 128v-13a11 11 0 0122 0v13" fill="none" stroke="#071b2e" stroke-width="8"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 725 B After Width: | Height: | Size: 821 B |
@@ -1 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" role="img"><defs><linearGradient id="g" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#27d3dc"/><stop offset="1" stop-color="#7057ff"/></linearGradient></defs><path d="M55 24h67l30 30v122H55z" fill="none" stroke="url(#g)" stroke-width="9" stroke-linejoin="round"/><path d="M122 24v31h30M76 84h54M76 108h54M76 132h35" stroke="#071b2e" stroke-width="8" stroke-linecap="round"/><circle cx="132" cy="144" r="27" fill="#fff" stroke="#7057ff" stroke-width="8"/><path d="M151 163l18 18" stroke="#7057ff" stroke-width="9" stroke-linecap="round"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" role="img">
|
||||
<defs>
|
||||
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop stop-color="#27d3dc"/>
|
||||
<stop offset="1" stop-color="#7057ff"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path d="M55 24h67l30 30v122H55z" fill="none" stroke="url(#g)" stroke-width="9" stroke-linejoin="round"/>
|
||||
<path d="M122 24v31h30M76 84h54M76 108h54M76 132h35" stroke="#071b2e" stroke-width="8" stroke-linecap="round"/>
|
||||
<circle cx="132" cy="144" r="27" fill="#fff" stroke="#7057ff" stroke-width="8"/>
|
||||
<path d="M151 163l18 18" stroke="#7057ff" stroke-width="9" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 606 B After Width: | Height: | Size: 682 B |
@@ -1 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" role="img"><defs><linearGradient id="g" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#27d3dc"/><stop offset="1" stop-color="#7057ff"/></linearGradient></defs><ellipse cx="100" cy="46" rx="57" ry="24" fill="none" stroke="url(#g)" stroke-width="9"/><path d="M43 46v76c0 13 25 24 57 24s57-11 57-24V46M43 83c0 13 25 24 57 24s57-11 57-24" fill="none" stroke="url(#g)" stroke-width="9"/><path d="M78 170h44" stroke="#071b2e" stroke-width="9" stroke-linecap="round"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" role="img">
|
||||
<defs>
|
||||
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop stop-color="#27d3dc"/>
|
||||
<stop offset="1" stop-color="#7057ff"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<ellipse cx="100" cy="46" rx="57" ry="24" fill="none" stroke="url(#g)" stroke-width="9"/>
|
||||
<path d="M43 46v76c0 13 25 24 57 24s57-11 57-24V46M43 83c0 13 25 24 57 24s57-11 57-24" fill="none" stroke="url(#g)"
|
||||
stroke-width="9"/>
|
||||
<path d="M78 170h44" stroke="#071b2e" stroke-width="9" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 529 B After Width: | Height: | Size: 610 B |
@@ -1 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" role="img"><defs><linearGradient id="g" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#27d3dc"/><stop offset="1" stop-color="#7057ff"/></linearGradient></defs><circle cx="100" cy="100" r="64" fill="none" stroke="url(#g)" stroke-width="10" stroke-dasharray="14 10"/><circle cx="100" cy="100" r="31" fill="none" stroke="#071b2e" stroke-width="10"/><path d="M100 54v18M100 128v18M54 100h18M128 100h18" stroke="#071b2e" stroke-width="10" stroke-linecap="round"/><circle cx="100" cy="100" r="9" fill="#8de36c"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" role="img">
|
||||
<defs>
|
||||
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop stop-color="#27d3dc"/>
|
||||
<stop offset="1" stop-color="#7057ff"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<circle cx="100" cy="100" r="64" fill="none" stroke="url(#g)" stroke-width="10" stroke-dasharray="14 10"/>
|
||||
<circle cx="100" cy="100" r="31" fill="none" stroke="#071b2e" stroke-width="10"/>
|
||||
<path d="M100 54v18M100 128v18M54 100h18M128 100h18" stroke="#071b2e" stroke-width="10" stroke-linecap="round"/>
|
||||
<circle cx="100" cy="100" r="9" fill="#8de36c"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 574 B After Width: | Height: | Size: 650 B |
@@ -1 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" role="img"><defs><linearGradient id="g" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#27d3dc"/><stop offset="1" stop-color="#7057ff"/></linearGradient></defs><path d="M34 72h108M118 48l24 24-24 24M166 136H58M82 112l-24 24 24 24" fill="none" stroke="url(#g)" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/><circle cx="38" cy="72" r="12" fill="#8de36c"/><circle cx="162" cy="136" r="12" fill="#7057ff"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" role="img">
|
||||
<defs>
|
||||
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop stop-color="#27d3dc"/>
|
||||
<stop offset="1" stop-color="#7057ff"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path d="M34 72h108M118 48l24 24-24 24M166 136H58M82 112l-24 24 24 24" fill="none" stroke="url(#g)"
|
||||
stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<circle cx="38" cy="72" r="12" fill="#8de36c"/>
|
||||
<circle cx="162" cy="136" r="12" fill="#7057ff"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 489 B After Width: | Height: | Size: 570 B |
@@ -1,50 +1,75 @@
|
||||
(() => {
|
||||
const menuButton = document.querySelector('[data-menu-toggle]');
|
||||
const mobileNav = document.querySelector('[data-mobile-nav]');
|
||||
if (menuButton && mobileNav) {
|
||||
menuButton.addEventListener('click', () => {
|
||||
const open = mobileNav.classList.toggle('open');
|
||||
menuButton.classList.toggle('open', open);
|
||||
menuButton.setAttribute('aria-expanded', String(open));
|
||||
const menuButton = document.querySelector('[data-menu-toggle]');
|
||||
const mobileNav = document.querySelector('[data-mobile-nav]');
|
||||
if (menuButton && mobileNav) {
|
||||
menuButton.addEventListener('click', () => {
|
||||
const open = mobileNav.classList.toggle('open');
|
||||
menuButton.classList.toggle('open', open);
|
||||
menuButton.setAttribute('aria-expanded', String(open));
|
||||
});
|
||||
mobileNav.querySelectorAll('a').forEach(a => a.addEventListener('click', () => {
|
||||
mobileNav.classList.remove('open');
|
||||
menuButton.classList.remove('open');
|
||||
menuButton.setAttribute('aria-expanded', 'false');
|
||||
}));
|
||||
}
|
||||
|
||||
const observer = 'IntersectionObserver' in window ? new IntersectionObserver(entries => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
entry.target.classList.add('visible');
|
||||
observer.unobserve(entry.target);
|
||||
}
|
||||
});
|
||||
}, {threshold: .12}) : null;
|
||||
document.querySelectorAll('.reveal-on-scroll').forEach(el => observer ? observer.observe(el) : el.classList.add('visible'));
|
||||
|
||||
document.querySelectorAll('[data-contact-form]').forEach(form => {
|
||||
let challengePromise = fetch('/api/contact', {credentials: 'same-origin', cache: 'no-store'}).then(r => {
|
||||
if (!r.ok) throw new Error('challenge');
|
||||
return r.json();
|
||||
}).catch(() => null);
|
||||
form.addEventListener('submit', async event => {
|
||||
event.preventDefault();
|
||||
if (!form.reportValidity()) return;
|
||||
const fd = new FormData(form);
|
||||
const lang = document.documentElement.lang || 'de';
|
||||
const status = form.querySelector('.form-status');
|
||||
const button = form.querySelector('button[type="submit"]');
|
||||
button.disabled = true;
|
||||
status.style.display = 'block';
|
||||
status.textContent = lang === 'de' ? 'Nachricht wird gesendet …' : 'Sending message …';
|
||||
try {
|
||||
const challenge = await challengePromise;
|
||||
if (!challenge?.token) throw new Error('challenge');
|
||||
const {token} = challenge;
|
||||
const payload = Object.fromEntries(fd.entries());
|
||||
payload.token = token;
|
||||
payload.lang = lang;
|
||||
const response = await fetch('/api/contact', {
|
||||
method: 'POST', credentials: 'same-origin',
|
||||
headers: {'Content-Type': 'application/json'},
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
if (!response.ok) throw new Error('send');
|
||||
status.textContent = lang === 'de' ? 'Vielen Dank. Ihre Nachricht wurde übermittelt.' : 'Thank you. Your message has been submitted.';
|
||||
form.reset();
|
||||
challengePromise = fetch('/api/contact', {credentials: 'same-origin', cache: 'no-store'}).then(r => r.json()).catch(() => null);
|
||||
} catch (_) {
|
||||
status.textContent = lang === 'de' ? 'Die Nachricht konnte nicht gesendet werden. Bitte versuchen Sie es später erneut oder schreiben Sie an info@dilibworld.com.' : 'Your message could not be sent. Please try again later or email info@dilibworld.com.';
|
||||
} finally {
|
||||
button.disabled = false;
|
||||
}
|
||||
});
|
||||
});
|
||||
mobileNav.querySelectorAll('a').forEach(a => a.addEventListener('click', () => {
|
||||
mobileNav.classList.remove('open'); menuButton.classList.remove('open');
|
||||
menuButton.setAttribute('aria-expanded', 'false');
|
||||
|
||||
const notice = document.querySelector('[data-cookie-notice]');
|
||||
const choice = localStorage.getItem('dilibworld-cookie-choice');
|
||||
if (notice && !choice) notice.classList.add('show');
|
||||
document.querySelectorAll('[data-cookie-choice]').forEach(btn => btn.addEventListener('click', () => {
|
||||
localStorage.setItem('dilibworld-cookie-choice', btn.dataset.cookieChoice);
|
||||
notice?.classList.remove('show');
|
||||
}));
|
||||
}
|
||||
|
||||
const observer = 'IntersectionObserver' in window ? new IntersectionObserver(entries => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) { entry.target.classList.add('visible'); observer.unobserve(entry.target); }
|
||||
});
|
||||
}, {threshold: .12}) : null;
|
||||
document.querySelectorAll('.reveal-on-scroll').forEach(el => observer ? observer.observe(el) : el.classList.add('visible'));
|
||||
|
||||
document.querySelectorAll('[data-mailto-form]').forEach(form => {
|
||||
form.addEventListener('submit', event => {
|
||||
event.preventDefault();
|
||||
if (!form.reportValidity()) return;
|
||||
const fd = new FormData(form);
|
||||
const lang = document.documentElement.lang || 'de';
|
||||
const lines = [];
|
||||
for (const [key, value] of fd.entries()) {
|
||||
if (key !== 'privacy' && key !== 'website') lines.push(`${key}: ${value}`);
|
||||
}
|
||||
const subject = lang === 'de' ? 'Anfrage über dilibworld.com' : 'Enquiry via dilibworld.com';
|
||||
const email = form.dataset.recipient || 'info@dilibworld.com';
|
||||
window.location.href = `mailto:${email}?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(lines.join('\n'))}`;
|
||||
const status = form.querySelector('.form-status');
|
||||
if (status) { status.style.display = 'block'; }
|
||||
});
|
||||
});
|
||||
|
||||
const notice = document.querySelector('[data-cookie-notice]');
|
||||
const choice = localStorage.getItem('dilibworld-cookie-choice');
|
||||
if (notice && !choice) notice.classList.add('show');
|
||||
document.querySelectorAll('[data-cookie-choice]').forEach(btn => btn.addEventListener('click', () => {
|
||||
localStorage.setItem('dilibworld-cookie-choice', btn.dataset.cookieChoice);
|
||||
notice?.classList.remove('show');
|
||||
}));
|
||||
|
||||
document.querySelectorAll('[data-current-year]').forEach(el => el.textContent = new Date().getFullYear());
|
||||
})();
|
||||
document.querySelectorAll('[data-current-year]').forEach(el => el.textContent = new Date().getFullYear());
|
||||
})();
|
||||
|
||||