PageSourceSearch

https://www.hwk-konstanz.de/handwerk/

html hwk-konstanz.de collected 2026-10-04 04:27:50 UTC 285,724 bytes, 4,010 lines download raw bytes

1<!DOCTYPE html>
2<html lang="de">
3	<head>
4        
5        		<meta charset="UTF-8">
6		<meta http-equiv="X-UA-Compatible" content="IE=edge">
7		<meta name="viewport" content="width=device-width, initial-scale=1">
8        <title>Das Handwerk in der Region &raquo; Handwerkskammer Konstanz</title>
9    		<link rel="shortcut icon" href="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/img/favicon.ico" type="image/x-icon" />
10    		<link rel="apple-touch-icon" href="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/img/apple-touch-icon-precomposed.png" />
11		<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
12
13	<!-- This site is optimized with the Yoast SEO plugin v28.6 - https://yoast.com/product/yoast-seo-wordpress/ -->
14	<link rel="canonical" href="https://www.hwk-konstanz.de/handwerk/" />
15	<meta property="og:locale" content="de_DE" />
16	<meta property="og:type" content="article" />
17	<meta property="og:title" content="Das Handwerk in der Region - Handwerkskammer Konstanz" />
18	<meta property="og:url" content="https://www.hwk-konstanz.de/handwerk/" />
19	<meta property="og:site_name" content="Handwerkskammer Konstanz" />
20	<meta property="article:modified_time" content="2026-09-28T11:59:57+00:00" />
21	<meta name="twitter:card" content="summary_large_image" />
22	<!-- / Yoast SEO plugin. -->
23
24
25<link rel="preload" href="https://www.hwk-konstanz.de/wp-content/cache/borlabs-cookie/1/borlabs-cookie-config-de.json.js?ver=3.4.5-88" as="script">
26<link rel="preload" href="https://www.hwk-konstanz.de/wp-content/cache/borlabs-cookie/1/borlabs-cookie-1-de.css?ver=3.4.5-51" as="style">
27<link rel="preload" href="https://www.hwk-konstanz.de/wp-content/plugins/borlabs-cookie/assets/javascript/borlabs-cookie-prioritize.min.js?ver=3.4.5" as="script">
28<style id="wp-img-auto-sizes-contain-inline-css">
29img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
30/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
31</style>
32<link rel='stylesheet' id='wp-block-library-css' href='https://www.hwk-konstanz.de/wp-includes/css/dist/block-library/style.min.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' />
33<style id="global-styles-inline-css">
34:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
34--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-family--source-sans: 'Source Sans 3', 'Segoe UI', sans-serif;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:root { --wp--style--global--content-size: 800px;--wp--style--global--wide-size: 1200px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{font-family: var(--wp--preset--font-family--source-sans);padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
34.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-source-sans-font-family{font-family: var(--wp--preset--font-family--source-sans) !important;}
35:root :where(.wp-block-icon svg){width: 24px;}
36:where(.wp-block-gallery.is-layout-flex){gap: var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );}:where(.wp-block-gallery.is-layout-grid){gap: var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );}
37:where(.wp-block-latest-posts.is-layout-flex){gap: 1.25em;}:where(.wp-block-latest-posts.is-layout-grid){gap: 1.25em;}
38:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
39:where(.wp-block-term-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-term-template.is-layout-grid){gap: 1.25em;}
40:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
41:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}
42/*# sourceURL=global-styles-inline-css */
43</style>
44<link rel='stylesheet' id='uniplus-base-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/css/uniplus_base.css?ver=1.0.5' media='all' />
45<link rel='stylesheet' id='leaflet-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/dist/leaflet/leaflet.css?ver=1.0.0' media='all' />
46<link rel='stylesheet' id='leaflet-fullscreen-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/dist/leaflet-fullscreen/leaflet-fullscreen.css?ver=1.0.0' media='all' />
47<link rel='stylesheet' id='styles-css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-angebotsboerseV2/css/angebotsboerse-styles.css?ver=1.0.1' media='all' />
48<link rel='stylesheet' id='bschulen-v2-css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-berufsdatenbank/css/bschulen-v2.css?ver=1.0.0' media='all' />
49<link rel='stylesheet' id='ladda-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/ladda.min.css?ver=1.0' media='all' />
50<link rel='stylesheet' id='ladda-theme-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/ladda-themeless.min.css?ver=1.0' media='all' />
51<link rel='stylesheet' id='uniplus-clientside-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/uniplus_clientside.css?ver=1.0.7' media='all' />
52<link rel='stylesheet' id='uniplus-mp-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/uni_mp.css?ver=1.1' media='all' />
53<link rel='stylesheet' id='uniplus-style-1-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/uniplus.css?ver=1.0' media='all' />
54<link rel='stylesheet' id='jquery-ui-css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/jquery-ui.css?ver=1.0' media='all' />
55<link rel='stylesheet' id='jquery-confirm-css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/jquery-confirm.css?ver=1.0' media='all' />
56<link rel='stylesheet' id='multiselect-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/multiselect.css?ver=1.0' media='all' />
57<link rel='stylesheet' id='animate-css-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/animate.css?ver=1.0' media='all' />
58<link rel='stylesheet' id='pure-css-grid-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/css/grids-min.css?ver=1.0' media='all' />
59<link rel='stylesheet' id='evaluation-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-evaluation/css/evaluation.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' />
60<link rel='stylesheet' id='eval-callout-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-evaluation/css/callouts.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' />
61<link rel='stylesheet' id='uni_faq.css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-faq/css/uni_faq_style.css?ver=1.1.1' media='all' />
62<style id="ufe-styles-inline-css">
63
64        .ufe-wrap *{box-sizing:border-box;}
65        .ufe-panel{background:#fff;border:1px solid #d6dce8;border-radius:8px;overflow:hidden;font-family:system-ui,-apple-system,sans-serif;max-width:640px;}
66        .ufe-header{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid #d6dce8;background:#f4f6fa;}
67        .ufe-header-left{display:flex;flex-direction:column;gap:2px;}
68        .ufe-heading{font-size:13px;font-weight:600;color:#1b2b3c;letter-spacing:.01em;text-transform:uppercase;}
69        .ufe-subheading{font-size:12px;color:#6b7f96;font-variant-numeric:tabular-nums;}
70        .ufe-btn-all{display:inline-flex;align-items:center;gap:6px;background:#2e5fa3;color:#fff;font-size:12.5px;font-weight:500;padding:7px 14px;border-radius:5px;text-decoration:none;border:none;cursor:pointer;transition:background .15s;}
71        .ufe-btn-all:hover{background:#1e4a85;color:#fff;}
72        .ufe-btn-all svg{flex-shrink:0;}
73        .ufe-list{padding:6px 0;}
74        .ufe-row{display:flex;align-items:center;padding:9px 18px;gap:10px;border-bottom:1px solid #edf0f5;transition:background .1s;}
75        .ufe-row:last-child{border-bottom:none;}
76        .ufe-row:hover{background:#f7f9fd;}
77        .ufe-name{flex:1;font-size:13.5px;color:#1b2b3c;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
78        .ufe-badge{flex-shrink:0;font-size:11.5px;font-weight:600;color:#2e5fa3;background:#e6ecf6;border-radius:12px;padding:2px 9px;font-variant-numeric:tabular-nums;letter-spacing:.01em;}
79        .ufe-btn-dl{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:5px;color:#4c6ead;text-decoration:none;border:1px solid #c8d4e8;background:#fff;transition:background .1s,color .1s,border-color .1s;}
80        .ufe-btn-dl:hover{background:#2e5fa3;color:#fff;border-color:#2e5fa3;}
81        .ufe-btn-dl svg{display:block;}
82        .ufe-empty{padding:20px 18px;font-size:13px;color:#6b7f96;}
83        .ufe-table-wrap{margin-top:24px;overflow-x:auto;}
84        .ufe-table{width:100%;border-collapse:collapse;font-family:system-ui,-apple-system,sans-serif;font-size:13px;}
85        .ufe-table th{background:#f4f6fa;color:#4c6070;font-size:11.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;padding:9px 12px;border-bottom:2px solid #d6dce8;text-align:left;white-space:nowrap;}
86        .ufe-table td{padding:8px 12px;border-bottom:1px solid #edf0f5;color:#1b2b3c;vertical-align:top;}
87        .ufe-table tr:last-child td{border-bottom:none;}
88        .ufe-table tbody tr:hover td{background:#f7f9fd;}
89        .ufe-table .ufe-td-id{color:#8898a8;font-variant-numeric:tabular-nums;font-size:12px;white-space:nowrap;}
90        .ufe-table .ufe-td-type{font-weight:500;white-space:nowrap;}
91        .ufe-table .ufe-td-date{color:#6b7f96;font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px;}
92        .ufe-meta-table{width:100%;border-collapse:collapse;margin:0;}
93        .ufe-meta-table td{padding:3px 0;font-size:12px;vertical-align:top;border:none;}
94        .ufe-meta-table td:first-child{color:#6b7f96;width:180px;padding-right:12px;white-space:nowrap;}
95        .ufe-meta-table td:last-child{color:#1b2b3c;}
96        
97/*# sourceURL=ufe-styles-inline-css */
98</style>
99<link rel='stylesheet' id='uni-formularwesen-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-formularwesen/view/style.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' />
100<link rel='stylesheet' id='gewewrke-css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-gewerkedatenbank/css/gewerksanzeige-styles.css?ver=1.0.3' media='all' />
101<link rel='stylesheet' id='uni-akt-llr-detail-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-lehrlingsrolle-aktive/css/detail.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' />
102<link rel='stylesheet' id='uni_pruefer_v2_css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-prueferportal-v2/css/prueferportalv2.css?ver=1.0' media='all' />
103<link rel='stylesheet' id='uni_pruefungsdaten_css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-pruefungsdaten/css/uni-pruefungsdaten.css?ver=1.1' media='all' />
104<link rel='stylesheet' id='gebarchiv.css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-raumverwaltung/css/gebarchiv.css?ver=1.0.1' media='all' />
105<link rel='stylesheet' id='uni-rvw-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-rechteverwaltung/css/rvw-style.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' />
106<link rel='stylesheet' id='speiseplan.css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-speiseplan/css/speiseplan.css?ver=1.0.1' media='all' />
107<link rel='stylesheet' id='veranstaltungs-tabelle-css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-veranstaltungen/css/veranstaltungen.css?ver=1.0.1' media='all' />
108<link rel='stylesheet' id='uni-gpr-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vue-gpr/view/css/uni-gpr-style.css?ver=1.0.2' media='all' />
109<link rel='stylesheet' id='uni-gpr-style-ergebniserfassung-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vue-gpr/view/css/uni-gpr-style-ergebniserfassung.css?ver=1.0.0' media='all' />
110<link rel='stylesheet' id='uni-vue-lvt-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vue-lvt/css/uni_vue_lvt_style.css?ver=1.1' media='all' />
111<link rel='stylesheet' id='select2_style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vuejs/helper/../dist/select2-4.0.13/css/select2.css?ver=4.0.13' media='all' />
112<link rel='stylesheet' id='select2_style_min-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vuejs/helper/../dist/select2-4.0.13/css/select2.min.css?ver=4.0.13' media='all' />
113<link rel='stylesheet' id='uni-warenkorb-callout-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-warenkorb-vuejs/css/callouts.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' />
114<link rel='stylesheet' id='uni-warenkorb-style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-warenkorb-vuejs/css/warenkorb.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' />
115<link rel='stylesheet' id='uni_zulassungsantrag_gp_style.css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-zulassungsantrag-gp/css/uni_zulassungsantrag_gp_style.css?ver=1.0' media='all' />
116<link rel='stylesheet' id='uni_zulassungsantrag_mpfp_style.css-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-zulassungsantrag-mpfp/css/uni_zulassungsantrag_mpfp_style.css?ver=1.0' media='all' />
117<link rel='stylesheet' id='style-common-css' href='https://www.hwk-konstanz.de/wp-content/themes/chatty/css/common.min.css?ver=1791085335' media='all' />
118<style id="style-common-inline-css">
119
120                img, div.bg-image, .appear {
121					opacity: 1;
122				}
123/*# sourceURL=style-common-inline-css */
124</style>
125<link rel='stylesheet' id='style-main-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/css/main.min.css?ver=1791085335' media='screen' />
126<link rel='stylesheet' id='style-print-css' href='https://www.hwk-konstanz.de/wp-content/themes/chatty/css/print.min.css?ver=1791085335' media='print' />
127<style id="borlabs-cookie-critical-inline-css">
128body div.brlbs-cmpnt-container a,body div.brlbs-cmpnt-container abbr,body div.brlbs-cmpnt-container acronym,body div.brlbs-cmpnt-container address,body div.brlbs-cmpnt-container applet,body div.brlbs-cmpnt-container article,body div.brlbs-cmpnt-container aside,body div.brlbs-cmpnt-container audio,body div.brlbs-cmpnt-container b,body div.brlbs-cmpnt-container big,body div.brlbs-cmpnt-container blockquote,body div.brlbs-cmpnt-container canvas,body div.brlbs-cmpnt-container caption,body div.brlbs-cmpnt-container center,body div.brlbs-cmpnt-container cite,body div.brlbs-cmpnt-container code,body div.brlbs-cmpnt-container dd,body div.brlbs-cmpnt-container del,body div.brlbs-cmpnt-container details,body div.brlbs-cmpnt-container dfn,body div.brlbs-cmpnt-container div,body div.brlbs-cmpnt-container dl,body div.brlbs-cmpnt-container dt,body div.brlbs-cmpnt-container em,body div.brlbs-cmpnt-container embed,body div.brlbs-cmpnt-container fieldset,body div.brlbs-cmpnt-container figcaption,body div.brlbs-cmpnt-container figure,body div.brlbs-cmpnt-container footer,body div.brlbs-cmpnt-container form,body div.brlbs-cmpnt-container h1,body div.brlbs-cmpnt-container h2,body div.brlbs-cmpnt-container h3,body div.brlbs-cmpnt-container h4,body div.brlbs-cmpnt-container h5,body div.brlbs-cmpnt-container h6,body div.brlbs-cmpnt-container header,body div.brlbs-cmpnt-container hgroup,body div.brlbs-cmpnt-container i,body div.brlbs-cmpnt-container iframe,body div.brlbs-cmpnt-container img,body div.brlbs-cmpnt-container ins,body div.brlbs-cmpnt-container kbd,body div.brlbs-cmpnt-container label,body div.brlbs-cmpnt-container legend,body div.brlbs-cmpnt-container li,body div.brlbs-cmpnt-container mark,body div.brlbs-cmpnt-container menu,body div.brlbs-cmpnt-container nav,body div.brlbs-cmpnt-container object,body div.brlbs-cmpnt-container ol,body div.brlbs-cmpnt-container output,body div.brlbs-cmpnt-container p,body div.brlbs-cmpnt-container pre,body div.brlbs-cmpnt-container q,body div.brlbs-cmpnt-container ruby,body div.brlbs-cmpnt-container s,body div.brlbs-cmpnt-container samp,body div.brlbs-cmpnt-container section,body div.brlbs-cmpnt-container small,body div.brlbs-cmpnt-container span,body div.brlbs-cmpnt-container strike,body div.brlbs-cmpnt-container strong,body div.brlbs-cmpnt-container sub,body div.brlbs-cmpnt-container summary,body div.brlbs-cmpnt-container sup,body div.brlbs-cmpnt-container table,body div.brlbs-cmpnt-container tbody,body div.brlbs-cmpnt-container td,body div.brlbs-cmpnt-container tfoot,body div.brlbs-cmpnt-container th,body div.brlbs-cmpnt-container thead,body div.brlbs-cmpnt-container time,body div.brlbs-cmpnt-container tr,body div.brlbs-cmpnt-container tt,body div.brlbs-cmpnt-container u,body div.brlbs-cmpnt-container ul,body div.brlbs-cmpnt-container var,body div.brlbs-cmpnt-container video{margin:0;padding:0;border:0;font-size:100%;font-family:inherit;vertical-align:baseline}body div.brlbs-cmpnt-container article,body div.brlbs-cmpnt-container aside,body div.brlbs-cmpnt-container details,body div.brlbs-cmpnt-container figcaption,body div.brlbs-cmpnt-container figure,body div.brlbs-cmpnt-container footer,body div.brlbs-cmpnt-container header,body div.brlbs-cmpnt-container hgroup,body div.brlbs-cmpnt-container menu,body div.brlbs-cmpnt-container nav,body div.brlbs-cmpnt-container section{dis
128play:block}body div.brlbs-cmpnt-container blockquote,body div.brlbs-cmpnt-container q{quotes:none}body div.brlbs-cmpnt-container blockquote:after,body div.brlbs-cmpnt-container blockquote:before,body div.brlbs-cmpnt-container q:after,body div.brlbs-cmpnt-container q:before{content:none}body div.brlbs-cmpnt-container table{border-spacing:0}body div.brlbs-cmpnt-container,body div.brlbs-cmpnt-container *{box-sizing:border-box;color:inherit;font-family:inherit;line-height:inherit;position:static;inset:auto;width:auto;height:auto}body div.brlbs-cmpnt-container button,body div.brlbs-cmpnt-container input,body div.brlbs-cmpnt-container optgroup,body div.brlbs-cmpnt-container select,body div.brlbs-cmpnt-container textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}body div.brlbs-cmpnt-container button:after,body div.brlbs-cmpnt-container button:before{content:none}body div.brlbs-cmpnt-container button,body div.brlbs-cmpnt-container select{text-transform:none}body div.brlbs-cmpnt-container [type=button],body div.brlbs-cmpnt-container [type=reset],body div.brlbs-cmpnt-container [type=submit],body div.brlbs-cmpnt-container button{-webkit-appearance:button}body div.brlbs-cmpnt-container ::-moz-focus-inner{border-style:none;padding:0}body div.brlbs-cmpnt-container :-moz-focusring{outline:1px dotted ButtonText}body div.brlbs-cmpnt-container :-moz-ui-invalid{box-shadow:none}body div.brlbs-cmpnt-container legend{padding:0}body div.brlbs-cmpnt-container progress{vertical-align:baseline}body div.brlbs-cmpnt-container ::-webkit-inner-spin-button,body div.brlbs-cmpnt-container ::-webkit-outer-spin-button{height:auto}body div.brlbs-cmpnt-container [type=search]{-webkit-appearance:textfield;outline-offset:-2px}body div.brlbs-cmpnt-container ::-webkit-search-decoration{-webkit-appearance:none}body div.brlbs-cmpnt-container ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}body div.brlbs-cmpnt-container summary{display:list-item}body div.brlbs-cmpnt-container blockquote,body div.brlbs-cmpnt-container dd,body div.brlbs-cmpnt-container dl,body div.brlbs-cmpnt-container figure,body div.brlbs-cmpnt-container h1,body div.brlbs-cmpnt-container h2,body div.brlbs-cmpnt-container h3,body div.brlbs-cmpnt-container h4,body div.brlbs-cmpnt-container h5,body div.brlbs-cmpnt-container h6,body div.brlbs-cmpnt-container hr,body div.brlbs-cmpnt-container p,body div.brlbs-cmpnt-container pre{margin:0}body div.brlbs-cmpnt-container button{background-color:transparent;background-image:none}body div.brlbs-cmpnt-container button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}body div.brlbs-cmpnt-container fieldset{margin:0;padding:0}body div.brlbs-cmpnt-container ol,body div.brlbs-cmpnt-container ul{list-style:none;margin:0;padding:0}body div.brlbs-cmpnt-container *,body div.brlbs-cmpnt-container :after,body div.brlbs-cmpnt-container :before{box-sizing:border-box;border-color:#e5e7eb;border-style:solid;border-width:0}body div.brlbs-cmpnt-container hr{border-top-width:1px}body div.brlbs-cmpnt-container img{border-style:solid}body div.brlbs-cmpnt-container textarea{resize:vertical}body div.brlbs-cmpnt-container input::-moz-placeholder,body div.brlbs-cmpnt-container textarea::-moz-placeholder{color:#9ca3af}body div.brlbs-cmpnt-container input::placeholder,body div.brlbs-cmpnt-container textarea::placeholder{color:#9ca3af}body div.brlbs-cmpnt-container [role=button],body div.brlbs-cmpnt-container button{curs
128or:pointer}body div.brlbs-cmpnt-container table{border-collapse:collapse}body div.brlbs-cmpnt-container h1,body div.brlbs-cmpnt-container h2,body div.brlbs-cmpnt-container h3,body div.brlbs-cmpnt-container h4,body div.brlbs-cmpnt-container h5,body div.brlbs-cmpnt-container h6{font-size:inherit;font-weight:inherit}body div.brlbs-cmpnt-container a{color:inherit;text-decoration:inherit}body div.brlbs-cmpnt-container button,body div.brlbs-cmpnt-container input,body div.brlbs-cmpnt-container optgroup,body div.brlbs-cmpnt-container select,body div.brlbs-cmpnt-container textarea{padding:0;line-height:inherit;color:inherit}body div.brlbs-cmpnt-container code,body div.brlbs-cmpnt-container kbd,body div.brlbs-cmpnt-container pre,body div.brlbs-cmpnt-container samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}body div.brlbs-cmpnt-container audio,body div.brlbs-cmpnt-container canvas,body div.brlbs-cmpnt-container embed,body div.brlbs-cmpnt-container iframe,body div.brlbs-cmpnt-container img,body div.brlbs-cmpnt-container object,body div.brlbs-cmpnt-container svg,body div.brlbs-cmpnt-container video{display:block;vertical-align:middle}body div.brlbs-cmpnt-container img,body div.brlbs-cmpnt-container video{max-width:100%;height:auto}body div.brlbs-cmpnt-container [multiple],body div.brlbs-cmpnt-container [type=date],body div.brlbs-cmpnt-container [type=datetime-local],body div.brlbs-cmpnt-container [type=email],body div.brlbs-cmpnt-container [type=month],body div.brlbs-cmpnt-container [type=number],body div.brlbs-cmpnt-container [type=password],body div.brlbs-cmpnt-container [type=search],body div.brlbs-cmpnt-container [type=tel],body div.brlbs-cmpnt-container [type=text],body div.brlbs-cmpnt-container [type=time],body div.brlbs-cmpnt-container [type=url],body div.brlbs-cmpnt-container [type=week],body div.brlbs-cmpnt-container select,body div.brlbs-cmpnt-container textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem}body div.brlbs-cmpnt-container [multiple]:focus,body div.brlbs-cmpnt-container [type=date]:focus,body div.brlbs-cmpnt-container [type=datetime-local]:focus,body div.brlbs-cmpnt-container [type=email]:focus,body div.brlbs-cmpnt-container [type=month]:focus,body div.brlbs-cmpnt-container [type=number]:focus,body div.brlbs-cmpnt-container [type=password]:focus,body div.brlbs-cmpnt-container [type=search]:focus,body div.brlbs-cmpnt-container [type=tel]:focus,body div.brlbs-cmpnt-container [type=text]:focus,body div.brlbs-cmpnt-container [type=time]:focus,body div.brlbs-cmpnt-container [type=url]:focus,body div.brlbs-cmpnt-container [type=week]:focus,body div.brlbs-cmpnt-container select:focus,body div.brlbs-cmpnt-container textarea:focus{outline:2px solid transparent;outline-offset:2px;--brlbs-tw-ring-inset:var(--brlbs-tw-empty, );--brlbs-tw-ring-offset-width:0px;--brlbs-tw-ring-offset-color:#fff;--brlbs-tw-ring-color:#2563eb;--brlbs-tw-ring-offset-shadow:var(--brlbs-tw-ring-inset) 0 0 0 var(--brlbs-tw-ring-offset-width) var(--brlbs-tw-ring-offset-color);--brlbs-tw-ring-shadow:var(--brlbs-tw-ring-inset) 0 0 0 calc(1px + var(--brlbs-tw-ring-offset-width)) var(--brlbs-tw-ring-color);box-shadow:var(--brlbs-tw-ring-offset-shadow),var(--brlbs-tw-ring-shadow),var(--brlbs-tw-shadow,0 0 transparent);border-color:#2563eb}body div.brlbs-cmpnt-container input::-moz-placeholder,body div.brlbs-cmpnt-container textarea::-moz-placeholder{color:#6b7280;opacity:1}body div.brlbs-cmpnt-container input::placeholder,body div.brlbs-cmpnt-container textarea::placeholder{color:#6b7280;opacity:1}body div.brlbs-cmpnt-container ::-webkit-datetime-edit-fields-wrapper{padding:0}body div.brlbs-cmpnt-container ::-webkit-date-and-time-value{min-height:1.5em}body div.brlbs-cmpnt-container select{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22none%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20stroke%3D%22%236b7280%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%221.5%22%20d%3D%22m6%208%204%204%204-4%22%2F%3
128E%3C%2Fsvg%3E);background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}body div.brlbs-cmpnt-container [multiple]{background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}body div.brlbs-cmpnt-container [type=checkbox],body div.brlbs-cmpnt-container [type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px}body div.brlbs-cmpnt-container [type=checkbox]{border-radius:0}body div.brlbs-cmpnt-container [type=radio]{border-radius:100%}body div.brlbs-cmpnt-container [type=checkbox]:focus,body div.brlbs-cmpnt-container [type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--brlbs-tw-ring-inset:var(--brlbs-tw-empty, );--brlbs-tw-ring-offset-width:2px;--brlbs-tw-ring-offset-color:#fff;--brlbs-tw-ring-color:#2563eb;--brlbs-tw-ring-offset-shadow:var(--brlbs-tw-ring-inset) 0 0 0 var(--brlbs-tw-ring-offset-width) var(--brlbs-tw-ring-offset-color);--brlbs-tw-ring-shadow:var(--brlbs-tw-ring-inset) 0 0 0 calc(2px + var(--brlbs-tw-ring-offset-width)) var(--brlbs-tw-ring-color);box-shadow:var(--brlbs-tw-ring-offset-shadow),var(--brlbs-tw-ring-shadow),var(--brlbs-tw-shadow,0 0 transparent)}body div.brlbs-cmpnt-container [type=checkbox]:checked,body div.brlbs-cmpnt-container [type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}body div.brlbs-cmpnt-container [type=checkbox]:checked{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M12.207%204.793a1%201%200%200%201%200%201.414l-5%205a1%201%200%200%201-1.414%200l-2-2a1%201%200%200%201%201.414-1.414L6.5%209.086l4.293-4.293a1%201%200%200%201%201.414%200%22%2F%3E%3C%2Fsvg%3E)}body div.brlbs-cmpnt-container [type=radio]:checked{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2016%2016%22%3E%3Ccircle%20cx%3D%228%22%20cy%3D%228%22%20r%3D%223%22%2F%3E%3C%2Fsvg%3E)}body div.brlbs-cmpnt-container [type=checkbox]:checked:focus,body div.brlbs-cmpnt-container [type=checkbox]:checked:hover,body div.brlbs-cmpnt-container [type=radio]:checked:focus,body div.brlbs-cmpnt-container [type=radio]:checked:hover{border-color:transparent;background-color:currentColor}body div.brlbs-cmpnt-container [type=checkbox]:indeterminate{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22none%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20stroke%3D%22%23fff%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%222%22%20d%3D%22M4%208h8%22%2F%3E%3C%2Fsvg%3E);border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}body div.brlbs-cmpnt-container [type=checkbox]:indeterminate:focus,body div.brlbs-cmpnt-container [type=checkbox]:indeterminate:hover{border-color:transparent;background-color:currentColor}body div.brlbs-cmpnt-container [type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}:root{--brlbs-tw-border-spacing-x:0;--brlbs-tw-border-spacing-y:0;--brlbs-tw-translate-x:0;--brlbs-tw-translate-y:0;--brlbs-tw-rotate:0;--brlbs-tw-skew-x:0;--brlbs-tw-skew-y:0;--brlbs-tw-scale-x:1;--brlbs-tw-scale-y:1;--brlbs-tw-pan-x:;--brlbs-tw-pan-y:;--brlbs-tw-pinch-zoom:;--brlbs-tw-scroll-snap-strictness:proximity;--brlbs-tw-gradient-from-position:;
128--brlbs-tw-gradient-via-position:;--brlbs-tw-gradient-to-position:;--brlbs-tw-ordinal:;--brlbs-tw-slashed-zero:;--brlbs-tw-numeric-figure:;--brlbs-tw-numeric-spacing:;--brlbs-tw-numeric-fraction:;--brlbs-tw-ring-inset:;--brlbs-tw-ring-offset-width:0px;--brlbs-tw-ring-offset-color:#fff;--brlbs-tw-ring-color:rgba(59,130,246,.5);--brlbs-tw-ring-offset-shadow:0 0 #0000;--brlbs-tw-ring-shadow:0 0 #0000;--brlbs-tw-shadow:0 0 #0000;--brlbs-tw-shadow-colored:0 0 #0000;--brlbs-tw-blur:;--brlbs-tw-brightness:;--brlbs-tw-contrast:;--brlbs-tw-grayscale:;--brlbs-tw-hue-rotate:;--brlbs-tw-invert:;--brlbs-tw-saturate:;--brlbs-tw-sepia:;--brlbs-tw-drop-shadow:;--brlbs-tw-backdrop-blur:;--brlbs-tw-backdrop-brightness:;--brlbs-tw-backdrop-contrast:;--brlbs-tw-backdrop-grayscale:;--brlbs-tw-backdrop-hue-rotate:;--brlbs-tw-backdrop-invert:;--brlbs-tw-backdrop-opacity:;--brlbs-tw-backdrop-saturate:;--brlbs-tw-backdrop-sepia:;--brlbs-tw-contain-size:;--brlbs-tw-contain-layout:;--brlbs-tw-contain-paint:;--brlbs-tw-contain-style:}::backdrop{--brlbs-tw-border-spacing-x:0;--brlbs-tw-border-spacing-y:0;--brlbs-tw-translate-x:0;--brlbs-tw-translate-y:0;--brlbs-tw-rotate:0;--brlbs-tw-skew-x:0;--brlbs-tw-skew-y:0;--brlbs-tw-scale-x:1;--brlbs-tw-scale-y:1;--brlbs-tw-pan-x:;--brlbs-tw-pan-y:;--brlbs-tw-pinch-zoom:;--brlbs-tw-scroll-snap-strictness:proximity;--brlbs-tw-gradient-from-position:;--brlbs-tw-gradient-via-position:;--brlbs-tw-gradient-to-position:;--brlbs-tw-ordinal:;--brlbs-tw-slashed-zero:;--brlbs-tw-numeric-figure:;--brlbs-tw-numeric-spacing:;--brlbs-tw-numeric-fraction:;--brlbs-tw-ring-inset:;--brlbs-tw-ring-offset-width:0px;--brlbs-tw-ring-offset-color:#fff;--brlbs-tw-ring-color:rgba(59,130,246,.5);--brlbs-tw-ring-offset-shadow:0 0 #0000;--brlbs-tw-ring-shadow:0 0 #0000;--brlbs-tw-shadow:0 0 #0000;--brlbs-tw-shadow-colored:0 0 #0000;--brlbs-tw-blur:;--brlbs-tw-brightness:;--brlbs-tw-contrast:;--brlbs-tw-grayscale:;--brlbs-tw-hue-rotate:;--brlbs-tw-invert:;--brlbs-tw-saturate:;--brlbs-tw-sepia:;--brlbs-tw-drop-shadow:;--brlbs-tw-backdrop-blur:;--brlbs-tw-backdrop-brightness:;--brlbs-tw-backdrop-contrast:;--brlbs-tw-backdrop-grayscale:;--brlbs-tw-backdrop-hue-rotate:;--brlbs-tw-backdrop-invert:;--brlbs-tw-backdrop-opacity:;--brlbs-tw-backdrop-saturate:;--brlbs-tw-backdrop-sepia:;--brlbs-tw-contain-size:;--brlbs-tw-contain-layout:;--brlbs-tw-contain-paint:;--brlbs-tw-contain-style:}.brlbs-cmpnt-container .brlbs-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.brlbs-cmpnt-container .\!brlbs-hidden{display:none!important}.brlbs-cmpnt-container .brlbs-overflow-auto{overflow:auto}.brlbs-cmpnt-container .brlbs-overflow-hidden{overflow:hidden}.brlbs-cmpnt-container .brlbs-pt-4{padding-top:16px}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker{container-name:brlbsCmpntContentBlocker;container-type:inline-size;line-height:1.25em;height:100%;font-size:var(--content-blocker-font-size);font-family:var(--content-blocker-font-family)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a{color:var(--content-blocker-link-color)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a:hover{color:var(--content-blocker-link-color-hover)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker.brlbs-cmpnt-cb-card,body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker.brlbs-cmpnt-cb-provider-card{container-type:normal}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-dialog-cb-details{position:relative;padding:16px;text-align:left}@media(min-width:768px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-dialog-cb-details{padding:24px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-dialog-cb-header{display:flex;align-items:center}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-dialog-cb-header.brlbs-cmpnt-with-separator{margin-bottom:16px;border-bottom-width:1px;border-style:solid;padding-bottom:16px}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-dialog-cb-button{display:flex;padding-bottom:16px}@media(min-width:768px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-dialog-cb-button{padding-bottom:24px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-a{align-items:center;justify-content:center;padding:16px;text-align:center;background:var(--content-blocker-background-color);border-top-left-radius:var(--content-blocker-border-radius-top-left);border-top-right-radius:var(--content-blocker-border-radius-top-right);border-bottom-left-radius:var(--content-blocker-border-radius-bottom-left);border-bottom-right-radius:var(--content-blocker-border-radius-bottom-right);color:var(--content-blocker-text-color)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-a .brlbs-cmpnt-cb-description{padding-bottom:8px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-a .brlbs-cmpnt-cb-description{padding-bottom:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-a .brlbs-cmpnt-cb-description{border-color:var(--content-blocker-separator-color);border-style:solid;border-bottom-width:var(--content-blocker-separator-width)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-a .brlbs-cmpnt-cb-description strong{font-weight:700}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b{position:relative;display:flex;height:100%;padding-top:96px;padding-bottom:96px;text-align:center;background:var(--content-blocker-background-color);border-top-left-radius:var(--content-blocker-border-radius-top-left);border-top-right-radius:var(--content-blocker-border-radius-top-right);border-bottom-left-radius:var(--content-blocker-border-radius-bottom-left);border-bottom-right-radius:var(--content-blocker-border-radius-bottom-right);color:var(--content-blocker-text-color);width:100%}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-main{position:relative;display:flex;width:100%;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-main{flex-direction:row;gap:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-main{background:var(--content-blocker-background);color:var(--content-blocker-text-color)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-content{flex-basis:66.666667%}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-description{padding-bottom:8px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-description{padding-bottom:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-description strong{font-weight:700}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-buttons{margin:0;display:flex;flex-basis:33.333333%;flex-direction:column;align-items:stretch;justify-content:center;gap:8px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-buttons{gap:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c{position:relative;display:flex;height:100%;text-align:center;background:var(--content-blocker-background-color);border-top-left-radius:var(--content-blocker-border-radius-top-left);border-top-right-radius:var(--content-blocker-border-radius-top-right);border-bottom-left-radius:var(--content-blocker-border-radius-bottom-left);border-bottom-right-radius:var(--content-blocker-border-radius-bottom-right);color:var(--content-blocker-text-color);width:100%}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main{position:relative;margin:48px;display:flex;width:100%;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main{margin:96px;
128gap:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main{background:var(--content-blocker-background);border-top-left-radius:var(--content-blocker-border-radius-top-left);border-top-right-radius:var(--content-blocker-border-radius-top-right);border-bottom-left-radius:var(--content-blocker-border-radius-bottom-left);border-bottom-right-radius:var(--content-blocker-border-radius-bottom-right);color:var(--content-blocker-text-color)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-description{padding-bottom:8px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-description{padding-bottom:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-description strong{font-weight:700}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-buttons{margin:0;display:flex;width:100%;flex-direction:column;align-items:stretch;justify-content:center;gap:8px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-buttons{gap:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-play-button{border-radius:50%;background:#fff;box-shadow:0 1px 5px #00000026;width:34px;height:34px;margin:0 auto;display:flex;align-items:center;justify-content:center;position:absolute;top:-17px;left:calc(50% - 17px)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-play-button:before{background:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2278%22%20height%3D%2278%22%20viewBox%3D%220%200%2078%2078%22%3E%3Cpath%20d%3D%22M7.5%2071.5v-64l48%2030.328z%22%2F%3E%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%2212%22%20d%3D%22M7.5%2071.5v-64l48%2030.328z%22%2F%3E%3C%2Fsvg%3E) no-repeat 50%;background-size:contain;content:" ";margin-left:4px;display:inline-block;height:1.142857143em;width:.857142857em}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-thumbnail{position:absolute;top:0;left:0;height:100%;width:100%;background-size:cover;background-position:50%;border-top-left-radius:var(--content-blocker-border-radius-top-left);border-top-right-radius:var(--content-blocker-border-radius-top-right);border-bottom-left-radius:var(--content-blocker-border-radius-bottom-left);border-bottom-right-radius:var(--content-blocker-border-radius-bottom-right)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-buttons{margin-top:8px;margin-bottom:8px;display:flex;flex-direction:column;align-items:stretch;justify-content:center;gap:8px}@media(min-width:640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-buttons{margin-top:16px;margin-bottom:16px;flex-direction:row;gap:16px}}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-buttons .brlbs-cmpnt-cb-btn{display:flex;width:100%;align-items:center;justify-content:center;text-decoration-line:none}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d){position:fixed;height:auto}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[top-left\]),body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[top-right\]){top:var(--content-blocker-icon-margin)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[bottom-left\]),body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[bottom-right\]){bottom:var(--content-blocker-icon-margin)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[bottom-right\]),body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[top-right\]){right:calc(var(--content-blocker-icon-width) + var(--content-blocker-icon-margin))}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[bottom-left\]),body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[top-left\]){left:var(--content-blocker-icon-margin)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-display\[flex\]){position:relative;display:inline-block;display:flex}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[float-left\]){float:left}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker:has(.brlbs-cmpnt-cb-preset-d):has(.brlbs-cmpnt-cb-icon-position\[float-right\]){float:right}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-d .brlbs-cmpnt-cb-icon{display:inline-block;height:var(--content-blocker-icon-height);width:var(--content-blocker-icon-width)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-description-list{display:table}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-description-list>div{display:table-row}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-description-list dt{font-weight:700}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-description-list dd,body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-description-list dt{display:table-cell;padding:2px 4px}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a.brlbs-cmpnt-cb-btn{all:unset;box-sizing:border-box;
128cursor:pointer;align-items:center;justify-content:center;padding:12px 20px;text-align:center;font-size:var(--dialog-font-size);line-height:calc(1.5 * var(--dialog-font-size));font-weight:600;text-decoration-line:none;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.4s;border-top-left-radius:var(--content-blocker-button-border-radius-top-left);border-top-right-radius:var(--content-blocker-button-border-radius-top-right);border-bottom-left-radius:var(--content-blocker-button-border-radius-bottom-left);border-bottom-right-radius:var(--content-blocker-button-border-radius-bottom-right);background-color:var(--content-blocker-button-color);color:var(--content-blocker-button-text-color)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a.brlbs-cmpnt-cb-btn:hover{background-color:var(--content-blocker-button-color-hover);color:var(--content-blocker-button-text-color-hover)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a.brlbs-cmpnt-cb-btn:active,body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a.brlbs-cmpnt-cb-btn:focus{outline:2px solid transparent;outline-offset:2px;--brlbs-tw-ring-offset-shadow:var(--brlbs-tw-ring-inset) 0 0 0 var(--brlbs-tw-ring-offset-width) var(--brlbs-tw-ring-offset-color);--brlbs-tw-ring-shadow:var(--brlbs-tw-ring-inset) 0 0 0 calc(2px + var(--brlbs-tw-ring-offset-width)) var(--brlbs-tw-ring-color);box-shadow:var(--brlbs-tw-ring-offset-shadow),var(--brlbs-tw-ring-shadow),var(--brlbs-tw-shadow,0 0 #0000)}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a.brlbs-cmpnt-cb-provider-toggle{all:unset;box-sizing:border-box;color:var(--content-blocker-link-color);cursor:pointer;display:flex;align-items:center;justify-content:center;text-decoration-line:none}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker a.brlbs-cmpnt-cb-provider-toggle:hover{all:unset;box-sizing:border-box;color:var(--content-blocker-link-color-hover);cursor:pointer;display:flex;align-items:center;justify-content:center;text-decoration-line:none}@container brlbsCmpntContentBlocker (480px <= width < 620px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b{padding-top:12%;padding-bottom:12%}}@container brlbsCmpntContentBlocker (width < 480px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b{padding:0}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-main{margin:6%;flex-direction:column;gap:8px;justify-content:normal;overflow:auto}}@container brlbsCmpntContentBlocker (640px <= width < 750px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main{margin:10%!important}}@container brlbsCmpntContentBlocker (540px <= width < 640px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main{margin:6%!important}}@container brlbsCmpntContentBlocker (width < 540px){body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker{position:static}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main{gap:8px;margin:6%!important;justify-content:normal;overflow:auto}body .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main .brlbs-cmpnt-cb-play-button{display:none}}@container brlbsCmpntContentBlocker (width < 375px){.wp-embed-aspect-16-9 .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-main,.wp-embed-aspect-16-9 .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main{height:100%;justify-content:normal;overflow:auto}.wp-embed-aspect-16-9 .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-b .brlbs-cmpnt-cb-main .brlbs-cmpnt-cb-play-button,.wp-embed-aspect-16-9 .brlbs-cmpnt-container.brlbs-cmpnt-content-blocker .brlbs-cmpnt-cb-preset-c .brlbs-cmpnt-cb-main .brlbs-cmpnt-cb-play-button{display:none}}.wp-embed-aspect-16-9:has(.brlbs-cmpnt-container.brlbs-cmpnt-content-blocker) div.wp-block-embed__wrapper{padding:0}.wp-embed-aspect-16-9:has(.brlbs-cmpnt-container.brlbs-cmpnt-content-blocker) div.wp-block-embed__wrapper:before{padding:0}#BorlabsCookieBox,.brlbs-cmpnt-container{font-family:var(--dialog-font-family);font-weight:400;line-height:calc(1.2 * var(--dialog-font-size))}body .brlbs-cmpnt-container.brlbs-cmpnt-shortcode-element{container-name:brlbsCmpntShortcodeElement;container-type:inline-size;line-height:1.25em;height:100%}body .brlbs-cmpnt-container.brlbs-cmpnt-shortcode-element .brlbs-cmpnt-description-list{display:table}body .brlbs-cmpnt-container.brlbs-cmpnt-shortcode-element .brlbs-cmpnt-description-list>div{display:table-row}body .brlbs-cmpnt-container.brlbs-cmpnt-shortcode-element .brlbs-cmpnt-description-list dt{font-weight:700}body .brlbs-cmpnt-container.brlbs-cmpnt-shortcode-element .brlbs-cmpnt-description-list dd,body .brlbs-cmpnt-container.brlbs-cmpnt-shortcode-element .brlbs-cmpnt-description-list dt{display:table-cell;padding:2px 4px}
129:root{--content-blocker-background-color: #fafafa;
130--content-blocker-button-color: #0063e3;
131--content-blocker-button-color-hover: #1a66ff;
132--content-blocker-button-text-color: #fff;
133--content-blocker-button-text-color-hover: #fff;
134--content-blocker-font-family: inherit;
135--content-blocker-link-color: #2563eb;
136--content-blocker-link-color-hover: #1e40af;
137--content-blocker-separator-color: #e5e5e5;
138--content-blocker-text-color: #555;
139--content-blocker-border-radius-top-left: 4px;
140--content-blocker-border-radius-top-right: 4px;
141--content-blocker-border-radius-bottom-left: 4px;
142--content-blocker-border-radius-bottom-right: 4px;
143--content-blocker-button-border-radius-top-left: 4px;
144--content-blocker-button-border-radius-top-right: 4px;
145--content-blocker-button-border-radius-bottom-left: 4px;
146--content-blocker-button-border-radius-bottom-right: 4px;
147--content-blocker-font-size: 14px;
148--content-blocker-separator-width: 1px;
149--content-blocker-background-opacity: 0.85;
150--content-blocker-background: rgba(250, 250, 250 ,0.85);
151}
152
153/*# sourceURL=borlabs-cookie-critical-inline-css */
154</style>
155<link onload="this.media='all';this.onload=null" data-borlabs-cookie-deferred-style="1" rel='stylesheet' id='borlabs-cookie-custom-css' href='https://www.hwk-konstanz.de/wp-content/cache/borlabs-cookie/1/borlabs-cookie-1-de.css?ver=3.4.5-51' media="print" />
156<noscript><link rel='stylesheet' id='borlabs-cookie-custom-css' href='https://www.hwk-konstanz.de/wp-content/cache/borlabs-cookie/1/borlabs-cookie-1-de.css?ver=3.4.5-51' media='all' />
157</noscript>
158<link rel='stylesheet' id='uni_vrgngverarb_style-css' href='https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vorgangsverarbeitung/css/uni_vrgngverarb_style.css?ver=1.0.2' media='all' />
159<link rel='stylesheet' id='print-css-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/css/print.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='print' />
160<link rel='stylesheet' id='style-font-awesome-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/res/fontawesome-free-5.15.4-web/css/all.css?ver=5.15.4' media='all' />
161<link rel='stylesheet' id='evaluation-hwk-style-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/css/evaluation-hwk.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' />
162<link rel='stylesheet' id='bs4-margin-padding-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/css/bootstrap4-padding-and-margin-classes.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' />
163<link rel='stylesheet' id='bs4-form-check-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/css/bootstrap4-form-check-classes.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' />
164<link rel='stylesheet' id='toastr-css-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/res/toastr-2.1.4-dist/toastr.min.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' />
165<link rel='stylesheet' id='chart-css-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/res/Chart.js-2.8.0/dist/Chart.min.css?ver=23aa77011f2741f8761f3b53cd9d29b9' media='all' />
166<link rel='stylesheet' id='uni-hwk-redesign-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/style-uni.css?ver=1.1.47' media='all' />
167<link rel='stylesheet' id='uni-base-custom-style-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/css/custom-hwkkonstanz.css?ver=1.2.4' media='all' />
168<link rel='stylesheet' id='navbar-brand-css' href='https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/css/navbar-brand-hwkkonstanz.css?ver=1.3.52' media='all' />
169<script id="jquery-core-js" src="https://www.hwk-konstanz.de/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
vendor: 1 bytes, line 169
169
170<script id="moment-js-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/js/moment-with-locales-2.29.4.js?ver=2.29.4"></script>
vendor: 1 bytes, line 170
170
171<script id="moment-precise-range-js-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/js/moment-precise-range.js?ver=23aa77011f2741f8761f3b53cd9d29b9"></script>
vendor: 1 bytes, line 171
171
172<script id="leaflet-js-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/dist/leaflet/leaflet.js?ver=23aa77011f2741f8761f3b53cd9d29b9"></script>
vendor: 1 bytes, line 172
172
173<script id="leaflet-fullscreen-js-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/dist/leaflet-fullscreen/leaflet-fullscreen.min.js?ver=23aa77011f2741f8761f3b53cd9d29b9"></script>
vendor: 1 bytes, line 173
173
174<script id="vue-js-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/js/vue-2.7.14.min.js?ver=2.7.14"></script>
vendor: 1 bytes, line 174
174
175<script id="vue-js-router-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/js/vue-router.min.js?ver=3.0.7"></script>
vendor: 1 bytes, line 175
175
176<script id="vue-js-resource-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/js/vue-resource.min.js?ver=3.0.7"></script>
vendor: 1 bytes, line 176
176
177<script id="uni_helper_js-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/helper/js/uni_helper_js.js?ver=1.0.1"></script>
vendor: 1 bytes, line 177
177
178<script id="select2_script_min-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vuejs/helper/../dist/select2-4.0.13/js/select2.full.min.js?ver=4.0.13"></script>
vendor: 1 bytes, line 178
178
179<script data-no-optimize="1" data-no-minify="1" data-cfasync="false" id="borlabs-cookie-config-js" src="https://www.hwk-konstanz.de/wp-content/cache/borlabs-cookie/1/borlabs-cookie-config-de.json.js?ver=3.4.5-88"></script>
vendor: 1 bytes, line 179
179
180<script data-no-optimize="1" data-no-minify="1" data-cfasync="false" id="borlabs-cookie-prioritize-js" src="https://www.hwk-konstanz.de/wp-content/plugins/borlabs-cookie/assets/javascript/borlabs-cookie-prioritize.min.js?ver=3.4.5"></script>
vendor: 1 bytes, line 180
180
181<script id="uni_vrgngverarb_apvars_x3_calc_fields_functions-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-vorgangsverarbeitung/helper/uni_vrgngverarb_apvars_x3_calc_fields_functions.js?ver=1.0.2"></script>
vendor: 1 bytes, line 181
181
182<script id="uni-hwk-comments-js" src="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/js/uni-hwk-comments.js?ver=1.0"></script>
vendor: 1 bytes, line 182
182
183<script id="uni-hwk-theme-js" src="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/js/uni-hwk.js?ver=1782710209"></script>
vendor: 1 bytes, line 183
183
184<script id="toastr-script-js" src="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/res/toastr-2.1.4-dist/toastr.min.js?ver=1.0"></script>
vendor: 1 bytes, line 184
184
185<script id="chart-script-js" src="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/res/Chart.js-2.8.0/dist/Chart.js?ver=1.0"></script>
vendor: 1 bytes, line 185
185
186<script async data-wp-strategy="async" id="eyeable-client-config-js" src="https://www.hwk-konstanz.de/eyeable/clientConfig.js"></script>
vendor: 1 bytes, line 186
186
187<script async data-wp-strategy="async" id="eyeable-js-js" src="https://www.hwk-konstanz.de/eyeable/public/js/eyeAble.js"></script>
187
188<link rel="https://api.w.org/" href="https://www.hwk-konstanz.de/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.hwk-konstanz.de/wp-json/wp/v2/pages/273005" /><link rel='shortlink' href='https://www.hwk-konstanz.de/?p=273005' />
189        <link rel="stylesheet" href="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/dist/bootstrap-icons-1.13.1/bootstrap-icons.css">
190                <meta name="ai-tools" content="client=29f014e522b01969173c26401e75a41a;baseUrl=https://ai.uniplus-software.de;elementId=uni-ai-tools-language;title=Language" />
191        		<meta property="og:image" content="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/img/hwk_schraube.png"/>
192		<meta property="og:image:width" content="200"/>
193		<meta property="og:image:height" content="200"/>
194					<meta name="description" content=""/>
195			<meta property="og:description" content=""/>
196			</head>
197		<body data-spy="scroll" data-target="#scrollspyContent"  class="wp-singular page-template page-template-page-scrollspy page-template-page-scrollspy-php page page-id-273005 wp-theme-chatty wp-child-theme-uni-hwk-redesign has-menu-top top-parent-slug-handwerk top-parent-id-273005 has-header header-collapse standard form-no-floating-label submenu-default" id="handwerk">
198        		<div id="browser-warning" class="sr-only"></div>
199		
200		<div id="wrapper" class="container">
201<div id="header" class="hidden-print">
202	<a href="https://www.hwk-konstanz.de" class="home-link-xs visible-xs"><span class="sr-only">Home Link auf dem Handy</span></a>
203	<header class="site-header-bar">
204		<div class="container">
205			<div class="row">
206								<div id="logo" class="col-md-3 col-sm-4"><a class="navbar-brand" href="https://www.hwk-konstanz.de"><span class="screen-reader">Logo</span></a><a class="search visible-xs" title="Suche" role="button" aria-label="Öffnet die Suche" aria-describedby="searchbar"><span class="glyphicon glyphicon-suche" aria-hidden="true"></span></a></div>				<div class="col-md-9 col-sm-8 hidden-xs">
207					<div class="row">
208							<div class="header-menu col-sm-12">
209								                                <nav class="header-menu-nav" role="navigation" aria-label="Kopfnavigation">
210																		<ul class="nav header-menu-ul">
211                                                    <li class="dropdown">
212                    <a href="#" target="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
213                        Über uns                        <span class="caret"></span>
214                    </a>
215                    <ul class="dropdown-menu">
216                                                    <li class="menu-item menu-item-type-custom menu-item-object-custom ">
217                                <a href="https://www.hwk-konstanz.de/hwk/" target="">
218                                                                        Die Handwerkskammer                                </a>
219                            </li>
220                                                    <li class="menu-item menu-item-type-custom menu-item-object-custom ">
221                                <a href="https://www.hwk-konstanz.de/handwerk/" target="">
222                                                                        Das Handwerk in der Region                                </a>
223                            </li>
224                                                    <li class="menu-item menu-item-type-custom menu-item-object-custom ">
225                                <a href="https://www.hwk-konstanz.de/unsere-funktionstraeger-gremien-und-strukturen/" target="">
226                                                                        Organe und Ehrenamt                                </a>
227                            </li>
228                                                    <li class="menu-item menu-item-type-custom menu-item-object-custom ">
229                                <a href="https://www.hwk-konstanz.de/organisation/" target="">
230                                                                        Die Organisationen des Handwerks                                </a>
231                            </li>
232                                                    <li class="menu-item menu-item-type-custom menu-item-object-custom ">
233                                <a href="https://www.hwk-konstanz.de/partner-und-kooperationen/" target="">
234                                                                        Partner und Kooperationen                                </a>
235                            </li>
236                                                    <li class="menu-item menu-item-type-custom menu-item-object-custom ">
237                                <a href="https://www.hwk-konstanz.de/bekanntmachungen/" target="">
238                                                                        Amtliche Bekanntmachungen                                </a>
239                            </li>
240                                            </ul>
241
242                </li>
243                                            <li role="presentation" class="divider"></li>
244                                                            <li class="menu-item menu-item-type-custom menu-item-object-custom ">
245                    <a href="https://www.hwk-konstanz.de/stellen/" target="">
246                                                Karriere</a>
247                </li>
248                                            <li role="presentation" class="divider"></li>
249                                                            <li class="dropdown">
250                    <a href="#" target="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
251                        Presse & Medien                        <span class="caret"></span>
252                    </a>
253                    <ul class="dropdown-menu">
254                                                    <li class="menu-item menu-item-type-custom menu-item-object-custom ">
255                                <a href="https://www.hwk-konstanz.de/pressebereich/" target="">
256                                                                        Pressebereich                                </a>
257                            </li>
258                                                    <li class="menu-item menu-item-type-custom menu-item-object-custom ">
259                                <a href="https://www.hwk-konstanz.de/presse/" target="">
260                                                                        Pressemitteilungen                                </a>
261                            </li>
262                                                    <li class="menu-item menu-item-type-custom menu-item-object-custom ">
263                                <a href="https://www.hwk-konstanz.de/politische-statements/" target="">
264                                                                        Politische Statements                                </a>
265                            </li>
266                                                    <li class="menu-item menu-item-type-custom menu-item-object-custom ">
267                                <a href="https://www.hwk-konstanz.de/dhz/" target="">
268                                                                        Deutsche Handwerks Zeitung (DHZ)                                </a>
269                            </li>
270                                                    <li class="menu-item menu-item-type-custom menu-item-object-custom ">
271                                <a href="https://www.hwk-konstanz.de/handwerk-kompakt/" target="">
272                                                                        Newsletter                                </a>
273                            </li>
274                                                    <li class="menu-item menu-item-type-custom menu-item-object-custom ">
275                                <a href="https://www.hwk-konstanz.de/mit-handwerk-heroes-das-handwerk-erkunden/" target="">
276                                                                        Imagekampagne                                </a>
277                            </li>
278                                            </ul>
279
280                </li>
281                                            <li role="presentation" class="divider"></li>
282                                                            <li class="dropdown">
283                    <a href="#" target="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
284                        Kontakt                        <span class="caret"></span>
285                    </a>
286                    <ul class="dropdown-menu">
287                                                    <li class="menu-item menu-item-type-custom menu-item-object-custom ">
288                                <a href="https://www.hwk-konstanz.de/ansprechpersonen/" target="">
289                                                                        Ansprechpersonen                                </a>
290                            </li>
291                                                    <li class="menu-item menu-item-type-custom menu-item-object-custom ">
292                                <a href="https://www.hwk-konstanz.de/oeffnungszeiten/" target="">
293                                                                        Öffnungszeiten                                </a>
294                            </li>
295                                                    <li class="menu-item menu-item-type-custom menu-item-object-custom ">
296                                <a href="https://www.hwk-konstanz.de/kontaktformular/" target="">
297                                                                        Kontaktformular                                </a>
298                            </li>
299                                            </ul>
300
301                </li>
302                                            <li role="presentation" class="divider"></li>
303                                                            <li class="menu-item menu-item-type-custom menu-item-object-custom text-hidden">
304                    <a href="https://youtube.com/@hwkkonstanz" target="_blank">
305                                                    <span class="glyphicon glyphicon-youtube"></span>
306                                                </a>
307                </li>
308                                                                        <li class="menu-item menu-item-type-custom menu-item-object-custom text-hidden">
309                    <a href="https://www.facebook.com/hwkkonstanz/" target="_blank">
310                                                    <span class="glyphicon glyphicon-facebook"></span>
311                                                </a>
312                </li>
313                                                                        <li class="menu-item menu-item-type-custom menu-item-object-custom text-hidden">
314                    <a href="https://www.instagram.com/handwerkskammer_konstanz/#" target="_blank">
315                                                    <span class="glyphicon fab fa-instagram "></span>
316                                                </a>
317                </li>
318                                                                        <li class="menu-item menu-item-type-custom menu-item-object-custom text-hidden">
319                    <a href="http://www.linkedin.com/company/handwerkskammer-konstanz/" target="_blank">
320                                                    <span class="glyphicon  glyphicon-linked-in"></span>
321                                                </a>
322                </li>
323                            
324
325
326    <li id="uni-ai-tools-language-divider" role="presentation" class="divider"></li>
327    <li id="uni-ai-tools-language" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item current_page_item ">
328
329    </li>
330
331
332    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
333        <a href="https://www.hwk-konstanz.de/bestellung"><span style="padding-right: 0px;" class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span><span class="hidden hidden-sm hidden-md">Warenkorb</span></a>
334    </li>
335
336
337
338            <li class="dropdown dropdown-login">
339             
340                <a href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
341                    <span class="text-white"><i class="fas fa-user"></i><span class="hidden-xs hidden-sm">&nbsp;&nbsp;&nbsp;Anmelden </span><span class="caret"></span></span>
342                </a>
343                <ul class="dropdown-menu login_wrapper" style="">
344                    <li class="login">
345                        <div class="" role="form"><!-- .login -->
346	<form name="loginform" id="loginform" method="post" action="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/inc/forms/login.php">
347		<div class="login-username form-group has-feedback">
348            <label class="control-label" for="username">Benutzername:</label>
349            <input name="log" id="username" placeholder="Benutzername" class="input form-control" value="" size="20" type="text" style="margin-bottom: 0px">
350		</div>
351		<div class="login-password login-username form-group has-feedback">
352            <label class="control-label" for="password">Passwort:</label>
353            <input name="pwd" id="password" placeholder="Passwort" class="form-control input" value="" size="20" type="password" style="margin-bottom: 0px">
354            <span class="pt-3 pb-1 cursor-pointer d-block" onclick="uni_toggle_show_password('password')"><i class="far fa-eye"></i> Passwort anzeigen</span>
355		</div>
356		<p class="login-submit">
357			<button
358                id="btn-login"
359				class="btn btn-primary btn-login btn-login"
360				data-style="expand-right"
361				type="submit" 
362				onclick="return login_submit()"
363				style="width: 100%; margin-bottom: 0px">
364				<span class="ladda-label">Anmelden</span>
365			</button>			
366		</p>	
367		<input name="redirect_to" value="https://www.hwk-konstanz.de/kundenportal" type="hidden">
368		<input name="redirect_error_to" value="https://www.hwk-konstanz.de/login" type="hidden">
369        <a href="https://www.hwk-konstanz.de/password-recover/" class="" style="">Passwort vergessen</a>
370	</form>
371</div><!-- /.login -->                    </li>
372                </ul>
373                    </li>
374    
375</ul>									                                    <ul class="nav header-menu-ul">
376                                        <li class="text-hidden hidden-xs"><a class="search" role="button" aria-label="Öffnet die Suche" aria-controls="searchbar"><span class="glyphicon glyphicon-suche"></span>&nbsp;Suche</a></li>
377                                    </ul>
378								</nav>
379															</div><!-- /.header-menu -->
380						</div>
381					</div>
382				</div>
383			</div><!-- .container -->
384	</header>
385</div><!-- /header -->			<div class="main-menu navbar navbar-default navbar-fixed-top top has-header">
386										<nav>
387							<div class="container">
388																<a href="https://www.hwk-konstanz.de" class="home-link-xs visible-xs"><span class="sr-only">Home Link auf dem Handy</span></a>
389								<div class="navbar-header">
390									<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse" data-menu-mobile="top">
391										<span class="sr-only">Toggle navigation</span>
392									<span class="icon-bar"></span>
393									<span class="icon-bar"></span>
394									<span class="icon-bar"></span>									</button>
395								</div><!-- /.navbar-header -->
396
397								<div class="navbar-collapse collapse">
398
399									
400									<ul id="main-menu-ul" class="nav navbar-nav"><li id="menu-item-43156" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-43156 dropdown"><a title="Ausbildung" href="#" data-toggle="dropdown" class="dropdown-toggle" aria-haspopup="true">Ausbildung <span class="caret"></span></a>
401<ul role="menu" class=" dropdown-menu">
402	<li id="menu-item-338161" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-338161"><a title="Ausbildungsberufe A-Z" href="/beruf/">Ausbildungsberufe A-Z</a></li>
403	<li id="menu-item-300576" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-300576"><a title="Schüler" href="https://www.hwk-konstanz.de/ausbildung/">Schüler</a></li>
404	<li id="menu-item-300612" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-300612"><a title="Eltern" href="https://www.hwk-konstanz.de/eltern/">Eltern</a></li>
405	<li id="menu-item-300797" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-300797"><a title="Schulen" href="https://www.hwk-konstanz.de/schulen/">Schulen</a></li>
406	<li id="menu-item-303885" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-303885"><a title="Auszubildende" href="https://www.hwk-konstanz.de/azubi/">Auszubildende</a></li>
407	<li id="menu-item-303839" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-303839"><a title="Betriebe" href="https://www.hwk-konstanz.de/ausbilden/">Betriebe</a></li>
408	<li id="menu-item-300805" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-300805"><a title="Studienaussteiger" href="https://www.hwk-konstanz.de/studienaussteiger/">Studienaussteiger</a></li>
409	<li id="menu-item-472152" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-472152"><a title="Design Thinking" href="https://www.hwk-konstanz.de/dtm/">Design Thinking</a></li>
410	<li id="menu-item-631416" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-631416"><a title="Qualifikationen anerkennen" href="https://www.hwk-konstanz.de/qualifikationen-anerkennen/">Qualifikationen anerkennen</a></li>
411</ul>
412</li>
413<li id="menu-item-43163" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-43163 dropdown"><a title="Weiterbildung" href="#" data-toggle="dropdown" class="dropdown-toggle" aria-haspopup="true">Weiterbildung <span class="caret"></span></a>
414<ul role="menu" class=" dropdown-menu">
415	<li id="menu-item-305049" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-305049"><a title="Der Weg zum Meister" href="https://www.hwk-konstanz.de/meister/">Der Weg zum Meister</a></li>
416	<li id="menu-item-305051" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-305051"><a title="Kurse und Seminare" href="https://www.bildungsakademie.de/seminare/suche/">Kurse und Seminare</a></li>
417	<li id="menu-item-304724" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-304724"><a title="Unsere Bildungshäuser" href="https://bildungsakademie.hwk-konstanz.uniplus-software.de/">Unsere Bildungshäuser</a></li>
418	<li id="menu-item-304738" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-304738"><a title="Fördermöglichkeiten" href="https://bildungsakademie.hwk-konstanz.uniplus-software.de/foerderungen">Fördermöglichkeiten</a></li>
419	<li id="menu-item-305050" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-305050"><a title="Studium" href="https://www.hwk-konstanz.de/studium/">Studium</a></li>
420</ul>
421</li>
422<li id="menu-item-43172" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-43172 dropdown"><a title="Existenzgründung" href="#" data-toggle="dropdown" class="dropdown-toggle" aria-haspopup="true">Existenzgründung <span class="caret"></span></a>
423<ul role="menu" class=" dropdown-menu">
424	<li id="menu-item-320502" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-320502"><a title="Existenzgründungsberatung" href="https://www.hwk-konstanz.de/existenzgruendung/">Existenzgründungsberatung</a></li>
425	<li id="menu-item-320504" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-320504"><a title="Betriebsanmeldung (Starter-Center)" href="https://www.hwk-konstanz.de/starter-center/">Betriebsanmeldung (Starter-Center)</a></li>
426	<li id="menu-item-320644" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-320644"><a title="Eintragung und Mitgliedschaft" href="https://www.hwk-konstanz.de/eintragung-und-mitgliedschaft/">Eintragung und Mitgliedschaft</a></li>
427	<li id="menu-item-320515" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-320515"><a title="Betriebsübernahme" href="https://www.hwk-konstanz.de/betriebsuebernahme/">Betriebsübernahme</a></li>
428	<li id="menu-item-338160" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-338160"><a title="Förderung und Finanzierung" href="https://www.hwk-konstanz.de/finanzierung/">Förderung und Finanzierung</a></li>
429	<li id="menu-item-320509" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-320509"><a title="Seminare und Workshops" href="https://www.hwk-konstanz.de/gruenderwissen/">Seminare und Workshops</a></li>
430</ul>
431</li>
432<li id="menu-item-43180" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-43180 dropdown"><a title="Betriebsführung" href="#" data-toggle="dropdown" class="dropdown-toggle" aria-haspopup="true">Betriebsführung <span class="caret"></span></a>
433<ul role="menu" class=" dropdown-menu">
434	<li id="menu-item-300920" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-300920"><a title="Arbeitsschutz und Betriebssicherheit" href="https://www.hwk-konstanz.de/arbeitsschutz/">Arbeitsschutz und Betriebssicherheit</a></li>
435	<li id="menu-item-336755" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-336755"><a title="Außenwirtschaftsberatung" href="https://www.hwk-konstanz.de/ch/">Außenwirtschaftsberatung</a></li>
436	<li id="menu-item-320094" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-320094"><a title="Betriebswirtschaftliche Beratung" href="https://www.hwk-konstanz.de/betriebswirtschaft/">Betriebswirtschaftliche Beratung</a></li>
437	<li id="menu-item-305454" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-305454"><a title="Betriebsnachfolge" href="https://www.hwk-konstanz.de/betriebsnachfolge/">Betriebsnachfolge</a></li>
438	<li id="menu-item-301985" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-301985"><a title="Denkmalschutz und Restaurierung" href="https://www.hwk-konstanz.de/denkmalschutz/">Denkmalschutz und Restaurierung</a></li>
439	<li id="menu-item-306400" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-306400"><a title="Fachkräftesicherung" href="https://www.hwk-konstanz.de/fachkraeftesicherung/">Fachkräftesicherung</a></li>
440	<li id="menu-item-336920" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-336920"><a title="Innovation und Technologie" href="https://www.hwk-konstanz.de/innovation/">Innovation und Technologie</a></li>
441	<li id="menu-item-301980" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-301980"><a title="Rechtsberatung" href="https://www.hwk-konstanz.de/rechtsberatung/">Rechtsberatung</a></li>
442	<li id="menu-item-307882" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-307882"><a title="Umweltschutzberatung" href="https://www.hwk-konstanz.de/umwelt/">Umweltschutzberatung</a></li>
443</ul>
444</li>
445<li id="menu-item-43188" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-43188 dropdown"><a title="Service-Center" href="#" data-toggle="dropdown" class="dropdown-toggle" aria-haspopup="true">Service-Center <span class="caret"></span></a>
446<ul role="menu" class=" dropdown-menu">
447	<li id="menu-item-305456" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-305456"><a title="Ausbildungsvertrag" href="https://www.hwk-konstanz.de/bav/">Ausbildungsvertrag</a></li>
448	<li id="menu-item-305455" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-305455"><a title="Handwerkersuche" href="https://www.hwk-konstanz.de/handwerker-suchen/">Handwerkersuche</a></li>
449	<li id="menu-item-444100" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-444100"><a title="Online-Börsen" href="https://www.hwk-konstanz.de/online-boersen/">Online-Börsen</a></li>
450	<li id="menu-item-305490" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-305490"><a title="Sachverständige" href="https://www.hwk-konstanz.de/sachverstaendige/">Sachverständige</a></li>
451	<li id="menu-item-339405" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-339405"><a title="Ehrungen und Urkunden" href="https://www.hwk-konstanz.de/ehrungen/">Ehrungen und Urkunden</a></li>
452	<li id="menu-item-336673" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-336673"><a title="Dokumente und Verträge" href="https://www.hwk-konstanz.de/download/">Dokumente und Verträge</a></li>
453	<li id="menu-item-336672" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-336672"><a title="Publikationen" href="https://www.hwk-konstanz.de/publikationen/">Publikationen</a></li>
454	<li id="menu-item-479404" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-479404"><a title="Veranstaltungen" href="https://www.hwk-konstanz.de/veranstaltung/">Veranstaltungen</a></li>
455</ul>
456</li>
457</ul>											<div class="header-menu visible-xs">
458
459																									<div class="clearfix">
460<form role="search" method="get" class="search-form" action="https://www.hwk-konstanz.de/">
461    <div class="search-bar">
462        <div class="form-group" onclick="
463                document.getElementById('inputSearch40732').focus();
464                document.getElementById('inputSearch40732').select(); ">
465            <input type="search" class="form-control search-field" name="s" id="inputSearch40732" placeholder="">
466            <label for="inputSearch">Suche </label>
467        </div>
468        <button type="submit" value="search" class="btn btn-default" aria-label="Suche "><span class="glyphicon glyphicon-suche" aria-hidden="true"></span></button>
469    </div>
470</form></div>
471																										<nav>
472																											<ul class="nav navbar-nav">
473                                                    <li class="dropdown">
474                    <a href="#" target="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Über uns <span class="caret"></span></a>
475                    <ul class="dropdown-menu">
476                                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
477                                <a href="https://www.hwk-konstanz.de/hwk/" target=""><span class="glyphicon "></span>Die Handwerkskammer</a>
478                            </li>
479                                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
480                                <a href="https://www.hwk-konstanz.de/handwerk/" target=""><span class="glyphicon "></span>Das Handwerk in der Region</a>
481                            </li>
482                                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
483                                <a href="https://www.hwk-konstanz.de/unsere-funktionstraeger-gremien-und-strukturen/" target=""><span class="glyphicon "></span>Organe und Ehrenamt</a>
484                            </li>
485                                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
486                                <a href="https://www.hwk-konstanz.de/organisation/" target=""><span class="glyphicon "></span>Die Organisationen des Handwerks</a>
487                            </li>
488                                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
489                                <a href="https://www.hwk-konstanz.de/partner-und-kooperationen/" target=""><span class="glyphicon "></span>Partner und Kooperationen</a>
490                            </li>
491                                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
492                                <a href="https://www.hwk-konstanz.de/bekanntmachungen/" target=""><span class="glyphicon "></span>Amtliche Bekanntmachungen</a>
493                            </li>
494                                            </ul>
495                </li>
496                        
497                        <li role="presentation" class="divider"></li>
498            
499                                                    
500                <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
501                    <a href="https://www.hwk-konstanz.de/stellen/" target=""><span class="glyphicon "></span>&nbsp;&nbsp;Karriere</a>
502                </li>
503                        
504                        <li role="presentation" class="divider"></li>
505            
506                                                    <li class="dropdown">
507                    <a href="#" target="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
507Presse & Medien <span class="caret"></span></a>
508                    <ul class="dropdown-menu">
509                                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
510                                <a href="https://www.hwk-konstanz.de/pressebereich/" target=""><span class="glyphicon "></span>Pressebereich</a>
511                            </li>
512                                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
513                                <a href="https://www.hwk-konstanz.de/presse/" target=""><span class="glyphicon "></span>Pressemitteilungen</a>
514                            </li>
515                                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
516                                <a href="https://www.hwk-konstanz.de/politische-statements/" target=""><span class="glyphicon "></span>Politische Statements</a>
517                            </li>
518                                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
519                                <a href="https://www.hwk-konstanz.de/dhz/" target=""><span class="glyphicon "></span>Deutsche Handwerks Zeitung (DHZ)</a>
520                            </li>
521                                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
522                                <a href="https://www.hwk-konstanz.de/handwerk-kompakt/" target=""><span class="glyphicon "></span>Newsletter</a>
523                            </li>
524                                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
525                                <a href="https://www.hwk-konstanz.de/mit-handwerk-heroes-das-handwerk-erkunden/" target=""><span class="glyphicon "></span>Imagekampagne</a>
526                            </li>
527                                            </ul>
528                </li>
529                        
530                        <li role="presentation" class="divider"></li>
531            
532                                                    <li class="dropdown">
533                    <a href="#" target="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Kontakt <span class="caret"></span></a>
534                    <ul class="dropdown-menu">
535                                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
536                                <a href="https://www.hwk-konstanz.de/ansprechpersonen/" target=""><span class="glyphicon "></span>Ansprechpersonen</a>
537                            </li>
538                                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
539                                <a href="https://www.hwk-konstanz.de/oeffnungszeiten/" target=""><span class="glyphicon "></span>Öffnungszeiten</a>
540                            </li>
541                                                    <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
542                                <a href="https://www.hwk-konstanz.de/kontaktformular/" target=""><span class="glyphicon "></span>Kontaktformular</a>
543                            </li>
544                                            </ul>
545                </li>
546                        
547                        <li role="presentation" class="divider"></li>
548            
549                                                    
550                <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
551                    <a href="https://youtube.com/@hwkkonstanz" target="_blank"><span class="glyphicon glyphicon-youtube"></span>&nbsp;&nbsp;YouTube</a>
552                </li>
553                        
554                                                    
555                <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
556                    <a href="https://www.facebook.com/hwkkonstanz/" target="_blank"><span class="glyphicon glyphicon-facebook"></span>&nbsp;&nbsp;Facebook</a>
557                </li>
558                        
559                                                    
560                <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
561                    <a href="https://www.instagram.com/handwerkskammer_konstanz/#" target="_blank"><span class="glyphicon fab fa-instagram "></span>&nbsp;&nbsp;Instagram</a>
562                </li>
563                        
564                                                    
565                <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-3371 current_page_item ">
566                    <a href="http://www.linkedin.com/company/handwerkskammer-konstanz/" target="_blank"><span class="glyphicon  glyphicon-linked-in"></span>&nbsp;&nbsp;LinkedIn</a>
567                </li>
568                        
569    
570</ul>
571
572
573
574        <a href="/login">
575        <div class="p-3 m-3 dropdown-login-xs">
576            <span class="text-white"><i class="fas fa-user"></i>&nbsp;&nbsp;&nbsp;Anmelden</span>
577        </div>
578    </a>
579    
580
581    <a href="/bestellung">
582        <div class="p-3 m-3">
583            <span class="color-hwk-blue-dark"><i class="fas fa-shopping-cart"></i>&nbsp;&nbsp;&nbsp;Warenkorb</span>
584        </div>
585    </a>
586																													</nav>
587												
588											</div>
589										
590									<div id="logo-s" class="hide"><a class="navbar-brand" href="https://www.hwk-konstanz.de"><span class="screen-reader">Logo</span></a><a class="search visible-xs" title="Suche" role="button" aria-label="Öffnet die Suche" aria-describedby="searchbar"><span class="glyphicon glyphicon-suche" aria-hidden="true"></span></a></div>									
591									
592								</div><!-- /.navbar-collapse -->
593
594							</div><!-- /.container -->
595						</nav>
596					
597							<div id="searchbar" aria-expanded="false">
598				<div class="container">
599					<div class="row">
600						<div class="col col-sm-12">
601							
602<form role="search" method="get" class="search-form" action="https://www.hwk-konstanz.de/">
603    <div class="search-bar">
604        <div class="form-group" onclick="
605                document.getElementById('inputSearch78953').focus();
606                document.getElementById('inputSearch78953').select(); ">
607            <input type="search" class="form-control search-field" name="s" id="inputSearch78953" placeholder="">
608            <label for="inputSearch">Suche </label>
609        </div>
610        <button type="submit" value="search" class="btn btn-default" aria-label="Suche "><span class="glyphicon glyphicon-suche" aria-hidden="true"></span></button>
611    </div>
612</form>						</div>
613					</div>
614				</div>
615			</div>
616			
617			</div><!-- /.navbar -->
618
619		
620		<div id="page"><!-- everything except menu -->
621				<div id="content">
622            <div id="vue_app">
623        <div class="container"> 
624        <div class="uni-breadcrump-menu">
625
626            <div class="row">
627                <div class="col-xs-12 col-12 col-sm-10">
628                    <p>
629                        <a class="uni-breadcrump-item" class="" href="https://www.hwk-konstanz.de/">Startseite</a>
630                                                        <span class="fas fa-chevron-right" aria-hidden="true" style="font-size: 12px; color: #9e9e9e;"></span>
631                                    <label style="font-weight: unset;">Über uns</label>
632                                    <span class="fas fa-chevron-right" aria-hidden="true" style="font-size: 12px; color: #9e9e9e;"></span>
633                                    <a class=" uni-breadcrump-item" href="https://www.hwk-konstanz.de/handwerk/">Das Handwerk in der Region</a>
634                                                </p>
635                </div>
636
637            </div>
638
639        </div>
640        </div>			
641		<div id="header-nav-3" class="container"><!-- nav 3rd level -->
642			<div class="row">
643				<div class="col-md-12">
644					<div id="div-head-nav-3">
645						<p id="head-nav-3" class="h1"></p>
646					</div>
647					<div id="nav-level-3"></div>
648					<div class="clearfix"></div>
649					<hr/>
650				</div>
651			</div>
652		</div><!-- / nav 3rd level -->
653						<div class="container scroll-adjust">
654							<div class="row">
655								<div class="col-md-9 content">
656									                    <section id="section-0">
657                    
658                                <div class="row margin-bottom-m new-chapter" >
659                <div id="handwerk_0"  class="col col-md-12 col-sm-12"><div><img decoding="async" data-id="305085" data-src-thumbnail="//hwk-konstanz.uniplus-software.de/wp-content/uploads/hwk-kn-dachsanierung-150x64.jpg" data-src-medium="//hwk-konstanz.uniplus-software.de/wp-content/uploads/hwk-kn-dachsanierung-768x329.jpg" data-src-medium_large="//hwk-konstanz.uniplus-software.de/wp-content/uploads/hwk-kn-dachsanierung-768x329.jpg" data-src-large="//hwk-konstanz.uniplus-software.de/wp-content/uploads/hwk-kn-dachsanierung-1024x439.jpg" data-src-small="//hwk-konstanz.uniplus-software.de/wp-content/uploads/hwk-kn-dachsanierung-480x206.jpg" data-src-full="//hwk-konstanz.uniplus-software.de/wp-content/uploads/hwk-kn-dachsanierung.jpg" src="//hwk-konstanz.uniplus-software.de/wp-content/uploads/hwk-kn-dachsanierung-150x64.jpg" alt="Dachdecker- und 
659Klempnermeister Thomas Pfingst (rechts) bearbeitet mit seinem Mitarbeiter Necho Haziri die Messing-Spitze auf dem Dach der Handwerkskammer Konstanz." class="img-responsive" width="150" height="64" /><div class="w-100 no-padding no-margin" style="display: inline-block"><p style="float: right;" class="note copyright no-padding no-margin">&copy; HWK KN</p></div></div>
660</div><div id="handwerk_1"  class="col col-md-12 col-sm-12"><h2><span>Zahlen, Daten, Fakten</span></h2>
661<h1>Das Handwerk in der Region</h1>
662</div>                </div><!-- /. row -->
663                
664                                <div class="row " >
665                <div id="handwerk_2"  class="col col-md-6 col-sm-6"><p>Auf einer Grundfläche von 4.478 Quadratkilometern erstreckt sich im südlichen Teil von Baden-Württemberg der Bezirk der Handwerkskammer Konstanz – von Bad Säckingen im Westen bis Konstanz im Osten und von Waldshut-Tiengen im Süden bis Oberndorf im Norden.</p>
666<p>In dieser Region zwischen Schwarzwald, Hochrhein und Bodensee stellt das Handwerk eine wichtige Säule der Wirtschaft dar. Knapp 70.000 Beschäftigte arbeiten hier in über 13.000 Handwerksbetrieben.</p>
667</div><div id="handwerk_3"  class="col col-md-6 col-sm-6"><img src="https://www.hwk-konstanz.de/wp-content/uploads/Karte-des-Bezirks-der-Handwerkskammer-Konstanz-150x125.png" title="" alt="Karte-des-Bezirks-der-Handwerkskammer-Konstanz" data-id="273038" data-src-thumbnail="https://www.hwk-konstanz.de/wp-content/uploads/Karte-des-Bezirks-der-Handwerkskammer-Konstanz-150x125.png" data-src-small="https://www.hwk-konstanz.de/wp-content/uploads/Karte-des-Bezirks-der-Handwerkskammer-Konstanz-480x400.png" data-src-medium="https://www.hwk-konstanz.de/wp-content/uploads/Karte-des-Bezirks-der-Handwerkskammer-Konstanz-768x639.png" data-src-large="https://www.hwk-konstanz.de/wp-content/uploads/Karte-des-Bezirks-der-Handwerkskammer-Konstanz-1024x853.png" data-src-full="https://www.hwk-konstanz.de/wp-content/uploads/Karte-des-Bezirks-der-Handwerkskammer-Konstanz.png" class="img-responsive" /></div><div class="clearfix hidden-xs"></div>                </div><!-- /. row -->
668                                        </section>
669                                            <section id="section-1">
670                    
671                                <div class="row new-chapter" >
672                <div id="handwerk_4"  class="col col-md-12 col-sm-12"><h2>Das Handwerk in Zahlen</h2>
673<p><span>Das Handwerk bildet mit seinen vorwiegend kleinen und mittleren Betrieben das Herzstück der deutschen Wirtschaft. Für den Bezirk der Handwerkskammer Konstanz bedeutet das in Zahlen (Stichtag: 31.12.2025):</span></p>
674<h3>Überblick</h3>
675<table class=" alignleft" width="533" height="170" style="height: 170px;">
676<tbody>
677<tr>
678<td><strong>Landkreis</strong></td>
679<td><strong>Betriebe</strong></td>
680<td><strong>Auszubildende</strong></td>
681</tr>
682<tr>
683<td>Konstanz</td>
684<td>3.711</td>
685<td>1.117</td>
686</tr>
687<tr>
688<td>Rottweil</td>
689<td>2.120</td>
690<td>585</td>
691</tr>
692<tr>
693<td>Schwarzwald-Baar-Kreis</td>
694<td>2.800</td>
695<td>892</td>
696</tr>
697<tr>
698<td>Tuttlingen</td>
699<td>2.091</td>
700<td>611</td>
701</tr>
702<tr>
703<td>Waldshut</td>
704<td>2.614</td>
705<td>972</td>
706</tr>
707<tr>
708<td><strong>gesamt</strong></td>
709<td><strong>13.336</strong></td>
710<td><strong>4.177</strong></td>
711</tr>
712</tbody>
713</table>
714<h3></h3>
715<h3></h3>
716<h3></h3>
717<h3></h3>
718<h3></h3>
719<h4>Entwicklung der Betriebszahlen</h4>
720<p>Die niedrigere Zahl der Betriebe im Jahr 2025 hängt mit einer veränderten statistischen Auswertung hinsichtlich der Filialbetriebe zusammen, so dass eine Vergleichbarkeit mit den Vorjahren nur bedingt gegeben ist.</p>
721<img decoding="async" data-id="561142" data-src-thumbnail="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-150x32.png" data-src-medium="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-768x163.png" data-src-medium_large="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-768x163.png" data-src-large="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-1024x217.png" data-src-1536x1536="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-1536x326.png" data-src-small="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-480x102.png" data-src-full="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-1600x339.png" title="" src="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-betriebszahlen-150x32.png" alt="Grafik: Entwicklung der Betriebszahlen im Bezirk der Handwerkskammer Konstanz (Stichtag: 31.12.2025)." class="img-responsive" />
722<p><strong>Zulassungspflichtiges Handwerk</strong>: 53 Berufe, deren selbständige Ausübung in der Regel den Meisterbrief voraussetzt, zum Beispiel Maurer/-in, Kraftfahrzeugtechniker/-in, Bäcker/-in, Friseur/-in oder Schreiner/-in.</p>
723<p><strong>Zulassungsfreies Handwerk</strong>: 41 Berufe, die auch ohne speziellen Qualifikationsnachweis und Meisterbrief ausgeübt werden können, zum Beispiel Uhrmacher/-in, Brauer/-in, Geigenbauer/-in oder Fotograf/-in.</p>
724<p><strong>Handwerksähnliche Gewerbe</strong>: 54 Gewerbe wie Rohr- und Kanalreiniger/-in, Klavierstimmer/-in, Kosmetikerin/-in, Änderungsschneider/-in oder Metallschleifer/-in, die ebenfalls keinen speziellen Qualifikationsnachweis erfordern.</p>
725</div>                </div><!-- /. row -->
726                                        </section>
727                                            <section id="section-2">
728                    
729                                <div class="row new-chapter" >
730                <div id="handwerk_5"  class="col col-md-12 col-sm-12"><h4>Top Ten der Gewerke (nach Anzahl der Betriebe)</h4>
731<table width="646" height="343">
732<tbody>
733<tr>
734<td><strong>Beruf</strong></td>
735<td><strong>Anzahl der Betriebe im Kammerbezirk </strong></td>
736</tr>
737<tr>
738<td>Friseur/-in</td>
739<td>1.036</td>
740</tr>
741<tr>
742<td>Elektrotechniker/-in</td>
743<td>759</td>
744</tr>
745<tr>
746<td>Kraftfahrzeugtechniker/-in</td>
747<td>749</td>
748</tr>
749<tr>
750<td>Installateur/-in und Heizungsbauer/-in</td>
751<td>595</td>
752</tr>
753<tr>
754<td>Fliesen-, Platten- und Mosaikleger/-in</td>
755<td>465</td>
756</tr>
757<tr>
758<td>Maler/-in und Lackierer/-in</td>
759<td>463</td>
760</tr>
761<tr>
762<td>Zimmerer/-in</td>
763<td>432</td>
764</tr>
765<tr>
766<td>Schreiner/-in</td>
767<td>400</td>
768</tr>
769<tr>
770<td>Maurer/-in und Betonbauer/-in</td>
771<td>320</td>
772</tr>
773<tr>
774<td>Metallbauer/-in</td>
775<td>258</td>
776</tr>
777</tbody>
778</table>
779</div>                </div><!-- /. row -->
780                                        </section>
781                                            <section id="section-3">
782                    
783                                <div class="row new-chapter" >
784                <div id="handwerk_6"  class="col col-md-12 col-sm-12"><h3>Ausbildung</h3>
785<p>Handwerk hat Zukunft: Von A wie Augenoptiker/in bis Z wie Zweiradmechaniker/in eröffnen über 130 Ausbildungsberufe in den unter
785schiedlichsten Fachrichtungen und Gewerken mindestens ebenso viele Perspektiven. Die Handwerkskammer informiert junge Berufseinsteiger über die vielfältigen<span> </span><a href="https://hwk-konstanz.uniplus-software.de/ausbildung/">Chancen einer Ausbildung im Handwerk</a>. Informationen für Schüler, Eltern und Lehrer gibt es auch auf <a href="https://www.hwk-konstanz.de/">https://www.hwk-konstanz.de/</a>.</p>
786<p>4.177 junge Menschen waren Ende 2025 im Bezirk der Handwerkskammer Konstanz in einer handwerklichen Ausbildung, rund 2,55 Prozent mehr als im Vorjahr. Der Anteil der Frauen unter den Auszubildenden liegt bei 18,51 Prozent.</p>
787<h4>Die häufigsten Ausbildungsberufe</h4>
788<table width="711" height="233">
789<tbody>
790<tr>
791<td><strong>Beruf</strong></td>
792<td><strong>2024 gesamt</strong></td>
793<td><strong>Männer</strong></td>
794<td><strong>Frauen</strong></td>
795<td><strong>2025 gesamt</strong></td>
796<td><strong>Männer</strong></td>
797<td><strong>Frauen</strong></td>
798</tr>
799<tr>
800<td>Kfz-Mechatroniker/-in</td>
801<td>645</td>
802<td>621</td>
803<td>24</td>
804<td>647</td>
805<td>607</td>
806<td>40</td>
807</tr>
808<tr>
809<td>Elektroniker/-in</td>
810<td>523</td>
811<td>507</td>
812<td>16</td>
813<td>524</td>
814<td>504</td>
815<td>20</td>
816</tr>
817<tr>
818<td>Anlagenmechaniker/-in SHK</td>
819<td>454</td>
820<td>443</td>
821<td>11</td>
822<td>463</td>
823<td>448</td>
824<td>15</td>
825</tr>
826<tr>
827<td>Zimmerer/-in</td>
828<td>342</td>
829<td>321</td>
830<td>21</td>
831<td>366</td>
832<td>339</td>
833<td>27</td>
834</tr>
835<tr>
836<td>Friseur/-in</td>
837<td>221</td>
838<td>86</td>
839<td>135</td>
840<td>217</td>
841<td>84</td>
842<td>133</td>
843</tr>
844<tr>
845<td>Schreiner/-in</td>
846<td>191</td>
847<td>134</td>
848<td>57</td>
849<td>195</td>
850<td>136</td>
851<td>59</td>
852</tr>
853<tr>
854<td>Maler/-in und Lackierer/-in</td>
855<td>119</td>
856<td>85</td>
857<td>34</td>
858<td>121</td>
859<td>83</td>
860<td>38</td>
861</tr>
862<tr>
863<td>Metallbauer/-in</td>
864<td>110</td>
865<td>109</td>
866<td>1</td>
867<td>112</td>
868<td>111</td>
869<td>1</td>
870</tr>
871<tr>
872<td>Chirurgiemechaniker/-in</td>
873<td>96</td>
874<td>75</td>
875<td>21</td>
876<td>100</td>
877<td>80</td>
878<td>20</td>
879</tr>
880<tr>
881<td>Augenoptiker/-in</td>
882<td>109</td>
883<td>39</td>
884<td>70</td>
885<td>94</td>
886<td>29</td>
887<td>65</td>
888</tr>
889<tr>
890<td>Feinwerkmechaniker/-in</td>
891<td>37</td>
892<td>36</td>
893<td>1</td>
894<td>31</td>
895<td>31</td>
896<td>0</td>
897</tr>
898</tbody>
899</table>
900</div>                </div><!-- /. row -->
901                                        </section>
902                                            <section id="section-4">
903                    
904                                <div class="row new-chapter" >
905                <div id="handwerk_7"  class="col col-md-12 col-sm-12"><h4>Entwicklung der Ausbildungsverhältnisse</h4>
906<img decoding="async" data-id="561141" data-src-thumbnail="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-ausbildungsverhaeltnisse-150x88.png" data-src-medium="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-ausbildungsverhaeltnisse-768x450.png" data-src-medium_large="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-ausbildungsverhaeltnisse-768x450.png" data-src-small="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-ausbildungsverhaeltnisse-480x281.png" data-src-full="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-ausbildungsverhaeltnisse.png" title="" src="//www.hwk-konstanz.de/wp-content/uploads/2025_entwicklung-ausbildungsverhaeltnisse-150x88.png" alt="Grafik: Entwicklung der Ausbildungsverhältnisse im Bezirk der Handwerkskammer Konstanz (Stichtag: 31.12.2025)." class="img-responsive" />
907</div>                </div><!-- /. row -->
908                                        </section>
909                                            <section id="section-5">
910                    
911                                <div class="row new-chapter" >
912                <div id="handwerk_8"  class="col col-md-12 col-sm-12"><h4>Anzahl der Auszubildenden nach Landkreisen</h4>
913<img decoding="async" data-id="561140" data-src-thumbnail="//www.hwk-konstanz.de/wp-content/uploads/2025_auszubildende_landkreise_final-150x60.png" data-src-medium="//www.hwk-konstanz.de/wp-content/uploads/2025_auszubildende_landkreise_final-768x305.png" data-src-medium_large="//www.hwk-konstanz.de/wp-content/uploads/2025_auszubildende_landkreise_final-768x305.png" data-src-small="//www.hwk-konstanz.de/wp-content/uploads/2025_auszubildende_landkreise_final-480x191.png" data-src-full="//www.hwk-konstanz.de/wp-content/uploads/2025_auszubildende_landkreise_final.png" title="" src="//www.hwk-konstanz.de/wp-content/uploads/2025_auszubildende_landkreise_final-150x60.png" alt="Grafik: Auszubildende nach Landkreisen und Geschlecht im Bezirk der Handwerkskammer Konstanz (Stichtag: 31.12.2025)." class="img-responsive" />
914</div>                </div><!-- /. row -->
915                                        </section>
916                                            <section id="section-6">
917                    
918                                <div class="row new-chapter" >
919                <div id="handwerk_9"  class="col col-md-12 col-sm-12"><h4>Schulische Vorbildung der Lehranfänger/-innen</h4>
920<img decoding="async" data-id="561143" data-src-thumbnail="//www.hwk-konstanz.de/wp-content/uploads/2025_schulische-vorbildung-150x88.png" data-src-medium="//www.hwk-konstanz.de/wp-content/uploads/2025_schulische-vorbildung-768x452.png" data-src-medium_large="//www.hwk-konstanz.de/wp-content/uploads/2025_schulische-vorbildung-768x452.png" data-src-small="//www.hwk-konstanz.de/wp-content/uploads/2025_schulische-vorbildung-480x282.png" data-src-full="//www.hwk-konstanz.de/wp-content/uploads/2025_schulische-vorbildung.png" title="" src="//www.hwk-konstanz.de/wp-content/uploads/2025_schulische-vorbildung-150x88.png" alt="Grafik: Schulische Vorbildung der Lehranfänger im Bezirk der Handwerkskammer Konstanz (Stichtag: 31.12.2025)." class="img-responsive" />
921<p><span>Die meisten Berufsanfänger-/innen kommen aus der Realschule und der Haupt- bzw. Werkrealschule. Allmählich entdecken aber auch immer mehr Abiturienten das Handwerk für sich.</span></p>
922</div>                </div><!-- /. row -->
923                                        </section>
924                                            <section id="section-7">
925                    
926                                <div class="row new-chapter" >
927                <div id="handwerk_10"  class="col col-md-12 col-sm-12"><h3>Weiterbildung</h3>
928<p>Der Meistertitel ist das Herzstück des Handwerks. Wer ihn besitzt, verfügt über das fachliche, betriebswirtschaftliche und pädagogische Know-how, einen Betrieb selbstständig zu führen, als Führungskraft besondere Aufgaben zu übernehmen und Lehrlinge auszubilden. Bei Kunden, Kreditgebern und Ausrüstern genießt der Meisterbrief hohes Ansehen und bürgt für fachliche Kompetenz, Zuverlässigkeit, Qualität und unternehmerisches Können.</p>
929<h4>Meisterprüfungen nach Berufen</h4>
930<table width="455" height="233">
931<tbody>
932<tr>
933<td><strong>Beruf</strong></td>
934<td><strong>2024</strong></td>
935<td><strong>2025</strong></td>
936</tr>
937<tr>
938<td><span>Bäcker/-in</span></td>
939<td>2</td>
940<td>0</td>
941</tr>
942<tr>
943<td><span>Chirurgiemechaniker/-in</span></td>
944<td>8</td>
945<td>3</td>
946</tr>
947<tr>
948<td><span>Dachdecker/-in</span></td>
949<td>12</td>
950<td>29</td>
951</tr>
952<tr>
953<td><span>Elektrotechniker/-in</span></td>
954<td>35</td>
955<td>23</td>
956</tr>
957<tr>
958<td><span>Feinwerkmechaniker/-in</span></td>
959<td>3</td>
960<td>17</td>
961</tr>
962<tr>
963<td><span>Fliesen-, Platten- und Mosaikleger/-in</span></td>
964<td>12</td>
965<td>19</td>
966</tr>
967<tr>
968<td><span>Friseur/-in</span></td>
969<td>56</td>
970<td>51</td>
971</tr>
972<tr>
973<td><span>Graveur/-in</span></td>
974<td>4</td>
975<td>2</td>
976</tr>
977<tr>
978<td><span>Installateur/-in und Heizungsbauer/-in</span></td>
979<td>36</td>
980<td>46</td>
981</tr>
982<tr>
983<td><span>Kfz-Techniker/-in</span></td>
984<td>58</td>
985<td>46</td>
986</tr>
987<tr>
988<td><span>Klempner/-in</span></td>
989<td>8</td>
990<td>2</td>
991</tr>
992<tr>
993<td><span>Konditor/-in</span></td>
994<td>7</td>
995<td>9</td>
996</tr>
997<tr>
998<td><span>Maler/-in</span></td>
999<td>5</td>
1000<td>1</td>
1001</tr>
1002<tr>
1003<td><span>Maurer/-in</span></td>
1004<td>14</td>
1005<td>17</td>
1006</tr>
1007<tr>
1008<td><span>Metallbauer/-in</span></td>
1009<td>18</td>
1010<td>15</td>
1011</tr>
1012<tr>
1013<td><span>Metallbildner/-in</span></td>
1014<td>0</td>
1015<td>0</td>
1016</tr>
1017<tr>
1018<td><span>Schreiner/-in</span></td>
1019<td>11</td>
1020<td>0</td>
1021</tr>
1022<tr>
1023<td><span>Stuckateur/-in</span></td>
1024<td>14</td>
1025<td>11</td>
1026</tr>
1027<tr>
1028<td><span>Uhrmacher/-in</span></td>
1029<td>7</td>
1030<td>0</td>
1031</tr>
1032<tr>
1033<td><span>Zimmerer/-in</span></td>
1034<td>27</td>
1035<td>21</td>
1036</tr>
1037<tr>
1038<td><span><strong>gesamt</strong></span></td>
1039<td><strong>337</strong></td>
1040<td><strong>312</strong></td>
1041</tr>
1042</tbody>
1043</table>
1044</div>                </div><!-- /. row -->
1045                                        </section>
1046                                            <section id="section-8">
1047                    
1048                                <div class="row new-chapter" >
1049                <div id="handwerk_11"  class="col col-md-12 col-sm-12"><h4>Meisterprüfungen nach Geschlecht</h4>
1050<table width="467" height="99">
1051<tbody>
1052<tr>
1053<td></td>
1054<td><strong>2020</strong></td>
1055<td><strong>2021</strong></td>
1056<td><strong>2022</strong></td>
1057<td><strong>2023</strong></td>
1058<td><strong>2024</strong></td>
1059<td><strong>2025</strong></td>
1060</tr>
1061<tr>
1062<td>Männer</td>
1063<td>199</td>
1064<td>249</td>
1065<td>246</td>
1066<td>261</td>
1067<td>283</td>
1068<td>267</td>
1069</tr>
1070<tr>
1071<td>Frauen</td>
1072<td>66</td>
1073<td>83</td>
1074<td>66</td>
1075<td>54</td>
1076<td>54</td>
1077<td>45</td>
1078</tr>
1079<tr>
1080<td><strong>gesamt</strong></td>
1081<td><strong>265</strong></td>
1082<td><strong>332</strong></td>
1083<td><strong>312</strong></td>
1084<td><strong>315</strong></td>
1085<td><strong>337</strong></td>
1086<td><strong>312</strong></td>
1087</tr>
1088</tbody>
1089</table>
1090</div>                </div><!-- /. row -->
1091                                        </section>
1092                                            <section id="section-9">
1093                    
1094                                <div class="row new-chapter" >
1095                <div id="handwerk_12"  class="col col-md-12 col-sm-12"><h2>Berufsbildungsreport</h2>
1096<p>Informationen über die Ausbildung in der Region finden Sie in unserem jährlich erscheinenden Berufsbildungsreport.</p>
1097<p>
1097                                <span class="uni-glyphicon-parent no-margin no-padding glyphicon glyphicon-pdf-download-2"
1098                    ></span>
1099                                   <a href="https://www.hwk-konstanz.de/wp-content/uploads/hwk-kn-berufsbildungsreport-2026.pdf">Berufsbildungsreport 2026 (Berichtszeitraum: 01.01. &#8211; 31.12.2025)</a></p>
1100</div>                </div><!-- /. row -->
1101                                        </section>
1102                                            <section id="section-10">
1103                    
1104                                <div class="row new-chapter" >
1105                <div id="handwerk_13"  class="col col-md-12 col-sm-12"><h2>Konjunktur</h2>
1106<p><span>Das Handwerk ist ein bedeutender Wirtschaftsfaktor in der Region. Die aktuelle Lage und die erwartete Entwicklung im Gesamthandwerk und den einzelnen Berufsgruppen finden Sie in unserem Konjunkturbericht, der jedes Quartal veröffentlicht wird.</span></p>
1107<p>                                <span class="uni-glyphicon-parent no-margin no-padding glyphicon glyphicon-pdf-download-2"
1108                    ></span>
1109                                  <a href="https://www.hwk-konstanz.de/wp-content/uploads/hwk-kn-konjunkturbericht-3-2026.pdf">Konjunkturbericht 3. Quartal 2026</a></p>
1110<p>                <i  class="fas fas fa-link "
1111                    style=""></i>
1112                  <a href="https://www.hwk-konstanz.de/konjunktur/">Konjunkturberichte-Archiv</a></p>
1113</div>                </div><!-- /. row -->
1114                		</section>
1115									</div><!-- /.content -->
1116
1117								<div id="scrollspyContent" class="scrollspy col-md-3 visible-md visible-lg hidden-print">
1118																				<ul class="nav nav-tabs nav-stacked affix-top" data-spy="affix" data-offset-top="10">
1119												<li class="static">Inhalt</li>
1120												<li id="uni-section-id-0"  class="active"><a href="#section-0">Allgemeines</a></li><li id="uni-section-id-1" ><a href="#section-1">Betriebszahlen </a></li><li id="uni-section-id-2" ><a href="#section-2">Top Ten Berufe </a></li><li id="uni-section-id-3" ><a href="#section-3">Ausbildungsberufe </a></li><li id="uni-section-id-4" ><a href="#section-4">Ausbildungsverhältnisse </a></li><li id="uni-section-id-5" ><a href="#section-5">Auszubildende nach Landkreisen </a></li><li id="uni-section-id-6" ><a href="#section-6">Schulische Vorbildung </a></li><li id="uni-section-id-7" ><a href="#section-7">Meisterprüfungen (Berufe)</a></li><li id="uni-section-id-8" ><a href="#section-8">Meisterprüfungen (Geschlecht)</a></li><li id="uni-section-id-9" ><a href="#section-9">Berufsbildungsreport</a></li><li id="uni-section-id-10" ><a href="#section-10">Konjunktur</a></li>											</ul>
1121										
1122								</div>
1123							</div>
1124						</div><!-- /.scroll-adjust -->
1125						                        </div><!-- /#vue_app -->
1126        </div><!-- /#content -->
1127		    <div class="hidden-print">
1128                        <footer class="site-footer">
1129                                        <div class="container-fluid bg-white"><!-- footer content -->
1130                        <div id="footer-content" class="container">
1131                            <hr>
1132                            <div class="row">
1133                                <div class="col-sm-12">
1134                                    <!-- new structure for accessibility -->
1135
1136                                    <ul class="aria-structure">
1137                                        <li><a role="button">        <div>
1138
1139                                                <a href="mailto:?subject=Seite empfehlen&body="><span class="glyphicon glyphicon-mail"></span>Seite empfehlen</a>
1140        </div>
1141        </a></li>
1142                                                                                    <li onclick="window.print();"><a role="button"><span class="glyphicon glyphicon-drucker" aria-hidden="true"></span>Seite drucken</a></li>
1143                                            <li><p>Seite aktualisiert am 28. September 2026<span class="hidden-sm hidden-xs">, online seit 1. September 2025</span></p></li>
1144                                                                            </ul>
1145                                </div>
1146                            </div>
1147                        </div>
1148                    </div>
1149                                        <div id="footer-bottom" class="container-fluid">
1150                        <div class="container">
1151                                                        <div class="row">
1152                                                                <div class="col-xs-12 col-md-12 mt-4 mb-5 pb-3">
1153                                     
1154        <div class="uni-breadcrump-menu">
1155
1156            <div class="row">
1157                <div class="col-xs-12 col-12 col-sm-10">
1158                    <p>
1159                        <a class="uni-breadcrump-item" class="" href="https://www.hwk-konstanz.de/">Startseite</a>
1160                                                        <span class="fas fa-chevron-right" aria-hidden="true" style="font-size: 12px; color: #9e9e9e;"></span>
1161                                    <label style="font-weight: unset;">Über uns</label>
1162                                    <span class="fas fa-chevron-right" aria-hidden="true" style="font-size: 12px; color: #9e9e9e;"></span>
1163                                    <a class=" uni-breadcrump-item" href="https://www.hwk-konstanz.de/handwerk/">Das Handwerk in der Region</a>
1164                                                </p>
1165                </div>
1166
1167            </div>
1168
1169        </div>
1170                                        </div>
1171                            </div>
1172                            <div class="row stretch">
1173                                                                    <div class="col col-xs-12 col-md-3 col-sm-6 margin-bottom-s border-top">
1174                                        <ul>
1175                                                                                            <li><strong>Wir fürs Handwerk</strong></li>
1176                                                                                                                                                                                            <li><a  href="https://hwk-konstanz.uniplus-software.de/ansprechpersonen/" class=" ">Ansprechpersonen</a></li>
1177                                                                                                                                                                                                <li><a  href="https://hwk-konstanz.uniplus-software.de/oeffnungszeiten/" class=" ">Öffnungszeiten</a></li>
1178                                                                                                                                                                                                <li><a  href="https://hwk-konstanz.uniplus-software.de/stellen" class=" ">Stellenangebote</a></li>
1179                                                                                                                                                                                                <li><a  href="https://hwk-konstanz.uniplus-software.de/pressebereich/" class=" ">Presse</a></li>
1180                                                                                                                                    </ul>
1181                                    </div>
1182                                                                    <div class="col col-xs-12 col-md-3 col-sm-6 margin-bottom-s border-top">
1183                                        <ul>
1184                                                                                            <li><strong>Dokumente und Verträge</strong></li>
1185                                                                                                                                                                                            <li><a  href="https://www.hwk-konstanz.de/download-ausbildung/" class=" ">Downloads Ausbildung</a></li>
1186                                                                                                                                                                                                <li><a  href="https://www.hwk-konstanz.de/download-beratung/" class=" ">Downloads Beratung</a></li>
1187                                                                                                                                                                                                <li><a  href="https://www.hwk-konstanz.de/download-handwerksrolle/" class=" ">Downloads Handwerksrolle</a></li>
1188                                                                                                                                    </ul>
1189                                    </div>
1190                                                                    <div class="col col-xs-12 col-md-3 col-sm-6 margin-bottom-s border-top">
1191                                        <ul>
1192                                                                                            <li><strong>Barrierefreiheit</strong></li>
1193                                                                                                                                                                                            <li><a  href="https://www.hwk-konstanz.de/leichte-sprache/" class=" ">Leichte Sprache</a></li>
1194                                                                                                                                                                                                <li><a  href="https://www.hwk-konstanz.de/gebaerdensprache/" class=" ">Gebärdensprache</a></li>
1195                                                                                                                                                                                                <li><a  href="https://www.hwk-konstanz.de/erklaerung-zur-barrierefreiheit/" class=" ">Erklärung zur Barrierefreiheit</a></li>
1196                                                                                                                                    </ul>
1197                                    </div>
1198                                                                <div class="col col-xs-12 col-md-3 col-sm-6 margin-bottom-s border-top">
1199                                                                                                            <p><strong>Handwerkskammer Konstanz</strong></p>
1200                                    <p>
1201                                        Webersteig 3                                        <br>
1202                                        78462 Konstanz                                    </p>
1203                                    <p>
1204                                        Telefon 07531 205-0<br>
1205                                                                                <a href="mailto:[email protected]">[email protected]</a>
1206                                    </p>
1207                                                                    </div>
1208                            </div>
1209                            <div class="row border-top">
1210                                                                <div class="col-xs-12 col-sm-6 copyright"><p>Copyright © 2026 UNIPLUS Software GmbH</p></div>
1211                                <div class="col-xs-12 col-sm-6 text-right">
1212                                                                                                                        <a style="margin-left: 15px;" class="" href="https://www.hwk-konstanz.de/impressum/"><i class="fas fa-caret-right"></i> Impressum</a>
1213                                                                                    <a style="margin-left: 15px;" class="" href="https://www.hwk-konstanz.de/datenschutz/"><i class="fas fa-caret-right"></i> Datenschutzerklärung</a>
1214                                                                                                                                                    <a style="margin-left: 15px;
1214" class="borlabs-cookie-preference cookie-settings-link" title="Cookie Einstellungen" href="#"><i class="fas fa-caret-right"></i> Cookie Einstellungen</a>
1215                                                                    </div>
1216
1217                            </div>
1218                        </div><!-- /.container -->
1219                    </div><!-- /#footer-bottom -->
1220
1221                </footer>
1222        
1223                </div><!-- /everything except menu -->
1224
1225                </div><!-- / #wrapper -->
1226
1227                
1227<script type="speculationrules">
1228{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/uni-hwk-redesign/*","/wp-content/themes/chatty/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
1229</script>
1229
1230		
1230<script>
1231			jQuery(document).ready(function($) {
1232				$('.klappbox-head').each(function(e) {
1233					$(this).click(function(e) {
1234						$(this).find('span:nth-child(2) i').toggleClass('fas fa-chevron-down');
1235						$(this).find('span:nth-child(2) i').toggleClass('fas fa-chevron-up');
1236					});
1237				});
1238			});
1239		</script>
1239
1240		        
1240<script type=text/javascript>
1241            jQuery(document).ready(function ($) {
1242                function addLogoutTrigger() {
1243                    $("a[href*='action=logout']").each(function(id, e) {
1244                        $(e).click(function() {
1245                            $(document).trigger('uni-logout');
1246                        });
1247                    });
1248                }
1249                addLogoutTrigger();
1250                setTimeout(addLogoutTrigger, 1000);
1251                setTimeout(addLogoutTrigger, 3000);
1252
1253            });
1254        </script>
1254
1255                
1255<script src="https://ai.uniplus-software.de/dist/aitools.js" defer></script>
1255
1256                    
1256<script>
1257                jQuery(document).ready(function($) {
1258                    $(window).scroll(function() {
1259                        let div = $('#geolocation-map-wrapper');
1260                        var parentwidth = div.parent().width();
1261                        div.width(parentwidth);
1262                        $(".child").toggleClass("fixed").width(parentwidth);
1263                        if ($(window).scrollTop() >= 887) {
1264                            div.addClass('sticky');
1265                        }
1266                        else {
1267                            div.removeClass('sticky');
1268                        }
1269                    });
1270                });
1271
1272            </script>
1272
1273                    
1273<script>
1274                jQuery(document).ready(function($) {
1275                    $(window).scroll(function() {
1276                        let div = $('#rezeptsst-map-wrapper');
1277                        var parentwidth = div.parent().width();
1278                        div.width(parentwidth);
1279                        $(".child").toggleClass("fixed").width(parentwidth);
1280                        if ($(window).scrollTop() >= 887) {
1281                            div.addClass('sticky');
1282                        }
1283                        else {
1284                            div.removeClass('sticky');
1285                        }
1286                    });
1287                });
1288
1289            </script>
1289
1290                    
1290<script>
1291                jQuery(document).ready(function($) {
1292                    $(window).scroll(function() {
1293                        let div = $('#lbo-map-wrapper');
1294                        var parentwidth = div.parent().width();
1295                        $(".child").toggleClass("fixed").width(parentwidth);
1296                        if ($(window).scrollTop() >= 887) {
1297                            div.addClass('sticky');
1298                        }
1299                        else {
1300                            div.removeClass('sticky');
1301                        }
1302                    });
1303                });
1304
1305            </script>
1305
1306         
1307		
1307<script>
1308			function toggle_sem_pfeil(a, b) {
1309				(function($) {
1310					$('#' + b).show();
1311					$('#' + a).hide();    
1312				})(jQuery);
1313			}
1314		</script>
1314
1315	    
1315<script>
1316        jQuery(document).ready(function($) {
1317            $('.btn-toggle-kurs-data').each(function(i, obj) {
1318                $(this).on('click', function(e) {
1319                    var self = $(this);
1320                    var div = $('#kursData_' + $(this).attr('with-id'));
1321                    div.toggle('show');
1322
1323                    setTimeout(function() {
1324                        if(div.is(':visible')) {
1325                            self.val('weniger\u2026');
1326                        } else {
1327                            self.val('mehr\u2026');
1328                        }
1329                    }, 500);
1330                    setTimeout(function() {
1331                        $(div)[0].scrollIntoView({ behavior: 'smooth', block: 'nearest' });
1332                    }, 500);
1333                    $(div)[0].scrollTop -= 20;
1334                });
1335            });
1336        });
1337    </script>
1337
1338	    
1338<script>
1339
1340        jQuery(document).ready(function($) {
1341            var selected = $('#fbgr_select option:selected').val();
1342            if(selected > 0) {
1343                $('#fbunter_select').prop('disabled', false);
1344            }
1345            else {
1346                $('#fbunter_select').prop('disabled', true);
1347            }
1348            if(selected > 0) {
1349                $.ajax({
1350                    url: "https://www.hwk-konstanz.de/wp-content/plugins/uniplus-seminarwesen-fachbereiche/inc/unterfachbereich.php",
1351                    data: {
1352                        format: 'json',
1353                        fbgr: selected,
1354                        nonce: '2fc3df3416',
1355                    },
1356                    error: function() {
1357                        //$('#info').html('<p>An error has occurred</p>');
1358                        //console.log('An error has occurred');
1359                    },
1360                    dataType: 'json',
1361                    success: function(result) {
1362                        $('#fbunter_select').empty();
1363                        $('#fbunter_select').append('<option value=\'0\'>&nbsp;Bitte ausw&auml;hlen</option>');
1364                        $.each(result, function(index, value){
1365                            var sub_category_selected = $('#hidden_fbunter_select').val();
1366                            if(sub_category_selected == value || sub_category_selected == index) {
1367                                $('#fbunter_select').append('<option selected value=\'' + value + '\'>&nbsp;' + index + '</option>');
1368                            } else {
1369                                $('#fbunter_select').append('<option value=\'' + value + '\'>&nbsp;' + index + '</option>');
1370                            }
1371                        });
1372                    },
1373                    type: 'POST'
1374                });
1375            }
1376            $('#fbgr_select').change(function() {
1377
1378                var selected = $('#fbgr_select option:selected').val();
1379                if(selected > 0) {
1380                    $('#fbunter_select').prop('disabled', false);
1381                }
1382                else {
1383                    $('#fbunter_select').prop('disabled', true);
1384                }
1385                $.ajax({
1386                    url: "https://www.hwk-konstanz.de/wp-content/plugins/uniplus-seminarwesen-fachbereiche/inc/unterfachbereich.php",
1387                    data: {
1388                        format: 'json',
1389                        fbgr: selected,
1390                        nonce: '2fc3df3416',
1391                    },
1392                    error: function() {
1393                        //$('#info').html('<p>An error has occurred</p>');
1394                        //console.log('An error has occurred');
1395                    },
1396                    dataType: 'json',
1397                    success: function(result) {
1398                        $('#fbunter_select').empty();
1399                        $('#fbunter_select').append('<option value=\'0\'>&nbsp;Bitte ausw&auml;hlen</option>');
1400                        $.each(result, function(index, value){
1401                            $('#fbunter_select').append('<option value=\'' + value + '\'>&nbsp;' + index + '</option>');
1402                        });
1403                    },
1404                    type: 'POST'
1405                });
1406
1407            });
1408        });
1409    </script>
1409
1410	        
1410<script>
1411            jQuery(document).ready(function($) {
1412                let user_id = null;
1413                let client = 'hwkkonstanz';
1414
1415                let ls_key = 'uni_wk_kurse_'+client;
1416                if(user_id) {
1417                    ls_key += '_'+user_id;
1418                }
1419                let items = localStorage.getItem(ls_key);
1420                if(!items) {
1421                    items = localStorage.getItem('uni_wk_kurse_'+client); // item added to local storage before logging in
1422                }
1423                if(!items) {
1424                    items = localStorage.getItem('items'); // This can be removed in the future.
1425                }
1426
1427                //const items = localStorage.getItem('items');
1428                if(items) {
1429                    const numItems = JSON.parse(items).length;
1430                    if(numItems > 0) {
1431                        [ 'span.glyphicon-shopping-cart' ]
1432                            .forEach(function(_e) {
1433                                const es = $(_e);
1434                                for(let i = 0; i < es.length; i++) {
1435                                    const e = $(es[i]);
1436                                    e.css('color', '#ff8d25');
1437                                }
1438                            });
1439                    }
1440                }
1441            });
1442        </script>
1442
1443                
1443<script>
1444            window.addEventListener('load', init);
1445
1446            function init() {
1447                // Add event listener to "In den Warenkorb" button
1448                document.querySelectorAll('.uni_warenkorb_buy_form > button[type="submit"]').forEach(function(element){
1449                    element.addEventListener('click', addItemToCart);
1450                }, this);
1451
1452                // console.log('Warenkorb init');
1453                // // Add event listener to logout-links
1454                // document.querySelectorAll('a[href*="action=logout"]').forEach(function(element){
1455                //     element.addEventListener('click', clearLocalStorage);
1456                // }, this);
1457            }
1458
1459            jQuery(document).ready(function ($) {
1460                $(document).on('uni-logout', function () {
1461                    // Clean all the data
1462                    Object.keys(localStorage)
1463                        .filter(ls_key =>
1464                            ls_key.startsWith('uni_wk_'))
1465                        .forEach(ls_key =>
1466                            localStorage.removeItem(ls_key));
1467
1468                    localStorage.clear(); // Delete this line in the future, so that only items related to warenkorb get removed.
1469                });
1470            });
1471
1472            function clearLocalStorage(event) {
1473                Object.keys(localStorage)
1474                    .filter(ls_key =>
1475                        ls_key.startsWith('uni_wk_'))
1476                    .forEach(ls_key =>
1477                        localStorage.removeItem(ls_key));
1478
1479                localStorage.clear(); // Delete this line in the future, so that only items related to warenkorb get removed.
1480            }
1481
1482            function item_already_in_cart(item, itemsArray) {
1483                for(var i=0; i<itemsArray.length; i++) {
1484                    if(itemsArray[i].semnr == item.semnr && itemsArray[i].vernr == item.vernr) {
1485                        return true;
1486                    }
1487                };
1488                return false;
1489            }
1490
1491            function addItemToCart(event) {
1492                event.target.innerHTML = '<i class="fas fa-spinner fa-spin"></i>';
1493
1494                var parentForm = event.target.closest('form'); // In uni_hwk theme, event.target is NOT the button, but a child span of the button
1495
1496                let semnr = parentForm.querySelector('[name="semnr"]').value;
1497                let vernr = parentForm.querySelector('[name="vernr"]').value;
1498                let booked_modules = parentForm.querySelector('[name="modules"]').value; // = Modul-Nr. or 'all' or 'none'
1499                let waitlist = (parentForm.querySelector('[name="waitlist"]').value == 'true');
1500                let interessenbekundung = (parentForm.querySelector('[name="interessenbekundung"]').value == 'true');
1501
1502                let new_item = {
1503                    'semnr': semnr,
1504                    'vernr': vernr,
1505                    'booked_modules': booked_modules,
1506                    'waitlist': waitlist,
1507                    'interessenbekundung': interessenbekundung,
1508                };
1509
1510                let user_id = null;
1511                let client = 'hwkkonstanz';
1512                let ls_key = 'uni_wk_kurse_'+client;
1513                if(user_id) {
1514                    ls_key += '_'+user_id;
1515                }
1516                let items = localStorage.getItem(ls_key);
1517                if(!items) {
1518                    items = localStorage.getItem('uni_wk_kurse_'+client); // item added to local storage before logging in
1519                }
1520                if(!items) {
1521                    items = localStorage.getItem('items'); // This can be removed in the future.
1522                }
1523                if(items) {
1524                    items = JSON.parse(items);
1525                } else { // no items stored yet
1526                    items = [];
1527                }
1528
1529                /*
1530                 * If item not in cart => add item to cart
1531                 * If item in cart and adding whole course => do nothing (because the user might have manually un-selected some modules)
1532                 * If item in cart and adding single module => Search for this module and set it to 'booked'
1533                 */
1534                for(var i=0; i<items.length; i++) {
1535                    if(items[i].semnr == new_item.semnr && items[i].vernr == new_item.vernr) {
1536                        if(new_item.booked_modules != 'all' && new_item.booked_modules != 'none') {
1537                            // Look for module, set booked
1538                            for(var j=0; j<items[i].modules.length; j++) {
1539                                if(items[i].modules[j].modulnr === new_item.booked_modules) {
1540                                    items[i].modules[j].gebucht = true;
1541                                    items[i].modules[j].anzahl = 1;
1542                                    //localStorage.setItem('items', JSON.stringify(items));
1543                                    localStorage.setItem(ls_key, JSON.stringify(items));
1544                                    return;
1545                                }
1546                            }
1547                        } else {
1548                            return;
1549                        }
1550                    }
1551                }
1552                // Add new item to cart via local storage
1553                items.push(new_item);
1554                //localStorage.setItem('items', JSON.stringify(items));
1555                localStorage.setItem(ls_key, JSON.stringify(items));
1556            }
1557        </script>
1557
1558        		
1558<script>
1559			jQuery(document).ready(function ($) {
1560				$(':input[id="inputSearch"]').click(function () {
1561					if ($('#inputSearch').val().length === 0) {
1562						return false;
1563					}
1564				});
1565			});
1566		</script>
1566
1567		
1567<script data-cfasync="false" data-no-minify="1" data-no-optimize="1" id="borlabs-cookie-core-js-module" src="https://www.hwk-konstanz.de/wp-content/plugins/borlabs-cookie/assets/javascript/borlabs-cookie.min.js?ver=3.4.5" type="module"></script>
1567
1568<!--googleoff: all--><div data-nosnippet data-borlabs-cookie-consent-required='true' id='BorlabsCookieBox'></div><div id='BorlabsCookieWidget' class='brlbs-cmpnt-container'></div><!--googleon: all-->    
1568<script>
1569        jQuery(document).ready(function($){
1570            setTimeout(function(){
1571                $('#scrollspyContent').find('li.active').removeClass('active');
1572                $('#uni-section-id-0').addClass('active');
1573            }, 1);
1574        });
1575    </script>
1575
1576    
1576<script id="uniplus-base-script-js-extra">
1577var uniplus = {"ajax_url":"https://www.hwk-konstanz.de/wp-admin/admin-ajax.php"};
1578//# sourceURL=uniplus-base-script-js-extra
1579</script>
vendor: 1 bytes, line 1579
1579
1580<script id="uniplus-base-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/js/uniplus_base.js?ver=1.0.2"></script>
vendor: 1 bytes, line 1580
1580
1581<script id="uniplus-maps-cluster-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-base/js/markerclusterer.js?ver=1.0.2"></script>
vendor: 1 bytes, line 1581
1581
1582<script id="uniplus-clientside-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/js/uniplus_clientside.js?ver=1.2"></script>
vendor: 1 bytes, line 1582
1582
1583<script id="jquery-ui-core-js-before">
1584jQuery.uiBackCompat = true;
1585//# sourceURL=jquery-ui-core-js-before
1586</script>
vendor: 1 bytes, line 1586
1586
1587<script id="jquery-ui-core-js" src="https://www.hwk-konstanz.de/wp-includes/js/jquery/ui/core.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 1587
1587
1588<script id="jquery-ui-datepicker-js" src="https://www.hwk-konstanz.de/wp-includes/js/jquery/ui/datepicker.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 1588
1588
1589<script id="jquery-ui-datepicker-js-after">
1590jQuery(function(jQuery){jQuery.datepicker.setDefaults({"closeText":"Schlie\u00dfen","currentText":"Heute","monthNames":["Januar","Februar","M\u00e4rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"monthNamesShort":["Jan.","Feb.","M\u00e4rz","Apr.","Mai","Juni","Juli","Aug.","Sep.","Okt.","Nov.","Dez."],"nextText":"N\u00e4chster","prevText":"Vorheriger","dayNames":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"dayNamesShort":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"dayNamesMin":["S","M","D","M","D","F","S"],"dateFormat":"d. MM yy","firstDay":1,"isRTL":false});});
1591//# sourceURL=jquery-ui-datepicker-js-after
1592</script>
vendor: 1 bytes, line 1592
1592
1593<script id="datepicker-min-lang-de-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/js/jquery.datepicker.de.js?ver=1.0"></script>
vendor: 1 bytes, line 1593
1593
1594<script id="validate-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/js/jquery.validate.js?ver=1.0"></script>
vendor: 1 bytes, line 1594
1594
1595<script id="jquery-confirm-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/js/jquery-confirm.js?ver=1.0"></script>
vendor: 1 bytes, line 1595
1595
1596<script id="multiselect-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-clientside/js/multiselect.js?ver=1.0"></script>
vendor: 1 bytes, line 1596
1596
1597<script id="uni_faq_live_search.js-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-faq/js/uni_faq_live_search.js?ver=1.1"></script>
vendor: 1 bytes, line 1597
1597
1598<script id="uni_base_filter-letter-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-glossar/js/filter-letters.js?ver=1.0"></script>
vendor: 1 bytes, line 1598
1598
1599<script id="uniplus-kundenportal-script-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-kundenportal/js/uni-kundenportal.js?ver=1.0"></script>
vendor: 1 bytes, line 1599
1599
1600<script id="uni_zulassungsantrag_mpfp_test.js-js" src="https://www.hwk-konstanz.de/wp-content/plugins/uniplus-zulassungsantrag-mpfp/test/uni_zulassungsantrag_mpfp_test.js?ver=1.0"></script>
vendor: 1 bytes, line 1600
1600
1601<script id="script-main-js-extra">
1602var wp_variables = {"browserWarning":"Diese Internetseite ist nicht f\u00fcr diesen Browser optimiert. Bitte benutzen Sie einen aktuelleren Browser, um diese Seite optimal angezeigt zu bekommen.","googlemapSettings":{"confirm_load":false,"placeholder_map":"https://www.hwk-konstanz.de/wp-content/themes/chatty/img/placeholder_map.jpg","placeholder_map_sw":"https://www.hwk-konstanz.de/wp-content/themes/chatty/img/placeholder_map_sw.jpg"},"jqueryFitvidsEnabled":"1","jqueryAppearEnabled":"","jqueryStickyEnabled":"1","retinaDisabled":"1","scrollOffsetTopAdd":"40","scrollDuration":"1000","scrollDurationExternal":"1","templateUrl":"https://www.hwk-konstanz.de/wp-content/themes/chatty","teaserTileSameHeightImage":"0","teaserTileSameHeightImageMd":"0","teaserTileSameHeightImageSm":"0"};
1603//# sourceURL=script-main-js-extra
1604</script>
vendor: 1 bytes, line 1604
1604
1605<script id="script-main-js" src="https://www.hwk-konstanz.de/wp-content/themes/chatty/js/main.min.js?ver=1791085335"></script>
vendor: 1 bytes, line 1605
1605
1606<script id="chatty-load-google-map-js" src="https://www.hwk-konstanz.de/wp-content/themes/chatty/js/chatty-google-map.min.js?ver=1791085335"></script>
vendor: 1 bytes, line 1606
1606
1607<script id="script-child-js-extra">
1608var hwk_variables = {"hwk_form_floating_labels":"","hwk_mega_menu":"","hwk_no_retina":"1"};
1609var hwk_variables = {"hwk_form_floating_labels":"","hwk_mega_menu":"","hwk_no_retina":"1"};
1610//# sourceURL=script-child-js-extra
1611</script>
vendor: 1 bytes, line 1611
1611
1612<script id="script-child-js" src="https://www.hwk-konstanz.de/wp-content/themes/uni-hwk-redesign/js/child.min.js?ver=1791085335"></script>
1612
1613        <!-- UNIPLUS-CACHE-9F726243D38434738CAD93E159E41-2026-10-04T03:42:16+00:00 -->
1614        
1615			
1615<script type="text/javascript">
1616				function appendStyle(styles) {
1617					var css = document.createElement('style');
1618					css.type = 'text/css';
1619					if (css.styleSheet) css.styleSheet.cssText = styles; 	// IE check
1620					else css.appendChild(document.createTextNode(styles));	// needs appendChild to also work in Chrome
1621					document.getElementsByTagName("head")[0].appendChild(css);
1622				}
1623				var styles = 'div.color-blue-light-25 { background-color: #d1e3f6; } div.color-blue-dark-25 { background-color: #c1cbdb; } div.color-grey-light { background-color: #eeeeee; } h1.color-hwk-blue-light, h2.color-hwk-blue-light, h3.color-hwk-blue-light, h4.color-hwk-blue-light, h5.color-hwk-blue-light, h6.color-hwk-blue-light, p.color-hwk-blue-light, span.color-hwk-blue-light, a.color-hwk-blue-light, li.color-hwk-blue-light, input.color-hwk-blue-light, label.color-hwk-blue-light, textarea.color-hwk-blue-light, caption.color-hwk-blue-light, blockquote.color-hwk-blue-light, font.color-hwk-blue-light, code.color-hwk-blue-light { color: #448dde !important; } div.color-hwk-blue-light { background-color: #448dde !important; } div.color-hwk-blue-light-secondary { background-color: #76abe4 !important; } h1.color-hwk-blue-dark, h2.color-hwk-blue-dark, h3.color-hwk-blue-dark, h4.color-hwk-blue-dark, h5.color-hwk-blue-dark, h6.color-hwk-blue-dark, p.color-hwk-blue-dark, span.color-hwk-blue-dark, a.color-hwk-blue-dark, li.color-hwk-blue-dark, input.color-hwk-blue-dark, label.color-hwk-blue-dark, textarea.color-hwk-blue-dark, caption.color-hwk-blue-dark, blockquote.color-hwk-blue-dark, font.color-hwk-blue-dark, code.color-hwk-blue-dark { color: #073070 !important; } div.color-hwk-blue-dark { background-color: #073070 !important; } div.color-hwk-blue-dark-secondary { background-color: #456494 !important; } h1.color-hwk-red-dark, h2.color-hwk-red-dark, h3.color-hwk-red-dark, h4.color-hwk-red-dark, h5.color-hwk-red-dark, h6.color-hwk-red-dark, p.color-hwk-red-dark, span.color-hwk-red-dark, a.color-hwk-red-dark, li.color-hwk-red-dark, input.color-hwk-red-dark, label.color-hwk-red-dark, textarea.color-hwk-red-dark, caption.color-hwk-red-dark, blockquote.color-hwk-red-dark, font.color-hwk-red-dark, code.color-hwk-red-dark { color: #b82c44 !important; } div.color-hwk-red-dark { background-color: #b82c44 !important; } div.color-hwk-red-dark-secondary { background-color: #ca6173 !important; } h1.color-hwk-red-light, h2.color-hwk-red-light, h3.color-hwk-red-light, h4.color-hwk-red-light, h5.color-hwk-red-light, h6.color-hwk-red-light, p.color-hwk-red-light, span.color-hwk-red-light, a.color-hwk-red-light, li.color-hwk-red-light, input.color-hwk-red-light, label.color-hwk-red-light, textarea.color-hwk-red-light, caption.color-hwk-red-light, blockquote.color-hwk-red-light, font.color-hwk-red-light, code.color-hwk-red-light { color: #ee234a !important; } div.color-hwk-red-light { background-color: #ee234a !important; } div.color-hwk-red-light-secondary { background-color: #f25a77 !important; } h1.color-hwk-yellow, h2.color-hwk-yellow, h3.color-hwk-yellow, h4.color-hwk-yellow, h5.color-hwk-yellow, h6.color-hwk-yellow, p.color-hwk-yellow, span.color-hwk-yellow, a.color-hwk-yellow, li.color-hwk-yellow, input.color-hwk-yellow, label.color-hwk-yellow, textarea.color-hwk-yellow, caption.color-hwk-yellow, blockquote.color-hwk-yellow, font.color-hwk-yellow, code.color-hwk-yellow { color: #fbcb3d !important; } div.color-hwk-yellow { background-color: #fbcb3d !important; } div.color-hwk-yellow-secondary { background-color: #fcd86e !important; } h1.color-hwk-orange, h2.color-hwk-orange, h3.color-hwk-orange, h4.color-hwk-orange, h5.color-hwk-orange, h6.color-hwk-orange, p.color-hwk-orange, span.color-hwk-orange, a.color-hwk-orange, li.color-hwk-orange, input.color-hwk-orange, label.color-hwk-orange, textarea.color-hwk-orange, caption.color-hwk-orange, blockquote.color-hwk-orange, font.color-hwk-orange, code.color-hwk-orange { color: #ff9933 !important; } div.color-hwk-orange { background-color: #ff9933 !important; } div.color-hwk-orange-secondary { background-color: #ffb366 !important; } h1.color-hwk-green-dark, h2.color-hwk-green-dark, h3.color-hwk-green-dark, h4.color-hwk-green-dark, h5.color-hwk-green-dark, h6.color-hwk-green-dark, p.color-hwk-green-dark, span.color-hwk-green-dark, a.color-hwk-green-dark, li.color-hwk-green-dark, input.color-hwk-green-dark, label.color-hwk-green-dark, textarea.color-hwk-green-dark, caption.color-hwk-green-dark, blockquote.color-hwk-green-dark, font.color-hwk-green-dark, code.color-hwk-green-dark { color: #5a8e1e !important; } div.color-hwk-green-dark { background-color: #5a8e1e !important; } div.color-hwk-green-dark-secondary { background-color: #83aa56 !important; } h1.color-hwk-green-light, h2.color-hwk-green-light, h3.color-hwk-green-light, h4.color-hwk-green-light, h5.color-hwk-green-light, h6.color-hwk-green-light, p.color-hwk-green-light, span.color-hwk-green-light, a.color-hwk-green-light, li.color-hwk-green-light, input.color-hwk-green-light, label.color-hwk-green-light, textarea.color-hwk-green-light, caption.color-hwk-green-light, blockquote.color-hwk-green-light, font.color-hwk-green-light, code.color-hwk-green-light { color: #b4bd00 !important; } div.color-hwk-green-light { background-color: #b4bd00 !important; } div.color-hwk-green-light-secondary { background-color: #c7ce40 !important; } #scrollspyContent ul.nav-tabs { margin-top: 50px; } ';
1624				//window.onload = function() { appendStyle(styles) };
1625				(function() { // self executing function here
1626					appendStyle(styles); // the DOM will be available here
1627				})();
1628			</script>
1628
1629			
1630                <a id="top" href="#" class="hidden-print"><span class="glyphicon glyphicon-chevron-up"></span></a>
1631
1632                                        
1632<script type="text/x-template" id="eval-submit-template">
1633			<div>
1634				<div class="row">
1635					<div v-if="show_progress_bar" class="col-xs-12 col-12 mb-4">
1636						<progress id="uni-eval-progress-bar" :value="progress"></progress>
1637					</div>
1638					<div v-if="args.total_page_nr > 1" class="col-xs-12 col-12 mb-4">
1639                        <button v-if="!isFirstPage" @click="go_to_previous_page" class="btn btn-primary btn-back"><span class="uni-eval-nav-button-icon">&lang;&nbsp;</span> Vorherige Seite</button>
1640                        <button v-if="!isLastPageWithContent" @click="go_to_next_page" class="btn btn-primary float-right">Nächste Seite <span class="uni-eval-nav-button-icon">&nbsp;&rang;</span></button>
1641					</div>
1642					<div class="col-xs-12 col-12 d-flex justify-content-center">
1643						<button v-if="!isLastPageWithContent"  @click="save_locally" class="btn btn-primary">Zwischenspeichern</button>
1644						<button v-if="isLastPageWithContent"   @click="$eventBus.$emit('eval-submit-form', $event.target)" class="btn btn-primary">Absenden</button>
1645					</div>
1646				</div>
1647				<div v-if="error_code == 'insert' || error_code == 'json'" class="col-xs-12 col-12 callout callout-danger">
1648					<h4>Fehler</h4>
1649					Ihre Angaben konnten nicht gespeichert werden.
1650				</div>
1651				<div v-else-if="error_code == 'export'" class="col-xs-12 col-12 callout callout-danger">
1652					<h4>Fehler</h4>
1653					Ihre Angaben konnten nicht übermittelt werden.
1654				</div>
1655				<div v-else-if="error_code == 'token'" class="col-xs-12 col-12 callout callout-danger">
1656					<h4>Fehler</h4>
1657					Ihr Token ist ungültig.
1658				</div>
1659				<div v-else-if="error_code == 'invalid'" class="col-xs-12 col-12 callout callout-warning">
1660					<h4>Fehlende oder ungültige Eingabe</h4>
1661					Die Seite enthält eine unzulässige Eingabe oder ein Pflichtfeld fehlt.<br>
1662					Bitte kontrollieren Sie Ihre Eingaben. Die betroffenen Felder sind rot hervorgehoben. 
1663				</div>
1664				<div v-else-if="error_code == 'pruefungsmerkmalauswahl_gesperrt'" class="col-xs-12 col-12 callout callout-danger">
1665					<h4>Eintragung fehlgeschlagen</h4>
1666					Sie können keine Änderungen mehr vornehmen.
1667				</div>
1668				<div v-else-if="error_code == 'pruefungsmerkmalauswahl_nicht_angemeldet'" class="col-xs-12 col-12 callout callout-danger">
1669					<h4>Eintragung fehlgeschlagen</h4>
1670					Sie sind nicht zu der ausgewählten Prüfung angemeldet. Bitte überprüfen Sie Ihre Angaben, insbesondere die Lehrlingsrollennummer.
1671				</div>
1672			</div>
1673        </script>
1673
1674                <template id="uni_vue_prueferportal_ausschuesse_template">
1675            <div class="row">
1676                <div v-if="error">
1677                    <div class="bs-callout bs-callout-danger">
1678                        <h4 class="m-0"><i class="fas fa-exclamation-triangle"></i>
1679                            &nbsp;Ein Fehler ist aufgetreten
1680                        </h4>
1681                    </div>
1682                </div>
1683                <div class="col-12 col-xs-12" v-else-if="content == 'loading'">
1684                    <div class="bs-callout bs-callout-info">
1685    <h4 class="m-0"><i class="fas fa-circle-notch fa-spin"></i>
1686        &nbsp;Wird geladen &hellip;
1687    </h4>
1688</div>                </div>
1689                <div v-else-if="content == 'success'">
1690                    <div class="col-12 col-xs-12">
1691                        <div class="row">
1692                            <div class="col-12 col-xs-12">
1693                                <div id="tabs" class="tabs-custom tabs-horizontal tabs-corporate product">
1694                                    <ul v-if="!hidepr" role="tablist" class="nav nav-tabs text-center myTabs mb-4" style="text-align: left !important;">
1695                                        <li role="presentation" class="nav-item round-large text-dark-variant-3 active">
1696                                            <a href="#tab1" aria-controls="tab1" role="tab" aria-selected="true"
1697                                               data-toggle="tab" class="nav-link round-large active">
1698                                                Ausschussmitglieder
1699                                            </a>
1700                                        </li>
1701                                        <li role="presentation" class="nav-item round-large text-dark-variant-3">
1702                                            <a href="#tab2" aria-controls="tab2" role="tab" aria-selected="false"
1703                                               data-toggle="tab" class="nav-link round-large">
1704                                                Prüfungen
1705                                            </a>
1706                                        </li>
1707                                    </ul>
1708                                    <div :class="{'tab-content' : !hidepr}" class=" text-md-left">
1709                                        <div role="tabpanel" id="tab1" class="tab-pane fade row active in">
1710                                            <div class="col-12 col-xs-12">
1711                                                <div class="row">
1712                                                    <div class="col-sm-3 d-sm-block d-none col-xs-12">
1713                                                        <strong>Name</strong>
1714                                                    </div>
1715                                                    <div class="col-sm-3 d-sm-block d-none col-xs-12">
1716                                                        <strong>Funktionen</strong>
1717                                                    </div>
1718                                                    <div class="col-sm-3 d-sm-block d-none col-xs-12">
1719                                                        <strong>Telefon</strong>
1720                                                    </div>
1721                                                    <div class="col-sm-3 d-sm-block d-none col-xs-12">
1722                                                        <strong>Email</strong>
1723                                                    </div>
1724                                                    <div class="col-12 col-xs-12">
1725                                                        <hr style="width: 100%; margin-top: 10px; margin-bottom: 10px;">
1726                                                    </div>
1727                                                </div>
1728                                                <div class="row" v-for="m in mitglieder">
1729                                                    <div class="col-sm-3 col-xs-12">
1730                                                        <span>{{m.v_xad_vname}} {{m.v_xad_name1}}</span>
1731                                                    </div>
1732                                                    <div class="col-sm-3 col-xs-12">
1733                                                        <span v-for="f in mitgliederFunktionen[m.v_xaz_idnr]">
1734                                                             {{f.meta.unixam_bez}}
1735                                                        </span>
1736                                                    </div>
1737                                                    <div class="col-sm-3 col-xs-12">
1738                                                        <span v-if="m.v_kom_telnr_h"> {{m.v_kom_telnr_h}} </span>
1739                                                        <span v-else>-</span>
1740                                                    </div>
1741                                                    <div class="col-sm-3 col-xs-12">
1742                                                        <span class="word-break" v-if="m.v_kom_email_h"> {{m.v_kom_email_h}} </span>
1743                                                        <span v-else>-</span>
1744                                                    </div>
1745                                                    <div class="col-12 col-xs-12">
1746                                                        <hr style="width: 100%; margin-top: 10px; margin-bottom: 10px;">
1747                                                    </div>
1748                                                </div>
1749                                            </div>
1750                                        </div>
1751                                        <div v-if="!hidepr" role="tabpanel" id="tab2" class="tab-pane fade row p-3">
1752                                            <div class="col-12 col-xs-12">
1753                                                <h2>Prüfungen dieses Ausschusses</h2>
1754                                                <hr class="my-3">
1755                                                <div class="row" v-if="aart == 'GPA'" v-for="p in pruefungen">
1756                                                    <div class="col-xs-12 col-12">
1757                                                        <h3>
1758                                                            <a :href="'/kundenportal/pruefungen/GPA/'+p.hwkpst_prnummer">{{p.hwkpst_prfbez}} ({{p.hwkpst_prnummer}})</a>
1759                                                        </h3>
1760                                                    </div>
1761                                                    <div class="col-sm-3 col-xs-12">
1762                                                        <strong>Beruf:</strong>
1763                                                    </div>
1764                                                    <div class="col-sm-9 col-xs-12">
1765                                                        <span>{{p.berufBez}}</span>
1766                                                    </div>
1767                                                    <div class="col-sm-3 col-xs-12">
1768                                                        <strong>Jahr:</strong>
1769                                                    </div>
1770                                                    <div class="col-sm-9 col-xs-12">
1771                                                        <span>{{p.meta.hwkpst_prjahr}}</span>
1772                                                    </div>
1773                                                    <div class="col-xs-12 col-12 ">
1774                                                        <hr class="my-3">
1775                                                    </div>
1776                                                </div>
1777                                                <div class="row" v-else-if="aart == 'MPA'" v-for="p in pruefungen">
1778                                                    <div class="col-xs-12 col-12">
1779                                                        <h3>
1780                                                            <a :href="'/kundenportal/pruefungen/MPA/'+p.hwkmpk_mpprnr">{{p.hwkmpk_prbez}} ({{p.hwkmpk_mpprnr}})</a>
1781                                                        </h3>
1782                                                    </div>
1783                                                    <div class="col-sm-3 col-xs-12">
1784                                                        <strong>Beruf:</strong>
1785                                                    </div>
1786                                                    <div class="col-sm-9 col-xs-12">
1787                                                        <span>{{p.berufBez}}</span>
1788                                                    </div>
1789                                                    <div class="col-sm-3 col-xs-12">
1790                                                        <strong>Beruf-Nr.:</strong>
1791                                                    </div>
1792                                                    <div class="col-sm-9 col-xs-12">
1793                                                        <span>{{p.meta.hwkmpk_mpberuf}}</span>
1794                                                    </div>
1795                                                    <div class="col-xs-12 col-12 ">
1796                                                        <hr class="my-3">
1797                                                    </div>
1798                                                </div>
1799                                            </div>
1800                                        </div>
1801                                    </div>
1802                                </div>
1803                            </div>
1804                        </div>
1805                    </div>
1806                </div>
1807            </div>
1808        </template>
1809        <template id="uni_vue_login_template">
1810    <div class="uni-login-form">
1811        <div v-if="login_failed" class="bs-callout bs-callout-danger">
1812            <h5>Login fehlgeschlagen</h5>
1813            <label>Benutzername oder Passwort ist falsch.</label>
1814        </div>
1815        <div v-if="wrong_pin" class="bs-callout bs-callout-danger">
1816            <h5>Login fehlgeschlagen</h5>
1817            <label>Die eingegebene PIN ist nicht korrekt.</label>
1818        </div>
1819        <div v-if="content == 'form'" class="uni-form">
1820            <form enctype="multipart/form-data" v-bind:action="action" method="POST" v-on:submit.prevent="onLoginHandler">
1821                <fieldset>
1822                    <input type="hidden" name="nonce" v-bind:value="nonce" />
1823                    <input type="hidden" name="post_id" v-bind:value="post_id" />
1824                    <div v-if="confirmed" class="col-xs-12 col-12">
1825                        <div class="bs-callout bs-callout-info">
1826                            <h5>Konto bestätigt</h5>
1827                            <label>Sie können sich nun am {{ getTheTitle() }} anmelden.</label>
1828                        </div>
1829                    </div>
1830
1831                    <div class="pt-2 row">
1832                        <template v-for="input in inputs">
1833                            <div v-if="!input.hidden" v-bind:class="getInputClass(input.width)">
1834                                <label v-if="!compact" class="control-label">
1835                                    {{ input.display_name }}
1836                                    <span v-if="input.required">*</span>:
1837                                </label>
1838                                <input
1839                                    autocomplete="off"
1840                                    autocapitalize="off"
1841                                    v-model="input.value"
1842                                    v-bind:type="input.type"
1843                                    v-bind:name="input.name"
1844                                    v-bind:placeholder="input.display_name"
1845                                    class="form-control"
1846                                    v-on:keyup.enter="onLoginHandler"
1847                                    v-bind:class="[ input.invalid ? 'is-invalid has-error' : '', input.class ? input.class : '']"
1848                                />
1849                            </div>
1850                        </template>
1851                        <div v-if="!inputs.password.hidden" class="col-xs-12 col-12 pb-2">
1852                            <span class="cursor-pointer" @click="toggleShowPassword()">
1853                                <span v-if="inputs.password.type !== 'password'">
1854                                                                      <i class="bi bi-eye"></i>
1855                                                                     Passwort verstecken
1856                                </span>
1857                                <span v-else>
1858                                                                      <i class="bi bi-eye-slash"></i>
1859                                                                      Passwort anzeigen
1860                                </span>
1861                            </span>
1862                        </div>
1863                                                <div class="col-xs-12 col-sm-12 text-right form-group has-feedback">
1864                            <a v-if="otp"
1865                               class="btn btn-link d-inline"
1866                               v-on:click.prevent="newOTP"
1867                            >neue PIN anfordern</a>
1868                            <a
1869                                type="submit"
1870                                class="btn btn-primary d-inline"
1871                                v-on:click.prevent="onLoginHandler"
1872                            >Anmelden</a>
1873                        </div>
1874                        
1875                    </div>
1876                </fieldset>
1877            </form>
1878        </div>
1879        <div v-else-if="content == 'loading'" class>
1880            <template v-if="show_progress_bar">
1881                <div class="bs-callout bs-callout-info">
1882                    <h4 class="mb-3"><i class="fas fa-circle-notch fa-spin"></i>&nbsp;Wird geladen …</h4>
1883                    <div v-if="progress_hint">
1884                        <p class="mb-0 pb-0" v-html="progress_hint"></p>
1885                    </div>
1886                    <div v-else-if="progress > 1">
1887                        <div id="uni-login-progress-bar" style="height:18px; background-color: #9FC8F2; border-radius: 5px;" :style="{ width: progress + '%' }">&nbsp;</div>
1888                    </div>
1889                </div>
1890            </template>
1891            <template v-else>
1892                <div class="bs-callout bs-callout-info">
1893    <h4 class="m-0"><i class="fas fa-circle-notch fa-spin"></i>
1894        &nbsp;Wird geladen &hellip;
1895    </h4>
1896</div>            </template>
1897        </div>
1898        <div v-else-if="content == 'logged_in'" class>
1899            <div class="bs-callout bs-callout-info">
1900                <h4>Sie sind angemeldet <span v-if="data.first_name" class="uni-just-a-hack-for-hwk-theme">als </span><span v-if="data.first_name" class="logged-in-as" v-html="data.first_name+' '+data.name1"></span></h4>
1901                <p class="mt-3 mb-0 p-0">
1902                  <a href="/kundenportal">
1903                                          <i class="bi bi-house"></i>
1904                                        {{ getTheTitle() }}
1905                  </a>
1906                </p>
1907                <p class="mt-3 mb-0 p-0">
1908                  <a href="https://www.hwk-konstanz.de/wp-login.php?action=logout&amp;redirect_to=https%3A%2F%2Fwww.hwk-konstanz.de&amp;_wpnonce=9524c2c613">
1909                                        <i class="bi bi-box-arrow-right"></i>
1910                    
1911                    Abmelden
1912                  </a>
1913                </p>
1914            </div>
1915        </div>
1916        <div v-else-if="content == 'logging_in'" class>
1917            <div class="bs-callout bs-callout-info">
1918                <h4>Anmeldung erfolgreich</h4>
1919                <p>Sie werden automatisch weitergeleitet &hellip;</p>
1920            </div>
1921        </div>
1922    </div>
1923</template>
1924<script setup lang="ts">
1925</script>
1925        <template id="uni-warenkorb-button-icon-template">
1926            <div v-if="!route.path.includes('bestellung')  && count > 0" id="uni-warenkorb-button-icon" @click="handleClick">
1927                <i class="bi bi-cart-check"></i>
1928            </div>
1929        </template>
1930
1931                                
1931<script>
1932            Vue.component('eval-submit-component', {
1933				props: ['name'],
1934				template: '#eval-submit-template',
1935
1936                data: function() {
1937                    return {
1938                        post_id: '273005',
1939                        action: 'https://www.hwk-konstanz.de/wp-content/plugins/uniplus-evaluation/inc/forms/submit.php',
1940                        nonce: '707847e599',
1941						restriction_nonce: '2f446fcf90',
1942						redirect_page: '',
1943						endpoints: [],
1944						return_after_sending: 0,
1945						args: { 
1946							current_page_nr: 1,
1947							total_page_nr: 0						},
1948						page_has_visible_content: new Array(1).fill(false), // "+1" so that the indexes range from [1] to [total_page_nr]. Index [0] is not used.
1949						previousPageWithContent: false,
1950						nextPageWithContent: false,
1951						sending_data: false,
1952						error_code: '',
1953						show_progress_bar: false,
1954						progress: 0,
1955                    };
1956                },
1957                methods: {
1958					go_to_previous_page: function() {
1959						if( !this.isFirstPage ) {
1960							current_page = document.getElementById('page-' + this.args.current_page_nr);
1961							current_page.classList.remove('show');
1962							current_page.classList.remove('in');
1963							current_page.classList.remove('active');
1964							previous_page_nr = this.previousPageWithContent;
1965							previous_page = document.getElementById('page-' + previous_page_nr);
1966							previous_page.classList.add('show');
1967							previous_page.classList.add('in');
1968							previous_page.classList.add('active');
1969							this.args.current_page_nr = this.previousPageWithContent;
1970							window.scrollTo(0, 0);
1971						}
1972					},
1973					go_to_next_page: function() {
1974						if(this.validateCurrentPageQuestions()) {
1975							if(!this.isLastPageWithContent) {
1976								current_page = document.getElementById('page-' + this.args.current_page_nr);
1977								current_page.classList.remove('show');
1978								current_page.classList.remove('in');
1979								current_page.classList.remove('active');
1980								next_page_nr = this.nextPageWithContent;
1981								next_page = document.getElementById('page-' + next_page_nr);
1982								next_page.classList.add('show');
1983								next_page.classList.add('in');
1984								next_page.classList.add('active');
1985								this.args.current_page_nr = this.nextPageWithContent;
1986								window.scrollTo(0, 0);
1987							}
1988						}
1989					},
1990					validateCurrentPageQuestions: function() {
1991						var ret = true;
1992						for(var question of this.$evaluation.questions)	{
1993							if(this.$evaluation.getPageNr(question) == this.args.current_page_nr) {
1994								var should_scroll = true;
1995								if(!question.validate()) {
1996									ret = false;
1997									if(should_scroll) {
1998										question.$el.scrollIntoView(false);
1999										should_scroll = false;
2000									}
2001								}
2002							}
2003						}
2004						this.error_code = ret ? '' : 'invalid';
2005						return ret;
2006					},
2007					save_locally: function() {
2008						for(var q_id in this.$evaluation.questions) {
2009							let question = this.$evaluation.questions[q_id];
2010							var entry = {};
2011							if(question.value !== undefined) {entry.value = question.value;}
2012							if(question.values !== undefined) {entry.values = question.values;}
2013							if(question.customCaptions !== undefined) {entry.customCaptions = question.customCaptions;}
2014							localStorage.setItem('UniEvalFormSave_' + this.name + '_q' + q_id, JSON.stringify(entry));
2015						}
2016					},
2017					checkVisibility: function() {
2018						// Check which pages have visible content
2019						for(var i=1; i<= this.args.total_page_nr; i++) {
2020							// this.page_has_visible_content[i] = false;
2021							this.page_has_visible_content[i] = 0;
2022						}
2023						for(var question of this.$evaluation.questions)	{
2024							if(!question.hide && question.qtype != 'summary') {
2025								var pageNr = this.$evaluation.getPageNr(question);
2026								// this.page_has_visible_content[pageNr] = true;
2027								this.page_has_visible_content[pageNr]++;
2028							}
2029						}
2030						this.updatePageWithContent();
2031						this.updateProgress();
2032					},
2033					updatePageWithContent: function() {
2034						var pageNr;
2035						pageNr = this.args.current_page_nr;
2036						if(1 == this.args.current_page_nr) {
2037							this.previousPageWithContent = false;
2038						} else {
2039							this.previousPageWithContent = 1; // Always treat page 1 as page with content.
2040						}
2041						while(pageNr > 1) {
2042							pageNr--;
2043							if(this.page_has_visible_content[pageNr]) {
2044								this.previousPageWithContent = pageNr;
2045								break;
2046							}
2047						}
2048						pageNr = this.args.current_page_nr;
2049						this.nextPageWithContent = false;
2050						while(pageNr < this.args.total_page_nr) {
2051							pageNr++;
2052							if(this.page_has_visible_content[pageNr]) {
2053								this.nextPageWithContent = pageNr;
2054								break;
2055							}
2056						}
2057					},
2058					updateProgress() {
2059						var num_past_questions = 0;
2060						var total_num_questions = 0;
2061						for(var i=1; i < this.page_has_visible_content.length; i++) {
2062							total_num_questions += this.page_has_visible_content[i];
2063							if(i < this.args.current_page_nr) {
2064								num_past_questions += this.page_has_visible_content[i];
2065							}
2066						}
2067						if(total_num_questions > 0) {
2068							this.progress = num_past_questions/total_num_questions;
2069						} else {
2070							this.progress = 1;
2071						}
2072					}
2073                },
2074                mounted: function() {
2075					// Check local storage for saved data
2076					for(var q_id in this.$evaluation.questions) {
2077						if (localStorage.getItem('UniEvalFormSave_' + this.name + '_q' + q_id)) {
2078							let object_from_local_storage = JSON.parse(localStorage.getItem('UniEvalFormSave_' + this.name + '_q' + q_id));
2079							var vue_component = this.$evaluation.questions[q_id];
2080							if(object_from_local_storage.value !== undefined) {vue_component.value = object_from_local_storage.value;}
2081							if(object_from_local_storage.values !== undefined) {vue_component.values = object_from_local_storage.values;}
2082							if(object_from_local_storage.customCaptions !== undefined) {vue_component.customCaptions = object_from_local_storage.customCaptions;}
2083						}
2084					}
2085
2086
2087                    this.$eventBus.$on('eval-submit-form', function(event_target) {
2088						if(!this.sending_data) {
2089							event_target.innerHTML = '<i class="fas fa-spinner fa-spin"></i>';
2090							this.sending_data = true;
2091							this.error_code = '';
2092							var is_valid = true;
2093							for(var question of this.$evaluation.questions)	{
2094								var should_scroll = true;
2095								if(!question.validate()) {
2096									is_valid = false;
2097									if(should_scroll) {
2098										question.$el.scrollIntoView(false);
2099										should_scroll = false;
2100									}
2101								}
2102							}
2103							if(is_valid) {
2104								// Submit the form... 
2105								var formData = this.$root.createFormData(this.inputs);
2106								formData.append('post_id', this.post_id);
2107								formData.append('nonce', this.nonce);
2108								formData.append('restriction_nonce',this.restriction_nonce);
2109								formData.append('token_id', '');
2110								formData.append('fragebogen_name', this.name);
2111								formData.append('semnr', '');
2112								formData.append('modnr', '');
2113								formData.append('vernr', '');
2114								formData.append('group', '');
2115								formData.append('generic_parameter_1', '');
2116								formData.append('generic_parameter_2', '');
2117								formData.append('generic_parameter_3', '');
2118								formData.append('generic_parameter_4', '');
2119								formData.append('lfdnr', '');
2120								formData.append('kurs_vdat', '');
2121								formData.append('kurs_bdat', '');
2122								formData.append('token_vdat', '');
2123								formData.append('export', 0);
2124								formData.append('endpoints', JSON.stringify(this.endpoints));
2125                                formData.append('immediate_mail', 'null');
2126
2127								// console.log(this.$evaluation.question_bundles);
2128								var q_data_bundle = {};
2129								for(var category in this.$evaluation.question_bundles) {
2130									q_data_bundle[category] = {};
2131									for(var bundle_index in this.$evaluation.question_bundles[category]) {
2132										var bundle = this.$evaluation.question_bundles[category][bundle_index];
2133										q_data_bundle[category][bundle_index] = {};
2134										q_data_bundle[category][bundle_index].doznr 	= bundle.doznr;
2135										q_data_bundle[category][bundle_index].dozent 	= bundle.dozent;
2136										q_data_bundle[category][bundle_index].thema_id 	= bundle.thema_id;
2137										q_data_bundle[category][bundle_index].thema_bez = bundle.thema_bez;
2138										q_data_bundle[category][bundle_index].questions = [];
2139										var questions = bundle.questions;
2140										for(var q_id in questions) {
2141											let question = questions[q_id];
2142											q_data_bundle[category][bundle_index].questions.push(
2143												{
2144													data: question._data
2145												}
2146											)
2147										}
2148									}
2149								}
2150								var q_data_bundle_json = JSON.stringify(q_data_bundle)
2151								formData.append('q_data_bundle_json', q_data_bundle_json);
2152
2153								this.$http.post(this.action, formData).then(function(res) {
2154									let response = JSON.parse(res.bodyText);
2155									console.log(response); // XXX DEV
2156									// Ok, wir haben die Request an den Server geschickt und Antwort erhalten.
2157									/* Delete local storage */
2158									for(var q_id in this.$evaluation.questions) {
2159										var question = this.$evaluation.questions[q_id];
2160										if(!(question.args.do_not_delete_on_submit || ('options' in question.args && question.args.options.do_not_delete_on_submit))) {
2161											localStorage.removeItem('UniEvalFormSave_' + this.name + '_q' + q_id);
2162										}
2163									}
2164									/* Pruefungswesen PDF export */
2165									if(false) {
2166										// TODO: Aufruf von createPdf nur im endpoint-Erfolgsfall!
2167										// if(response.ergebnis_post_id != 0) {
2168										if(response.success) {
2169											// Check if q-type pruefungswesen_merkmalliste is present
2170											if(q_data_bundle_json.indexOf('pruefungswesen_merkmalliste') >= 0) {
2171												var nonce = response.pruefungswesen_pdf_nonce;
2172												var post_id = response.ergebnis_post_id;
2173												var url = 'https://www.hwk-konstanz.de/wp-content/plugins/uniplus-pruefungswesen/inc/forms/createPdf.php' + '?post_id='+post_id+'&nonce='+nonce;
2174												// window.open(url);
2175                                                this.redirect_page = url;
2176											}
2177										}
2178									}
2179									/* On error: show error message. On success: redirect. */
2180									if(response.success) {
2181										/* Redirect */
2182										if(this.return_after_sending) {
2183											location.reload();
2184										} else {
2185											document.location = this.redirect_page;
2186										}
2187									} else {
2188										this.error_code = response.error_code;
2189									}
2190									this.sending_data = false;
2191									event_target.innerHTML = 'Absenden';
2192								}, function(res) {
2193									console.log('err');
2194									this.sending_data = false;
2195									event_target.innerHTML = 'Absenden';
2196								});
2197							} else {
2198								this.sending_data = false;
2199								event_target.innerHTML = 'Absenden';
2200								this.error_code = 'invalid';
2201							}
2202						}
2203                    }.bind(this));
2204
2205                    // this.$eventBus.$on('eval-page-changed', function(page_id) {
2206					// 	this.args.current_page_nr = page_id;
2207                    // }.bind(this));
2208
2209                    this.$eventBus.$on('eval-visibility-changed', function() {
2210						this.checkVisibility();
2211                    }.bind(this));
2212
2213					/* Check query string, preset values */
2214					/* Won't work on Multiple Choice because query string only provides strings and arrays of strings */
2215					let query = this.$root.$route.query;
2216					Object.keys(query).forEach(function (item) {
2217						// key: 	item
2218						// value: 	query[item]
2219						if(item.substr(0,1) == 'q') {
2220							var qindex = item.substr(1) -1;
2221							if(this.$evaluation.questions[qindex]) {
2222								var the_question = this.$evaluation.questions[qindex];
2223								if(the_question.value !== undefined) {the_question.value = query[item];}
2224								else if(the_question.values !== undefined) {the_question.values = query[item];}
2225							}
2226						}
2227						
2228					}, this);
2229
2230					this.$nextTick(function () {
2231                        // Code that will run only after the entire view has been rendered
2232						this.checkVisibility();
2233                    })
2234                },
2235				computed: {
2236					isFirstPage: function() {
2237						return this.args.current_page_nr == 1;
2238					},
2239					isLastPage: function() {
2240						return this.args.current_page_nr == this.args.total_page_nr;
2241					},
2242					isFirstPageWithContent: function() {
2243						return !this.previousPageWithContent;
2244					},
2245					isLastPageWithContent: function() {
2246						return !this.nextPageWithContent;
2247					},
2248				},
2249				watch: {
2250					args: {
2251						handler: function() {
2252							this.updatePageWithContent();
2253							this.updateProgress();
2254						},
2255						deep: true,
2256						immediate: false,
2257					},
2258				}
2259
2260            });
2261
2262        </script>
2262
2263                
2263<script>
2264            Vue.component('uni-vue-prueferportal-ausschuesse', {
2265                template: '#uni_vue_prueferportal_ausschuesse_template',
2266                props: ['ausschussnr','aart','hidepr'],
2267                data: function () {
2268                    return {
2269                        rand: '74493',
2270                        nonce: '930bc49029',
2271                        content: 'loading',
2272                        error: false,
2273                        mitglieder: [],
2274                        mitgliederFunktionen: [],
2275                        pruefungen: [],
2276                        ausschuss: [],
2277                    }
2278                },
2279                computed: {},
2280                watch: {},
2281                methods: {
2282
2283                    getData() {
2284                        const action = '/wp-json/uniplus/prueferportal/v2/'+this.aart+'/'+this.ausschussnr+'/getAusschuss';
2285                        var formData = new FormData();
2286                        formData.append('random', this.rand);
2287                        formData.append('nonce', this.nonce);
2288                        this.$http.post(action, formData,
2289                            {headers: {'X-WP-Nonce': '3fb8454cb6'}})
2290                            .then(async function (response) {
2291                                response.json().then(async json => {
2292                                    if (json.status === 'success') {
2293                                        this.mitglieder = json.data.mitglieder;
2294                                        this.pruefungen = json.data.pruefungen;
2295                                        this.ausschuss = json.data.ausschuss;
2296                                        this.mitgliederFunktionen = json.data.mitgliederFunktionen;
2297                                        this.content = 'success';
2298                                    } else {
2299
2300                                    }
2301                                });
2302                            }.bind(this), async function (reason) {
2303
2304                            }.bind(this));
2305                    },
2306
2307                },
2308                created() {
2309
2310                },
2311
2312                mounted() {
2313                    this.getData();
2314                }
2315            });
2316
2317        </script>
2317
2318                
2318<script>
2319            Vue.component('uni-vue-login', {
2320                template: '#uni_vue_login_template',
2321                props: {
2322                    compact: Boolean,
2323                    redirect: String,
2324                    keepsignedin: Boolean,
2325                    redirect_while_logged_in: Boolean,
2326                    show_progress_bar: Boolean
2327                },
2328                kundenportal_title: '',
2329                data:  function() {
2330                    return {
2331                        post_id: '40219',
2332                        action: 'https://www.hwk-konstanz.de/wp-content/plugins/uniplus-signup/inc/forms/signin.php',
2333                        nonce: '4c2977b327',
2334                        zfaNonce: '6a81f3dc54',
2335                        apiNonce: 'abaa113e3f',
2336                        login_failed: false,
2337                        wrong_pin: '',
2338                        confirmed: false,
2339                        content: 'loading',
2340                        client: 'hwkkonstanz',
2341                        data: false,
2342                        otp: false,
2343                        otp_success: false,
2344                        otp_error: false,
2345                        progress: 0,
2346                        progress_ticks: 0,
2347                        progress_hint: '',
2348                        saveDevice: false,
2349                        zfaToken: '',
2350                        inputs: {
2351                            email: {
2352                                value: '',
2353                                type: 'text',
2354                                display_name: 'Benutzername',
2355                                required: true,
2356                                width: 12,
2357                                name: 'username',
2358                                invalid: false,
2359                                hidden: false,
2360                                autocapitalize: false
2361                            },
2362                            password: {
2363                                value: '',
2364                                type: 'password',
2365                                display_name: 'Passwort',
2366                                required: true,
2367                                width: 12,
2368                                name: 'password',
2369                                invalid: false,
2370                                hidden: false
2371                            },
2372                            pin: {
2373                                value: '',
2374                                type: 'text',
2375                                display_name: 'Ihre PIN',
2376                                required: true,
2377                                width: 12,
2378                                name: 'pin',
2379                                hidden: true,
2380                                class: 'input-letter-spacing-3',
2381                                invalid: false,
2382                                autocapitalize: false
2383                            },
2384                        }
2385                    }
2386                },
2387                methods: {
2388                    toggleShowPassword: function() {
2389                        this.inputs.password.type = this.inputs.password.type === 'password' ? 'text' : 'password';
2390                    },
2391                    getTheTitle: function() {
2392                                                    this.kundenportal_title = 'Kundenportal';
2393                                                return this.kundenportal_title;
2394                    },
2395                    getInputClass : function(w) {
2396                        return 'col-xs-12 col-12 col-sm-' + w + ' form-group has-feedback';
2397                    },
2398                    onLoginHandler : function() {
2399                        setTimeout(function() {
2400                            if(this.compact && document.querySelector('.uni-dropdown-menu')) {
2401                                document.querySelector('.uni-dropdown-menu').classList.add('show');
2402                            }
2403                        }.bind(this), 50);
2404
2405                        this.inputs.email.invalid = (!this.inputs.email.value);
2406                        this.inputs.password.invalid = (!this.inputs.password.value);
2407
2408                        if(this.inputs.email.value && this.inputs.password.value) {
2409                            this.$eventBus.$emit('uni-on-logging-in');
2410                            this.login_failed = false;
2411                            this.wrong_pin = false;
2412                            var formData = this.$form.createFormData(this.inputs);
2413                            formData.append('post_id', this.post_id);
2414                            formData.append('nonce', this.nonce);
2415                            formData.append('keepsignedin', this.keepsignedin ? 'J' : 'N');
2416                            formData.append('saveDevice', this.saveDevice ? 'J': 'N');
2417                            formData.append('token', this.zfaToken);
2418
2419                            this.$http.post(this.action, formData).then(function(res) {
2420                                let json = JSON.parse(res.bodyText);
2421                                if(json.success) {
2422                                    if(this.saveDevice && json.token) {
2423                                        let a = new Date();
2424                                        a = new Date(a.getTime() +1000*60*60*24*30);
2425                                        document.cookie = this.client+'_zfa_token='+json.token+'; expires='+
2426                                            a.toGMTString()+';';
2427                                    }
2428                                    this.$eventBus.$emit('uni-on-login-success');
2429                                } else {
2430                                    this.content = 'form';
2431                                    if(!json.success) {
2432                                        if(json.zfa) {
2433                                            if(this.otp === true && this.inputs.pin.hidden === false) {
2434                                                this.wrong_pin = true;
2435                                            }
2436                                            this.content = 'loading';
2437                                            this.inputs.email.hidden = true;
2438                                            this.inputs.password.hidden = true;
2439                                            this.inputs.pin.hidden = false;
2440                                            this.otp = true;
2441                                            setTimeout((e) => {
2442                                                this.content = 'form';
2443                                            }, 1);
2444                                        } else {
2445                                            this.$eventBus.$emit('uni-on-login-failed');
2446                                        }
2447                                    }
2448                                    // Show login box with error message
2449                                    if(this.compact && document.querySelector('.uni-dropdown-menu') && !json.zfa) {
2450                                        document.querySelector('.uni-dropdown-menu').classList.add('show');
2451                                        document.location = 'https://www.hwk-konstanz.de/login?state=failed';
2452                                    }
2453                                }
2454
2455                            }.bind(this), function(res) {
2456                                this.$eventBus.$emit('uni-on-login-failed');
2457                            });
2458                        }
2459                    },
2460                    newOTP() {
2461                        this.content = 'loading';
2462                        this.otp_error = false;
2463                        this.otp_success = false;
2464                        var formData = this.$form.createFormData(this.inputs);
2465                        formData.append('post_id', this.post_id);
2466                        formData.append('nonce', this.zfaNonce);
2467                        this.$http.post('/wp-json/uniplus/2FA/v1/new-otp', formData,
2468                            {headers: {'X-WP-Nonce': '3fb8454cb6'}})
2469                            .then(function (response) {
2470                                response.json().then(json => {
2471                                    if (!json.status == 'success') {
2472                                        this.otp_error = true;
2473                                        this.content = 'form';
2474                                    } else {
2475                                        this.otp_success = true;
2476                                        this.content = 'form';
2477                                    }
2478                                });
2479                            }.bind(this));
2480                    },
2481                    init : function() {
2482                        let formData = new FormData();
2483                        formData.append('post_id', this.post_id);
2484                        formData.append('nonce', this.apiNonce);
2485                        this.$uniplus.apiRequest('/wp-json/uniplus/signup/v1/userdata', formData,
2486                            (json) => {
2487                                if(json.status === 'success' && json.data.is_user_logged_in) {
2488                                    this.data = json.data.user_data;
2489
2490                                    if(this.redirect_while_logged_in) {
2491                                                                                this.content = 'logging_in';
2492                                        setTimeout(() => {
2493                                            document.location = this.redirect ? this.redirect : '/kundenportal';
2494                                        }, 2000);
2495                                                                            } else {
2496                                        this.content = 'logged_in';
2497                                    }
2498                                } else {
2499                                    this.content = 'form';
2500                                }
2501                            },
2502                            (err) => {
2503                                this.content = 'form';
2504                            });
2505
2506                        if(this.$route.query.state === 'failed') {
2507                            this.login_failed = true;
2508                            this.inputs.email.invalid = true;
2509                            this.inputs.password.invalid = true;
2510                        }
2511                    },
2512                    updateLoginProgress() {
2513                        this.progress_ticks += Math.floor(Math.random() * 10);
2514
2515                        if(this.progress_ticks > 100 && !this.progress_hint) {
2516                            this.progress = 100;
2517                            this.progress_hint = 'Einen Moment Geduld bitte, wir müssen Ihre Daten noch aufbereiten.';
2518                        } else {
2519                            this.progress = this.progress_ticks % 100;
2520                        }
2521                    }
2522                },
2523                watch: {
2524                    content(newVal, oldVal) {
2525                        if(oldVal === 'form' && newVal === 'loading') {
2526                            this.progress = 0;
2527                            this.progress_ticks = 0;
2528                            this.progress_hint = '';
2529                        }
2530
2531                        if(oldVal === 'loading' && newVal === 'logged_in') {
2532                            this.progress = 100;
2533                            this.progress_ticks = 100;
2534                            this.progress_hint = '';
2535                        }
2536                    }
2537                },
2538                mounted: function() {
2539                    if(typeof this.$route.query.confirmed !== 'undefined') {
2540                        this.confirmed = true;
2541                    }
2542
2543                    this.$eventBus.$on('uni-on-logging-in', () => {
2544                        this.login_failed = false;
2545                        this.content = 'loading';
2546                    });
2547
2548                    this.$eventBus.$on('uni-on-login-success', () => {
2549                        this.content = 'logging_in';
2550                        setTimeout(() => {
2551                            document.location = this.redirect ? this.redirect : '/kundenportal';
2552                        }, 250);
2553                    });
2554
2555                    this.$eventBus.$on('uni-on-login-failed', () => {
2556                        this.content = 'form';
2557                        this.login_failed = true;
2558                        this.inputs.email.invalid = true;
2559                        this.inputs.password.invalid = true;
2560                    });
2561
2562                    this.init();
2563                    if(document.cookie) {
2564                        let cookieStr = document.cookie;
2565                        let cookieArr = cookieStr.split('; ');
2566                        let name = this.client+'_zfa_token=';
2567                        for(let i = 0; i < cookieArr.length; i++) {
2568                            let cookie = cookieArr[i];
2569                            while (cookie.charAt(0) == ' ') {
2570                                cookie = cookie.substring(1);
2571                            }
2572                            if (cookie.indexOf(name) == 0) {
2573                                this.zfaToken = cookie.substring(name.length, cookie.length);
2574                            }
2575                        }
2576                    }
2577                    setInterval(() => this.updateLoginProgress(), 980);
2578
2579                                    }
2580            });
2581
2582        </script>
2582
2583                
2583<script>
2584            Vue.component('warenkorb-button-icon-page', {
2585                template: '#uni-warenkorb-button-icon-template',
2586
2587                data: function() {
2588                    return {
2589                        route: this.$route,
2590                        client: 'hwkkonstanz',
2591                        user_id: null,
2592                    };
2593                },
2594                methods: {
2595                    handleClick(e) {
2596                        window.location.href = '/bestellung/';
2597                    },
2598                    read_kurse_from_local_storage: function() {
2599                        let ls_key = 'uni_wk_kurse_'+this.client;
2600                        if(this.user_id) {
2601                            ls_key += '_'+this.user_id;
2602                        }
2603                        let kurse = localStorage.getItem(ls_key);
2604                        if(!kurse) {
2605                            kurse = localStorage.getItem('uni_wk_kurse_'+this.client); // item added to local storage before logging in
2606                        }
2607                        if(!kurse) {
2608                            kurse = localStorage.getItem('items'); // This can be removed in the future.
2609                        }
2610                        return kurse;
2611                    },
2612                },
2613                watch:{
2614                    $route (to, from){
2615                        this.route = this.$route;
2616                        let kurse = this.read_kurse_from_local_storage();
2617                        this.items = JSON.parse(kurse);
2618                        if(this.items !== null) {
2619                            this.count = this.items.length;
2620                        }
2621                    },
2622                },
2623                computed: {
2624                    items() {
2625                        let kurse = this.read_kurse_from_local_storage();
2626                        return JSON.parse(kurse);
2627                    },
2628                    count() {
2629                        let kurse = this.read_kurse_from_local_storage();
2630                        return JSON.parse(kurse)?.length;
2631                    }
2632                },
2633                mounted: function() {
2634                    this.route = this.$route;
2635                }
2636            });
2637        </script>
2637
2638                                
2638<script>
2639
2640            if(!!document.getElementById("vue_app")) {
2641
2642                Vue.prototype.$evaluation = new Vue({
2643                    data: function() {
2644                        return {
2645                            questions: [],
2646                            question_bundles: {
2647                                Normal: {},
2648                                Dozenten: {},
2649                                Themen: {}
2650                            },
2651                        }
2652                    },
2653                    methods: {
2654                        getPageNr: function($question) {
2655                            // let the_question = document.getElementById('uni_q' + $question.args.qnr);
2656                            // let the_section = the_question.parentElement;
2657                            let the_section = $question.$el.parentElement;
2658                            let pageNr = the_section.getAttribute('uni-with-page');
2659                            return pageNr;
2660                        },
2661                        addQuestion: function(question) {
2662                            var category = 'Normal';
2663                            var index = '0';
2664                            // if(question.args.hasOwnProperty('personenid')) {
2665                            //     personenid = question.args.personenid;
2666                            // }
2667                            let the_section = question.$el.parentElement;
2668
2669                            var doznr = the_section.getAttribute('doznr');
2670                            var dozent = the_section.getAttribute('dozent');
2671                            if(doznr === null) {
2672                                doznr = 'none';
2673                            } else { // Ist Dozentenfrage
2674                                category = 'Dozenten';
2675                                index = doznr;
2676                            }
2677                            if(dozent === null) {
2678                                dozent = '';
2679                            }
2680
2681                            var thema_id = the_section.getAttribute('thema_id');
2682                            var thema_bez = the_section.getAttribute('thema_bez');
2683                            if(thema_id === null) {
2684                                thema_id = 'none';
2685                            } else { // Ist Themen-Frage
2686                                category = 'Themen';
2687                                index = thema_id;
2688                            }
2689                            if(thema_bez === null) {
2690                                thema_bez = '';
2691                            }
2692
2693                            if(!this.question_bundles[category].hasOwnProperty(index)) {
2694                                this.question_bundles[category][index] = {
2695                                    doznr: doznr,
2696                                    dozent: dozent,
2697                                    thema_id: thema_id,
2698                                    thema_bez: thema_bez,
2699                                    questions: []
2700                                };
2701                            }
2702                            this.question_bundles[category][index].questions.push(question);
2703                            // console.log(this.question_bundles);
2704                        }
2705                    }
2706                });
2707
2708            }
2709        </script>
2709
2710                
2710<script>
2711            Vue.prototype.$vgb = new Vue({
2712                data: function() {
2713                    return {
2714                        clientPluginOptions: Object.freeze(JSON.parse('{"kundenportal_items":{"formulare":{"create":true},"meine_vorgaenge":{"create":true}},"show_in_admin_menu":{"uni_uni01_apstamm":false,"uni_uni01_apgang":false,"uni_uni01_apvar":false,"uni_uni01_apgkrit":false,"uni_vrgngverarb_workflow":false,"uni_vrgngverarb":false},"file_context":["allgemein"],"links":[],"forms":{"zulassungsantrag_gp":[]},"wording":{"lehrlingsrolle_aktive":{".nav.nav-tabs.nav-item#vorgang-tab":"Antr\u00e4ge einsehen und stellen"}},"styling":{"formulare":{"klappbox-head":{"collapsed":false}},"meine_vorgaenge":{"klappbox-head":{"collapsed":true}}},"fields":{"_GetOptions_lvtvorl":{"ausbildungsende":false},"_GetOptions_lvtaktive":{"ausbildungsende":false}},"endcard":{"exclude":[],"lehrlingsrolle_aktive":{"exclude":["link_formulare","link_meine_vorgaenge"]},"zulassungsantrag_gp":{"exclude":[]}},"filter":{"formulare":{"kritnr":null,"xeig":null},"meine_vorgaenge":{"kritnr":null,"xeig":null},"lehrlingsrolle_aktive":{"formulare":{"kritnr":"0003","xeig":null},"meine_vorgaenge":{"kritnr":"0003","xeig":null}},"zulassungsantrag_gp":{"formulare":{"kritnr":null,"xeig":null},"meine_vorgaenge":{"kritnr":null,"xeig":null}}},"header":{"formulare":{"exclude":false},"meine_vorgaenge":{"exclude":false},"vorgang":{"exclude":false},"lehrlingsrolle_aktive":{"formulare":{"exclude":true},"meine_vorgaenge":{"exclude":true},"vorgang":{"exclude":true}},"zulassungsantrag_gp":{"formulare":{"exclude":true},"meine_vorgaenge":{"exclude":true},"vorgang":{"exclude":true}}},"confirmation":{"init_user_status_show_always":false,"confirmation_user_status_show_always":false,"status_block_confirmation_show":false},"besch":{"impl":[],"options":{"UniVrgngverarbBeschEintragungsbestaetigung":{"display_name":"Eintragungsbest\u00e4tigung","description":"Hier erhalten Sie eine Eintragungsbest\u00e4tigung f\u00fcr Ihren Betrieb."},"UniVrgngverarbBeschUnbedenklichkeitsbescheinigung":{"display_name":"Unbedenklichkeitsbescheinigung","description":"Hier erhalten Sie eine Unbedenklichkeitsbescheinigung f\u00fcr Ihren Betrieb.","opart":"01"}}}}')),
2715                        confirmationUserTypes: Object.freeze(JSON.parse('{"L":{"display_name":"Auszubildenden"},"B":{"display_name":"Betrieb"}}')),
2716                        fieldTypes: [
2717                            {
2718                                name: 'number',
2719                                nameShort: 'N',
2720                                formats: [
2721                                    {
2722                                        pattern: '###,###,##0.00',
2723                                        //regexp: new RegExp(/^\d+(?:\.\d{1,2})?$/),
2724                                        step: '0.01',
2725                                        formatterOptions: {
2726                                            locale: 'de',
2727                                            options: {
2728                                                style: "decimal",
2729                                                useGrouping: true,
2730                                                minimumFractionDigits: 2,
2731                                                maximumFractionDigits: 2,
2732                                            }
2733                                        },
2734                                    },
2735                                    {
2736                                        pattern: '###,###,##0',
2737                                        //regexp:  new RegExp(/^\d+$/),
2738                                        step: '1',
2739                                        formatterOptions: {
2740                                            locale: 'de',
2741                                            options: {
2742                                                style: "decimal",
2743                                                useGrouping: true,
2744                                                minimumFractionDigits: 0,
2745                                                maximumFractionDigits: 0,
2746                                            }
2747                                        },
2748                                    },
2749                                    {
2750                                        pattern: '0.00',
2751                                        //regexp:  new RegExp(/^\d(?:\.\d{1,2})?$/),
2752                                        step: '0.01',
2753                                        formatterOptions: {
2754                                            locale: 'de',
2755                                            options: {
2756                                                style: "decimal",
2757                                                useGrouping: false,
2758                                                minimumFractionDigits: 2,
2759                                                maximumFractionDigits: 2,
2760                                            }
2761                                        },
2762                                    },
2763                                    {
2764                                        pattern: '0',
2765                                        //regexp:  new RegExp(/^\d(?:\.\d{1,2})?$/),
2766                                        step: '1',
2767                                        formatterOptions: {
2768                                            locale: 'de',
2769                                            options: {
2770                                                style: "decimal",
2771                                                useGrouping: false,
2772                                                minimumFractionDigits: 0,
2773                                                maximumFractionDigits: 0,
2774                                            }
2775                                        },
2776                                    },
2777                                ],
2778                            }
2779                        ],
2780                    }
2781                },
2782                computed: {
2783                    hasClientPluginOptions() {
2784                        return (this.clientPluginOptions !== undefined )
2785                    },
2786                    fieldTypesSupported() {
2787                        return this.fieldTypes.map((type) =>
2787 type.name);
2788                    },
2789                    fieldTypeNumberFormats() {
2790                        return this.fieldTypes.find((type) => type.name === 'number').formats;
2791                    },
2792                    fieldTypeNumberFormatsSupportedPattern() {
2793                        return this.fieldTypeNumberFormats.map((format) => format.pattern);
2794                    },
2795                },
2796                methods: {
2797                    getFieldTypeNumberFormatData(pattern) {
2798                        if(!this.fieldTypeNumberFormatsSupportedPattern.includes[pattern]) { return null; }
2799
2800                        return this.fieldTypeNumberFormats.find((format) => format.pattern === pattern);
2801                    },
2802                    getFieldTypeNumberFormatFormatter(pattern) {
2803                        const formatData = this.getFieldTypeNumberFormatData(pattern);
2804                        if(formatData.formatterOptions === undefined) { return null; }
2805
2806                        return Intl.NumberFormat(
2807                            formatData.formatterOptions.locale,
2808                            formatData.formatterOptions.options,
2809                        );
2810                    },
2811                    parseProps() {
2812                        // TODO @skoelgen : ...
2813                    },
2814                    parsePropString: function(propString) {
2815                        if(typeof propString == 'undefined' || propString === '') {
2816                            return false;
2817                        }
2818                        
2819                        let data = {};
2820                        
2821                        let splitString = propString.split(';');
2822                        if(splitString.length > 0) {
2823                            splitString.forEach(element => {
2824                                let propPair = element.split(':');
2825                                if(propPair.length === 2) {
2826                                    data[propPair[0]] = propPair[1];
2827                                }
2828                            });
2829                        }
2830                        
2831                        return data
2832                    },
2833                    getClientForms() {
2834
2835                    },
2836                    getClientForm() {
2837
2838                    },
2839                },
2840            });
2841        </script>
2841
2842                
2842<script>
2843
2844            let __uniHasUnsavedChanges = false;
2845
2846            window.addEventListener("beforeunload", (e) => {
2847                if (__uniHasUnsavedChanges) {
2848                    e.preventDefault();
2849                    e.returnValue = '';
2850                }
2851            });
2852
2853            Vue.prototype.$uniplus = new Vue({
2854                data: function() {
2855                    return {
2856                        post_id: '273005',
2857                        action: 'https://www.hwk-konstanz.de/wp-content/plugins/uniplus-signup/inc/forms/userdata.php',
2858                        nonce: '03ac79572e',
2859
2860                    }
2861                },
2862                methods: {
2863                    apiRequest(action, formData, successHandler, errorHandler) {
2864
2865                        this.$http.post(action, formData,
2866                            { headers: {'X-WP-Nonce': '3fb8454cb6'} })
2867                            .then(async function(response) {
2868                                response.json().then(async json => {
2869                                    if(json.status === 'success') {
2870                                        successHandler(json);
2871                                    } else {
2872                                        errorHandler(json);
2873                                    }
2874                                }).catch(ex => errorHandler(ex));
2875                            }, function(reason) {
2876                                errorHandler(reason);
2877                            });
2878                    },
2879                    apiGetRequest(action, successHandler, errorHandler) {
2880                        this.$http.get(action,
2881                            { headers: {'X-WP-Nonce': '3fb8454cb6'} })
2882                            .then(async function(response) {
2883                                response.json().then(async json => {
2884                                    if(json.status === 'success') {
2885                                        successHandler(json);
2886                                    } else {
2887                                        errorHandler(json);
2888                                    }
2889                                });
2890                            }, function(reason) {
2891                                errorHandler(reason);
2892                            });
2893                    },
2894                    toast(status, title, message) {
2895                        toastr.options = {
2896                            "closeButton": true,
2897                            "debug": false,
2898                            "newestOnTop": true,
2899                            "progressBar": false,
2900                            "positionClass": "toast-bottom-right",
2901                            "preventDuplicates": false,
2902                            "onclick": null,
2903                            "showDuration": "300",
2904                            "hideDuration": "1000",
2905                            "timeOut": "7000",
2906                            "extendedTimeOut": "1000",
2907                            "showEasing": "swing",
2908                            "hideEasing": "linear",
2909                            "showMethod": "fadeIn",
2910                            "hideMethod": "fadeOut"
2911                        }
2912                        let msg = '<small><i>'+ moment(new Date()).format('DD.MM.YYYY HH:mm') +' Uhr</i></small></br>';
2913                        if(typeof message !== 'undefined') {
2914                            msg += message;
2915                        }
2916                        toastr[status](msg, title);
2917                    },
2918                    toastInfo : function(title, message) {
2919                        this.toast('info', title, message);
2920                    },
2921                    toastSuccess : function(title, message) {
2922                        this.toast('success', title, message);
2923                    },
2924                    toastError : function(title, message) {
2925                        this.toast('error', title, message);
2926                    },
2927                    uniDecimalToTime : function(val) {
2928                        let str = String(val);
2929                        if(str.includes('.')) {
2930                            let h = str.split('.')[0];
2931                            let m = str.split('.')[1];
2932                            if(h.length === 1) {
2933                                h = '0' + h;
2934                            }
2935                            if(m.length === 1) {
2936                                m = m + '0';
2937                            }
2938                            return `${h}:${m}`;
2939                        } else if(str.includes(',')) {
2940                            let h = str.split(',')[0];
2941                            let m = str.split(',')[1];
2942                            if(h.length === 1) {
2943                                h = '0' + h;
2944                            }
2945                            if(m.length === 1) {
2946                                m = m + '0';
2947                            }
2948                            return `${h}:${m}`;
2949                        } else {
2950                            let h = str;
2951                            if(h.length === 1) {
2952                                h = '0' + h;
2953                            }
2954                            return `${h}:00`;
2955                        }
2956                    },
2957                    loadUserData: function(handler) {
2958                        var formData = new FormData();
2959                        formData.append('get_user_data', 'get_user_data');
2960                        formData.append('post_id', this.post_id);
2961                        formData.append('nonce', this.nonce);
2962                        this.$http.post(this.action, formData).then(function(res) {
2963                            let json = JSON.parse(res.bodyText);
2964                            handler(json);
2965                        }, function(res) {
2966                            console.log('err');
2967                            // this.content = 'error';
2968                        });
2969                    },
2970                    downloadFile: function(guid, fileName, type, successCallback, errorCallback, controller = 'file') {
2971                        let action = 'https://www.hwk-konstanz.de/wp-content/plugins/uniplus-download-center/inc/forms/UniVueDownloadCenterSingleItem.php';
2972                        var formData = new FormData();
2973                                                formData.append('post_id', 479429);
2974                        formData.append('nonce', '00c8fe6d13');
2975                        formData.append('guid', guid);
2976                        formData.append('fileName', fileName);
2977                        formData.append('type', type);
2978                        formData.append('controller', controller);
2979
2980                        this.$http.post(action, formData).then(function(res) {
2981                            if(res == null || res.body == '') {
2982                                if(typeof errorCallback !== 'undefined') {
2983                                    errorCallback(res);
2984                                }
2985                            } else {
2986                                let binaryString = window.atob(res.data);
2987                                let binaryLen = binaryString.length;
2988                                let bytes = new Uint8Array(binaryLen);
2989                                for (let i = 0; i < binaryLen; i++) {
2990                                    let ascii = binaryString.charCodeAt(i);
2991                                    bytes[i] = ascii;
2992                                }
2993                                const blob = new Blob([bytes], {type: type});
2994                                const link = document.createElement('a');
2995                                link.href = URL.createObjectURL(blob);
2996                                link.download = fileName;
2997                                link.click();
2998                                URL.revokeObjectURL(link.href);
2999                                if(typeof successCallback !== 'undefined') {
3000                                    successCallback(res);
3001                                }
3002                            }
3003                        }).catch(console.error);
3004                    },
3005                    initUnsavedChanges(formIdWrapper) {
3006                        setTimeout(function() {
3007                            const div = document.getElementById(formIdWrapper);
3008                            if(div !== null) {
3009                                const self = this;
3010                                div.querySelectorAll(`input, select, textarea`).forEach(el => {
3011                                    el.addEventListener("input", () => {
3012                                        __uniHasUnsavedChanges = true;
3013                                    });
3014
3015                                    // für select / checkbox / radio zuverlässiger
3016                                    el.addEventListener("change", () => {
3017                                        __uniHasUnsavedChanges = true;
3018                                    });
3019                                });
3020                            }
3021                        }, 2000);
3022
3023                    },
3024                    resetUnsavedChanges() {
3025                        __uniHasUnsavedChanges = false;
3026                    },
3027                    clearUnsavedChanges() {
3028                        this.resetUnsavedChanges();
3029                    }
3030                }
3031            });
3032        </script>
3032
3033                
3033<script>
3034            Vue.prototype.$openStreetMap = new Vue({
3035                data: function() {
3036                    return {
3037                        done: false,
3038                    }
3039                },
3040                methods: {
3041                    addBorlabsEventListener() {
3042
3043                        window.addEventListener('borlabs-cookie-after-init', () => {
3044
3045                            if(this.checkConsent()) {
3046                                this.$eventBus.$on('ready_for_leaflet', function() {
3047                                    this.createMapIfConsent();
3048                                }.bind(this));
3049                            } else {
3050                                window.addEventListener('borlabs-cookie-consent-saved', () => {
3051                                    this.$eventBus.$on('ready_for_leaflet', function() {
3052                                        this.createMapIfConsent();
3053                                    }.bind(this));
3054                                });
3055                            }
3056                            return false;
3057                        });
3058                    },
3059                    createMapIfConsent() {
3060                        if(!window.BorlabsCookie) {
3061                            console.log('h')
3062                            // this.$eventBus.$emit('load_osm_leaflet');
3063                            return true;
3064                        }
3065                        if(this.checkConsent()) {
3066                            this.unblockOpenStreetMap();
3067                            if(!this.done) {
3068                                this.$eventBus.$emit('load_osm_leaflet');
3069                                this.done = true;
3070                            }
3071                            return true;
3072                        }
3073                        return false;
3074                    },
3075                    setConsent() {
3076                        if(!window.BorlabsCookie) {
3077                            this.$eventBus.$emit('load_osm_leaflet');
3078                            return true;
3079                        }
3080                        window.BorlabsCookie.Consents.addConsent('open-street-map','external-media');
3081                        if(this.checkConsent()) {
3082                            this.unblockOpenStreetMap();
3083                            if(!this.done) {
3084                                this.$eventBus.$emit('load_osm_leaflet');
3085                                this.done = true;
3086                            }
3087                            return true;
3088                        }
3089                    },
3090                    checkConsent() {
3091
3092                        return window.BorlabsCookie.Consents.hasConsent('open-street-map','external-media');
3093                    },
3094                    unblockOpenStreetMap() {
3095                        window.BorlabsCookie.Unblock.unblockScriptBlockerId('open-street-map-leaflet-map');
3096                        window.BorlabsCookie.Unblock.unblockStyleBlockerId('open-street-map-leaflet-map');
3097                    },
3098                }
3099            });
3100        </script>
3100
3101                
3101<script>
3102            Vue.prototype.$form = new Vue({
3103                data: function() {
3104                    return {
3105                        date_names: ["wfvar_geburtstag","wfvar_geburtsdatum","wfvar_gebdat","wfvar_gebdatum","hwkgop_geburtsname"],
3106                        types: {
3107                            file: {
3108                                /** @var {int} */
3109                                maxFileSizeDefault: 5000000,
3110                                /** @var {object} */
3111                                acceptedMediaTypesDefault: JSON.parse('{"application\/pdf":{"type":"application","subtype":"pdf","file_extensions":[".pdf"]},"image\/jpeg":{"type":"image","subtype":"jpeg","file_extensions":[".jpeg",".jpg"]},"image\/png":{"type":"image","subtype":"pdf","file_extensions":[".png"]}}'),
3112                            },
3113                        },
3114                    }
3115                },
3116                computed: {
3117                    /**
3118                     *
3119                     *
3120                     * @return {object}
3121                     */
3122                    acceptedMediaTypesDefaultMap() {
3123                        let acceptedMediaTypesDefaultMap = {};
3124
3125                        if(this.types.file.acceptedMediaTypesDefault) {
3126                            Object.entries(this.types.file.acceptedMediaTypesDefault).forEach(([key, val]) => {
3127                                acceptedMediaTypesDefaultMap[key] = val.file_extensions;
3128                            });
3129                        }
3130
3131                        return acceptedMediaTypesDefaultMap;
3132                    }
3133                },
3134                methods: {
3135                    ensureInput: function(inputs, logInvalidFields = false) {
3136                        let success = true;
3137
3138                        for(let inp in inputs) {
3139                            let input = inputs[inp];
3140                            input.invalid = false;
3141
3142                            if(input.type === 'hidden') { continue; }
3143                            if(input.readonly) { continue; }
3144                            if(input.type === 'file' && !input.hidden) {
3145                                /** @var {File} */
3146                                let inputFile = this.getFile(input);
3147
3148                                // test if file not exists but required
3149                                if(!inputFile) {
3150                                    if(input.required) {
3151                                        input.invalid = true;
3152                                        success = false;
3153                                    }
3154
3155                                    continue;
3156                                }
3157
3158                                // test if file-size too large
3159                                if(inputFile.size > this.types.file.maxFileSizeDefault) {
3160                                    input.invalid = true;
3161                                    input.invalidationMessage = `Die maximal erlaubte Dateigröße beträgt: 5MB`
3162                                    success = false;
3163
3164                                    continue;
3165                                }
3166
3167                                let acceptedMediaTypes = {};
3168
3169                                if(input.accept?.length > 1) {
3170                                    let accept = [];
3171
3172                                    if(typeof input.accept === 'string') {
3173                                        accept = input.accept.split(',');
3174                                    }
3175                                    else if(input.accept instanceof Array) {
3176                                        accept = input.accept;
3177                                    }
3178
3179                                    accept = accept.map((item) => item.trim());
3180
3181                                    acceptedMediaTypes = this.parseFileAccept(accept);
3182                                }
3183                                else {
3184                                    acceptedMediaTypes = this.acceptedMediaTypesDefaultMap;
3185                                }
3186
3187                                //console.debug(Object.keys(acceptedMediaTypes));
3188                                //console.debug(Object.values(acceptedMediaTypes).flat());
3189
3190                                // get input-file-extension
3191                                const parts = inputFile.name.split('.');
3192                                //console.debug(parts);
3193                                const inputFileExt = ('.' + parts[parts.length - 1]).trim().toLowerCase();
3194                                //console.debug(inputFileExt);
3195
3196                                // test if file-media-type not allowed (mime-type)
3197                                const acceptedMimeTypes = Object.keys(acceptedMediaTypes);
3198                                if(inputFile.type && inputFile.type !== '' && !acceptedMimeTypes.includes(inputFile.type)) {
3199                                    console.error(`Error: MIME-Type "${inputFile.type}" not accepted.`);
3200                                    input.invalid = true;
3201                                    success = false;
3202
3203                                    continue;
3204                                }
3205
3206                                // test if file-media-type not allowed (file-extension)
3207                                const acceptedFileExtensions = Object.values(acceptedMediaTypes).flat();
3208                                if(inputFileExt && !acceptedFileExtensions.includes(inputFileExt)) {
3209                                    console.error(`Error: File-Extensions "${inputFileExt}" not accepted.`);
3210                                    input.invalid = true;
3211                                    success = false;
3212
3213                                    continue;
3214                                }
3215
3216                                //if((input.required && !length) || (length && (typeof input.accept === 'string') && !input.accept.includes(fileInputs[0].files[0].type))) {
3217                                //    input.invalid = true;
3218                                //    success = false;
3219                                //}
3220                            }
3221                            else if((input.type === 'file_storage') && input.required && input.value === '' && !input.hidden) {
3222                                input.invalid = true;
3223                                success = false;
3224                            }
3225                            else if((input.type === 'email') && !(input.value === null || input.value === '' || (/^[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(input.value)))) {
3226                                input.invalid = true;
3227                                success = false;
3228                            }
3229                            else if(input.type === 'date') {
3230                                // console.log(input.min);
3231                                // console.log(moment(input.value, 'YYYY-MM-DD'));
3232                                // console.log(moment(input.min, 'YYYY-MM-DD'));
3233                                // console.log(moment(input.value, 'YYYY-MM-DD').isBefore(moment(input.min, 'YYYY-MM-DD')));
3234                                // console.log(input.max);
3235                                // console.log(moment(input.value, 'YYYY-MM-DD'));
3236                                // console.log(moment(input.max, 'YYYY-MM-DD'));
3237                                // console.log(moment(input.value, 'YYYY-MM-DD').isBefore(moment(input.max, 'YYYY-MM-DD')));
3238                                if(((this.date_names.includes(input.name)) && (new Date(input.value) >= new Date())) || // e.g. birth date cant be in the future
3239                                    (input.min && moment(input.value, 'YYYY-MM-DD').isBefore(moment(input.min, 'YYYY-MM-DD'))) || 
3240                                    (input.max && moment(input.value, 'YYYY-MM-DD').isAfter(moment(input.max, 'YYYY-MM-DD')))) { 
3241                                        input.invalid = true;
3242                                        success = false;
3243                                }
3244                                if(new Date(input.value) < new Date('1800-01-01')) {
3245                                    input.invalid = true;
3246                                    success = false;
3247                                }
3248                                if(input.required && !input.hidden && !input.value) {
3249                                    input.invalid = true;
3250                                    success = false;
3251                                }
3252                                // commented out because of other date-formats that are longer than 10 chars and often not user input (HTML-Element )
3253                                //if(input.value.length > 10) {
3254                                //    input.invalid = true;
3255                                //    success = false;
3256                                //}
3257                            }
3258                            else if(input.type === 'termin') {
3259                                input.ft_invalid = false;
3260                                input.tt_invalid = false;
3261                                if(((this.date_names.includes(input.name)) && (new Date(input.value) >= new Date())) || // e.g. birth date cant be in the future
3262                                    (input.min && moment(input.value, 'YYYY-MM-DD').isBefore(moment(input.min, 'YYYY-MM-DD'))) || 
3263                                    (input.max && moment(input.value, 'YYYY-MM-DD').isAfter(moment(input.max, 'YYYY-MM-DD')))) { 
3264                                        input.invalid = true;
3265                                        success = false;
3266                                }
3267                                if(new Date(input.value) < new Date('1800-01-01')) {
3268                                    input.invalid = true;
3269                                    success = false;
3270                                }
3271                                if(input.required && !input.hidden && !input.value) {
3272                                    input.invalid = true;
3273                                    success = false;
3274                                }
3275                                if(input.ft_required && !input.hidden && !input.ft) {
3276                                    input.ft_invalid = true;
3277                                    success = false;
3278                                }
3279                                if(input.tt_required && !input.hidden && !input.tt) {
3280                                    input.tt_invalid = true;
3281                                    success = false;
3282                                }
3283                            }
3284                            else if(input.type === 'number') {
3285                                if(
3286                                    (
3287                                        (input.max && (Number(input.value) > Number(input.max)))
3288                                        ||
3289                                        (input.min && (Number(input.value) < Number(input.min)))
3290                                        ||
3291                                        input.value === ''
3292                                    ) &&
3293                                    (input.value !== '' || input.required)) {
3294                                    input.invalid = true;
3295                                    success = false;
3296                                }
3297                                // check number format/pattern, if set
3298                                if(input.format && input.pattern) {
3299                                    let regex = new RegExp(input.pattern);
3300                                    if(!regex.test(input.value)) {
3301                                        input.invalid = true;
3302                                        success = false;
3303                                    }
3304                                }
3305                            }
3306                            else if((input.type === 'numeric') && !(input.value === null || /^\d*$/.test(input.value))) { // e.g. for telephone numbers
3307                                input.invalid = true;
3308                                success = false;
3309                            }
3310                            else if((input.type === 'plz') && !(input.value === null || input.value === '' || /^[0-9A-Z -]{4,10}$/.test(input.value))) {
3311                                input.invalid = true;
3312                                success = false;
3313                            }
3314                            else if((input.type === 'phone_number_apo_berlin') && !(input.value === null || input.value === '' || /^\+[1-9][0-9]{0,3} [1-9][0-9]* [1-9][0-9]*(\-[0-9]+)?$/.test(input.value))) {
3315                                input.invalid = true;
3316                                success = false;
3317                            }
3318                            else if((input.type === 'iban') && !(input.value === null || input.value === '' || uni_helper_js__validate_iban(input.value))) {
3319                                input.invalid = true;
3320                                success = false;
3321                            }
3322                            else if(input.required && (!input.hidden)) {
3323                                if(input.type === 'checkbox') {
3324                                    let truevalue = 'J';
3325                                    if(input.truevalue) {
3326                                        truevalue = input.truevalue;
3327                                    }
3328                                    if(input.value !== truevalue) {
3329                                        input.invalid = true;
3330                                        success = false;
3331                                    }
3332                                }
3333                                else if(input.type === 'selectable2' && ((!input.value) || (input.value === -1) || (input.value === '-1'))) {
3334                                    let go_on = false;
3335                                    for(let field in input.option_fields) {
3336                                        if(input.option_fields[field] === 'J') {
3337                                            go_on = true;
3338                                            input.invalid = false;
3339                                            break;
3340                                        }
3341                                    }
3342                                    if(!go_on) {
3343                                        input.invalid = true;
3344                                        success = false;
3345                                    }
3346                                }
3347                                else if((input.type === 'select' || input.type === 'select2') && (input.value === -1 || input.value === '-1' || input.value === '__null__' || input.value === null || input.value.length === 0 )) {
3348                                    input.invalid = true;
3349                                    success = false;
3350                                }
3351                                else if((input.type === 'checkboxgroup') && (!input.value || input.value.length === 0 )) {
3352                                    input.invalid = true;
3353                                    success = false;
3354                                }
3355                                else if((input.type === 'pruefberufe')) {
3356                                    if(Object.keys(input.option_fields).length === 0) {
3357                                        input.invalid = true;
3358                                        success = false;
3359                                    }
3360                                }
3361                                else if((input.type === 'berufe')) {
3362                                    if(Object.keys(input.option_fields).length === 0) {
3363                                        input.invalid = true;
3364                                        success = false;
3365                                    }
3366                                }
3367                                else if((input.type === 'beruf_fachrichtung')) {
3368                                    if(Object.keys(input.option_fields).length === 0) {
3369                                        input.invalid = true;
3370                     
3370                   success = false;
3371                                    }
3372                                }
3373                                else if((input.type === 'beruf_fachrichtung_vue_lvt')) {
3374                                    if(Object.keys(input.option_fields).length === 0) {
3375                                        input.invalid = true;
3376                                        success = false;
3377                                    } else {
3378                                        if(input.option_fields.l_aberuf === '-1' || input.option_fields.l_fachr === '-1') {
3379                                            input.invalid = true;
3380                                            success = false;
3381                                        }
3382                                    }
3383                                }
3384                                else if((!input.value) && (input.value !== 0)) {
3385                                    input.invalid = true;
3386                                    success = false;
3387                                }
3388                            }
3389                            if((input.type === 'text' || input.type === 'textarea' || input.type === 'wp_editor' ) && input.max) {
3390                                if(input.value) {
3391                                    if(input.value.length > input.max) {
3392                                        input.invalid = true;
3393                                        success = false;
3394                                    }
3395                                }
3396                            }
3397                            // if(input.minlen && Number(input.minlen) > 0) {
3398                            //     valuelen = String(input.value).length;
3399                            //     if(valuelen < Number(input.minlen)) {
3400                            //         input.invalid = true;
3401                            //         success = false;
3402                            //     }
3403                            // } else if(input.maxlen && Number(input.maxlen) > 0) {
3404                            //     valuelen = String(input.value).length;
3405                            //     if(valuelen > Number(input.maxlen)) {
3406                            //         input.invalid = true;
3407                            //         success = false;
3408                            //     }
3409                            // }
3410
3411                            //if(input.invalid && logInvalidFields && //) {
3412                            //    console.log(input);
3413                            //}
3414                        }
3415
3416                        let rtnObj = {};
3417                        rtnObj.success = success;
3418                        rtnObj.inputs = inputs;
3419
3420                        //for(let inp in inputs) {
3421                        //    let input = inputs[inp];
3422                        //     if(input.invalid === true) {
3423                        //         console.log(input);
3424                        //     }
3425                        //}
3426
3427                        return rtnObj;
3428                    },
3429                    postData: function(action, formData) {
3430                        let promise = new Promise(function(res) {
3431                            this.$http.post(action,
3432                                formData)
3433                                .then( function(response) {
3434                                    var data = response.data;
3435                                    res({ success:true, data: data });
3436                                })
3437                                .catch( function(e) {
3438                                    res({ success:false, data: e });
3439                                });
3440                        }.bind(this));
3441                        return promise;
3442                    },
3443                    /**
3444                     * Do not use this method.
3445                     * Use $this.uniplus.apiRequest instead.
3446                     *
3447                     * @param successHandler
3448                     * @param errorHandler
3449                     * @param action
3450                     * @param data
3451                     */
3452                    wpApiRequest(successHandler, errorHandler, action, data = {}) {
3453                        let formData = new FormData();
3454                        if(data instanceof FormData) {
3455                            formData = data;
3456                        } else {
3457                            formData = this.$form.createFormData(this.inputs, this.post_id, this.nonce);
3458                            if(data) {
3459                                for(const formDataKey of Object.keys(data)) {
3460                                    formData.append(formDataKey, data[formDataKey]);
3461                                }
3462                            }
3463                        }
3464                        this.$http.post(action, formData,
3465                            { headers: {'X-WP-Nonce': '3fb8454cb6'} })
3466                            .then(async function(response) {
3467                                response.json().then(async json => {
3468                                    if(json.status === 'success') {
3469                                        successHandler(json);
3470                                    } else {
3471                                        errorHandler(json);
3472                                    }
3473                                });
3474                            }.bind(this), function(reason) {
3475                                errorHandler(reason);
3476                            }.bind(this));
3477                    },
3478                    getInputClass: function(input) {
3479                        if(input.hidden || input.type === 'hidden') { return ''; }
3480                        if(input.type === 'hr') { return 'col-xs-12 col-12'; }
3481                        return input.width ?
3482                            'col-xs-12 col-12 col-sm-' + 
3483                            input.width + 
3484                            ' form-group has-feedback' + 
3485                            (input.inputclass ? 
3486                            ' ' + 
3487                            input.inputclass 
3488                            : '') 
3489                            : '';
3490                    },
3491                    createFormTypeDesc: function(inputs) {
3492                        var types = {};
3493                        for (var input_key in inputs) {
3494                            let input = inputs[input_key];
3495                            types[input_key] = {
3496                                type: input.type
3497                            };
3498                        }
3499                        return types;
3500                    },
3501                    formatDate(date, format = 'DD.MM.YYYY') {
3502                        var rtnDate = date;
3503                        var momentDate = moment(new Date(date));
3504                        if (momentDate.isValid()) {
3505                            rtnDate = momentDate.format(format);
3506                        }
3507                        return rtnDate;
3508                    },
3509                    createFormData: function(inputs, post_id, nonce, fix_dates, save_empty_fields = false) {
3510                        /* Never set save_empty_fields = true when the formData are to be sent to the Middleware!
3511                         * This is only meant for saving the formData, e.g. in a custom post type.
3512                         */
3513                        var formData = new FormData();
3514                        post_id = (typeof post_id !== 'undefined') ? post_id : false;
3515                        nonce = (typeof nonce !== 'undefined') ? nonce : false;
3516                        fix_dates = (typeof fix_dates !== 'undefined') ? fix_dates : false;
3517                        if(post_id) {
3518                            formData.append('post_id', post_id);
3519                        }
3520                        if(nonce) {
3521                            formData.append('nonce', nonce);
3522                        }
3523
3524                        if(!inputs) { return formData; }
3525
3526                        for (var input_key in inputs) {
3527                            let input = inputs[input_key];
3528                            switch(input.type) {
3529                                case 'headline':
3530                                case 'headline2':
3531                                case 'headline3':
3532                                case 'headline4':
3533                                case 'label':
3534                                case 'small':
3535                                case 'link':
3536                                case 'clearfix':
3537                                case 'clear':
3538                                case 'callout':
3539                                case 'offset':
3540                                case 'hr':
3541                                case 'paragraph':
3542                                    continue;
3543                                case 'file':
3544                                    /** @var {File} */
3545                                    let inputFile = this.getFile(input);
3546
3547                                    if(inputFile) {
3548                                        let inputFileData = {
3549                                            name: inputFile.name,
3550                                            size: inputFile.size,
3551                                            type: inputFile.type,
3552                                        }
3553                                        formData.append(input.name, inputFile);
3554                                        formData.append(input.name, JSON.stringify(inputFileData));
3555                                    }
3556                                    break;
3557                                case 'file_storage':
3558                                    if(input.value) {
3559                                        formData.append(input.name, input.value);
3560                                    }
3561                                    break;
3562                                case 'select':
3563                                    if(input.name === 'ausbilder_berufauswahl') {
3564                                        formData.append(input.name, input.value);
3565                                    } else if(input.name === 'averh') {
3566                                        formData.append(input.name, input.value);
3567                                    } else if(input.name === 'l_mitlz') {
3568                                        formData.append(input.name, input.value);
3569                                    } else if(input.name === 'l_lehrzver') {
3570                                        formData.append(input.name, input.value);
3571                                    } else if(typeof input.value !== 'undefined' && input.value && input.value !== '-1' && input.value !== -1 && input.value !== '__null__') {
3572                                        formData.append(input.name, input.value);
3573                                    }
3574                                    break;
3575                                case 'selectable2':
3576                                case 'beruf_fachrichtung':
3577                                    var option_fields = input.option_fields;
3578                                    for(let field in option_fields) {
3579                                        formData.append(field, option_fields[field]);
3580                                    }
3581                                    break;
3582                                case 'beruf_fachrichtung_vue_lvt':
3583                                    var option_fields = input.option_fields;
3584                                    for(let field in option_fields) {
3585                                        formData.append(field, option_fields[field]);
3586                                    }
3587                                    break;
3588                                case 'pruefberufe':
3589                                    var option_fields = input.option_fields;
3590                                    for(let field in option_fields) {
3591                                        formData.append(field, option_fields[field]);
3592                                    }
3593                                    break;
3594                                case 'berufe':
3595                                    var option_fields = input.option_fields;
3596                                    for(let field in option_fields) {
3597                                        formData.append(field, option_fields[field]);
3598                                    }
3599                                    break;
3600                                case 'checkbox':
3601                                    if(input.checked) {
3602                                        formData.append(input.name, input.checked);
3603                                    } else {
3604                                        formData.append(input.name, input.value);
3605                                    }
3606                                    break;
3607                                case 'checkboxgroup':
3608                                    if(typeof input.value === 'object' && input.value && input.value.length > 0 ) {
3609                                        formData.append(input.name, input.value);
3610                                    }
3611                                    break;
3612                                case 'date':
3613                                    if(fix_dates) {
3614                                        if(typeof input.value !== 'undefined' && input.value && input.value !== '-1' && input.value !== -1) {
3615                                            // if(input.format)
3616                                            formData.append(input.name, input.value);
3617                                        }
3618                                    } else if(input.value !== null) {
3619                                        formData.append(input.name, input.value);
3620                                    }
3621                                    break;
3622                                case 'number':
3623                                    if(typeof input.value !== 'undefined' && input.value !== '' && input.value !== null) {
3624                                        if(input.format && input.pattern) { 
3625                                            let convValue = input.value.replace(/\./, ',');
3626                                            formData.append(input.name, convValue);
3627                                        } else {
3628                                            formData.append(input.name, input.value);
3629                                        }
3630                                    }
3631                                    break;
3632                                case 'seminare-gaeste':
3633                                    let guests = [];
3634                                    for(const guest of input.value) {
3635                                        let anotherGuest = {};
3636                                        for(const inputKey of Object.keys(guest)) {
3637                                            const input = guest[inputKey];
3638                                            anotherGuest[input.name] = input.value;
3639                                        }
3640                                        guests.push(anotherGuest);
3641                                    }
3642                                    formData.append(input.name, JSON.stringify(guests));
3643                                    break;
3644                                case 'hidden':
3645                                    if(input.name === 'p_persnr' && input.value == 0) {
3646                                        formData.append(input.name, input.value);
3647                                    } else if(typeof input.value !== 'undefined' && input.value && input.value !== '-1' && input.value !== -1) {
3648                                        formData.append(input.name, input.value);
3649                                    }
3650                                    break;
3651                                default:
3652                                    if(typeof input.value !== 'undefined' && input.value !== null) {
3653                                        if((input.value !== '' && input.value !== '-1' && input.value !== -1) || save_empty_fields) {
3654                                            if((input.value.constructor === Object || input.value.constructor === Ar
3654ray)) {
3655                                                formData.append(input.name, JSON.stringify(input.value));
3656                                            } else {
3657                                                formData.append(input.name, input.value);
3658                                            }
3659                                        }
3660                                    }
3661                                    break;
3662                            }
3663                        }
3664                        return formData;
3665                    },
3666
3667                    // region Form-Helper--Input-Getter
3668
3669                    /**
3670                     * @param {object} input
3671                     *
3672                     * @returns {FileList|undefined}
3673                     */
3674                    getFiles(input) {
3675                        let inputElement;
3676                        let inputFiles;
3677
3678                        if(input.id) {
3679                            inputElement = document.getElementById(input.id);
3680                        }
3681                        else if(input.name) {
3682                            let inputElements = document.getElementsByName(input.name);
3683
3684                            if(inputElements && inputElements.length > 0) {
3685                                inputElement = inputElements[0];
3686                            }
3687                        }
3688
3689                        if(inputElement
3690                            && inputElement instanceof HTMLInputElement
3691                            && inputElement.files
3692                            && inputElement.files instanceof FileList
3693                            && inputElement.files.length > 0
3694                        ) {
3695                            inputFiles = inputElement.files;
3696                        }
3697
3698                        return inputFiles;
3699                    },
3700
3701                    /**
3702                     * @param {object} input
3703                     *
3704                     * @returns {File|undefined}
3705                     */
3706                    getFile(input) {
3707                        let inputFile;
3708
3709                        let inputFiles = this.getFiles(input);
3710
3711                        if(inputFiles
3712                            && inputFiles instanceof FileList
3713                            && inputFiles.length > 0
3714                        ) {
3715                            inputFile = inputFiles[0];
3716                        }
3717
3718                        return inputFile;
3719                    },
3720
3721                    // endregion Form-Helper--Input-Getter
3722
3723                    // region Form-Helper--Input-Setter
3724
3725                    setValue : function(input, value) {
3726                        if(input !== undefined) {
3727                            input.value = value;
3728                        }
3729                    },
3730                    setHidden : function(input, value) {
3731                        if(input !== undefined) {
3732                            input.hidden = value;
3733                        }
3734                    },
3735                    setRequired : function(input, value) {
3736                        if(input !== undefined) {
3737                            input.required = value;
3738                        }
3739                    },
3740                    setReadonly : function(input, value) {
3741                        if(input !== undefined) {
3742                            input.readonly = value;
3743                        }
3744                    },
3745                    setDisabled : function(input, value) {
3746                        if(input !== undefined) {
3747                            input.disabled = value;
3748                        }
3749                    },
3750                    setOptions : function(input, value) {
3751                        if(input !== undefined) {
3752                            input.options = value;
3753                        }
3754                    },
3755                    setWidth : function(input, value) {
3756                        if(input !== undefined) {
3757                            input.width = value;
3758                        }
3759                    },
3760                    setType : function(input, value) {
3761                        if(input !== undefined) {
3762                            input.type = value;
3763                        }
3764                    },
3765
3766                    // endregion Form-Helper--Input-Setter
3767
3768                    submitFileStorage : function(input) {
3769
3770                    },
3771                    reset : function(input) {
3772                        if(input !== undefined && 'initial_value' in input) {
3773                            input.value = input.initial_value;
3774                        }
3775                    },
3776                    /**
3777                     * parses/filters accept attribut of input type 'file' against defaults
3778                     *
3779                     * @param {array} accept
3780                     *
3781                     * @return {object}
3782                     */
3783                    parseFileAccept(accept) {
3784                        let parsedAccept = {};
3785
3786                        const regex = /^(image|application)\/\*$/;
3787
3788                        if(Object.keys(this.acceptedMediaTypesDefaultMap).length > 0) {
3789                            accept.forEach((acceptItem) => {
3790
3791                                let acceptItemTopLevel = false;
3792                                if(regex.test(acceptItem)) {
3793                                    acceptItemTopLevel = acceptItem.split('/')[0];
3794                                }
3795
3796                                Object.entries(this.acceptedMediaTypesDefaultMap).forEac
3796h(([k,v]) => {
3797                                    // check mime-type-top-level
3798                                    if(acceptItemTopLevel && k.startsWith(acceptItemTopLevel + '/')) {
3799                                        if(!Object.hasOwn(parsedAccept, k)) {
3800                                            parsedAccept[k] = v;
3801                                        }
3802                                    // check mime-type
3803                                    } else if(acceptItem === k) {
3804                                        if(!Object.hasOwn(parsedAccept, k)) {
3805                                            parsedAccept[acceptItem] = v;
3806                                        }
3807                                    // check file-extension
3808                                    } else if(v.includes(acceptItem)) {
3809                                        if(!Object.hasOwn(parsedAccept, k) || !(parsedAccept[k] instanceof Array)) {
3810                                            parsedAccept[k] = [];
3811                                        }
3812                                        parsedAccept[k].push(acceptItem);
3813                                    }
3814                                });
3815                            });
3816                        }
3817
3818                        return parsedAccept;
3819                    }
3820                },
3821            });
3822        </script>
3822
3823                
3823<script>
3824
3825        function scrollToTop() {
3826            window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });
3827        }
3828
3829        function scrollToElement(elementId, offset = 0) {
3830            const element = document.getElementById(elementId);
3831            if(typeof element !== "undefined") {
3832
3833                const y = element.getBoundingClientRect().top + window.scrollY;
3834                //console.log(y + offset);
3835                window.scroll({
3836                    top: y + offset,
3837                    behavior: 'smooth'
3838                });
3839            }
3840        }
3841
3842        function openInNewTab(url) {
3843            window.open(url, '_blank').focus();
3844        }
3845
3846        if(!!document.getElementById("vue_app")) {
3847
3848            Vue.prototype.$window = window;
3849
3850            Vue.prototype.$eventBus = new Vue();
3851
3852            Vue.prototype.$storage = new Vue({
3853                data: function() {
3854                    return {
3855                        cachePrefix: 'unicache_',
3856                        defaultCacheTimeoutInSeconds: 60 * 60
3857                    }
3858                },
3859                methods: {
3860                    cacheKey(key) {
3861                        return `${this.cachePrefix}${key}`;
3862                    },
3863                    getCache(_key, fallbackHandler, _cacheTimeoutInSeconds = null) {
3864                        const timeout = _cacheTimeoutInSeconds ? _cacheTimeoutInSeconds : this.defaultCacheTimeoutInSeconds;
3865                        const key = this.cacheKey(_key);
3866                        const cData = localStorage.getItem(key);
3867                        if(cData !== null) {
3868                            const cDataObj = JSON.parse(cData);
3869                            const now = Math.round((new Date()).getTime() / 1000);
3870                            if(cDataObj.time + timeout > now) {
3871                                return cDataObj.data;
3872                            }
3873                        }
3874                        const data = fallbackHandler(key);
3875                        this.setCache(_key, data);
3876                        return data;
3877                    },
3878                    setCache(_key, data) {
3879                        const key = this.cacheKey(_key);
3880                        const now = Math.round((new Date()).getTime() / 1000);
3881                        localStorage.setItem(key, JSON.stringify({
3882                            time: now,
3883                            data: data
3884                        }));
3885                    },
3886                    unsetCache(_key) {
3887                        const key = this.cacheKey(_key);
3888                        localStorage.removeItem(key);
3889                    },
3890                    clear() {
3891                        localStorage.Clear();
3892                    }
3893                }
3894            });
3895
3896            Vue.prototype.getTheId = function(input) {
3897                if(!input.id) {
3898                    input.id = 'input-' + Math.floor(Math.random() * 999999);
3899                }
3900
3901                return input.id;
3902
3903            }
3904
3905            
3906            Vue.prototype.$gematik = new Vue({
3907    data: function() {
3908        return {
3909
3910        }
3911    },
3912    methods: {
3913        getInputClass : function(input) {
3914            if(input.hidden || input.type == 'hidden') { return ''; }
3915            return input.width ? 'col-xs-12 col-12 col-sm-' + input.width + ' form-group has-feedback' : '';
3916        },
3917        getPrefillData : function(korrnr, token, atyp){
3918            var action = 'https://www.hwk-konstanz.de/wp-content/plugins/uniplus-gematik/inc/forms/UniGematikValidate.php';
3919            var formData = new FormData();
3920            formData.append('korrnr', korrnr);
3921            formData.append('token', token);
3922            formData.append('atyp', atyp);
3923
3924            return this.$form.postData(action, formData);
3925        },
3926        setPrefillData : function(inputs, data) {
3927            //PersonenDaten
3928            var person_data = data['person_data'];
3929            inputs = this.prefill(inputs, person_data);
3930
3931            // Betriebsdaten
3932            if(data['betriebs_data'].length > 0) {
3933                var firstApotheke = data['betriebs_data'][0];
3934                inputs = this.prefill(inputs, firstApotheke, 'inst_');
3935            }
3936
3937            return inputs;
3938        },
3939        prefill : function(inputs, data, prefix) {
3940            prefix = prefix ? prefix : '';
3941            for(var item in data) {
3942                if(inputs[prefix+item]) {
3943                    if(inputs[prefix+item].type == 'date') {
3944                        if(data[item]) {
3945                            var gebdatSplitted = data[item].split('.', 3);
3946                            var theGebdat = gebdatSplitted[2] + '-' + gebdatSplitted[1] + '-' + gebdatSplitted[0];
3947                            // inputs[prefix+item].value = moment(theGebdat).format('YYYY-MM-DD');
3948                            inputs[prefix+item].value = theGebdat;
3949                        } else {
3950                            if(typeof inputs[prefix+item].readonly !== 'undefined') {
3951                                delete inputs[prefix+item].readonly
3952                            }
3953                        }
3954                    } else {
3955                        inputs[prefix+item].value = data[item];
3956
3957                    }
3958                }
3959            }
3960            return inputs;
3961        },
3962        prefillInputField : function(inputs, name, data){
3963            inputs[name].value = data;
3964            return inputs;
3965        },
3966        substitution : function(inputs, body) {
3967            for(var input in inputs ) {
3968                if(inputs[input].type == 'select') {
3969                    var options = inputs[input].options;
3970                    for(var option in options){
3971                        if(options[option].value == inputs[input].value){
3972                            body = body.replace('__'+inputs[input].name+'__', options[option].name);
3973                        }
3974                    }
3975                } else {
3976                    body = body.replace('__'+inputs[input].name+'__', inputs[input].value);
3977                }
3978            }
3979            return body;
3980        },
3981        resetApotheke : function(inputs) {
3982            items = [ 'inst_name', 'inst_street', 'inst_zusatztext', 'inst_zip', 'inst_city' ];
3983            items.forEach( function(item) {
3984                inputs[item].value = '';
3985            });
3986            return inputs;
3987        }
3988    }
3989
3990});
3991            var router = new VueRouter({
3992                mode: 'history',
3993                routes: []
3994            });
3995            new Vue({
3996                router: router,
3997                el: '#vue_app',
3998                methods: {
3999                    createFormData: function(inputs) {
4000                        console.log('createFormData have been moved to $form.createFormData');
4001                        return this.$form.createFormData(inputs);
4002                    }
4003                }
4004            });
4005        }
4006        </script>
4006
4007                        
4008        </div> <!-- <div class="hidden-print"> -->
4009	</body>
4010</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.