{"id":36566,"date":"2026-05-06T19:54:25","date_gmt":"2026-05-06T17:54:25","guid":{"rendered":"https:\/\/www.areception.ai\/?page_id=36566"},"modified":"2026-06-11T10:43:53","modified_gmt":"2026-06-11T08:43:53","slug":"konfigurator","status":"publish","type":"page","link":"https:\/\/www.areception.ai\/cs\/konfigurator\/","title":{"rendered":"Konfigur\u00e1tor HW"},"content":{"rendered":"\n<script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"ItemList\", \"name\": \"Hardware konfigur\u00e1tor aReception.ai\", \"itemListElement\": [{\"@type\": \"ListItem\", \"position\": 1, \"item\": {\"@type\": \"Product\", \"name\": \"Zebra kiosek KC50 15\\\"\", \"category\": \"Kiosek\", \"description\": \"Zebra kiosek pro recepci s nainstalovanou aplikac\u00ed aReception.ai.\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"image\": \"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-none.png\", \"sku\": \"KC50A15-G0B1C0-A6 + PWR-BGA24V78W4WW + 50-16000-220R\", \"offers\": {\"@type\": \"Offer\", \"price\": 28190, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 28190, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 2, \"item\": {\"@type\": \"Product\", \"name\": \"Zebra kiosek KC50 22\\\"\", \"category\": \"Kiosek\", \"description\": \"Zebra kiosek pro recepci s nainstalovanou aplikac\u00ed aReception.ai.\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"image\": \"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-22-none.png\", \"sku\": \"KC50A22-G0B1C0-A6 + PWR-BGA24V78W4WW + 50-16000-220R\", \"offers\": {\"@type\": \"Offer\", \"price\": 30190, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 30190, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 3, \"item\": {\"@type\": \"Product\", \"name\": \"Tablet Zebra ET401 10\\\"\", \"category\": \"Kiosek\", \"description\": \"Vnit\u0159n\u00ed i venkovn\u00ed \u0159e\u0161en\u00ed (Wi-Fi 7, 5G, IP65). Stojan i nap\u00e1jen\u00ed vyberte v sekci n\u00ed\u017ee.\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"image\": \"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-et401-none.png\", \"sku\": \"ET401EB-30101B2P-A6\", \"offers\": {\"@type\": \"Offer\", \"price\": 27700, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 27700, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 4, \"item\": {\"@type\": \"Product\", \"name\": \"30\\\" Transparent OLED Kiosk\", \"category\": \"Kiosek\", \"description\": \"Pr\u016fhledn\u00fd 30\\\" OLED displej v samostatn\u00e9m celokovov\u00e9m stojanu (premium \u0159e\u0161en\u00ed pro reprezentativn\u00ed recepce)\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"image\": \"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-oled-1.jpg\", \"sku\": \"Transparent OLED 30 inch touch screen kiosk\", \"offers\": {\"@type\": \"Offer\", \"price\": 189990, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 189990, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 5, \"item\": {\"@type\": \"Product\", \"name\": \"Zebra VESA dr\u017e\u00e1k 10\\\"\", \"category\": \"Stojan\", \"description\": \"VESA dr\u017e\u00e1k pro tablet ET401 10\\\" (n\u00e1st\u011bnn\u00e1 nebo stoln\u00ed mont\u00e1\u017e)\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"image\": \"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-stand-zbk-vesa-10.jpg\", \"sku\": \"ZBK-ET4X-10VESA-01\", \"offers\": {\"@type\": \"Offer\", \"price\": 6000, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 6000, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 6, \"item\": {\"@type\": \"Product\", \"name\": \"AlzaErgo Arm S25B\", \"category\": \"Stojan\", \"description\": \"Stojan \/ dr\u017e\u00e1k pro recep\u010dn\u00ed kiosek aReception.ai.\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"sku\": \"AlzaErgo Arm S25B\", \"offers\": {\"@type\": \"Offer\", \"price\": 3000, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 3000, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 7, \"item\": {\"@type\": \"Product\", \"name\": \"RAM stojan mal\u00fd\", \"category\": \"Stojan\", \"description\": \"Stojan \/ dr\u017e\u00e1k pro recep\u010dn\u00ed kiosek aReception.ai.\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"sku\": \"RAL-STAND-ZE-KC50-S\", \"offers\": {\"@type\": \"Offer\", \"price\": 6000, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 6000, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 8, \"item\": {\"@type\": \"Product\", \"name\": \"RAM stojan velk\u00fd\", \"category\": \"Stojan\", \"description\": \"Stojan \/ dr\u017e\u00e1k pro recep\u010dn\u00ed kiosek aReception.ai.\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"sku\": \"RAL-STAND-ZE-KC50-L\", \"offers\": {\"@type\": \"Offer\", \"price\": 9000, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 9000, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 9, \"item\": {\"@type\": \"Product\", \"name\": \"Havis stojan vrchn\u00ed\", \"category\": \"Stojan\", \"description\": \"Stojan \/ dr\u017e\u00e1k pro recep\u010dn\u00ed kiosek aReception.ai.\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"sku\": \"3PTY-SC-2000-CF1-01\", \"offers\": {\"@type\": \"Offer\", \"price\": 12300, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 12300, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 10, \"item\": {\"@type\": \"Product\", \"name\": \"Havis stojan vrchn\u00ed + prost\u0159edn\u00ed \u010d\u00e1st\", \"category\": \"Stojan\", \"description\": \"Stojan \/ dr\u017e\u00e1k pro recep\u010dn\u00ed kiosek aReception.ai.\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"sku\": \"3PTY-SC-2000-CF1-01 + 3PTY-SC-2000-R1-01\", \"offers\": {\"@type\": \"Offer\", \"price\": 19500, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 19500, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 11, \"item\": {\"@type\": \"Product\", \"name\": \"Havis vrchn\u00ed + prost\u0159edn\u00ed s tisk\u00e1rnou\", \"category\": \"Stojan\", \"description\": \"obsahuje m\u00edsto pro Epson tisk\u00e1rnu\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"sku\": \"3PTY-SC-2000-CF1-01 + 3PTY-SC-2000-PE-02\", \"offers\": {\"@type\": \"Offer\", \"price\": 21500, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 21500, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 12, \"item\": {\"@type\": \"Product\", \"name\": \"Havis stojan vrchn\u00ed + spodn\u00ed \u010d\u00e1st\", \"category\": \"Stojan\", \"description\": \"Stojan \/ dr\u017e\u00e1k pro recep\u010dn\u00ed kiosek aReception.ai.\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"sku\": \"3PTY-SC-2000-CF1-01 + 3PTY-SC-2000-PB1-01\", \"offers\": {\"@type\": \"Offer\", \"price\": 42600, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 42600, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 13, \"item\": {\"@type\": \"Product\", \"name\": \"Havis vrchn\u00ed + prost\u0159edn\u00ed + spodn\u00ed (full-height)\", \"category\": \"Stojan\", \"description\": \"Stojan \/ dr\u017e\u00e1k pro recep\u010dn\u00ed kiosek aReception.ai.\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"sku\": \"3PTY-SC-2000-CF1-01 + 3PTY-SC-2000-R1-01 + 3PTY-SC-2000-PB1-01\", \"offers\": {\"@type\": \"Offer\", \"price\": 49800, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 49800, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 14, \"item\": {\"@type\": \"Product\", \"name\": \"Havis vrchn\u00ed + prost\u0159edn\u00ed s tisk\u00e1rnou + spodn\u00ed (full-height)\", \"category\": \"Stojan\", \"description\": \"obsahuje m\u00edsto pro Epson tisk\u00e1rnu\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"sku\": \"3PTY-SC-2000-CF1-01 + 3PTY-SC-2000-PE-02 + 3PTY-SC-2000-PB1-01\", \"offers\": {\"@type\": \"Offer\", \"price\": 51800, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 51800, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 15, \"item\": {\"@type\": \"Product\", \"name\": \"Tisk\u00e1rna Epson TM-T88VII\", \"category\": \"P\u0159\u00edslu\u0161enstv\u00ed\", \"description\": \"do prost\u0159edn\u00edho Havis stojanu PE-02\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"image\": \"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-addon-epson-printer.png\", \"sku\": \"C31CJ57132 + p\u0159\u00edslu\u0161enstv\u00ed\", \"offers\": {\"@type\": \"Offer\", \"price\": 11800, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 11800, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 16, \"item\": {\"@type\": \"Product\", \"name\": \"HID \u010dte\u010dka OP, PAS\", \"category\": \"P\u0159\u00edslu\u0161enstv\u00ed\", \"description\": \"v\u010detn\u011b Mikrotik a Raspberry Pi\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"image\": \"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-addon-ocr315e.png\", \"sku\": \"OCR315-E + Mikrotik + Raspberry Pi + p\u0159\u00edslu\u0161enstv\u00ed\", \"offers\": {\"@type\": \"Offer\", \"price\": 21000, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 21000, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 17, \"item\": {\"@type\": \"Product\", \"name\": \"ExtHUB s 1 v\u00fddejn\u00edkem karet\", \"category\": \"P\u0159\u00edslu\u0161enstv\u00ed\", \"description\": \"Voliteln\u00e9 p\u0159\u00edslu\u0161enstv\u00ed k recep\u010dn\u00edmu kiosku.\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"image\": \"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-exthub-1.jpg\", \"sku\": \"EXT-HUB-DSPN-1\", \"offers\": {\"@type\": \"Offer\", \"price\": 45000, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 45000, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 18, \"item\": {\"@type\": \"Product\", \"name\": \"ExtHUB se 2 v\u00fddejn\u00edky karet\", \"category\": \"P\u0159\u00edslu\u0161enstv\u00ed\", \"description\": \"Voliteln\u00e9 p\u0159\u00edslu\u0161enstv\u00ed k recep\u010dn\u00edmu kiosku.\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"image\": \"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-exthub-2.jpg\", \"sku\": \"EXT-HUB-DSPN-2\", \"offers\": {\"@type\": \"Offer\", \"price\": 55000, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 55000, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 19, \"item\": {\"@type\": \"Product\", \"name\": \"ExtHUB se 3 v\u00fddejn\u00edky karet\", \"category\": \"P\u0159\u00edslu\u0161enstv\u00ed\", \"description\": \"Voliteln\u00e9 p\u0159\u00edslu\u0161enstv\u00ed k recep\u010dn\u00edmu kiosku.\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"image\": \"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-exthub-3-1.jpg\", \"sku\": \"EXT-HUB-DSPN-3\", \"offers\": {\"@type\": \"Offer\", \"price\": 65000, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 65000, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}, {\"@type\": \"ListItem\", \"position\": 20, \"item\": {\"@type\": \"Product\", \"name\": \"ExtHUB s 1 v\u00fddejn\u00edkem + Zebra ZD411 tisk\u00e1rnou\", \"category\": \"P\u0159\u00edslu\u0161enstv\u00ed\", \"description\": \"Voliteln\u00e9 p\u0159\u00edslu\u0161enstv\u00ed k recep\u010dn\u00edmu kiosku.\", \"brand\": {\"@type\": \"Brand\", \"name\": \"aReception.ai\"}, \"image\": \"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-exthub-1-zd411-hub.jpg\", \"sku\": \"EXT-HUB-DSPN-1 + ZD411\", \"offers\": {\"@type\": \"Offer\", \"price\": 80000, \"priceCurrency\": \"CZK\", \"priceSpecification\": {\"@type\": \"UnitPriceSpecification\", \"price\": 80000, \"priceCurrency\": \"CZK\", \"valueAddedTaxIncluded\": false}, \"availability\": \"https:\/\/schema.org\/InStock\", \"seller\": {\"@type\": \"Organization\", \"name\": \"aReception.ai\"}}}}]}<\/script>\n<script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"BreadcrumbList\", \"itemListElement\": [{\"@type\": \"ListItem\", \"position\": 1, \"name\": \"Dom\u016f\", \"item\": \"https:\/\/www.areception.ai\/cs\/\"}, {\"@type\": \"ListItem\", \"position\": 2, \"name\": \"Konfigur\u00e1tor\", \"item\": \"https:\/\/www.areception.ai\/cs\/konfigurator\/\"}]}<\/script>\n<style>\n  \/* === Brand tokens (per .claude\/rules\/WP_ELEMENTOR.md \u00a716) === *\/\n  .kfg-wrap {\n    --brand:       #7E29FF;\n    --brand-600:   #6E0EFF;\n    --brand-700:   #4800B8;\n    --brand-vivid: #C122FF;\n    --brand-50:    #F9F5FF;\n    --brand-100:   #EDE3FF;\n    --ink-0:       #200052;\n    --ink-1:       #2B1E5C;\n    --ink-2:       #4A3A75;\n    --ink-3:       #68646E;\n    --ink-4:       #9594A0;\n    --ink-5:       #D8CFF0;\n    --paper:       #FAFAFA;\n    --paper-2:     #F4F0FA;\n    --line:        #E8E0F5;\n    --line-2:      #D8CFF0;\n    --ok:          #16a34a;\n    --warn-bg:     #FFF6E0;\n    --warn-ink:    #6B4A00;\n    --radius:      14px;\n    --radius-lg:   22px;\n    --radius-xl:   28px;\n    --font-mono:   'IBM Plex Mono', ui-monospace, 'SFMono-Regular', monospace;\n  }\n\n  \/* === Full-bleed breakout from theme container === *\/\n  .kfg-wrap {\n    font-family: 'Poppins', -apple-system, system-ui, sans-serif;\n    color: var(--ink-0);\n    background: var(--paper);\n    margin-left: calc(-50vw + 50%); margin-right: calc(-50vw + 50%);\n    padding: 48px 24px 0;\n    min-height: 100vh;\n    line-height: 1.5;\n    -webkit-font-smoothing: antialiased;\n  }\n  .kfg-wrap * { box-sizing: border-box; }\n  .kfg-inner { max-width: 1240px; margin: 0 auto; }\n  .kfg-mono { font-family: var(--font-mono); }\n\n  \/* Hide WP page title (theme entry-header) *\/\n  body.page .entry-title, body.page .entry-header h1.entry-title { display: none !important; }\n\n  \/* === Hero === *\/\n  .kfg-hero { text-align: center; padding: 16px 0 28px; }\n  .kfg-eyebrow {\n    display: inline-flex; align-items: center; gap: 8px;\n    padding: 6px 14px 6px 8px; border-radius: 999px;\n    background: #fff; border: 1px solid var(--line);\n    color: var(--ink-3); font-size: 12px; font-weight: 500;\n    margin-bottom: 18px;\n  }\n  .kfg-eyebrow-pulse {\n    width: 16px; height: 16px; border-radius: 999px;\n    background: var(--brand-50);\n    display: inline-flex; align-items: center; justify-content: center;\n  }\n  .kfg-eyebrow-pulse::before {\n    content: \"\"; width: 6px; height: 6px;\n    background: var(--brand); border-radius: 999px;\n    box-shadow: 0 0 0 0 rgba(126,41,255,.6);\n    animation: kfgPulse 2s infinite;\n  }\n  @keyframes kfgPulse {\n    0%,100% { box-shadow: 0 0 0 0 rgba(126,41,255,.5); }\n    50%     { box-shadow: 0 0 0 6px rgba(126,41,255,0); }\n  }\n  \/* H1 typografie matchnuta s \/cs\/cenik (General Sans 500 72px, mixed-color via span) *\/\n  .kfg-wrap h1 {\n    font-family: 'General Sans', 'Poppins', sans-serif;\n    font-weight: 500; font-size: clamp(36px, 6vw, 72px);\n    letter-spacing: normal; line-height: 1.17;\n    margin: 0 0 18px; color: var(--ink-0);\n  }\n  .kfg-wrap h1 .kfg-h1-accent {\n    color: #4800B8;\n  }\n  \/* Subtitle matchnut s \/cs\/cenik (Poppins 17px 400) *\/\n  .kfg-hero p {\n    max-width: 620px; margin: 0 auto;\n    color: var(--ink-0); font-size: 17px; line-height: 1.5;\n    font-weight: 400;\n  }\n  .kfg-hero p strong { font-weight: 700; }\n  .kfg-notice {\n    margin: 28px auto 0; max-width: 720px;\n    display: flex; gap: 10px; align-items: flex-start;\n    padding: 12px 16px; border-radius: var(--radius);\n    background: var(--warn-bg); border: 1px solid #F3E0A8;\n    color: var(--warn-ink); font-size: 13px; text-align: left;\n  }\n  .kfg-notice svg { flex-shrink: 0; margin-top: 1px; }\n  .kfg-notice strong { color: #483100; font-weight: 700; }\n  .kfg-notice a { color: var(--brand-700); text-decoration: underline; }\n\n  \/* === Section header === *\/\n  .kfg-section { padding: 32px 0; }\n  .kfg-section-head {\n    display: flex; align-items: flex-end; gap: 16px;\n    justify-content: space-between; margin-bottom: 24px;\n    flex-wrap: wrap;\n  }\n  .kfg-section-head .left { max-width: 640px; }\n  .kfg-section-step {\n    display: inline-flex; align-items: center; gap: 8px;\n    font-size: 12px; font-weight: 600;\n    color: var(--brand-700);\n    letter-spacing: 0.06em; text-transform: uppercase;\n    margin-bottom: 8px;\n  }\n  .kfg-section-step .n {\n    display: inline-flex; align-items: center; justify-content: center;\n    width: 22px; height: 22px; border-radius: 999px;\n    background: var(--brand-50); color: var(--brand-700);\n    font-family: var(--font-mono); font-weight: 600; font-size: 11px;\n  }\n  .kfg-wrap h2 {\n    font-family: 'Poppins', sans-serif;\n    font-weight: 800; font-size: clamp(26px, 3vw, 32px);\n    letter-spacing: -0.025em; line-height: 1.2;\n    margin: 0 0 6px; color: var(--ink-0);\n  }\n  .kfg-section-head p { margin: 0; color: var(--ink-3); font-size: 15px; }\n\n  \/* === Presets, vertical stack per Claude Design v2 === *\/\n  .kfg-presets {\n    display: flex; flex-direction: column; gap: 10px;\n  }\n\n  \/* Preset card: icon (44) | body (1fr) | price (auto) *\/\n  .kfg-wrap button.kfg-preset {\n    appearance: none !important; -webkit-appearance: none !important;\n    text-align: left !important;\n    background: #fff !important;\n    border: 1.5px solid var(--line) !important;\n    border-radius: var(--radius-lg) !important;\n    padding: 20px 22px !important; margin: 0 !important;\n    display: grid !important;\n    grid-template-columns: 44px 1fr auto !important;\n    gap: 18px !important;\n    align-items: center !important;\n    cursor: pointer;\n    color: var(--ink-0) !important;\n    font-family: 'Poppins', sans-serif !important;\n    font-size: 14px !important; line-height: 1.45 !important;\n    white-space: normal !important;\n    transition: all 160ms cubic-bezier(.2,.7,.2,1);\n    box-shadow: none !important;\n    position: relative; overflow: hidden;\n    width: 100% !important;\n  }\n  .kfg-wrap button.kfg-preset * { white-space: normal !important; }\n  .kfg-wrap button.kfg-preset .kfg-preset-best { white-space: nowrap !important; }\n  .kfg-wrap button.kfg-preset .kfg-preset-tag { white-space: nowrap !important; }\n  .kfg-wrap button.kfg-preset .kfg-preset-price,\n  .kfg-wrap button.kfg-preset .kfg-preset-price * { white-space: nowrap !important; }\n  .kfg-wrap button.kfg-preset:hover { border-color: var(--brand-100) !important; }\n  .kfg-wrap button.kfg-preset.active {\n    border-color: var(--brand) !important;\n    background: var(--brand-50) !important;\n    box-shadow: 0 0 0 4px rgba(126,41,255,.08) !important;\n  }\n  .kfg-preset-icon {\n    width: 44px; height: 44px; border-radius: 12px;\n    background: var(--paper-2);\n    display: flex; align-items: center; justify-content: center;\n    color: var(--ink-1);\n    flex-shrink: 0;\n  }\n  .kfg-wrap button.kfg-preset.active .kfg-preset-icon {\n    background: #fff; color: var(--brand-700);\n  }\n  .kfg-preset-body { min-width: 0; }\n  .kfg-wrap button.kfg-preset h3 {\n    font-family: 'Poppins', sans-serif !important;\n    font-weight: 700 !important; font-size: 17px !important;\n    letter-spacing: -0.015em !important;\n    margin: 0 0 4px !important; color: var(--ink-0) !important;\n    display: flex !important; align-items: center !important; gap: 8px !important;\n    flex-wrap: wrap !important; line-height: 1.25 !important;\n    word-break: normal !important; hyphens: none !important;\n  }\n  .kfg-preset-best {\n    font-size: 9.5px !important; padding: 2px 6px !important;\n    background: var(--ink-0) !important; color: white !important;\n    border-radius: 5px !important;\n    letter-spacing: 0.04em !important; text-transform: uppercase !important;\n    font-weight: 600 !important;\n    white-space: nowrap !important;\n  }\n  .kfg-wrap button.kfg-preset p {\n    margin: 0 0 8px !important; font-size: 13px !important; font-weight: 400 !important;\n    color: var(--ink-2) !important; line-height: 1.5 !important;\n    word-break: normal !important; hyphens: none !important;\n  }\n  .kfg-preset-tags {\n    display: flex; flex-wrap: wrap; gap: 5px;\n  }\n  .kfg-preset-tag {\n    font-size: 11px; padding: 2px 8px; border-radius: 5px;\n    background: var(--paper-2); color: var(--ink-2); font-weight: 500;\n  }\n  .kfg-wrap button.kfg-preset.active .kfg-preset-tag {\n    background: #fff; color: var(--brand-700);\n  }\n  .kfg-preset-price {\n    text-align: right; white-space: nowrap;\n    display: flex; flex-direction: column; gap: 2px;\n  }\n  .kfg-preset-price .from { color: var(--ink-3); font-weight: 500; font-size: 11px; }\n  .kfg-preset-price strong {\n    font-family: var(--font-mono); font-weight: 600; font-size: 16px;\n    color: var(--ink-0); letter-spacing: -0.02em;\n  }\n  @media (max-width: 560px) {\n    .kfg-wrap button.kfg-preset { grid-template-columns: 1fr !important; gap: 12px !important; }\n    .kfg-preset-price { text-align: left; flex-direction: row; align-items: baseline; gap: 6px; }\n  }\n\n  \/* OR divider between PATH sections *\/\n  .kfg-or-divider {\n    display: flex; align-items: center; gap: 16px;\n    color: var(--ink-4); font-size: 12px; letter-spacing: 0.12em;\n    text-transform: uppercase; font-weight: 600;\n    margin: 24px 0 16px;\n  }\n  .kfg-or-divider::before, .kfg-or-divider::after {\n    content: \"\"; flex: 1; height: 1px;\n    background: linear-gradient(90deg, transparent, var(--line-2), transparent);\n  }\n\n  \/* === Needs cards 2-col grid (per Claude Design v2) === *\/\n  .kfg-needs-grid {\n    display: grid; grid-template-columns: 1fr 1fr; gap: 8px;\n  }\n  @media (max-width: 720px) { .kfg-needs-grid { grid-template-columns: 1fr; } }\n  .kfg-wrap button.kfg-need-card {\n    appearance: none !important; -webkit-appearance: none !important;\n    display: grid !important;\n    grid-template-columns: 32px 1fr 20px !important;\n    gap: 12px !important; align-items: center !important;\n    padding: 12px 14px !important;\n    border: 1.5px solid var(--line) !important;\n    border-radius: 12px !important;\n    background: #fff !important;\n    font-family: 'Poppins', sans-serif !important;\n    font-size: 13.5px !important; font-weight: 500 !important;\n    color: var(--ink-1) !important;\n    text-align: left !important;\n    cursor: pointer; transition: all 140ms;\n    margin: 0 !important; box-shadow: none !important;\n    width: 100% !important;\n    white-space: normal !important;\n  }\n  .kfg-wrap button.kfg-need-card:hover { border-color: var(--brand-100) !important; }\n  .kfg-wrap button.kfg-need-card.on {\n    background: var(--brand-50) !important;\n    border-color: var(--brand) !important;\n    box-shadow: 0 0 0 3px rgba(126,41,255,0.06) !important;\n  }\n  .kfg-need-icon {\n    width: 32px; height: 32px; border-radius: 8px;\n    background: var(--paper-2);\n    display: flex; align-items: center; justify-content: center;\n    color: var(--ink-1);\n  }\n  .kfg-wrap button.kfg-need-card.on .kfg-need-icon {\n    background: #fff; color: var(--brand);\n  }\n  .kfg-need-icon svg { width: 16px; height: 16px; }\n  .kfg-need-checkbox {\n    width: 20px; height: 20px; border-radius: 6px;\n    border: 1.5px solid var(--ink-5);\n    background: #fff; position: relative;\n    transition: all 140ms;\n  }\n  .kfg-wrap button.kfg-need-card.on .kfg-need-checkbox {\n    border-color: var(--brand); background: var(--brand);\n  }\n  .kfg-wrap button.kfg-need-card.on .kfg-need-checkbox::after {\n    content: \"\"; position: absolute;\n    left: 6px; top: 2px; width: 6px; height: 10px;\n    border-right: 2px solid #fff; border-bottom: 2px solid #fff;\n    transform: rotate(45deg);\n  }\n\n  \/* === Configurator shell, 2-col (LEFT preview sticky + RIGHT 3-PATH selection) === *\/\n  .kfg-config {\n    display: grid;\n    grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr);\n    gap: 56px; align-items: start;\n    padding: 32px 0 24px;\n  }\n  @media (max-width: 1024px) {\n    .kfg-config { grid-template-columns: 1fr; gap: 32px; }\n  }\n\n  \/* RIGHT column container *\/\n  .kfg-right { display: flex; flex-direction: column; gap: 12px; }\n\n  \/* PATH section header (eyebrow + h2 + subtitle) *\/\n  .kfg-path { scroll-margin-top: 88px; }\n  .kfg-path-head { margin-bottom: 18px; }\n  .kfg-path-head .kfg-section-step { margin-bottom: 6px; }\n  .kfg-path-head h2 {\n    font-family: 'Poppins', sans-serif !important;\n    font-weight: 700 !important; font-size: 22px !important;\n    letter-spacing: -0.02em !important; line-height: 1.2;\n    margin: 0 0 4px !important; color: var(--ink-0) !important;\n  }\n  .kfg-path-head p {\n    margin: 0; color: var(--ink-3); font-size: 14px;\n    line-height: 1.5; max-width: 540px;\n  }\n\n  \/* PATH C collapsible (Hardware na m\u00edru) \u2014 CBO 2026-06-03, default sbalen\u00e9 *\/\n  details.kfg-path-collapsible {\n    border: 1px solid var(--line-2); border-radius: 18px;\n    background: #fff; overflow: hidden; margin-bottom: 4px;\n    transition: border-color 160ms, box-shadow 160ms;\n  }\n  details.kfg-path-collapsible[open] {\n    border-color: var(--line-3, #D8CFF0);\n    box-shadow: 0 14px 40px -22px rgba(126,41,255,0.26);\n  }\n  summary.kfg-path-summary {\n    list-style: none; cursor: pointer; user-select: none;\n    display: flex; align-items: center; gap: 16px;\n    padding: 20px 22px; margin: 0;\n    transition: background 140ms;\n  }\n  summary.kfg-path-summary::-webkit-details-marker { display: none; }\n  summary.kfg-path-summary:hover { background: var(--brand-50, #F9F5FF); }\n  summary.kfg-path-summary .kfg-summary-text { flex: 1; min-width: 0; }\n  summary.kfg-path-summary h2 { margin: 0 0 2px !important; }\n  summary.kfg-path-summary p { margin: 0; }\n  \/* Expand\/collapse pill on the right *\/\n  .kfg-expand-chip {\n    flex: 0 0 auto; display: inline-flex; align-items: center; gap: 7px;\n    padding: 8px 14px; border-radius: 999px;\n    border: 1px solid var(--line-2); background: #fff;\n    font-family: 'Poppins', sans-serif; font-size: 12.5px; font-weight: 600;\n    color: var(--brand, #7E29FF); white-space: nowrap;\n  }\n  \/* Label text via pseudo-element so it flips Rozbalit \u2194 Sbalit on open (CBO 2026-06-10) *\/\n  .kfg-expand-chip::before { content: \"Rozbalit\"; }\n  details[open] .kfg-expand-chip::before { content: \"Sbalit\"; }\n  .kfg-expand-chip::after {\n    content: \"\"; width: 8px; height: 8px;\n    border-right: 2px solid currentColor; border-bottom: 2px solid currentColor;\n    transform: rotate(45deg) translate(-1px, -1px);\n    transition: transform 180ms;\n  }\n  details[open] .kfg-expand-chip::after { transform: rotate(-135deg) translate(-1px, -1px); }\n  details[open] .kfg-expand-chip { color: var(--ink-3); }\n  .kfg-path-c-body { padding: 4px 22px 24px; }\n  @media (max-width: 640px) {\n    summary.kfg-path-summary { padding: 16px; gap: 10px; }\n    .kfg-path-c-body { padding: 4px 16px 18px; }\n    .kfg-expand-chip { padding: 7px 11px; font-size: 11.5px; }\n  }\n\n  \/* Reset button (now inside preview-info, not section header) *\/\n  .kfg-wrap button.kfg-reset {\n    appearance: none !important; -webkit-appearance: none !important;\n    border: 1px solid var(--line-2) !important;\n    background: #fff !important; color: var(--ink-0) !important;\n    padding: 6px 12px !important; border-radius: 999px !important;\n    font-family: 'Poppins', sans-serif !important;\n    font-size: 12px !important; font-weight: 600 !important;\n    display: inline-flex !important; align-items: center !important; gap: 6px !important;\n    cursor: pointer; transition: all 140ms; box-shadow: none !important;\n    margin: 0 !important; align-self: center !important;\n  }\n  .kfg-wrap button.kfg-reset:hover { border-color: var(--ink-3) !important; }\n\n  \/* === Preview card (sticky left) === *\/\n  \/* CBO 2026-05-24 v10 \u2014 revert thumbs back UNDER photo (CBO: \"Ty nahedove obrazky se mi vice libili kdyz byly pod hlavnim obrazkem, jen at jsou vsechny videt\"). *\/\n  .kfg-preview {\n    position: sticky; top: 90px;\n    background: #fff; border: 1px solid var(--line);\n    border-radius: var(--radius-xl);\n    padding: 28px; overflow: hidden;\n  }\n  @media (max-width: 980px) { .kfg-preview { position: static; padding: 20px; } }\n\n  .kfg-photo {\n    aspect-ratio: 1 \/ 1;\n    background: linear-gradient(180deg, #F8F6FF 0%, #F0EBFF 100%);\n    border-radius: var(--radius-lg);\n    display: flex; align-items: center; justify-content: center;\n    overflow: hidden;\n    padding: 40px;\n    cursor: zoom-in;\n    position: relative;\n  }\n  \/* LSCache + QUIC.cloud wraps <img> into <picture>, size both *\/\n  .kfg-photo > picture, .kfg-photo > img {\n    width: 100%; height: 100%;\n    display: flex; align-items: center; justify-content: center;\n  }\n  .kfg-photo img {\n    max-width: 100%; max-height: 100%;\n    object-fit: contain;\n    transition: opacity .25s ease, transform .35s ease;\n    filter: drop-shadow(0 12px 24px rgba(32,0,82,.15));\n  }\n  .kfg-photo.swapping img { opacity: 0; transform: scale(.96); }\n  .kfg-photo:hover img { transform: scale(1.02); }\n  \/* Empty state after reset (CBO 2026-06-10) \u2014 no image, placeholder hint, no zoom *\/\n  .kfg-photo.kfg-empty { cursor: default; }\n  .kfg-photo.kfg-empty > img, .kfg-photo.kfg-empty > picture { display: none; }\n  .kfg-photo.kfg-empty::after {\n    content: \"Vyberte za\u0159\u00edzen\u00ed nebo zvolte doporu\u010denou sestavu\";\n    color: var(--ink-3); font-family: 'Poppins', sans-serif;\n    font-size: 14px; line-height: 1.5; text-align: center; max-width: 260px;\n  }\n\n  \/* View Transitions API (Baseline 2024, 93.5% coverage), smooth crossfade *\/\n  ::view-transition-old(kfg-main-photo),\n  ::view-transition-new(kfg-main-photo) {\n    animation-duration: 0.35s;\n    animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  }\n  ::view-transition-old(kfg-zoomable-img),\n  ::view-transition-new(kfg-zoomable-img) {\n    animation-duration: 0.45s;\n    animation-timing-function: cubic-bezier(0.32, 0, 0.16, 1);\n  }\n  .kfg-photo { contain: layout; }\n  \/* CBO 2026-06-10: only the hero image cross-fades. The preset-highlight \/ summary \/\n     total view-transition-names were REMOVED \u2014 their morph\/bounce made the preview look\n     like it \"shifted up\/down\" when switching between adjacent presets (office \u2194 industrial). *\/\n  #kfgPhotoImg img { view-transition-name: kfg-zoomable-img; }\n  #kfgTotal { display: inline-block; }\n  .kfg-lightbox.active #kfgLightboxImg { view-transition-name: kfg-zoomable-img; }\n  @media (prefers-reduced-motion: reduce) {\n    ::view-transition-old(*), ::view-transition-new(*) { animation-duration: 0.01s; }\n  }\n\n  \/* Lightbox modal, jen n\u00e1dech fialov\u00e9 (CBO 2026-05-21 v3: foto = priorita) *\/\n  .kfg-lightbox {\n    position: fixed; inset: 0; z-index: 99999;\n    background: rgba(126, 41, 255, 0.10);\n    backdrop-filter: blur(18px) saturate(105%);\n    -webkit-backdrop-filter: blur(18px) saturate(105%);\n    display: none;\n    align-items: center; justify-content: center;\n    padding: 24px; cursor: zoom-out;\n    opacity: 0; transition: opacity .25s ease;\n  }\n  .kfg-lightbox.active { display: flex; opacity: 1; }\n  .kfg-lightbox img {\n    max-width: 92vw; max-height: 92vh;\n    object-fit: contain; border-radius: 12px;\n    box-shadow: 0 40px 80px -20px rgba(0,0,0,0.5);\n    transform: scale(0.96); transition: transform .25s ease;\n  }\n  .kfg-lightbox.active img { transform: scale(1); }\n  .kfg-lightbox-close {\n    position: absolute; top: 24px; right: 32px;\n    width: 44px; height: 44px;\n    background: rgba(32, 0, 82, 0.65);\n    border: 1px solid rgba(255,255,255,0.4);\n    border-radius: 50%; color: #fff;\n    font-size: 24px; font-weight: 300; line-height: 1;\n    cursor: pointer;\n    display: flex; align-items: center; justify-content: center;\n    transition: background .2s ease;\n    backdrop-filter: blur(8px);\n  }\n  .kfg-lightbox-close:hover { background: rgba(32, 0, 82, 0.85); }\n  .kfg-lightbox-caption {\n    position: absolute; bottom: 24px; left: 50%; transform: translateX(-50%);\n    color: var(--ink-0);\n    font-size: 14px; padding: 8px 18px;\n    background: rgba(255,255,255,0.85);\n    border: 1px solid var(--line);\n    border-radius: 20px; backdrop-filter: blur(6px);\n    max-width: calc(100% - 100px); text-align: center;\n    font-weight: 600;\n  }\n  @media (max-width: 768px) {\n    .kfg-lightbox img { max-width: 96vw; max-height: 85vh; }\n    .kfg-lightbox-close { top: 16px; right: 16px; width: 40px; height: 40px; }\n  }\n\n  \/* Thumb gallery (CBO 2026-05-24 v10: under photo, all visible, wrap to multi-row) *\/\n  .kfg-thumbs {\n    display: none;\n    margin-top: 14px;\n    gap: 8px;\n    flex-wrap: wrap;\n    padding-bottom: 4px;\n  }\n  .kfg-thumbs.has-gallery { display: flex; }\n  .kfg-wrap button.kfg-thumb {\n    appearance: none !important; -webkit-appearance: none !important;\n    width: 64px !important; height: 64px !important;\n    flex: 0 0 64px !important;\n    border-radius: 10px !important;\n    background: var(--paper-2) !important;\n    border: 2px solid transparent !important;\n    cursor: pointer; padding: 6px !important; margin: 0 !important;\n    display: flex !important; align-items: center !important; justify-content: center !important;\n    transition: all 140ms;\n    box-shadow: none !important; color: inherit !important;\n    font: inherit !important;\n  }\n  .kfg-wrap button.kfg-thumb:hover { border-color: var(--ink-5) !important; }\n  .kfg-wrap button.kfg-thumb.active {\n    border-color: var(--brand) !important; background: #fff !important;\n  }\n  .kfg-wrap button.kfg-thumb img {\n    max-width: 100%; max-height: 100%;\n    object-fit: contain;\n  }\n\n  \/* Dots+arrows gallery *\/\n  .kfg-dots-bar {\n    display: none;\n    margin-top: 14px;\n    align-items: center; justify-content: center; gap: 12px;\n  }\n  .kfg-dots-bar.has-gallery { display: flex; }\n  .kfg-wrap button.kfg-arrow {\n    appearance: none !important; -webkit-appearance: none !important;\n    width: 32px !important; height: 32px !important;\n    border-radius: 999px !important;\n    border: 1px solid var(--line) !important;\n    background: #fff !important;\n    color: var(--ink-0) !important;\n    font-size: 16px !important; font-weight: 600 !important;\n    cursor: pointer; padding: 0 !important; margin: 0 !important;\n    display: inline-flex !important; align-items: center !important; justify-content: center !important;\n    transition: all 140ms;\n    box-shadow: none !important; font-family: inherit !important;\n  }\n  .kfg-wrap button.kfg-arrow:hover { border-color: var(--brand) !important; color: var(--brand) !important; }\n  .kfg-wrap button.kfg-arrow:disabled { opacity: 0.3; cursor: not-allowed; }\n  .kfg-dots { display: flex; gap: 6px; }\n  .kfg-wrap button.kfg-dot {\n    appearance: none !important; -webkit-appearance: none !important;\n    width: 8px !important; height: 8px !important;\n    border-radius: 999px !important;\n    background: var(--line-2) !important;\n    border: none !important;\n    cursor: pointer; padding: 0 !important; margin: 0 !important;\n    transition: all 140ms;\n    box-shadow: none !important; font: inherit !important;\n  }\n  .kfg-wrap button.kfg-dot.active {\n    background: var(--brand) !important; width: 24px !important;\n  }\n\n  \/* Preview info (label + name on left, reset button on right) *\/\n  .kfg-preview-info {\n    margin-top: 16px;\n    display: flex; justify-content: space-between; align-items: center; gap: 12px;\n    padding: 0 4px;\n  }\n  .kfg-preview-info .label {\n    font-size: 12px; color: var(--ink-3); letter-spacing: 0.04em;\n    display: block;\n  }\n  .kfg-preview-info h4 {\n    margin: 2px 0 0;\n    font-family: 'Poppins', sans-serif;\n    font-weight: 700; font-size: 15px; letter-spacing: -0.015em;\n    color: var(--ink-0);\n  }\n  .kfg-preview-info .sub {\n    font-family: var(--font-mono); font-size: 11px; color: var(--ink-4);\n    word-break: break-word; margin-top: 2px;\n  }\n\n  .kfg-live {\n    margin-top: 18px;\n    padding: 14px 16px;\n    border: 1px dashed var(--line-2);\n    border-radius: var(--radius);\n    background: var(--paper);\n  }\n  .kfg-live h5 {\n    margin: 0 0 8px; font-size: 11px; letter-spacing: 0.08em;\n    font-weight: 700; color: var(--ink-3); text-transform: uppercase;\n  }\n  .kfg-live-row {\n    display: flex; justify-content: space-between; align-items: baseline;\n    font-size: 13px; padding: 6px 0;\n    border-bottom: 1px dotted var(--line); gap: 12px;\n  }\n  .kfg-live-row:last-child { border-bottom: none; }\n  .kfg-live-row .k { color: var(--ink-3); }\n  .kfg-live-row .v {\n    font-weight: 600; color: var(--ink-0);\n    font-family: var(--font-mono); white-space: nowrap;\n  }\n  \/* v9 fix #4: bundled items (PWR + DC cable for ET401) show \"v cen\u011b\" tag instead of 0 K\u010d *\/\n  .kfg-live-row .bundled-tag {\n    display: inline-block; padding: 2px 8px; border-radius: 999px;\n    background: var(--brand-50); color: var(--brand-700);\n    font-family: 'Poppins', sans-serif; font-size: 10.5px;\n    font-weight: 600; letter-spacing: 0.03em;\n  }\n\n  \/* === Right column: step cards === *\/\n  .kfg-steps { display: flex; flex-direction: column; gap: 18px; }\n  .kfg-step {\n    background: #fff; border: 1px solid var(--line);\n    border-radius: var(--radius-xl); overflow: hidden;\n  }\n  .kfg-step.hidden-by-device { display: none; }\n  \/* v10 \u2014 hide entire sub-section + its sub-head when kiosek's allows array excludes it *\/\n  .kfg-sub-head.hidden-by-device,\n  .kfg-opts.hidden-by-device { display: none !important; }\n  .kfg-step-head {\n    padding: 18px 22px 14px;\n    display: flex; align-items: flex-start; gap: 12px;\n    border-bottom: 1px solid var(--line);\n  }\n  .kfg-step-num {\n    width: 28px; height: 28px; flex: 0 0 28px;\n    border-radius: 999px;\n    background: var(--ink-0); color: #fff;\n    font-family: var(--font-mono); font-weight: 600; font-size: 13px;\n    display: inline-flex; align-items: center; justify-content: center;\n    margin-top: 2px;\n  }\n  .kfg-step-head h3 {\n    margin: 0; font-family: 'Poppins', sans-serif;\n    font-weight: 700; font-size: 18px; letter-spacing: -0.015em;\n    color: var(--ink-0);\n  }\n  .kfg-step-head h3 small {\n    color: var(--ink-3); font-weight: 500; font-size: 14px;\n  }\n  .kfg-step-head p { margin: 4px 0 0; font-size: 13px; color: var(--ink-3); }\n\n  .kfg-opts { padding: 8px; display: flex; flex-direction: column; gap: 2px; }\n\n  \/* Option row (radio or checkbox styled as button) *\/\n  .kfg-opt {\n    display: grid;\n    grid-template-columns: 24px 1fr auto;\n    gap: 14px; align-items: center;\n    padding: 14px;\n    border-radius: var(--radius);\n    cursor: pointer;\n    transition: background 140ms;\n    text-align: left;\n    background: none;\n  }\n  .kfg-opt:hover { background: var(--paper-2); }\n  .kfg-opt.kfg-selected { background: var(--brand-50); }\n  .kfg-opt input[type=\"radio\"],\n  .kfg-opt input[type=\"checkbox\"] {\n    position: absolute; opacity: 0; pointer-events: none;\n  }\n  .kfg-radio {\n    width: 18px; height: 18px;\n    border-radius: 999px;\n    border: 1.5px solid var(--ink-5);\n    background: #fff;\n    position: relative;\n    flex: 0 0 18px;\n    transition: all 140ms;\n  }\n  .kfg-radio.square { border-radius: 5px; }\n  .kfg-opt.kfg-selected .kfg-radio {\n    border-color: var(--brand);\n    background: var(--brand);\n  }\n  .kfg-opt.kfg-selected .kfg-radio::after {\n    content: \"\"; position: absolute;\n    inset: 4px; border-radius: 999px;\n    background: #fff;\n  }\n  .kfg-opt.kfg-selected .kfg-radio.square::after { border-radius: 2px; }\n  .kfg-opt-body { min-width: 0; }\n  .kfg-opt-title {\n    font-weight: 600; font-size: 14.5px;\n    color: var(--ink-0);\n    display: flex; align-items: center; gap: 8px; flex-wrap: wrap;\n  }\n  .kfg-opt-badge {\n    font-size: 10px; padding: 2px 6px; border-radius: 5px;\n    background: var(--brand); color: #fff;\n    font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase;\n  }\n  .kfg-opt-badge.rec { background: var(--ok); }\n  .kfg-opt-need-badge {\n    display: none;\n    font-size: 10px; padding: 2px 6px; border-radius: 5px;\n    background: var(--brand); color: #fff;\n    font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase;\n  }\n  .kfg-opt.kfg-recommended .kfg-opt-need-badge { display: inline; }\n  .kfg-opt-skus {\n    display: none;  \/* CBO 2026-06-10: katalogov\u00e1 \u010d\u00edsla skryt\u00e1 (data zachov\u00e1na v HTML\/dictu) *\/\n    font-family: var(--font-mono); font-size: 11px;\n    color: var(--ink-4);\n    margin-top: 3px;\n    word-break: break-all;\n    line-height: 1.4;\n  }\n  .kfg-opt-note {\n    display: block;\n    font-size: 12px; color: var(--ink-3);\n    font-style: italic;\n    margin-top: 4px;\n  }\n  .kfg-opt-price {\n    font-family: var(--font-mono); font-weight: 600;\n    font-size: 14px; color: var(--ink-0);\n    white-space: nowrap;\n  }\n  .kfg-opt-price.free { color: var(--ok); }\n\n  \/* Sub-header inside step (ExtHUB section) *\/\n  .kfg-sub-head {\n    display: flex; align-items: center; gap: 8px;\n    font-size: 11px; font-weight: 700;\n    color: var(--ink-2); letter-spacing: 0.08em;\n    text-transform: uppercase;\n    padding: 14px 14px 8px;\n  }\n  .kfg-sub-head .meta {\n    font-weight: 500; color: var(--ink-4);\n    letter-spacing: 0; text-transform: none;\n  }\n\n  \/* === Dark summary card === *\/\n  .kfg-summary {\n    margin-top: 48px;\n    background: linear-gradient(135deg, #2B1E5C 0%, #200052 100%);\n    color: #fff; border-radius: var(--radius-xl);\n    padding: 32px; position: relative; overflow: hidden;\n  }\n  .kfg-summary::before {\n    content: \"\"; position: absolute;\n    top: -100px; right: -100px;\n    width: 360px; height: 360px;\n    background: radial-gradient(circle, rgba(126,41,255,0.4), transparent 70%);\n    pointer-events: none;\n  }\n  .kfg-summary-grid {\n    display: grid; grid-template-columns: 1fr auto;\n    gap: 24px; align-items: center;\n    position: relative;\n  }\n  @media (max-width: 720px) {\n    .kfg-summary-grid { grid-template-columns: 1fr; }\n  }\n  .kfg-summary-label {\n    font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase;\n    color: rgba(255,255,255,0.65); font-weight: 600;\n  }\n  .kfg-summary-price {\n    display: flex; align-items: baseline; gap: 10px;\n    margin-top: 6px; flex-wrap: wrap;\n  }\n  .kfg-summary-price .big {\n    font-family: 'Poppins', sans-serif;\n    font-weight: 800; font-size: clamp(34px, 4.4vw, 44px);\n    letter-spacing: -0.03em; line-height: 1;\n  }\n  .kfg-summary-price .vat {\n    font-size: 13px; color: rgba(255,255,255,0.65);\n  }\n  \/* Price delta pill, shows +\/- X Kc change when price recalcs (Filip v8) *\/\n  .kfg-price-delta {\n    display: inline-block;\n    font-family: var(--font-mono); font-weight: 600; font-size: 13px;\n    padding: 4px 10px; border-radius: 999px;\n    opacity: 0; transform: translateY(-4px);\n    transition: opacity 0.2s ease, transform 0.3s ease;\n    margin-left: 6px;\n    white-space: nowrap;\n  }\n  .kfg-price-delta.visible { opacity: 1; transform: translateY(0); }\n  .kfg-price-delta.up {\n    background: rgba(193,34,255,0.18);\n    color: #E5C5FF;\n    border: 1px solid rgba(193,34,255,0.35);\n  }\n  .kfg-price-delta.down {\n    background: rgba(22,163,74,0.22);\n    color: #6EE7B7;\n    border: 1px solid rgba(22,163,74,0.40);\n  }\n  @keyframes kfgPriceFlash {\n    0%   { color: #fff; transform: scale(1); }\n    20%  { color: var(--brand-vivid); transform: scale(1.06); }\n    100% { color: #fff; transform: scale(1); }\n  }\n  .kfg-summary-price .big.flash {\n    animation: kfgPriceFlash 0.6s ease;\n  }\n  .kfg-summary-items {\n    margin-top: 18px;\n    display: flex; flex-wrap: wrap; gap: 6px;\n  }\n  .kfg-summary-item {\n    font-size: 12px; padding: 4px 10px;\n    background: rgba(255,255,255,0.1);\n    border-radius: 999px;\n    color: rgba(255,255,255,0.9);\n  }\n  .kfg-summary-actions {\n    display: flex; flex-direction: column; gap: 10px;\n    align-items: stretch; min-width: 240px;\n  }\n  .kfg-wrap a.kfg-btn,\n  .kfg-wrap button.kfg-btn {\n    appearance: none !important; -webkit-appearance: none !important;\n    border: none !important; background: none !important;\n    padding: 14px 22px !important; border-radius: 999px !important;\n    font-family: 'Poppins', sans-serif !important;\n    font-size: 15px !important; font-weight: 600 !important;\n    display: inline-flex !important; align-items: center !important;\n    justify-content: center !important; gap: 8px !important;\n    cursor: pointer; transition: all 140ms;\n    text-decoration: none !important;\n    margin: 0 !important; box-shadow: none !important;\n  }\n  .kfg-wrap a.kfg-btn-brand,\n  .kfg-wrap button.kfg-btn-brand {\n    background: radial-gradient(at bottom left, #6E0EFF 28%, #C122FF 100%) !important;\n    color: #fff !important;\n    box-shadow: 0 3px 32px -3px rgba(168,94,255,0.43) !important;\n  }\n  .kfg-wrap a.kfg-btn-brand:hover,\n  .kfg-wrap button.kfg-btn-brand:hover { filter: brightness(1.05); }\n  .kfg-wrap button.kfg-btn-light {\n    background: rgba(255,255,255,0.12) !important;\n    color: #fff !important;\n    border: 1px solid rgba(255,255,255,0.18) !important;\n    font-size: 14px !important; padding: 12px 18px !important;\n  }\n  .kfg-wrap button.kfg-btn-light:hover { background: rgba(255,255,255,0.2) !important; }\n\n  \/* Floating sticky bar, REMOVED 2026-05-23 (CBO v7: \"Tu plovouci poptat oddelej\") *\/\n\n  \/* === Print stylesheet, kompaktn\u00ed 1xA4 layout, sv\u011btl\u00e9 fialov\u00e9 bloky (CBO v3) === *\/\n  @media print {\n    @page { size: A4; margin: 12mm 12mm 10mm; }\n    \/* Hide everything except a dedicated print container (#kfgPrint) *\/\n    body > * { display: none !important; }\n    #kfgPrint { display: block !important; }\n    #kfgPrint, #kfgPrint * { visibility: visible; }\n  }\n  \/* Print container, hidden in screen mode, shown only in print *\/\n  #kfgPrint {\n    display: none;\n    font-family: 'Poppins', sans-serif;\n    color: #200052;\n  }\n  @media print {\n    #kfgPrint {\n      width: 100%; padding: 0; margin: 0;\n      font-size: 10pt; line-height: 1.4;\n      page-break-after: avoid;\n    }\n    .kfgp-head {\n      display: flex; align-items: center; justify-content: space-between;\n      padding: 0 0 4mm; margin: 0 0 6mm;\n      border-bottom: 2px solid #4800B8;\n    }\n    .kfgp-head-l h1 {\n      font-family: 'General Sans', 'Poppins', sans-serif;\n      font-size: 20pt; font-weight: 500;\n      color: #200052; margin: 0;\n      letter-spacing: -0.01em;\n    }\n    .kfgp-head-l h1 span { color: #4800B8; }\n    .kfgp-head-l p {\n      font-size: 9pt; color: #68646E; margin: 1mm 0 0;\n    }\n    .kfgp-head-r {\n      text-align: right; font-size: 8pt; color: #68646E;\n    }\n    #kfgPrint .kfgp-head-r strong { color: #7E29FF !important; font-size: 11pt; display: block; font-weight: 700; }\n    #kfgPrint .kfgp-head-r .kfgp-tel { color: #200052; font-weight: 600; }\n    \/* Hide all href annotations Chrome adds in print (a-href content url suffix) *\/\n    #kfgPrint a[href]::after { content: \"\" !important; display: none !important; }\n    #kfgPrint a { color: inherit !important; text-decoration: none !important; }\n    .kfgp-body {\n      display: grid;\n      grid-template-columns: 60mm 1fr;\n      gap: 6mm;\n      margin: 0 0 5mm;\n    }\n    .kfgp-photo {\n      background: #F9F5FF;\n      border: 1px solid #E8E0F5;\n      border-radius: 4mm;\n      padding: 4mm;\n      display: flex; align-items: center; justify-content: center;\n      aspect-ratio: 1 \/ 1;\n      page-break-inside: avoid;\n    }\n    .kfgp-photo img {\n      max-width: 100%; max-height: 100%;\n      object-fit: contain;\n    }\n    .kfgp-items {\n      background: #FAFAFA;\n      border: 1px solid #E8E0F5;\n      border-radius: 4mm;\n      padding: 4mm 5mm;\n      page-break-inside: avoid;\n    }\n    #kfgPrint .kfgp-items h2 {\n      font-family: 'Poppins', sans-serif !important;\n      font-size: 12pt !important; font-weight: 600 !important;\n      color: #200052 !important; margin: 0 0 3mm !important;\n      letter-spacing: -0.01em !important; text-transform: none !important;\n      line-height: 1.3 !important;\n    }\n    .kfgp-row {\n      display: flex; justify-content: space-between;\n      padding: 2mm 0;\n      border-bottom: 1px dotted #D8CFF0;\n      font-size: 10pt;\n    }\n    .kfgp-row:last-child { border-bottom: none; }\n    .kfgp-row .name { color: #200052; padding-right: 4mm; }\n    .kfgp-row .price {\n      color: #200052; font-weight: 600;\n      font-family: 'IBM Plex Mono', monospace;\n      white-space: nowrap;\n    }\n    .kfgp-total {\n      background: linear-gradient(135deg, #F9F5FF, #EDE3FF);\n      border: 2px solid #4800B8;\n      border-radius: 4mm;\n      padding: 5mm;\n      margin: 5mm 0;\n      display: flex; justify-content: space-between; align-items: center;\n      page-break-inside: avoid;\n    }\n    .kfgp-total-l { font-size: 10pt; color: #68646E; }\n    .kfgp-total-l strong {\n      display: block; font-size: 11pt;\n      color: #200052; font-weight: 600;\n      margin-bottom: 1mm;\n    }\n    .kfgp-total-r {\n      text-align: right;\n      font-family: 'General Sans', 'Poppins', sans-serif;\n      font-size: 24pt; font-weight: 500;\n      color: #200052;\n      line-height: 1;\n    }\n    .kfgp-total-r small {\n      display: block; font-size: 9pt; font-weight: 400;\n      color: #68646E; margin-top: 1mm;\n      letter-spacing: 0.04em;\n    }\n    .kfgp-share {\n      background: #F9F5FF;\n      border: 1px solid #E8E0F5;\n      border-radius: 3mm;\n      padding: 3mm 4mm;\n      font-size: 8pt; color: #68646E;\n      margin: 0 0 5mm;\n      word-break: break-all;\n    }\n    .kfgp-share strong { color: #200052; }\n    .kfgp-foot {\n      padding-top: 4mm; margin-top: 4mm;\n      border-top: 1px solid #E8E0F5;\n      font-size: 8pt; color: #68646E;\n      text-align: center;\n    }\n    .kfgp-foot strong { color: #200052; }\n  }\n<\/style>\n\n<div class=\"kfg-wrap notranslate\" translate=\"no\" lang=\"cs\">\n  <!-- translate=\"no\" + class=\"notranslate\" + lang=\"cs\" disables TranslatePress + Google Translate auto-translation. -->\n  <div class=\"kfg-inner\">\n\n    <!-- ===== Hero ===== -->\n    <header class=\"kfg-hero\">\n      <h1>Hardware <span class=\"kfg-h1-accent\">konfigur\u00e1tor<\/span><\/h1>\n      <p>Nakonfigurujte si AI recepci na m\u00edru. Ceny jsou uvedeny bez DPH. Dostupn\u00e9 funkce a software z\u00e1vis\u00ed na zvolen\u00e9m <a href=\"\/cs\/cenik\/\" style=\"color:#4800B8;text-decoration:underline;\">pl\u00e1nu<\/a>.<\/p>\n    <\/header>\n\n    <!-- ===== Configurator shell (2-col: LEFT preview + RIGHT 3-PATH selection) ===== -->\n    <section class=\"kfg-section\" id=\"kfgConfigurator\" style=\"padding-top: 16px;\">\n      <div class=\"kfg-config\">\n\n        <!-- LEFT: Preview (sticky), zachov\u00e1no per CBO -->\n        <div class=\"kfg-preview\">\n          <div class=\"kfg-photo\" id=\"kfgPhoto\" role=\"button\" tabindex=\"0\" aria-label=\"Zv\u011bt\u0161it foto\">\n            <img fetchpriority=\"high\" id=\"kfgPhotoImg\" src=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-none.png\" alt=\"Zebra kiosek KC50 15&quot;\" fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"800\">\n          <\/div>\n\n          <div class=\"kfg-thumbs\" id=\"kfgThumbs\" role=\"list\" aria-label=\"Galerie produktu\"><\/div>\n          <div class=\"kfg-dots-bar\" id=\"kfgDotsBar\">\n            <button type=\"button\" class=\"kfg-arrow\" id=\"kfgArrowPrev\" aria-label=\"P\u0159edchoz\u00ed foto\">\u2039<\/button>\n            <div class=\"kfg-dots\" id=\"kfgDots\" role=\"list\"><\/div>\n            <button type=\"button\" class=\"kfg-arrow\" id=\"kfgArrowNext\" aria-label=\"Dal\u0161\u00ed foto\">\u203a<\/button>\n          <\/div>\n\n          <div class=\"kfg-preview-info\">\n            <div>\n              <span class=\"label\">Aktu\u00e1ln\u00ed sestava<\/span>\n              <h4 id=\"kfgPreviewTitle\">Zebra kiosek KC50 15&quot;<\/h4>\n              <div class=\"sub\" id=\"kfgPreviewSub\"><\/div>\n            <\/div>\n            <button type=\"button\" class=\"kfg-reset\" id=\"kfgReset\" aria-label=\"Resetovat konfiguraci\">\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n                <path d=\"M3 8a5 5 0 109-3l-1 1M11 3v3h-3\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n              <\/svg>\n              Resetovat\n            <\/button>\n          <\/div>\n\n          <div class=\"kfg-live\" id=\"kfgLive\">\n            <h5>Polo\u017eky sestavy<\/h5>\n            <div id=\"kfgLiveRows\"><\/div>\n          <\/div>\n        <\/div>\n\n        <!-- RIGHT: 3 PATHS (A presets + B needs + C hardware) -->\n        <div class=\"kfg-right\">\n\n          <!-- ===== PATH A: Doporu\u010den\u00e9 sestavy ===== -->\n          <section class=\"kfg-path\" id=\"kfgPathA\">\n            <header class=\"kfg-path-head\">\n              <div class=\"kfg-section-step\">Nejrychlej\u0161\u00ed cesta<\/div>\n              <h2>Doporu\u010den\u00e9 sestavy<\/h2>\n              <p>Vyberte hotovou konfiguraci podle typu provozu. M\u016f\u017eete ji d\u00e1l upravit n\u00ed\u017ee.<\/p>\n            <\/header>\n            <div class=\"kfg-presets\">\n<button type=\"button\" class=\"kfg-preset\" data-preset-id=\"outdoor\"\n    data-preset-kiosk=\"tablet-et401\"\n    data-preset-stand=\"zbk-vesa-10\"\n    data-preset-addons=\"\"\n    data-preset-exthub=\"\"\n    aria-label=\"Vybrat sestavu Mobiln\u00ed \/ venkovn\u00ed recepce\">\n  <span class=\"kfg-preset-icon\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"><circle cx=\"17\" cy=\"6\" r=\"3\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M3 21l5-8 4 5 3-4 6 7H3z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"round\"\/><\/svg><\/span>\n  <div class=\"kfg-preset-body\">\n    <h3>Mobiln\u00ed \/ venkovn\u00ed recepce<\/h3>\n    <p>Vr\u00e1tnice, parkovi\u0161t\u011b, stavebn\u00ed are\u00e1ly, eventy. Tablet ET401 s VESA dr\u017e\u00e1kem a kompletn\u00edm nap\u00e1jec\u00edm setem.<\/p>\n    <div class=\"kfg-preset-tags\">\n        <span class=\"kfg-preset-tag\">Tablet ET401 10&quot;<\/span>\n        <span class=\"kfg-preset-tag\">VESA dr\u017e\u00e1k<\/span>\n        <span class=\"kfg-preset-tag\">IP65 odoln\u00fd<\/span>\n        <span class=\"kfg-preset-tag\">5G + Wi-Fi 7<\/span>\n    <\/div>\n  <\/div>\n  <div class=\"kfg-preset-price\">\n    <span class=\"from\">od<\/span>\n    <strong>33 700 K\u010d<\/strong>\n  <\/div>\n<\/button>\n<button type=\"button\" class=\"kfg-preset\" data-preset-id=\"office\"\n    data-preset-kiosk=\"kc50-22\"\n    data-preset-stand=\"havis-cf1\"\n    data-preset-addons=\"ocr315e\"\n    data-preset-exthub=\"\"\n    aria-label=\"Vybrat sestavu Kancel\u00e1\u0159sk\u00e9 budovy\">\n  <span class=\"kfg-preset-icon\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"><rect x=\"3\" y=\"4\" width=\"8\" height=\"17\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><rect x=\"13\" y=\"9\" width=\"8\" height=\"12\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M5 8h4M5 12h4M5 16h4M15 13h4M15 17h4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\/><\/svg><\/span>\n  <div class=\"kfg-preset-body\">\n    <h3>Kancel\u00e1\u0159sk\u00e9 budovy<span class=\"kfg-preset-best\">Nejobl\u00edben\u011bj\u0161\u00ed<\/span><\/h3>\n    <p>Recepce pro firmy, business centra a coworking<\/p>\n    <div class=\"kfg-preset-tags\">\n        <span class=\"kfg-preset-tag\">22&quot; displej<\/span>\n        <span class=\"kfg-preset-tag\">Havis stojan<\/span>\n        <span class=\"kfg-preset-tag\">\u010cte\u010dka OP<\/span>\n    <\/div>\n  <\/div>\n  <div class=\"kfg-preset-price\">\n    <span class=\"from\">od<\/span>\n    <strong>63 490 K\u010d<\/strong>\n  <\/div>\n<\/button>\n<button type=\"button\" class=\"kfg-preset\" data-preset-id=\"industrial\"\n    data-preset-kiosk=\"kc50-22\"\n    data-preset-stand=\"havis-cf1\"\n    data-preset-addons=\"ocr315e\"\n    data-preset-exthub=\"exthub-1\"\n    aria-label=\"Vybrat sestavu Pr\u016fmyslov\u00e9 are\u00e1ly\">\n  <span class=\"kfg-preset-icon\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3 21V11l5 3v-3l5 3v-3l5 3V8l3-3v16H3z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"round\"\/><rect x=\"6\" y=\"16\" width=\"2.5\" height=\"3\" fill=\"currentColor\"\/><rect x=\"11\" y=\"16\" width=\"2.5\" height=\"3\" fill=\"currentColor\"\/><rect x=\"16\" y=\"16\" width=\"2.5\" height=\"3\" fill=\"currentColor\"\/><\/svg><\/span>\n  <div class=\"kfg-preset-body\">\n    <h3>Pr\u016fmyslov\u00e9 are\u00e1ly<\/h3>\n    <p>Kontrola p\u0159\u00edchod\u016f, BOZP \u0161kolen\u00ed, v\u00fddej karet n\u00e1v\u0161t\u011bv\u00e1m<\/p>\n    <div class=\"kfg-preset-tags\">\n        <span class=\"kfg-preset-tag\">22&quot; displej<\/span>\n        <span class=\"kfg-preset-tag\">Havis stojan<\/span>\n        <span class=\"kfg-preset-tag\">\u010cte\u010dka OP<\/span>\n        <span class=\"kfg-preset-tag\">ExtHUB s 1 v\u00fddejn\u00edkem<\/span>\n    <\/div>\n  <\/div>\n  <div class=\"kfg-preset-price\">\n    <span class=\"from\">od<\/span>\n    <strong>108 490 K\u010d<\/strong>\n  <\/div>\n<\/button>\n<button type=\"button\" class=\"kfg-preset\" data-preset-id=\"fullservice\"\n    data-preset-kiosk=\"kc50-22\"\n    data-preset-stand=\"havis-cf1-pe02-pb1\"\n    data-preset-addons=\"epson-printer,ocr315e\"\n    data-preset-exthub=\"\"\n    aria-label=\"Vybrat sestavu Full-service vestibul\">\n  <span class=\"kfg-preset-icon\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"><path d=\"M12 2l2.5 6 6.5.5-5 4.5 1.5 6.5L12 16.5 6.5 19.5 8 13 3 8.5 9.5 8 12 2z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"round\"\/><\/svg><\/span>\n  <div class=\"kfg-preset-body\">\n    <h3>Full-service vestibul<\/h3>\n    <p>Full-height stojan s integrovanou Epson tisk\u00e1rnou a \u010dte\u010dkou doklad\u016f<\/p>\n    <div class=\"kfg-preset-tags\">\n        <span class=\"kfg-preset-tag\">22&quot; displej<\/span>\n        <span class=\"kfg-preset-tag\">Full-height stojan<\/span>\n        <span class=\"kfg-preset-tag\">Integrovan\u00e1 tisk\u00e1rna<\/span>\n        <span class=\"kfg-preset-tag\">\u010cte\u010dka OP<\/span>\n    <\/div>\n  <\/div>\n  <div class=\"kfg-preset-price\">\n    <span class=\"from\">od<\/span>\n    <strong>114 790 K\u010d<\/strong>\n  <\/div>\n<\/button>\n            <\/div>\n          <\/section>\n\n          <!-- PATH B hidden by CBO 2026-06-03 (kept in DOM, may re-enable later). -->\n          <div class=\"kfg-or-divider\" style=\"display:none\">nebo<\/div>\n\n          <!-- ===== PATH B: P\u0159izp\u016fsoben\u00ed pot\u0159eb\u00e1m (SKRYTO) ===== -->\n          <section class=\"kfg-path\" id=\"kfgPathB\" style=\"display:none\" aria-hidden=\"true\">\n            <header class=\"kfg-path-head\">\n              <div class=\"kfg-section-step\"><span class=\"n\">B<\/span> Podle va\u0161ich pot\u0159eb<\/div>\n              <h2>P\u0159izp\u016fsoben\u00ed pot\u0159eb\u00e1m<\/h2>\n              <p>\u0158ekn\u011bte n\u00e1m, co pot\u0159ebujete \u0159e\u0161it. Hardware se automaticky p\u0159izp\u016fsob\u00ed.<\/p>\n            <\/header>\n            <div class=\"kfg-needs-grid\" id=\"kfgNeedsGrid\">\n<button type=\"button\" class=\"kfg-need-card\" data-need-id=\"print-qr\" data-need-filter=\"{&quot;printer&quot;: true}\" aria-pressed=\"false\"><span class=\"kfg-need-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 16 16\" fill=\"none\"><rect x=\"2\" y=\"6\" width=\"12\" height=\"6\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.2\"\/><rect x=\"4\" y=\"3\" width=\"8\" height=\"3\" stroke=\"currentColor\" stroke-width=\"1.2\"\/><rect x=\"4\" y=\"10\" width=\"8\" height=\"4\" stroke=\"currentColor\" stroke-width=\"1.2\"\/><\/svg><\/span><span>Tisknout QR k\u00f3dy \/ vstupenky<\/span><span class=\"kfg-need-checkbox\"><\/span><\/button>\n        <button type=\"button\" class=\"kfg-need-card\" data-need-id=\"issue-cards\" data-need-filter=\"{&quot;exthub&quot;: true}\" aria-pressed=\"false\"><span class=\"kfg-need-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 16 16\" fill=\"none\"><rect x=\"2\" y=\"4\" width=\"12\" height=\"8\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.2\"\/><path d=\"M2 7h12\" stroke=\"currentColor\" stroke-width=\"1.2\"\/><\/svg><\/span><span>Vyd\u00e1vat karty host\u016fm<\/span><span class=\"kfg-need-checkbox\"><\/span><\/button>\n        <button type=\"button\" class=\"kfg-need-card\" data-need-id=\"scan-id\" data-need-filter=\"{&quot;reader&quot;: true}\" aria-pressed=\"false\"><span class=\"kfg-need-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M3 5V4a1 1 0 011-1h1M13 5V4a1 1 0 00-1-1h-1M3 11v1a1 1 0 001 1h1M13 11v1a1 1 0 01-1 1h-1M2 8h12\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\"\/><\/svg><\/span><span>Skenovat doklady (OP, pas)<\/span><span class=\"kfg-need-checkbox\"><\/span><\/button>\n        <button type=\"button\" class=\"kfg-need-card\" data-need-id=\"large-screen\" data-need-filter=\"{&quot;kioskTag&quot;: &quot;22-inch&quot;}\" aria-pressed=\"false\"><span class=\"kfg-need-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 16 16\" fill=\"none\"><rect x=\"2\" y=\"3\" width=\"12\" height=\"9\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.2\"\/><path d=\"M6 14h4M8 12v2\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\"\/><\/svg><\/span><span>Velk\u00fd displej 22&quot;<\/span><span class=\"kfg-need-checkbox\"><\/span><\/button>\n        <button type=\"button\" class=\"kfg-need-card\" data-need-id=\"outdoor\" data-need-filter=\"{&quot;kioskTag&quot;: &quot;outdoor&quot;}\" aria-pressed=\"false\"><span class=\"kfg-need-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 16 16\" fill=\"none\"><circle cx=\"8\" cy=\"8\" r=\"3\" stroke=\"currentColor\" stroke-width=\"1.2\"\/><path d=\"M8 1.5v2M8 12.5v2M14.5 8h-2M3.5 8h-2M12.6 3.4l-1.4 1.4M4.8 11.2l-1.4 1.4M12.6 12.6l-1.4-1.4M4.8 4.8L3.4 3.4\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\"\/><\/svg><\/span><span>Venkovn\u00ed instalace<\/span><span class=\"kfg-need-checkbox\"><\/span><\/button>\n        <button type=\"button\" class=\"kfg-need-card\" data-need-id=\"wall-mount\" data-need-filter=\"{&quot;standTag&quot;: &quot;compact&quot;}\" aria-pressed=\"false\"><span class=\"kfg-need-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 16 16\" fill=\"none\"><rect x=\"3\" y=\"2\" width=\"10\" height=\"12\" stroke=\"currentColor\" stroke-width=\"1.2\"\/><rect x=\"5.5\" y=\"5\" width=\"5\" height=\"4\" stroke=\"currentColor\" stroke-width=\"1.2\"\/><\/svg><\/span><span>N\u00e1st\u011bnn\u00e1 \/ vlastn\u00ed mont\u00e1\u017e<\/span><span class=\"kfg-need-checkbox\"><\/span><\/button>\n        <button type=\"button\" class=\"kfg-need-card\" data-need-id=\"compact\" data-need-filter=\"{&quot;standTag&quot;: &quot;compact&quot;}\" aria-pressed=\"false\"><span class=\"kfg-need-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M3 3h2v2H3zM11 3h2v2h-2zM3 11h2v2H3zM11 11h2v2h-2z\" stroke=\"currentColor\" stroke-width=\"1.2\"\/><path d=\"M5 4h6M5 12h6M4 5v6M12 5v6\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-dasharray=\"2 1\"\/><\/svg><\/span><span>Kompaktn\u00ed st\u016fl \/ pult<\/span><span class=\"kfg-need-checkbox\"><\/span><\/button>\n        <button type=\"button\" class=\"kfg-need-card\" data-need-id=\"full-height\" data-need-filter=\"{&quot;standTag&quot;: &quot;full-height&quot;}\" aria-pressed=\"false\"><span class=\"kfg-need-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 16 16\" fill=\"none\"><rect x=\"6\" y=\"2\" width=\"4\" height=\"12\" stroke=\"currentColor\" stroke-width=\"1.2\"\/><path d=\"M2 3l2-1M2 14l2 1\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\"\/><\/svg><\/span><span>Samostatn\u011b stoj\u00edc\u00ed (full-height)<\/span><span class=\"kfg-need-checkbox\"><\/span><\/button>\n            <\/div>\n          <\/section>\n\n          <div class=\"kfg-or-divider\">nebo<\/div>\n\n          <!-- ===== PATH C: Hardware na m\u00edru (rozbalovac\u00ed, default sbalen\u00e9 \u2014 CBO 2026-06-03) ===== -->\n          <details class=\"kfg-path kfg-path-collapsible\" id=\"kfgPathC\">\n            <summary class=\"kfg-path-head kfg-path-summary\">\n              <div class=\"kfg-summary-text\">\n                <div class=\"kfg-section-step\">Pokro\u010dil\u00e1 konfigurace<\/div>\n                <h2>Hardware na m\u00edru<\/h2>\n                <p>Vyberte si jednotliv\u00e9 komponenty. Nejd\u0159\u00edve za\u0159\u00edzen\u00ed, pak stojan a dopl\u0148ky.<\/p>\n              <\/div>\n              <span class=\"kfg-expand-chip\" aria-hidden=\"true\"><\/span>\n            <\/summary>\n            <div class=\"kfg-path-c-body\">\n\n            <div class=\"kfg-sub-head\">Kiosky a tablety <span class=\"meta\">za\u0159\u00edzen\u00ed pro recepci<\/span><\/div>\n            <div class=\"kfg-opts\" data-section=\"kiosek\">\n<label class=\"kfg-opt\" data-id=\"kc50-15\" data-price=\"28190\" data-name=\"Zebra kiosek KC50 15&quot;\" data-device-type=\"kiosek\" data-tags=\"\" data-allows=\"stand,addons,exthub\" data-img=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-none.png\">\n  <input type=\"radio\" name=\"kfg-kiosk\" value=\"kc50-15\" checked>\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">Zebra kiosek KC50 15&quot;<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">KC50A15-G0B1C0-A6 + PWR-BGA24V78W4WW + 50-16000-220R<\/div>\n    \n  <\/div>\n  <div class=\"kfg-opt-price\">+ 28 190 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"kc50-22\" data-price=\"30190\" data-name=\"Zebra kiosek KC50 22&quot;\" data-device-type=\"kiosek\" data-tags=\"22-inch\" data-allows=\"stand,addons,exthub\" data-img=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-22-none.png\">\n  <input type=\"radio\" name=\"kfg-kiosk\" value=\"kc50-22\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">Zebra kiosek KC50 22&quot;<span class=\"kfg-opt-badge rec\">Doporu\u010deno<\/span><span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">KC50A22-G0B1C0-A6 + PWR-BGA24V78W4WW + 50-16000-220R<\/div>\n    \n  <\/div>\n  <div class=\"kfg-opt-price\">+ 30 190 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"tablet-et401\" data-price=\"27700\" data-name=\"Tablet Zebra ET401 10&quot;\" data-device-type=\"tablet\" data-tags=\"outdoor,mobile,outdoor,mobile\" data-allows=\"stand\" data-bundle=\"[{&quot;id&quot;:&quot;pwr-bga12v50w0ww&quot;,&quot;name&quot;:&quot;Nap\u00e1jec\u00ed adapt\u00e9r Zebra&quot;,&quot;skus&quot;:&quot;PWR-BGA12V50W0WW&quot;,&quot;img&quot;:&quot;https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-acc-pwr-bga12v50.jpg&quot;,&quot;note&quot;:&quot;Nap\u00e1jec\u00ed zdroj 12V 50W&quot;},{&quot;id&quot;:&quot;cbl-dc-388a2-01&quot;,&quot;name&quot;:&quot;DC nap\u00e1jec\u00ed kabel Zebra&quot;,&quot;skus&quot;:&quot;CBL-DC-388A2-01&quot;,&quot;img&quot;:&quot;https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-acc-cbl-dc-388a2.jpg&quot;,&quot;note&quot;:&quot;DC kabel pro p\u0159ipojen\u00ed nap\u00e1jen\u00ed&quot;}]\" data-img=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-et401-none.png\">\n  <input type=\"radio\" name=\"kfg-kiosk\" value=\"tablet-et401\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">Tablet Zebra ET401 10&quot;<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">ET401EB-30101B2P-A6<\/div>\n    <small class=\"kfg-opt-note\">Vnit\u0159n\u00ed i venkovn\u00ed \u0159e\u0161en\u00ed (Wi-Fi 7, 5G, IP65). Stojan i nap\u00e1jen\u00ed vyberte v sekci n\u00ed\u017ee.<\/small>\n  <\/div>\n  <div class=\"kfg-opt-price\">+ 27 700 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"oled-30\" data-price=\"189990\" data-name=\"30&quot; Transparent OLED Kiosk\" data-device-type=\"kiosek\" data-tags=\"large,premium,transparent,30-inch,standalone\" data-allows=\"exthub\" data-img=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-oled-1.jpg\" data-gallery=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-oled-1.jpg,https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-oled-2.jpg,https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-oled-3.jpg,https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-oled-4.jpg,https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-oled-5.jpg\" data-gallery-style=\"thumbs\">\n  <input type=\"radio\" name=\"kfg-kiosk\" value=\"oled-30\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">30&quot; Transparent OLED Kiosk<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">Transparent OLED 30 inch touch screen kiosk<\/div>\n    <small class=\"kfg-opt-note\">Pr\u016fhledn\u00fd 30&#8243; OLED displej v samostatn\u00e9m celokovov\u00e9m stojanu (premium \u0159e\u0161en\u00ed pro reprezentativn\u00ed recepce)<\/small>\n  <\/div>\n  <div class=\"kfg-opt-price\">+ 189 990 K\u010d<\/div>\n<\/label>\n            <\/div>\n\n            <div class=\"kfg-sub-head\">Stojany <span class=\"meta\">zp\u016fsob um\u00edst\u011bn\u00ed<\/span><\/div>\n            <div class=\"kfg-opts\" data-section=\"stojan\">\n<label class=\"kfg-opt\" data-id=\"none\" data-price=\"0\" data-name=\"Bez stojanu\" data-tags=\"compact\" data-compat=\"kiosek,tablet\" >\n  <input type=\"radio\" name=\"kfg-stand\" value=\"none\" checked>\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">Bez stojanu<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    \n    <small class=\"kfg-opt-note\">Pouze kiosek (nap\u0159. pro vlastn\u00ed mont\u00e1\u017e, n\u00e1st\u011bnn\u00e9 \u0159e\u0161en\u00ed)<\/small>\n  <\/div>\n  <div class=\"kfg-opt-price free\">0 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"zbk-vesa-10\" data-price=\"6000\" data-name=\"Zebra VESA dr\u017e\u00e1k 10&quot;\" data-tags=\"compact,tablet-mount\" data-compat=\"tablet\" data-img=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-stand-zbk-vesa-10.jpg\">\n  <input type=\"radio\" name=\"kfg-stand\" value=\"zbk-vesa-10\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">Zebra VESA dr\u017e\u00e1k 10&quot;<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">ZBK-ET4X-10VESA-01<\/div>\n    <small class=\"kfg-opt-note\">VESA dr\u017e\u00e1k pro tablet ET401 10&#8243; (n\u00e1st\u011bnn\u00e1 nebo stoln\u00ed mont\u00e1\u017e)<\/small>\n  <\/div>\n  <div class=\"kfg-opt-price\">+ 6 000 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"alza\" data-price=\"3000\" data-name=\"AlzaErgo Arm S25B\" data-tags=\"arm,compact\" data-compat=\"kiosek\" >\n  <input type=\"radio\" name=\"kfg-stand\" value=\"alza\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">AlzaErgo Arm S25B<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">AlzaErgo Arm S25B<\/div>\n    \n  <\/div>\n  <div class=\"kfg-opt-price\">+ 3 000 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"ram-s\" data-price=\"6000\" data-name=\"RAM stojan mal\u00fd\" data-tags=\"compact\" data-compat=\"kiosek\" >\n  <input type=\"radio\" name=\"kfg-stand\" value=\"ram-s\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">RAM stojan mal\u00fd<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">RAL-STAND-ZE-KC50-S<\/div>\n    \n  <\/div>\n  <div class=\"kfg-opt-price\">+ 6 000 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"ram-l\" data-price=\"9000\" data-name=\"RAM stojan velk\u00fd\" data-tags=\"standard\" data-compat=\"kiosek\" >\n  <input type=\"radio\" name=\"kfg-stand\" value=\"ram-l\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">RAM stojan velk\u00fd<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">RAL-STAND-ZE-KC50-L<\/div>\n    \n  <\/div>\n  <div class=\"kfg-opt-price\">+ 9 000 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"havis-cf1\" data-price=\"12300\" data-name=\"Havis stojan vrchn\u00ed\" data-tags=\"standard\" data-compat=\"kiosek\" >\n  <input type=\"radio\" name=\"kfg-stand\" value=\"havis-cf1\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">Havis stojan vrchn\u00ed<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">3PTY-SC-2000-CF1-01<\/div>\n    \n  <\/div>\n  <div class=\"kfg-opt-price\">+ 12 300 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"havis-cf1-r1\" data-price=\"19500\" data-name=\"Havis stojan vrchn\u00ed + prost\u0159edn\u00ed \u010d\u00e1st\" data-tags=\"standard\" data-compat=\"kiosek\" >\n  <input type=\"radio\" name=\"kfg-stand\" value=\"havis-cf1-r1\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">Havis stojan vrchn\u00ed + prost\u0159edn\u00ed \u010d\u00e1st<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">3PTY-SC-2000-CF1-01 + 3PTY-SC-2000-R1-01<\/div>\n    \n  <\/div>\n  <div class=\"kfg-opt-price\">+ 19 500 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"havis-cf1-pe02\" data-price=\"21500\" data-name=\"Havis vrchn\u00ed + prost\u0159edn\u00ed s tisk\u00e1rnou\" data-tags=\"printer-ready\" data-compat=\"kiosek\" >\n  <input type=\"radio\" name=\"kfg-stand\" value=\"havis-cf1-pe02\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">Havis vrchn\u00ed + prost\u0159edn\u00ed s tisk\u00e1rnou<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">3PTY-SC-2000-CF1-01 + 3PTY-SC-2000-PE-02<\/div>\n    <small class=\"kfg-opt-note\">obsahuje m\u00edsto pro Epson tisk\u00e1rnu<\/small>\n  <\/div>\n  <div class=\"kfg-opt-price\">+ 21 500 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"havis-cf1-pb1\" data-price=\"42600\" data-name=\"Havis stojan vrchn\u00ed + spodn\u00ed \u010d\u00e1st\" data-tags=\"full-height\" data-compat=\"kiosek\" >\n  <input type=\"radio\" name=\"kfg-stand\" value=\"havis-cf1-pb1\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">Havis stojan vrchn\u00ed + spodn\u00ed \u010d\u00e1st<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">3PTY-SC-2000-CF1-01 + 3PTY-SC-2000-PB1-01<\/div>\n    \n  <\/div>\n  <div class=\"kfg-opt-price\">+ 42 600 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"havis-cf1-r1-pb1\" data-price=\"49800\" data-name=\"Havis vrchn\u00ed + prost\u0159edn\u00ed + spodn\u00ed (full-height)\" data-tags=\"full-height\" data-compat=\"kiosek\" >\n  <input type=\"radio\" name=\"kfg-stand\" value=\"havis-cf1-r1-pb1\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">Havis vrchn\u00ed + prost\u0159edn\u00ed + spodn\u00ed (full-height)<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">3PTY-SC-2000-CF1-01 + 3PTY-SC-2000-R1-01 + 3PTY-SC-2000-PB1-01<\/div>\n    \n  <\/div>\n  <div class=\"kfg-opt-price\">+ 49 800 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"havis-cf1-pe02-pb1\" data-price=\"51800\" data-name=\"Havis vrchn\u00ed + prost\u0159edn\u00ed s tisk\u00e1rnou + spodn\u00ed (full-height)\" data-tags=\"full-height,printer-ready\" data-compat=\"kiosek\" >\n  <input type=\"radio\" name=\"kfg-stand\" value=\"havis-cf1-pe02-pb1\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">Havis vrchn\u00ed + prost\u0159edn\u00ed s tisk\u00e1rnou + spodn\u00ed (full-height)<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">3PTY-SC-2000-CF1-01 + 3PTY-SC-2000-PE-02 + 3PTY-SC-2000-PB1-01<\/div>\n    <small class=\"kfg-opt-note\">obsahuje m\u00edsto pro Epson tisk\u00e1rnu<\/small>\n  <\/div>\n  <div class=\"kfg-opt-price\">+ 51 800 K\u010d<\/div>\n<\/label>\n            <\/div>\n\n            <div class=\"kfg-sub-head\">Tisk\u00e1rna a \u010dte\u010dka <span class=\"meta\">badge tisk a skenov\u00e1n\u00ed doklad\u016f<\/span><\/div>\n            <div class=\"kfg-opts\" data-section=\"doplnky\">\n<label class=\"kfg-opt kfg-opt--check\" data-id=\"epson-printer\" data-price=\"11800\" data-name=\"Tisk\u00e1rna Epson TM-T88VII\" data-tags=\"printer\" data-img=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-addon-epson-printer.png\">\n  <input type=\"checkbox\" name=\"kfg-addon-epson-printer\" value=\"epson-printer\">\n  <span class=\"kfg-radio square\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">Tisk\u00e1rna Epson TM-T88VII<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">C31CJ57132 + p\u0159\u00edslu\u0161enstv\u00ed<\/div>\n    <small class=\"kfg-opt-note\">do prost\u0159edn\u00edho Havis stojanu PE-02<\/small>\n  <\/div>\n  <div class=\"kfg-opt-price\">+ 11 800 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt kfg-opt--check\" data-id=\"ocr315e\" data-price=\"21000\" data-name=\"HID \u010dte\u010dka OP, PAS\" data-tags=\"reader\" data-gallery=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-addon-ocr315e.png,https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-addon-ocr315e-mounted.jpg\" data-gallery-style=\"thumbs\" data-img=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-addon-ocr315e.png\">\n  <input type=\"checkbox\" name=\"kfg-addon-ocr315e\" value=\"ocr315e\">\n  <span class=\"kfg-radio square\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">HID \u010dte\u010dka OP, PAS<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">OCR315-E + Mikrotik + Raspberry Pi + p\u0159\u00edslu\u0161enstv\u00ed<\/div>\n    <small class=\"kfg-opt-note\">v\u010detn\u011b Mikrotik a Raspberry Pi<\/small>\n  <\/div>\n  <div class=\"kfg-opt-price\">+ 21 000 K\u010d<\/div>\n<\/label>\n            <\/div>\n\n            <div class=\"kfg-sub-head\">ExtHUB <span class=\"meta\">v\u00fddejna karet (vyberte jeden, nebo \u017e\u00e1dn\u00fd)<\/span><\/div>\n            <div class=\"kfg-opts\" data-section=\"exthub\">\n              <label class=\"kfg-opt kfg-selected\" data-id=\"exthub-none\" data-price=\"0\" data-name=\"\u017d\u00e1dn\u00fd ExtHUB\">\n                <input type=\"radio\" name=\"kfg-exthub\" value=\"\" checked>\n                <span class=\"kfg-radio\"><\/span>\n                <div class=\"kfg-opt-body\">\n                  <div class=\"kfg-opt-title\">\u017d\u00e1dn\u00fd ExtHUB<\/div>\n                <\/div>\n                <div class=\"kfg-opt-price free\">0 K\u010d<\/div>\n              <\/label>\n<label class=\"kfg-opt\" data-id=\"exthub-1\" data-price=\"45000\" data-name=\"ExtHUB s 1 v\u00fddejn\u00edkem karet\" data-tags=\"exthub\" data-img=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-exthub-1.jpg\">\n  <input type=\"radio\" name=\"kfg-exthub\" value=\"exthub-1\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">ExtHUB s 1 v\u00fddejn\u00edkem karet<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">EXT-HUB-DSPN-1<\/div>\n    \n  <\/div>\n  <div class=\"kfg-opt-price\">+ 45 000 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"exthub-2\" data-price=\"55000\" data-name=\"ExtHUB se 2 v\u00fddejn\u00edky karet\" data-tags=\"exthub\" data-img=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-exthub-2.jpg\">\n  <input type=\"radio\" name=\"kfg-exthub\" value=\"exthub-2\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">ExtHUB se 2 v\u00fddejn\u00edky karet<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">EXT-HUB-DSPN-2<\/div>\n    \n  <\/div>\n  <div class=\"kfg-opt-price\">+ 55 000 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"exthub-3\" data-price=\"65000\" data-name=\"ExtHUB se 3 v\u00fddejn\u00edky karet\" data-tags=\"exthub\" data-gallery=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-exthub-3-1.jpg,https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-exthub-3-2.jpg,https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-exthub-3-3.jpg,https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-exthub-3-4.jpg\" data-gallery-style=\"thumbs\" data-img=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-exthub-3-1.jpg\">\n  <input type=\"radio\" name=\"kfg-exthub\" value=\"exthub-3\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">ExtHUB se 3 v\u00fddejn\u00edky karet<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">EXT-HUB-DSPN-3<\/div>\n    \n  <\/div>\n  <div class=\"kfg-opt-price\">+ 65 000 K\u010d<\/div>\n<\/label>\n<label class=\"kfg-opt\" data-id=\"exthub-1-zd411\" data-price=\"80000\" data-name=\"ExtHUB s 1 v\u00fddejn\u00edkem + Zebra ZD411 tisk\u00e1rnou\" data-tags=\"exthub,printer\" data-gallery=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-exthub-1-zd411-hub.jpg,https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-exthub-1-zd411-printer.png\" data-gallery-style=\"thumbs\" data-img=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-exthub-1-zd411-hub.jpg\">\n  <input type=\"radio\" name=\"kfg-exthub\" value=\"exthub-1-zd411\">\n  <span class=\"kfg-radio\"><\/span>\n  <div class=\"kfg-opt-body\">\n    <div class=\"kfg-opt-title\">ExtHUB s 1 v\u00fddejn\u00edkem + Zebra ZD411 tisk\u00e1rnou<span class=\"kfg-opt-need-badge\">Vhodn\u00e9 pro v\u00e1s<\/span><\/div>\n    <div class=\"kfg-opt-skus\">EXT-HUB-DSPN-1 + ZD411<\/div>\n    \n  <\/div>\n  <div class=\"kfg-opt-price\">+ 80 000 K\u010d<\/div>\n<\/label>\n            <\/div>\n            <\/div><!-- \/.kfg-path-c-body -->\n          <\/details>\n\n        <\/div>\n      <\/div>\n\n      <!-- ===== Dark summary ===== -->\n      <div class=\"kfg-summary\" id=\"kfgSummary\">\n        <div class=\"kfg-summary-grid\">\n          <div>\n            <div class=\"kfg-summary-label\" id=\"kfgSummaryLabel\">Va\u0161e sestava \u00b7 2 polo\u017eky<\/div>\n            <div class=\"kfg-summary-price\">\n              <span class=\"big\"><span id=\"kfgTotal\">28 190<\/span> K\u010d<\/span>\n              <span class=\"vat\">bez DPH<\/span>\n              <span class=\"kfg-price-delta\" id=\"kfgPriceDelta\" aria-live=\"polite\" aria-atomic=\"true\"><\/span>\n            <\/div>\n            <div class=\"kfg-summary-items\" id=\"kfgSummaryItems\"><\/div>\n          <\/div>\n          <div class=\"kfg-summary-actions\">\n            <button type=\"button\" class=\"kfg-btn kfg-btn-brand\" id=\"kfgCta\" aria-label=\"Odeslat popt\u00e1vku p\u0159es kontaktn\u00ed formul\u00e1\u0159\">\n              Poptat sestavu \u2192\n            <\/button>\n            <div style=\"display:flex;gap:8px;\">\n              <button type=\"button\" class=\"kfg-btn kfg-btn-light\" id=\"kfgShare\" style=\"flex:1;\" aria-label=\"Sd\u00edlet sestavu\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n                  <circle cx=\"4\" cy=\"8\" r=\"2\" stroke=\"currentColor\" stroke-width=\"1.3\"\/>\n                  <circle cx=\"12\" cy=\"3.5\" r=\"2\" stroke=\"currentColor\" stroke-width=\"1.3\"\/>\n                  <circle cx=\"12\" cy=\"12.5\" r=\"2\" stroke=\"currentColor\" stroke-width=\"1.3\"\/>\n                  <path d=\"M5.7 7l4.6-2.5M5.7 9l4.6 2.5\" stroke=\"currentColor\" stroke-width=\"1.3\"\/>\n                <\/svg>\n                Sd\u00edlet\n              <\/button>\n              <button type=\"button\" class=\"kfg-btn kfg-btn-light\" id=\"kfgPdf\" style=\"flex:1;\" aria-label=\"St\u00e1hnout PDF nab\u00eddku\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M4 2h5l3 3v9H4V2z\" stroke=\"currentColor\" stroke-width=\"1.3\"\/>\n                  <path d=\"M9 2v3h3\" stroke=\"currentColor\" stroke-width=\"1.3\"\/>\n                <\/svg>\n                PDF nab\u00eddka\n              <\/button>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/section>\n\n  <\/div>\n<\/div>\n\n<!-- Print container, populated by JS on PDF button click, only visible in print -->\n<div id=\"kfgPrint\" aria-hidden=\"true\">\n  <div class=\"kfgp-head\">\n    <div class=\"kfgp-head-l\">\n      <h1>Nab\u00eddka: Hardwarov\u00e1 <span>sestava<\/span><\/h1>\n      <p id=\"kfgpDate\">Vygenerov\u00e1no z konfigur\u00e1toru aReception.ai<\/p>\n    <\/div>\n    <div class=\"kfgp-head-r\">\n      <strong>aReception.ai s.r.o.<\/strong>\n      <span class=\"kfgp-tel\">+420 580 000 888<\/span><br>\n      info@areception.ai<br>\n      www.areception.ai\n    <\/div>\n  <\/div>\n  <div class=\"kfgp-body\">\n    <div class=\"kfgp-photo\">\n      <img decoding=\"async\" id=\"kfgpPhoto\" src=\"\" alt=\"\">\n    <\/div>\n    <div class=\"kfgp-items\">\n      <h2>Va\u0161e sestava<\/h2>\n      <div id=\"kfgpItems\"><\/div>\n    <\/div>\n  <\/div>\n  <div class=\"kfgp-total\">\n    <div class=\"kfgp-total-l\">\n      <strong>Celkov\u00e1 cena<\/strong>\n      Hardware bez instalace a softwarov\u00e9ho pl\u00e1nu\n    <\/div>\n    <div class=\"kfgp-total-r\">\n      <span id=\"kfgpTotal\">0<\/span> K\u010d\n      <small>bez DPH<\/small>\n    <\/div>\n  <\/div>\n  <div class=\"kfgp-share\">\n    <strong>Link na konfiguraci:<\/strong> <span id=\"kfgpShareUrl\"><\/span>\n  <\/div>\n  <div class=\"kfgp-foot\">\n    <strong>aReception.ai<\/strong> \u00b7 Member of ARTIN Group \u00b7 Zebra Technologies ISV Partner<br>\n    Ceny jsou bez DPH. Funkce a softwarov\u00fd pl\u00e1n se odv\u00edj\u00ed od zvolen\u00e9 licence.\n  <\/div>\n<\/div>\n\n<!-- Lightbox modal -->\n<div class=\"kfg-lightbox\" id=\"kfgLightbox\" role=\"dialog\" aria-modal=\"true\" aria-label=\"N\u00e1hled obr\u00e1zku\">\n  <button class=\"kfg-lightbox-close\" id=\"kfgLightboxClose\" aria-label=\"Zav\u0159\u00edt\">\u00d7<\/button>\n  <img decoding=\"async\" id=\"kfgLightboxImg\" src=\"\" alt=\"\">\n  <div class=\"kfg-lightbox-caption\" id=\"kfgLightboxCaption\"><\/div>\n<\/div>\n\n<script>\n(function(){\n  if (window.__kfgInit) return; window.__kfgInit = true;\n\n  var wrap = document.querySelector(\".kfg-wrap\");\n  if (!wrap) return;\n\n  \/\/ v12 (CBO 2026-06-02): kiosek \u00d7 stojan combination photos (assembled products).\n  \/\/ When user picks kiosek + stand, preview shows the real assembled product.\n  var COMBO = {\"tablet-et401\":{\"none\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-et401-none.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-a6e2b31a62ec.png\"],\"zbk-vesa-10\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-et401-none.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-a6e2b31a62ec.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-stand-zbk-vesa-10.jpg\"]},\"kc50-15\":{\"alza\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-alza.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-29bdfdc78e65.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-38ed972867be.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-1033b7c4828d.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-1133cbac0569.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-134c730e2ca3.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-9b72938d2c9d.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-5849edf8ffa1.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-18a8bc30a00c.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-00f962729e2d.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-43a2745700fa.jpg\"],\"none\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-none.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-8fc2f00691f5.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-553571ae73b5.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-2bd0d7558265.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-1470649763c2.png\"],\"havis-cf1\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-havis-cf1.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-37bcc3ce8d45.jpg\"],\"havis-cf1-r1\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-havis-cf1-r1.png\"],\"havis-cf1-pb1\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-havis-cf1-pb1.png\"],\"havis-cf1-r1-pb1\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-havis-cf1-r1-pb1.png\"],\"havis-cf1-pe02\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-havis-cf1-pe02.png\"],\"havis-cf1-pe02-pb1\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-havis-cf1-pe02-pb1.png\"],\"ram-s\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-ram-s.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-3d66aba3d121.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-8b970222cd53.jpg\"],\"ram-l\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-ram-l.png\"]},\"kc50-22\":{\"alza\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-22-alza.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-29bdfdc78e65.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-38ed972867be.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-1033b7c4828d.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-1133cbac0569.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-134c730e2ca3.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-9b72938d2c9d.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-5849edf8ffa1.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-18a8bc30a00c.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-00f962729e2d.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-43a2745700fa.jpg\"],\"none\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-22-none.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-d1f9e6c0d20a.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-fa51a56e224d.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-b90b68606f97.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-dd323a0bba66.png\"],\"havis-cf1\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-22-havis-cf1.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-37bcc3ce8d45.jpg\"],\"havis-cf1-r1\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-22-havis-cf1-r1.png\"],\"havis-cf1-pb1\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-22-havis-cf1-pb1.png\"],\"havis-cf1-r1-pb1\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-22-havis-cf1-r1-pb1.png\"],\"havis-cf1-pe02\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-22-havis-cf1-pe02.png\"],\"havis-cf1-pe02-pb1\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-22-havis-cf1-pe02-pb1.png\"],\"ram-s\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-22-ram-s.png\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-3d66aba3d121.jpg\",\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-kfg-8b970222cd53.jpg\"],\"ram-l\":[\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-22-ram-l.png\"]}};\n\n  var photo        = wrap.querySelector(\"#kfgPhoto\");\n  var photoImg     = wrap.querySelector(\"#kfgPhotoImg\");\n  var previewTitle = wrap.querySelector(\"#kfgPreviewTitle\");\n  var previewSub   = wrap.querySelector(\"#kfgPreviewSub\");\n  var liveRows     = wrap.querySelector(\"#kfgLiveRows\");\n  var lightbox     = document.querySelector(\"#kfgLightbox\");\n  var lightboxImg  = document.querySelector(\"#kfgLightboxImg\");\n  var lightboxCap  = document.querySelector(\"#kfgLightboxCaption\");\n  var lightboxClose = document.querySelector(\"#kfgLightboxClose\");\n  var totalEl      = wrap.querySelector(\"#kfgTotal\");\n  var summaryEl    = wrap.querySelector(\"#kfgSummary\");\n  var summaryLabel = wrap.querySelector(\"#kfgSummaryLabel\");\n  var summaryItems = wrap.querySelector(\"#kfgSummaryItems\");\n  var ctaBtn       = wrap.querySelector(\"#kfgCta\");\n  \/\/ Sticky bar removed (v7), references kept as no-op for backward compat\n  var stickyBar = null, stickyTotal = null, stickyCount = null, stickyCountLabel = null, stickyCta = null;\n\n  function fmt(n) {\n    return Math.round(n).toLocaleString(\"cs-CZ\").replace(\/\\u00a0\/g, \" \");\n  }\n\n  function pluralItems(n) {\n    if (n === 1) return \"polo\u017eka\";\n    \/\/ Use nested ifs (NOT amp-amp); WP wptexturize encodes amp-amp in script blocks -> SyntaxError.\n    if (n >= 2) {\n      if (n <= 4) return \"polo\u017eky\";\n    }\n    return \"polo\u017eek\";\n  }\n\n  \/\/ \u2500\u2500 swapPhoto: PICTURE-aware (LSCache + QUIC.cloud wrap into <picture>) \u2500\u2500\n  function swapPhoto(src, alt) {\n    if (!src) return;\n    var realImg = photoImg.tagName === \"PICTURE\" ? photoImg.querySelector(\"img\") : photoImg;\n    if (!realImg) return;\n    if (realImg.src === src) return;\n\n    var doSwap = function() {\n      if (photoImg.tagName === \"PICTURE\") {\n        var sources = photoImg.querySelectorAll(\"source\");\n        for (var si = 0; si < sources.length; si++) {\n          sources[si].setAttribute(\"srcset\", src);\n        }\n      }\n      realImg.src = src;\n      realImg.alt = alt || \"\";\n      if (photo) photo.classList.remove(\"kfg-empty\");\n      if (previewTitle) previewTitle.textContent = alt || \"\";\n    };\n\n    if (document.startViewTransition) {\n      document.startViewTransition(doSwap);\n    } else {\n      photo.classList.add(\"swapping\");\n      setTimeout(function() {\n        doSwap();\n        photo.classList.remove(\"swapping\");\n      }, 180);\n    }\n  }\n\n  \/\/ \u2500\u2500 Lightbox \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function openLightbox() {\n    if (!lightbox || !lightboxImg) return;\n    var inner = photoImg.tagName === \"PICTURE\" ? photoImg.querySelector(\"img\") : photoImg;\n    if (!inner || !inner.src) return;\n\n    var doOpen = function() {\n      lightboxImg.src = inner.src;\n      lightboxImg.alt = inner.alt || \"\";\n      if (lightboxCap) lightboxCap.textContent = (previewTitle ? previewTitle.textContent : \"\") + (previewSub.textContent ? \" \u00b7 \" + previewSub.textContent : \"\");\n      inner.style.viewTransitionName = \"none\";\n      lightbox.classList.add(\"active\");\n      document.body.style.overflow = \"hidden\";\n    };\n\n    if (document.startViewTransition) {\n      document.startViewTransition(doOpen);\n    } else {\n      doOpen();\n    }\n  }\n  function closeLightbox() {\n    if (!lightbox) return;\n    var inner = photoImg.tagName === \"PICTURE\" ? photoImg.querySelector(\"img\") : photoImg;\n\n    var doClose = function() {\n      lightbox.classList.remove(\"active\");\n      document.body.style.overflow = \"\";\n      if (inner) inner.style.viewTransitionName = \"\";\n    };\n\n    if (document.startViewTransition) {\n      document.startViewTransition(doClose);\n    } else {\n      doClose();\n    }\n  }\n  if (photo) {\n    photo.addEventListener(\"click\", openLightbox);\n    photo.addEventListener(\"keydown\", function(e) {\n      if (e.key === \"Enter\") openLightbox();\n      if (e.key === \" \") { e.preventDefault(); openLightbox(); }\n    });\n  }\n  if (lightbox) {\n    lightbox.addEventListener(\"click\", function(e) {\n      if (e.target === lightbox) closeLightbox();\n      if (e.target === lightboxClose) closeLightbox();\n    });\n    if (lightboxImg) {\n      lightboxImg.addEventListener(\"click\", function(e) { e.stopPropagation(); });\n    }\n  }\n  \/\/ ESC closes lightbox. NESTED IFs (NOT amp-amp), see WP wptexturize note above.\n  document.addEventListener(\"keydown\", function(e) {\n    if (e.key === \"Escape\") {\n      if (lightbox) {\n        if (lightbox.classList.contains(\"active\")) {\n          closeLightbox();\n        }\n      }\n    }\n  });\n\n  function num(el, attr) {\n    if (!el) return 0;\n    if (!el.dataset) return 0;\n    var v = el.dataset[attr];\n    var n = parseInt(v, 10);\n    return isNaN(n) ? 0 : n;\n  }\n\n  \/\/ \u2500\u2500 URL state encoding (share + restore configuration) \u2500\u2500\n  \/\/ Encode current selection into URL hash: #k=kc50-22&#038;s=havis-cf1&#038;a=ocr315e,epson-printer&#038;e=exthub-2\n  \/\/ Pattern from Claude Design handoff app.jsx loadFromURL\/saveToURL.\n  function saveToURL() {\n    var kInput = wrap.querySelector('input[name=\"kfg-kiosk\"]:checked');\n    var sInput = wrap.querySelector('input[name=\"kfg-stand\"]:checked');\n    var eInput = wrap.querySelector('input[name=\"kfg-exthub\"]:checked');\n    if (!kInput) return;\n    var params = new URLSearchParams();\n    params.set(\"k\", kInput.value);\n    if (sInput) {\n      if (sInput.value !== \"none\") params.set(\"s\", sInput.value);\n    }\n    var addonIds = [];\n    wrap.querySelectorAll('input[type=\"checkbox\"][name^=\"kfg-addon-\"]:checked').forEach(function(cb) {\n      addonIds.push(cb.value);\n    });\n    if (addonIds.length > 0) params.set(\"a\", addonIds.join(\",\"));\n    if (eInput) {\n      if (eInput.value) params.set(\"e\", eInput.value);\n    }\n    var newHash = \"#\" + params.toString();\n    if (newHash !== window.location.hash) {\n      try { history.replaceState(null, \"\", newHash); } catch(e) {}\n    }\n  }\n  function loadFromURL() {\n    var hash = window.location.hash || \"\";\n    if (!hash.startsWith(\"#\")) return false;\n    var params = new URLSearchParams(hash.slice(1));\n    if (!params.has(\"k\")) return false;\n    var kId = params.get(\"k\");\n    var kRadio = wrap.querySelector('input[name=\"kfg-kiosk\"][value=\"' + kId + '\"]');\n    if (kRadio) {\n      kRadio.checked = true;\n    }\n    var sId = params.get(\"s\");\n    if (sId) {\n      var sRadio = wrap.querySelector('input[name=\"kfg-stand\"][value=\"' + sId + '\"]');\n      if (sRadio) sRadio.checked = true;\n    } else {\n      var noneStand = wrap.querySelector('input[name=\"kfg-stand\"][value=\"none\"]');\n      if (noneStand) noneStand.checked = true;\n    }\n    \/\/ Clear all addons first\n    wrap.querySelectorAll('input[type=\"checkbox\"][name^=\"kfg-addon-\"]').forEach(function(cb) {\n      cb.checked = false;\n    });\n    var aStr = params.get(\"a\") || \"\";\n    aStr.split(\",\").filter(Boolean).forEach(function(aid) {\n      var cb = wrap.querySelector('input[type=\"checkbox\"][value=\"' + aid + '\"]');\n      if (cb) cb.checked = true;\n    });\n    var eId = params.get(\"e\") || \"\";\n    var eRadio = wrap.querySelector('input[name=\"kfg-exthub\"][value=\"' + eId + '\"]');\n    if (eRadio) eRadio.checked = true;\n    return true;\n  }\n\n  \/\/ \u2500\u2500 Sync .kfg-selected class on radio\/checkbox label state \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function syncSelectedClass() {\n    wrap.querySelectorAll(\".kfg-opt\").forEach(function(opt) {\n      var input = opt.querySelector('input[type=\"radio\"], input[type=\"checkbox\"]');\n      if (!input) return;\n      opt.classList.toggle(\"kfg-selected\", input.checked);\n    });\n  }\n\n  \/\/ \u2500\u2500 Recalc price + live preview + summary \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function recalc() {\n    var kioskInput = wrap.querySelector('input[name=\"kfg-kiosk\"]:checked');\n    var standInput = wrap.querySelector('input[name=\"kfg-stand\"]:checked');\n    if (!kioskInput || !standInput) return;\n    var kioskOpt = kioskInput.closest(\".kfg-opt\");\n    var standOpt = standInput.closest(\".kfg-opt\");\n    if (!kioskOpt || !standOpt) return;\n\n    var kP = num(kioskOpt, \"price\");\n    var sP = num(standOpt, \"price\");\n    var aP = 0;\n    var items = [];\n\n    items.push({name: kioskOpt.dataset.name, price: kP});\n\n    \/\/ Bundle items (CBO 2026-05-24 v9 fix #4) \u2014 for tablet ET401, expand bundled accessories\n    \/\/ (power supply + DC cable) as separate line items with price=0 (included in kiosek price)\n    if (kioskOpt.dataset.bundle) {\n      try {\n        var bundleItems = JSON.parse(kioskOpt.dataset.bundle);\n        bundleItems.forEach(function(b) {\n          items.push({name: b.name, price: 0, bundled: true});\n        });\n      } catch(e) {}\n    }\n\n    var deviceType = kioskOpt.dataset.deviceType || \"kiosek\";\n    \/\/ Stand counted for ALL device types \u2014 tablet can have VESA stand (CBO 2026-05-24 v9)\n    if (sP > 0) items.push({name: standOpt.dataset.name, price: sP});\n    if (deviceType !== \"tablet\") {\n      \/\/ Addon checkboxes (kiosek only \u2014 Epson + OCR don't fit tablet form factor)\n      wrap.querySelectorAll('input[type=\"checkbox\"]:checked').forEach(function(cb) {\n        var opt = cb.closest(\".kfg-opt\");\n        if (!opt) return;\n        var p = num(opt, \"price\");\n        aP += p;\n        items.push({name: opt.dataset.name, price: p});\n      });\n      \/\/ ExtHUB (kiosek only)\n      var exthubInput = wrap.querySelector('input[name=\"kfg-exthub\"]:checked');\n      if (exthubInput) {\n        if (exthubInput.value) {\n          var exthubOpt = exthubInput.closest(\".kfg-opt\");\n          if (exthubOpt) {\n            var ep = num(exthubOpt, \"price\");\n            aP += ep;\n            items.push({name: exthubOpt.dataset.name, price: ep});\n          }\n        }\n      }\n    }\n\n    var total = kP + sP + aP;\n\n    \/\/ Update total\n    if (totalEl) {\n      var prev = parseInt(totalEl.dataset.lastTotal || \"0\", 10);\n      totalEl.textContent = fmt(total);\n      totalEl.dataset.lastTotal = String(total);\n      \/\/ Show price delta pill (Filip's feedback v8)\n      if (prev > 0) {\n        if (prev !== total) {\n          var diff = total - prev;\n          var deltaEl = wrap.querySelector(\"#kfgPriceDelta\");\n          var bigEl = wrap.querySelector(\".kfg-summary-price .big\");\n          if (deltaEl) {\n            var sign = diff > 0 ? \"+\" : \"\u2212\";\n            deltaEl.textContent = sign + fmt(Math.abs(diff)) + \" K\u010d\";\n            deltaEl.classList.remove(\"up\", \"down\", \"visible\");\n            \/\/ Force reflow then add class for animation restart\n            void deltaEl.offsetWidth;\n            deltaEl.classList.add(diff > 0 ? \"up\" : \"down\", \"visible\");\n            \/\/ Flash big number\n            if (bigEl) {\n              bigEl.classList.remove(\"flash\");\n              void bigEl.offsetWidth;\n              bigEl.classList.add(\"flash\");\n            }\n            \/\/ Hide pill after 2.5s\n            if (window.__kfgDeltaHide) clearTimeout(window.__kfgDeltaHide);\n            window.__kfgDeltaHide = setTimeout(function() {\n              deltaEl.classList.remove(\"visible\");\n            }, 2500);\n          }\n        }\n      }\n    }\n    if (stickyTotal) stickyTotal.textContent = fmt(total);\n\n    \/\/ Update sticky count\n    if (stickyCount) stickyCount.textContent = items.length;\n    if (stickyCountLabel) stickyCountLabel.textContent = pluralItems(items.length);\n\n    \/\/ Update summary label\n    if (summaryLabel) {\n      summaryLabel.textContent = \"Va\u0161e sestava \u00b7 \" + items.length + \" \" + pluralItems(items.length);\n    }\n\n    \/\/ Update summary items pills\n    if (summaryItems) {\n      summaryItems.innerHTML = items.map(function(i) {\n        var safeName = i.name.replace(\/<\/g, \"&lt;\").replace(\/>\/g, \"&gt;\");\n        return '<span class=\"kfg-summary-item\">' + safeName + '<\/span>';\n      }).join(\"\");\n    }\n\n    \/\/ Update live preview rows. Bundled items (price=0, bundled:true) show \"v cen\u011b\" instead of \"0 K\u010d\".\n    if (liveRows) {\n      liveRows.innerHTML = items.map(function(i) {\n        var safeName = i.name.replace(\/<\/g, \"&lt;\").replace(\/>\/g, \"&gt;\");\n        var priceLabel = i.bundled ? '<span class=\"bundled-tag\">v cen\u011b<\/span>' : (fmt(i.price) + ' K\u010d');\n        return '<div class=\"kfg-live-row\"><span class=\"k\">' + safeName + '<\/span><span class=\"v\">' + priceLabel + '<\/span><\/div>';\n      }).join(\"\");\n    }\n\n    \/\/ Update CTA URL with technical config + human-readable summary.\n    \/\/ `konfig` param je \u010diteln\u00fd n\u00e1zev sestavy pro Pipedrive deal note (sales team).\n    \/\/ `config` param obsahuje technick\u00e9 IDs pro budouc\u00ed auto-import.\n    \/\/ `hash` na konci umo\u017e\u0148uje u\u017eivateli se vr\u00e1tit p\u0159es browser back button.\n    var configKey = kioskOpt.dataset.id;\n    if (deviceType !== \"tablet\") {\n      configKey += \"+\" + standOpt.dataset.id;\n      var addonIds = [];\n      wrap.querySelectorAll('input[type=\"checkbox\"]:checked').forEach(function(cb) {\n        var opt = cb.closest(\".kfg-opt\");\n        if (opt) addonIds.push(opt.dataset.id);\n      });\n      var exthubInputC = wrap.querySelector('input[name=\"kfg-exthub\"]:checked');\n      if (exthubInputC) {\n        if (exthubInputC.value) addonIds.push(exthubInputC.value);\n      }\n      if (addonIds.length > 0) configKey += \"+\" + addonIds.join(\",\");\n    }\n    \/\/ Human-readable summary text for Pipedrive deal\n    var humanSummary = items.map(function(i) {\n      return i.name + \" (\" + fmt(i.price) + \" K\u010d)\";\n    }).join(\" + \");\n    humanSummary += \" = celkem \" + fmt(total) + \" K\u010d bez DPH\";\n    \/\/ Build hash from current state (mirrors saveToURL).\n    \/\/ v11 fix #4: stand included for ALL device types (tablet can have VESA stand).\n    var hashParams = new URLSearchParams();\n    hashParams.set(\"k\", kioskOpt.dataset.id);\n    if (standOpt) {\n      if (standOpt.dataset.id !== \"none\") hashParams.set(\"s\", standOpt.dataset.id);\n    }\n    if (deviceType !== \"tablet\") {\n      var hashAddonIds = [];\n      wrap.querySelectorAll('input[type=\"checkbox\"][name^=\"kfg-addon-\"]:checked').forEach(function(cb) {\n        hashAddonIds.push(cb.value);\n      });\n      if (hashAddonIds.length > 0) hashParams.set(\"a\", hashAddonIds.join(\",\"));\n      var hashEx = wrap.querySelector('input[name=\"kfg-exthub\"]:checked');\n      if (hashEx) {\n        if (hashEx.value) hashParams.set(\"e\", hashEx.value);\n      }\n    }\n    \/\/ Store state for CTA click handler (which opens footer form + pre-fills message)\n    var shareUrl = window.location.origin + window.location.pathname + \"#\" + hashParams.toString();\n    kfgState.humanSummary = humanSummary;\n    kfgState.configKey = configKey;\n    kfgState.total = total;\n    kfgState.shareUrl = shareUrl;\n    if (ctaBtn) ctaBtn.dataset.konfig = humanSummary;\n    if (stickyCta) stickyCta.dataset.konfig = humanSummary;\n\n    syncSelectedClass();\n    \/\/ Always sync URL hash (covers selectPreset which manipulates radios without\n    \/\/ dispatching change events one by one)\n    saveToURL();\n    \/\/ Refresh derived state (need cards + active preset highlighting)\n    if (typeof refreshNeedCards === \"function\") refreshNeedCards();\n    if (typeof refreshPresetCards === \"function\") refreshPresetCards();\n  }\n\n  \/\/ State container for CTA \/ share \/ PDF actions\n  var kfgState = { humanSummary: \"\", configKey: \"\", total: 0, shareUrl: \"\" };\n\n  \/\/ \u2500\u2500 Gallery (thumbs \/ dots+arrows styles) \u2500\u2500\n  var thumbsEl  = wrap.querySelector(\"#kfgThumbs\");\n  var dotsBar   = wrap.querySelector(\"#kfgDotsBar\");\n  var dotsEl    = wrap.querySelector(\"#kfgDots\");\n  var arrowPrev = wrap.querySelector(\"#kfgArrowPrev\");\n  var arrowNext = wrap.querySelector(\"#kfgArrowNext\");\n  var galleryState = { urls: [], index: 0, name: \"\" };\n\n  function clearGallery() {\n    thumbsEl.classList.remove(\"has-gallery\");\n    dotsBar.classList.remove(\"has-gallery\");\n    thumbsEl.innerHTML = \"\";\n    dotsEl.innerHTML = \"\";\n    if (previewSub) previewSub.textContent = \"\";\n  }\n\n  function selectPhoto(idx) {\n    var u = galleryState.urls[idx];\n    if (!u) return;\n    galleryState.index = idx;\n    \/\/ v13 (CBO 2026-06-03): aggregated config gallery carries a per-photo name array.\n    var nm = (galleryState.names && galleryState.names[idx]) ? galleryState.names[idx] : galleryState.name;\n    swapPhoto(u, nm);\n    if (previewSub) previewSub.textContent = nm ? nm : (\"foto \" + (idx + 1) + \" \/ \" + galleryState.urls.length);\n    thumbsEl.querySelectorAll(\".kfg-thumb\").forEach(function(t, i) {\n      t.classList.toggle(\"active\", i === idx);\n    });\n    dotsEl.querySelectorAll(\".kfg-dot\").forEach(function(d, i) {\n      d.classList.toggle(\"active\", i === idx);\n    });\n    if (arrowPrev) arrowPrev.disabled = idx === 0;\n    if (arrowNext) arrowNext.disabled = idx === galleryState.urls.length - 1;\n  }\n\n  function renderGallery(opt) {\n    clearGallery();\n    var galleryStr = opt.dataset.gallery;\n    if (!galleryStr) return;\n    var urls = galleryStr.split(\",\").filter(Boolean);\n    if (urls.length < 2) return;\n    var style = opt.dataset.galleryStyle || \"thumbs\";\n    galleryState.urls = urls;\n    galleryState.name = opt.dataset.name || \"\";\n    galleryState.index = 0;\n    if (previewSub) previewSub.textContent = \"foto 1 \/ \" + urls.length;\n\n    if (style === \"thumbs\") {\n      thumbsEl.classList.add(\"has-gallery\");\n      urls.forEach(function(u, i) {\n        var t = document.createElement(\"button\");\n        t.type = \"button\";\n        t.className = \"kfg-thumb\" + (i === 0 ? \" active\" : \"\");\n        t.setAttribute(\"aria-label\", \"Zobrazit foto \" + galleryState.name + \" #\" + (i + 1));\n        t.innerHTML = '<img loading=\"lazy\" decoding=\"async\" src=\"' + u + '\" alt=\"\" loading=\"lazy\" width=\"64\" height=\"64\">';\n        t.addEventListener(\"click\", function() { selectPhoto(i); });\n        thumbsEl.appendChild(t);\n      });\n    } else if (style === \"dots\") {\n      dotsBar.classList.add(\"has-gallery\");\n      urls.forEach(function(_, i) {\n        var d = document.createElement(\"button\");\n        d.type = \"button\";\n        d.className = \"kfg-dot\" + (i === 0 ? \" active\" : \"\");\n        d.setAttribute(\"aria-label\", \"Foto \" + (i + 1));\n        d.addEventListener(\"click\", function() { selectPhoto(i); });\n        dotsEl.appendChild(d);\n      });\n      if (arrowPrev) arrowPrev.disabled = true;\n      if (arrowNext) arrowNext.disabled = urls.length <= 1;\n    }\n  }\n\n  \/\/ Custom gallery rendering \u2014 for preset photo aggregation (CBO 2026-05-24 v9 fix #2)\n  \/\/ Used by Office preset to show kiosek+stand+reader photos aggregated together\n  function renderCustomGallery(urls, name) {\n    clearGallery();\n    if (!urls || urls.length < 2) return;\n    galleryState.urls = urls;\n    galleryState.name = name || \"\";\n    galleryState.index = 0;\n    if (previewSub) previewSub.textContent = \"foto 1 \/ \" + urls.length;\n    thumbsEl.classList.add(\"has-gallery\");\n    urls.forEach(function(u, i) {\n      var t = document.createElement(\"button\");\n      t.type = \"button\";\n      t.className = \"kfg-thumb\" + (i === 0 ? \" active\" : \"\");\n      t.setAttribute(\"aria-label\", \"Zobrazit foto \" + galleryState.name + \" #\" + (i + 1));\n      t.innerHTML = '<img loading=\"lazy\" decoding=\"async\" src=\"' + u + '\" alt=\"\" loading=\"lazy\" width=\"64\" height=\"64\">';\n      t.addEventListener(\"click\", function() { selectPhoto(i); });\n      thumbsEl.appendChild(t);\n    });\n  }\n\n  if (arrowPrev) {\n    arrowPrev.addEventListener(\"click\", function() {\n      if (galleryState.index > 0) selectPhoto(galleryState.index - 1);\n    });\n  }\n  if (arrowNext) {\n    arrowNext.addEventListener(\"click\", function() {\n      if (galleryState.index < galleryState.urls.length - 1) selectPhoto(galleryState.index + 1);\n    });\n  }\n\n  \/\/ \u2500\u2500 Device-type \/ per-kiosek section visibility \u2500\u2500\n  \/\/ CBO 2026-05-24 v10 \u2014 driven by data-allows on each kiosek option, not hardcoded device_type.\n  \/\/   allows=[\"stand\",\"addons\",\"exthub\"] \u2192 KC50 (default, all sections visible)\n  \/\/   allows=[\"stand\"] \u2192 Tablet ET401 (jen Bez stojanu + VESA visible, NO addons, NO exthub)\n  \/\/   allows=[\"exthub\"] \u2192 OLED 30\" Transparent (standalone, NO stand, NO addons, jen ExtHUB)\n  function applyDeviceTypeVisibility() {\n    var kioskInput = wrap.querySelector('input[name=\"kfg-kiosk\"]:checked');\n    if (!kioskInput) return;\n    var kioskOpt = kioskInput.closest(\".kfg-opt\");\n    if (!kioskOpt) return;\n    var deviceType = kioskOpt.dataset.deviceType || \"kiosek\";\n    var allowsStr = kioskOpt.dataset.allows || \"stand,addons,exthub\";\n    var allows = allowsStr.split(\",\").filter(Boolean);\n    var allowStand = allows.indexOf(\"stand\") >= 0;\n    var allowAddons = allows.indexOf(\"addons\") >= 0;\n    var allowExthub = allows.indexOf(\"exthub\") >= 0;\n\n    \/\/ Section toggles\n    var stojanSection = wrap.querySelector('.kfg-opts[data-section=\"stojan\"]');\n    var doplnkySection = wrap.querySelector('.kfg-opts[data-section=\"doplnky\"]');\n    var exthubSection = wrap.querySelector('.kfg-opts[data-section=\"exthub\"]');\n\n    \/\/ Helper to also toggle the sub-head <div class=\"kfg-sub-head\"> that precedes the section\n    function toggleSection(sectionEl, show) {\n      if (!sectionEl) return;\n      if (show) sectionEl.classList.remove(\"hidden-by-device\");\n      else sectionEl.classList.add(\"hidden-by-device\");\n      \/\/ Toggle preceding sub-head\n      var prev = sectionEl.previousElementSibling;\n      if (prev) {\n        if (prev.classList.contains(\"kfg-sub-head\")) {\n          if (show) prev.classList.remove(\"hidden-by-device\");\n          else prev.classList.add(\"hidden-by-device\");\n        }\n      }\n    }\n    toggleSection(stojanSection, allowStand);\n    toggleSection(doplnkySection, allowAddons);\n    toggleSection(exthubSection, allowExthub);\n\n    \/\/ Filter stand options by data-compat (only relevant if stand section is shown)\n    if (allowStand) {\n      wrap.querySelectorAll('.kfg-opts[data-section=\"stojan\"] .kfg-opt').forEach(function(opt) {\n        var compat = (opt.dataset.compat || \"kiosek\").split(\",\").filter(Boolean);\n        var compatible = compat.indexOf(deviceType) >= 0;\n        opt.style.display = compatible ? \"\" : \"none\";\n      });\n      \/\/ If currently selected stand isn't compatible, switch to \"none\"\n      var currentStandInput = wrap.querySelector('input[name=\"kfg-stand\"]:checked');\n      if (currentStandInput) {\n        var currentStandOpt = currentStandInput.closest(\".kfg-opt\");\n        if (currentStandOpt && currentStandOpt.style.display === \"none\") {\n          var noneStand = wrap.querySelector('input[name=\"kfg-stand\"][value=\"none\"]');\n          if (noneStand) {\n            noneStand.checked = true;\n            noneStand.dispatchEvent(new Event(\"change\", {bubbles: true}));\n          }\n        }\n      }\n    } else {\n      \/\/ Stand section hidden \u2192 force stand = none\n      var noneStandH = wrap.querySelector('input[name=\"kfg-stand\"][value=\"none\"]');\n      if (noneStandH) noneStandH.checked = true;\n    }\n\n    \/\/ If addons hidden \u2192 clear addon checkboxes\n    if (!allowAddons) {\n      wrap.querySelectorAll('input[type=\"checkbox\"][name^=\"kfg-addon-\"]').forEach(function(cb) {\n        cb.checked = false;\n      });\n    }\n    \/\/ If exthub hidden \u2192 force \"no exthub\"\n    if (!allowExthub) {\n      var exthubNoneH = wrap.querySelector('input[name=\"kfg-exthub\"][value=\"\"]');\n      if (exthubNoneH) exthubNoneH.checked = true;\n    }\n  }\n\n  \/\/ -- Need cards, derived state pattern (v7 per Claude Design v2) --\n  \/\/ Each need-card is ON\/OFF based on whether current `sel` satisfies the need filter.\n  \/\/ Clicking toggles \u2192 applyNeedToggle mutates sel to add\/remove the corresponding HW.\n  \/\/ Derived state means click pattern is bidirectional: select HW manually \u2192 relevant need lights up;\n  \/\/ click need \u2192 HW auto-selects.\n\n  function getSelection() {\n    var k = wrap.querySelector('input[name=\"kfg-kiosk\"]:checked');\n    var s = wrap.querySelector('input[name=\"kfg-stand\"]:checked');\n    var e = wrap.querySelector('input[name=\"kfg-exthub\"]:checked');\n    var p = wrap.querySelector('input[type=\"checkbox\"][value=\"epson-printer\"]:checked');\n    var r = wrap.querySelector('input[type=\"checkbox\"][value=\"ocr315e\"]:checked');\n    return {\n      kiosk: k ? k.value : \"kc50-15\",\n      stand: s ? s.value : \"none\",\n      printer: !!p,\n      reader: !!r,\n      exthub: e ? (e.value || \"exthub-none\") : \"exthub-none\",\n    };\n  }\n\n  function getOptTags(name, value) {\n    var sel = 'input[name=\"' + name + '\"][value=\"' + value + '\"]';\n    var input = wrap.querySelector(sel);\n    if (!input) return [];\n    var opt = input.closest(\".kfg-opt\");\n    if (!opt) return [];\n    return (opt.dataset.tags || \"\").split(\",\").filter(Boolean);\n  }\n\n  function isNeedSatisfied(filter, sel) {\n    if (filter.printer === true)  return sel.printer === true;\n    if (filter.reader === true)   return sel.reader === true;\n    if (filter.exthub === true)   return sel.exthub !== \"exthub-none\";\n    if (filter.kioskTag) {\n      var ktags = getOptTags(\"kfg-kiosk\", sel.kiosk);\n      return ktags.indexOf(filter.kioskTag) >= 0;\n    }\n    if (filter.standTag) {\n      var stags = getOptTags(\"kfg-stand\", sel.stand);\n      return stags.indexOf(filter.standTag) >= 0;\n    }\n    return false;\n  }\n\n  function setRadio(name, value) {\n    var r = wrap.querySelector('input[name=\"' + name + '\"][value=\"' + value + '\"]');\n    if (r) {\n      if (!r.checked) {\n        r.checked = true;\n        r.dispatchEvent(new Event(\"change\", {bubbles: true}));\n      }\n    }\n  }\n  function setCheckbox(value, checked) {\n    var c = wrap.querySelector('input[type=\"checkbox\"][value=\"' + value + '\"]');\n    if (c) {\n      if (c.checked !== checked) {\n        c.checked = checked;\n        c.dispatchEvent(new Event(\"change\", {bubbles: true}));\n      }\n    }\n  }\n\n  function applyNeedToggle(needId, currentlyOn) {\n    \/\/ CBO 2026-05-24 v9 \u2014 1:1 mapping, NO cascading. Each chip toggles ONLY its matching item.\n    \/\/ \u017d\u00e1dn\u00e9 auto-selectov\u00e1n\u00ed v\u00edce polo\u017eek naraz. Pokud chip nem\u00e1 p\u0159\u00edmou matching polo\u017eku\n    \/\/ (compact\/wall-mount jsou alias pro stand=none), just toggle the single related radio\/checkbox.\n    var turnOn = !currentlyOn;\n    var sel = getSelection();\n    switch (needId) {\n      case \"print-qr\":\n        \/\/ Toggluje POUZE Epson printer checkbox\n        setCheckbox(\"epson-printer\", turnOn);\n        break;\n      case \"issue-cards\":\n        \/\/ Toggluje POUZE ExtHUB (1 v\u00fddejn\u00edk when ON, none when OFF)\n        if (turnOn) { setRadio(\"kfg-exthub\", \"exthub-1\"); }\n        else { setRadio(\"kfg-exthub\", \"\"); }\n        break;\n      case \"scan-id\":\n        \/\/ Toggluje POUZE OCR315-E checkbox\n        setCheckbox(\"ocr315e\", turnOn);\n        break;\n      case \"large-screen\":\n        \/\/ Toggluje POUZE kiosek (22\" when ON, 15\" when OFF iff currently 22\")\n        if (turnOn) { setRadio(\"kfg-kiosk\", \"kc50-22\"); }\n        else { if (sel.kiosk === \"kc50-22\") setRadio(\"kfg-kiosk\", \"kc50-15\"); }\n        break;\n      case \"outdoor\":\n        \/\/ Toggluje POUZE kiosek (tablet-et401 when ON, kc50-15 when OFF iff currently tablet)\n        if (turnOn) { setRadio(\"kfg-kiosk\", \"tablet-et401\"); }\n        else { if (sel.kiosk === \"tablet-et401\") setRadio(\"kfg-kiosk\", \"kc50-15\"); }\n        break;\n      case \"wall-mount\":\n        \/\/ Toggluje POUZE stand: \"none\" (vlastn\u00ed\/n\u00e1st\u011bnn\u00e1 mont\u00e1\u017e) when ON, default havis-cf1 when OFF\n        if (turnOn) { setRadio(\"kfg-stand\", \"none\"); }\n        else { if (sel.stand === \"none\") setRadio(\"kfg-stand\", \"havis-cf1\"); }\n        break;\n      case \"compact\":\n        \/\/ Toggluje POUZE stand: RAM-S (kompaktn\u00ed) when ON, default havis-cf1 when OFF\n        if (turnOn) { setRadio(\"kfg-stand\", \"ram-s\"); }\n        else { if (sel.stand === \"ram-s\") setRadio(\"kfg-stand\", \"havis-cf1\"); }\n        break;\n      case \"full-height\":\n        \/\/ Toggluje POUZE stand: full-height (havis-cf1-r1-pb1) when ON, default havis-cf1 when OFF\n        if (turnOn) { setRadio(\"kfg-stand\", \"havis-cf1-r1-pb1\"); }\n        else {\n          var stagsFh = getOptTags(\"kfg-stand\", sel.stand);\n          if (stagsFh.indexOf(\"full-height\") >= 0) setRadio(\"kfg-stand\", \"havis-cf1\");\n        }\n        break;\n    }\n  }\n\n  function refreshNeedCards() {\n    \/\/ CBO 2026-05-24 v10 \u2014 DECOUPLED from HW state.\n    \/\/ Chip state is now USER-INTENT ONLY: only explicit user click toggles .on class.\n    \/\/ Multiple chips with overlapping filters (e.g. \"wall-mount\" + \"compact\" both = standTag) used to\n    \/\/ light up simultaneously when HW state matched \u2014 that read as \"cascading auto-select\" to CBO.\n    \/\/ No-op fallback. The actual on\/off toggle happens in the chip click handler.\n    \/\/ (We still need this function for backward compatibility with selectPreset() + reset.)\n  }\n\n  function clearAllNeedCards() {\n    \/\/ Clear all chip selections (called on preset click or reset)\n    wrap.querySelectorAll(\".kfg-need-card\").forEach(function(card) {\n      card.classList.remove(\"on\");\n      card.setAttribute(\"aria-pressed\", \"false\");\n    });\n  }\n\n  function refreshPresetCards() {\n    var sel = getSelection();\n    wrap.querySelectorAll(\".kfg-preset\").forEach(function(card) {\n      var pK = card.dataset.presetKiosk;\n      var pS = card.dataset.presetStand || \"none\";\n      var pA = (card.dataset.presetAddons || \"\").split(\",\").filter(Boolean);\n      var pE = card.dataset.presetExthub || \"exthub-none\";\n      \/\/ Use nested ifs (NOT amp-amp), WP wptexturize encodes amp-amp in <script>.\n      var match = false;\n      if (pK === sel.kiosk) {\n        if (pS === sel.stand) {\n          if (pE === (sel.exthub || \"exthub-none\")) {\n            var printerMatch = (pA.indexOf(\"epson-printer\") >= 0) === sel.printer;\n            if (printerMatch) {\n              var readerMatch = (pA.indexOf(\"ocr315e\") >= 0) === sel.reader;\n              if (readerMatch) match = true;\n            }\n          }\n        }\n      }\n      card.classList.toggle(\"active\", match);\n    });\n  }\n\n  \/\/ Click on need card \u2192 toggle THIS chip's own .on class + call applyNeedToggle.\n  \/\/ CBO 2026-05-24 v10 \u2014 chip state is decoupled from HW state. Only USER CLICK toggles a chip.\n  \/\/ Multiple chips cannot light up simultaneously from one click. Each chip is its own switch.\n  \/\/ v11 fix #3 \u2014 Path B \"fresh start\": when user clicks first chip AND a preset is active,\n  \/\/ automatically reset HW to defaults + clear preset before applying chip. So Path B begins clean.\n  wrap.querySelectorAll(\".kfg-need-card\").forEach(function(card) {\n    card.addEventListener(\"click\", function() {\n      var needId = card.dataset.needId;\n      if (!needId) return;\n      var currentlyOn = card.classList.contains(\"on\");\n\n      \/\/ v11 fix #3: detect \"starting fresh in Path B\" scenario:\n      \/\/ No chips currently lit + a preset is active = user is pivoting from preset to chip path.\n      \/\/ Reset HW to defaults + clear preset.\n      if (!currentlyOn) {\n        var anyChipOn = wrap.querySelector(\".kfg-need-card.on\") !== null;\n        var anyPresetActive = wrap.querySelector(\".kfg-preset.active\") !== null;\n        if (!anyChipOn && anyPresetActive) {\n          \/\/ Clear preset highlight\n          wrap.querySelectorAll(\".kfg-preset\").forEach(function(p) { p.classList.remove(\"active\"); });\n          \/\/ Reset HW to defaults\n          var defaultKiosk = wrap.querySelector('input[name=\"kfg-kiosk\"][value=\"kc50-15\"]');\n          if (defaultKiosk) defaultKiosk.checked = true;\n          var defaultStand = wrap.querySelector('input[name=\"kfg-stand\"][value=\"none\"]');\n          if (defaultStand) defaultStand.checked = true;\n          wrap.querySelectorAll('input[type=\"checkbox\"][name^=\"kfg-addon-\"]').forEach(function(cb) {\n            cb.checked = false;\n          });\n          var exthubNoneR = wrap.querySelector('input[name=\"kfg-exthub\"][value=\"\"]');\n          if (exthubNoneR) exthubNoneR.checked = true;\n        }\n      }\n\n      \/\/ Apply hardware change BEFORE flipping the visual state (so applyNeedToggle reads correct \"currentlyOn\")\n      applyNeedToggle(needId, currentlyOn);\n      \/\/ Now flip THIS chip only\n      var newState = !currentlyOn;\n      card.classList.toggle(\"on\", newState);\n      card.setAttribute(\"aria-pressed\", newState ? \"true\" : \"false\");\n      \/\/ Sync HW state (recalc + applyDeviceTypeVisibility + photo + URL)\n      recalc();\n      applyDeviceTypeVisibility();\n      syncSelectedClass();\n      \/\/ refreshPresetCards still derives from HW state (presets ARE function of full config)\n      refreshPresetCards();\n    });\n  });\n\n  \/\/ \u2500\u2500 Preset bundles \u2500\u2500\n  function selectPreset(presetEl) {\n    var doMutate = function() {\n      wrap.querySelectorAll(\".kfg-preset\").forEach(function(p) { p.classList.remove(\"active\"); });\n      presetEl.classList.add(\"active\");\n      \/\/ v10 \u2014 preset click clears chip selections (chips reflect user-intent, not HW state)\n      if (typeof clearAllNeedCards === \"function\") clearAllNeedCards();\n\n      var kioskId  = presetEl.dataset.presetKiosk;\n      var standId  = presetEl.dataset.presetStand;\n      var addonIds = (presetEl.dataset.presetAddons || \"\").split(\",\").filter(Boolean);\n      var exthubId = presetEl.dataset.presetExthub;\n\n      \/\/ CBO 2026-06-10: set everything SILENTLY (no dispatch), then update ONCE.\n      \/\/ The old code dispatched change on kiosk + stand, which fired onChange \u2192 buildConfigGallery\n      \/\/ (each in its own View Transition) DURING this outer transition \u2014 that nested-transition\n      \/\/ pile-up caused the \"confusing flash\" when switching e.g. office \u2192 industrial.\n      var kioskRadio = wrap.querySelector('input[name=\"kfg-kiosk\"][value=\"' + kioskId + '\"]');\n      if (kioskRadio) kioskRadio.checked = true;\n\n      if (standId) {\n        var standRadio = wrap.querySelector('input[name=\"kfg-stand\"][value=\"' + standId + '\"]');\n        if (standRadio) standRadio.checked = true;\n      }\n\n      wrap.querySelectorAll('input[type=\"checkbox\"][name^=\"kfg-addon-\"]').forEach(function(cb) {\n        cb.checked = false;\n      });\n      addonIds.forEach(function(aid) {\n        var cb = wrap.querySelector('input[type=\"checkbox\"][value=\"' + aid + '\"]');\n        if (cb) cb.checked = true;\n      });\n\n      var exthubRadio = wrap.querySelector('input[name=\"kfg-exthub\"][value=\"' + (exthubId || \"\") + '\"]');\n      if (exthubRadio) exthubRadio.checked = true;\n\n      \/\/ Single update \u2014 visibility first (compatible stand already set, so no switch\/dispatch),\n      \/\/ then recalc + one aggregated gallery build.\n      applyDeviceTypeVisibility();\n      recalc();\n      syncSelectedClass();\n      buildConfigGallery();\n      saveToURL();\n    };\n\n    if (document.startViewTransition) {\n      var transition = document.startViewTransition(doMutate);\n      transition.finished.finally(function() {\n        var configSection = wrap.querySelector(\"#kfgConfigurator\");\n        if (configSection) configSection.scrollIntoView({behavior: \"smooth\", block: \"start\"});\n      });\n    } else {\n      doMutate();\n      var configSection = wrap.querySelector(\"#kfgConfigurator\");\n      if (configSection) configSection.scrollIntoView({behavior: \"smooth\", block: \"start\"});\n    }\n  }\n\n  wrap.querySelectorAll(\".kfg-preset\").forEach(function(preset) {\n    preset.addEventListener(\"click\", function() { selectPreset(preset); });\n  });\n\n  \/\/ \u2500\u2500 v13 (CBO 2026-06-03): AGGREGATED CONFIG GALLERY \u2014 \"v\u0161e spole\u010dn\u011b\" \u2500\u2500\n  \/\/ The preview always shows the ENTIRE current configuration: kiosek+stojan combo\n  \/\/ photo PLUS every selected component (tisk\u00e1rna \/ \u010dte\u010dka \/ ExtHUB \/ ET401 bundle).\n  \/\/ When the user adds ExtHUB last, the kiosek+stojan STAYS visible as a thumbnail \u2014\n  \/\/ nothing disappears. The just-changed item becomes the hero (large) photo, but the\n  \/\/ whole config remains in the thumbnail strip. Fixes the old \"last-touched wins\"\n  \/\/ bug where selecting a component hid the kiosek.\n\n  \/\/ First\/primary photo of an option (gallery[0] or data-img).\n  function firstPhotoOf(opt) {\n    if (!opt) return \"\";\n    if (opt.dataset.gallery) {\n      var g = opt.dataset.gallery.split(\",\").filter(Boolean);\n      if (g.length) return g[0];\n    }\n    return opt.dataset.img || \"\";\n  }\n\n  \/\/ Collect ALL photos of the current full configuration as a list of url+name pairs.\n  function collectConfigPhotos() {\n    var photos = [];\n    var seen = {};\n    function add(url, name) {\n      if (!url) return;\n      if (seen[url]) return;\n      seen[url] = true;\n      photos.push({url: url, name: name || \"\"});\n    }\n    function addOpt(opt, name) {\n      if (!opt) return;\n      if (opt.dataset.gallery) {\n        opt.dataset.gallery.split(\",\").filter(Boolean).forEach(function(u) { add(u, name); });\n      } else if (opt.dataset.img) {\n        add(opt.dataset.img, name);\n      }\n    }\n\n    \/\/ 1. Kiosek + stojan\n    var kInput = wrap.querySelector('input[name=\"kfg-kiosk\"]:checked');\n    if (!kInput) return photos;\n    var kOpt = kInput.closest(\".kfg-opt\");\n    if (!kOpt) return photos;\n    var k = kInput.value;\n    var kName = kOpt.dataset.name || \"\";\n    var sInput = wrap.querySelector('input[name=\"kfg-stand\"]:checked');\n    var s = sInput ? sInput.value : \"none\";\n    var sOpt = sInput ? sInput.closest(\".kfg-opt\") : null;\n    var sName = sOpt ? (sOpt.dataset.name || \"\") : \"\";\n\n    if (kOpt.dataset.gallery) {\n      \/\/ OLED standalone \u2014 its own 5-photo gallery represents the kiosek.\n      kOpt.dataset.gallery.split(\",\").filter(Boolean).forEach(function(u) { add(u, kName); });\n    } else {\n      \/\/ v13.1: COMBO[k][s] is an ARRAY of photos (assembled hero + all angles\/details).\n      var comboUrls = (COMBO[k] || {})[s] || [];\n      if (comboUrls.length) {\n        \/\/ Hero (i=0) name = \"kiosek + stojan\"; extra angles get the kiosek name.\n        var comboName = kName;\n        if (s !== \"none\") { if (sName) comboName = kName + \" + \" + sName; }\n        comboUrls.forEach(function(u, i) { add(u, i === 0 ? comboName : kName); });\n      } else if (kOpt.dataset.img) {\n        add(kOpt.dataset.img, kName);\n      }\n    }\n\n    \/\/ 1b. ET401 bundle items (PWR + DC cable) \u2014 always part of the tablet config.\n    if (kOpt.dataset.bundle) {\n      try {\n        JSON.parse(kOpt.dataset.bundle).forEach(function(b) { if (b.img) add(b.img, b.name || \"\"); });\n      } catch (err) {}\n    }\n    \/\/ 1c. Stojan's own photo when there is NO combo for it (e.g. VESA holder w\/o assembled shot).\n    if (sOpt && sOpt.dataset.img) {\n      var hasCombo = ((COMBO[k] || {})[s] || []).length;\n      if (!hasCombo) add(sOpt.dataset.img, sName);\n    }\n\n    \/\/ 2. Selected addons (tisk\u00e1rna \/ \u010dte\u010dka).\n    wrap.querySelectorAll('input[type=\"checkbox\"][name^=\"kfg-addon-\"]:checked').forEach(function(cb) {\n      var opt = cb.closest(\".kfg-opt\");\n      if (opt) addOpt(opt, opt.dataset.name || \"\");\n    });\n\n    \/\/ 3. Selected ExtHUB.\n    var exInput = wrap.querySelector('input[name=\"kfg-exthub\"]:checked');\n    if (exInput) { if (exInput.value) {\n      var exOpt = exInput.closest(\".kfg-opt\");\n      if (exOpt) addOpt(exOpt, exOpt.dataset.name || \"\");\n    } }\n\n    return photos;\n  }\n\n  \/\/ Render the aggregated config gallery. Hero = focusUrl if present, else first (combo).\n  function renderConfigGallery(photos, heroIdx) {\n    clearGallery();\n    if (!photos || !photos.length) return;\n    galleryState.urls = photos.map(function(p) { return p.url; });\n    galleryState.names = photos.map(function(p) { return p.name; });\n    galleryState.name = photos[0].name || \"\";\n    galleryState.index = (heroIdx >= 0 && heroIdx < photos.length) ? heroIdx : 0;\n\n    var hero = photos[galleryState.index];\n    swapPhoto(hero.url, hero.name);\n    if (previewSub) previewSub.textContent = (photos.length > 1) ? (hero.name || \"\") : \"\";\n\n    if (photos.length < 2) return;  \/\/ single photo \u2192 no thumb strip\n    thumbsEl.classList.add(\"has-gallery\");\n    photos.forEach(function(p, i) {\n      var t = document.createElement(\"button\");\n      t.type = \"button\";\n      t.className = \"kfg-thumb\" + (i === galleryState.index ? \" active\" : \"\");\n      t.setAttribute(\"aria-label\", \"Zobrazit \" + (p.name || (\"foto \" + (i + 1))));\n      t.title = p.name || \"\";\n      t.innerHTML = '<img loading=\"lazy\" decoding=\"async\" src=\"' + p.url + '\" alt=\"\" loading=\"lazy\" width=\"64\" height=\"64\">';\n      t.addEventListener(\"click\", function() { selectPhoto(i); });\n      thumbsEl.appendChild(t);\n    });\n  }\n\n  \/\/ Build + render the full config gallery. focusUrl \u2192 that photo becomes the hero.\n  function buildConfigGallery(focusUrl) {\n    var photos = collectConfigPhotos();\n    if (!photos.length) { clearGallery(); return; }\n    var heroIdx = 0;\n    if (focusUrl) {\n      for (var i = 0; i < photos.length; i++) {\n        if (photos[i].url === focusUrl) { heroIdx = i; break; }\n      }\n    }\n    renderConfigGallery(photos, heroIdx);\n  }\n\n  \/\/ Backward-compat alias \u2014 all existing callers (preset \/ reset \/ initial load \/\n  \/\/ kiosek+stand change) now render the full aggregated config with combo as hero.\n  function showComboPhoto() {\n    buildConfigGallery();\n  }\n\n  function onChange(e) {\n    var input = e.target;\n    var opt = input.closest(\".kfg-opt\");\n    if (!opt) return;\n\n    \/\/ v13 (CBO 2026-06-03): every change rebuilds the FULL aggregated config gallery\n    \/\/ (kiosek+stojan + all selected components). The just-changed item becomes the\n    \/\/ hero, but the entire config stays visible in the thumbnail strip \u2014 nothing\n    \/\/ disappears. Fixes the old bug where picking ExtHUB hid the kiosek+stojan.\n    if (input.name === \"kfg-kiosk\") {\n      \/\/ After a blank reset, no stand\/exthub is checked \u2014 restore a valid baseline.\n      if (!wrap.querySelector('input[name=\"kfg-stand\"]:checked')) {\n        var ns = wrap.querySelector('input[name=\"kfg-stand\"][value=\"none\"]');\n        if (ns) ns.checked = true;\n      }\n      if (!wrap.querySelector('input[name=\"kfg-exthub\"]:checked')) {\n        var ne = wrap.querySelector('input[name=\"kfg-exthub\"][value=\"\"]');\n        if (ne) ne.checked = true;\n      }\n      applyDeviceTypeVisibility();\n      buildConfigGallery();                      \/\/ hero = kiosek+stojan combo\n    } else if (input.name === \"kfg-stand\") {\n      buildConfigGallery();                      \/\/ hero = new combo\n    } else if (input.type === \"checkbox\") {\n      \/\/ Addon (tisk\u00e1rna \/ \u010dte\u010dka) \u2014 focus the just-changed item when checked, else combo\n      if (input.checked) buildConfigGallery(firstPhotoOf(opt));\n      else buildConfigGallery();\n    } else if (input.name === \"kfg-exthub\") {\n      \/\/ ExtHUB \u2014 focus the selected exthub, else back to combo for \"\u017d\u00e1dn\u00fd ExtHUB\"\n      if (input.value) buildConfigGallery(firstPhotoOf(opt));\n      else buildConfigGallery();\n    }\n    recalc();\n    saveToURL();\n  }\n\n  wrap.querySelectorAll('input[name^=\"kfg-\"], input[name^=\"kfg-addon-\"]').forEach(function(el) {\n    el.addEventListener(\"change\", onChange);\n  });\n\n  \/\/ \u2500\u2500 Reset \u2192 blank slate (CBO 2026-06-10: nothing selected, no image) \u2500\u2500\n  function resetToEmpty() {\n    wrap.querySelectorAll('input[name=\"kfg-kiosk\"]').forEach(function(r) { r.checked = false; });\n    wrap.querySelectorAll('input[name=\"kfg-stand\"]').forEach(function(r) { r.checked = false; });\n    wrap.querySelectorAll('input[type=\"checkbox\"][name^=\"kfg-addon-\"]').forEach(function(cb) { cb.checked = false; });\n    wrap.querySelectorAll('input[name=\"kfg-exthub\"]').forEach(function(r) { r.checked = false; });\n    \/\/ Preview: clear thumbnails + remove hero image, show placeholder.\n    clearGallery();\n    var realImg = photoImg.tagName === \"PICTURE\" ? photoImg.querySelector(\"img\") : photoImg;\n    if (realImg) { realImg.removeAttribute(\"src\"); realImg.alt = \"\"; }\n    if (photoImg.tagName === \"PICTURE\") {\n      photoImg.querySelectorAll(\"source\").forEach(function(s) { s.removeAttribute(\"srcset\"); });\n    }\n    if (photo) photo.classList.add(\"kfg-empty\");\n    if (previewTitle) previewTitle.textContent = \"\";\n    if (previewSub) previewSub.textContent = \"\";\n    \/\/ Summary: zeroed.\n    if (totalEl) { totalEl.textContent = \"0\"; totalEl.dataset.lastTotal = \"0\"; }\n    if (summaryLabel) summaryLabel.textContent = \"Zat\u00edm nic nevybr\u00e1no\";\n    if (summaryItems) summaryItems.innerHTML = \"\";\n    if (liveRows) liveRows.innerHTML = \"\";\n    var pd = wrap.querySelector(\"#kfgPriceDelta\");\n    if (pd) { pd.textContent = \"\"; pd.className = \"kfg-price-delta\"; }\n    \/\/ Clear presets + chips.\n    wrap.querySelectorAll(\".kfg-preset\").forEach(function(p) { p.classList.remove(\"active\"); });\n    if (typeof clearAllNeedCards === \"function\") clearAllNeedCards();\n    \/\/ Reset kfgState so a PDF\/share right after reset doesn't read a stale total.\n    kfgState.total = 0; kfgState.humanSummary = \"\"; kfgState.configKey = \"\";\n    syncSelectedClass();\n    saveToURL();\n  }\n  var resetBtn = wrap.querySelector(\"#kfgReset\");\n  if (resetBtn) {\n    resetBtn.addEventListener(\"click\", function() { resetToEmpty(); });\n  }\n\n  \/\/ -- CTA \"Po\u017eadavek na sestavu\" \u2192 scroll to footer contact form + pre-fill message --\n  \/\/ Footer contact form je na ka\u017ed\u00e9 str\u00e1nce (mu-plugin areception-contact-submit.php + Elementor footer template).\n  \/\/ anchor #arec-contact-form. Textarea name=\"message\" (m\u016f\u017ee m\u00edt data-cs-placeholder attr pro CZ).\n  function openContactFormWithKonfig(e) {\n    \/\/ nested if (NOT amp-amp), WP wptexturize encodes amp-amp v <script>\n    if (e) { if (e.preventDefault) e.preventDefault(); }\n    \/\/ v11 fix #4: always recompute fresh state before opening form (covers race where\n    \/\/ user changes HW after last recalc but before clicking CTA)\n    recalc();\n    saveToURL();\n    var shareUrl = kfgState.shareUrl || window.location.href;\n    var fullMsg = \"M\u00e1m z\u00e1jem o tuto sestavu, link na konfiguraci: \" + shareUrl;\n\n    \/\/ Find footer contact form textarea\n    var form = document.querySelector(\"#arec-contact-form\");\n    if (!form) {\n      \/\/ Fallback: try by class or generic textarea in footer\n      form = document.querySelector(\".arec-cf-wrap, .arec-contact-form\");\n    }\n    if (form) {\n      \/\/ Pre-fill source dropdown to \"Other\" \/ \"Konfigur\u00e1tor\" if exists\n      var src = form.querySelector('select[name=\"source\"]');\n      \/\/ Pre-fill message textarea\n      var msg = form.querySelector('textarea[name=\"message\"], textarea');\n      if (msg) {\n        msg.value = fullMsg;\n        msg.dispatchEvent(new Event(\"input\", {bubbles: true}));\n      }\n      \/\/ Smooth scroll to form\n      form.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      \/\/ Focus first empty input after a short delay (wait for scroll to settle)\n      setTimeout(function() {\n        var firstEmpty = form.querySelector('input[name=\"company\"], input[name=\"full_name\"], input[name=\"name\"]');\n        if (firstEmpty) {\n          if (!firstEmpty.value) firstEmpty.focus();\n        }\n      }, 600);\n    } else {\n      \/\/ No footer form found, fallback to \/cs\/kontakt with config in URL\n      var fallbackUrl = \"\/cs\/kontakt\/?konfigurator=1\"\n                      + \"&konfig=\" + encodeURIComponent(summary)\n                      + \"&total=\" + kfgState.total\n                      + \"#kfg=\" + (window.location.hash.replace(\/^#\/, \"\"));\n      window.location.href = fallbackUrl;\n    }\n  }\n  if (ctaBtn) ctaBtn.addEventListener(\"click\", openContactFormWithKonfig);\n  if (stickyCta) stickyCta.addEventListener(\"click\", openContactFormWithKonfig);\n\n  \/\/ -- Share, kop\u00edruje URL s aktu\u00e1ln\u00ed konfigurac\u00ed (hash state) --\n  var shareBtn = wrap.querySelector(\"#kfgShare\");\n  if (shareBtn) {\n    shareBtn.addEventListener(\"click\", function() {\n      \/\/ Sync URL hash first\n      saveToURL();\n      var url = window.location.origin + window.location.pathname + window.location.hash;\n      if (navigator.clipboard) {\n        navigator.clipboard.writeText(url).then(function() {\n          var orig = shareBtn.innerHTML;\n          shareBtn.innerHTML = '<svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3 8.5l3 3 7-7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg> Zkop\u00edrov\u00e1no';\n          setTimeout(function() { shareBtn.innerHTML = orig; }, 2000);\n        }).catch(function() {\n          prompt(\"Odkaz na va\u0161i sestavu:\", url);\n        });\n      } else {\n        prompt(\"Odkaz na va\u0161i sestavu:\", url);\n      }\n    });\n  }\n\n  \/\/ -- PDF, print-to-PDF flow (populates #kfgPrint container, then window.print()) --\n  var pdfBtn = wrap.querySelector(\"#kfgPdf\");\n  if (pdfBtn) {\n    pdfBtn.addEventListener(\"click\", function() {\n      \/\/ CBO 2026-06-10: recalc FIRST so kfgState.total + the live summary are guaranteed\n      \/\/ fresh + consistent with the current inputs before we read them into the print\n      \/\/ container (fixes \"PDF had total but no item list on first load from a share URL\").\n      recalc();\n      saveToURL();\n      \/\/ Populate print container with current state\n      var inner = photoImg.tagName === \"PICTURE\" ? photoImg.querySelector(\"img\") : photoImg;\n      var photoSrc = inner ? inner.src : \"\";\n      var photoAlt = inner ? inner.alt : \"\";\n      var kioskInput = wrap.querySelector('input[name=\"kfg-kiosk\"]:checked');\n      var kioskOpt = kioskInput ? kioskInput.closest(\".kfg-opt\") : null;\n      var standInput = wrap.querySelector('input[name=\"kfg-stand\"]:checked');\n      var standOpt = standInput ? standInput.closest(\".kfg-opt\") : null;\n      \/\/ Always use kiosek photo for print (matches CBO Bez stojanu fallback logic)\n      var printPhoto = kioskOpt ? (kioskOpt.dataset.img || photoSrc) : photoSrc;\n      var printAlt = kioskOpt ? kioskOpt.dataset.name : photoAlt;\n      var pPhoto = document.querySelector(\"#kfgpPhoto\");\n      if (pPhoto) {\n        pPhoto.src = printPhoto;\n        pPhoto.alt = printAlt || \"\";\n      }\n      var pTotal = document.querySelector(\"#kfgpTotal\");\n      if (pTotal) pTotal.textContent = fmt(kfgState.total);\n      var pShare = document.querySelector(\"#kfgpShareUrl\");\n      if (pShare) pShare.textContent = kfgState.shareUrl;\n      var pDate = document.querySelector(\"#kfgpDate\");\n      if (pDate) {\n        var d = new Date();\n        var dateStr = d.toLocaleDateString(\"cs-CZ\", {day: \"numeric\", month: \"long\", year: \"numeric\"});\n        pDate.textContent = \"Vygenerov\u00e1no \" + dateStr;\n      }\n      \/\/ Populate items list\n      var pItems = document.querySelector(\"#kfgpItems\");\n      if (pItems) {\n        var rows = [];\n        var deviceType = kioskOpt ? (kioskOpt.dataset.deviceType || \"kiosek\") : \"kiosek\";\n        if (kioskOpt) {\n          rows.push({name: kioskOpt.dataset.name, price: num(kioskOpt, \"price\")});\n          \/\/ Bundle items (CBO 2026-05-24 v9) \u2014 included accessories shown for tablet\n          if (kioskOpt.dataset.bundle) {\n            try {\n              JSON.parse(kioskOpt.dataset.bundle).forEach(function(b) {\n                rows.push({name: b.name, price: 0, bundled: true});\n              });\n            } catch(e) {}\n          }\n        }\n        \/\/ Stand price counted for ALL device types (tablet VESA + kiosek stands)\n        if (standOpt) {\n          if (num(standOpt, \"price\") > 0) {\n            rows.push({name: standOpt.dataset.name, price: num(standOpt, \"price\")});\n          }\n        }\n        if (deviceType !== \"tablet\") {\n          wrap.querySelectorAll('input[type=\"checkbox\"][name^=\"kfg-addon-\"]:checked').forEach(function(cb) {\n            var o = cb.closest(\".kfg-opt\");\n            if (o) rows.push({name: o.dataset.name, price: num(o, \"price\")});\n          });\n          var exhubChecked = wrap.querySelector('input[name=\"kfg-exthub\"]:checked');\n          if (exhubChecked) {\n            if (exhubChecked.value) {\n              var eo = exhubChecked.closest(\".kfg-opt\");\n              if (eo) rows.push({name: eo.dataset.name, price: num(eo, \"price\")});\n            }\n          }\n        }\n        pItems.innerHTML = rows.map(function(r) {\n          var safeName = r.name.replace(\/<\/g, \"&lt;\").replace(\/>\/g, \"&gt;\");\n          return '<div class=\"kfgp-row\"><span class=\"name\">' + safeName + '<\/span><span class=\"price\">' + fmt(r.price) + ' K\u010d<\/span><\/div>';\n        }).join(\"\");\n      }\n      \/\/ Set PDF filename via document.title (browser default Save as PDF filename)\n      \/\/ Format: aReception-konfigurace-DDMMYYYY-HHMM\n      var now = new Date();\n      var pad = function(n) { return n < 10 ? \"0\" + n : \"\" + n; };\n      var stamp = pad(now.getDate()) + pad(now.getMonth() + 1) + now.getFullYear()\n                + \"-\" + pad(now.getHours()) + pad(now.getMinutes());\n      var originalTitle = document.title;\n      document.title = \"aReception-konfigurace-\" + stamp;\n      \/\/ Restore title after print dialog closes (afterprint event)\n      var restoreTitle = function() {\n        document.title = originalTitle;\n        window.removeEventListener(\"afterprint\", restoreTitle);\n      };\n      window.addEventListener(\"afterprint\", restoreTitle);\n      \/\/ Trigger print after DOM updates\n      setTimeout(function() { window.print(); }, 100);\n    });\n  }\n\n  \/\/ Sticky bar removed (v7), no scroll listener needed\n\n  \/\/ \u2500\u2500 Initial setup \u2500\u2500\n  \/\/ 1. Try to restore configuration from URL hash (shared link)\n  var loadedFromHash = loadFromURL();\n\n  \/\/ 2. v12: apply combination photo for currently selected kiosek + stand\n  applyDeviceTypeVisibility();\n  showComboPhoto();\n\n  recalc();\n  syncSelectedClass();\n\n  \/\/ 3. If loaded from URL hash, mark matching preset as active (if any matches)\n  if (loadedFromHash) {\n    var matchingPreset = null;\n    var curK = wrap.querySelector('input[name=\"kfg-kiosk\"]:checked')?.value;\n    var curS = wrap.querySelector('input[name=\"kfg-stand\"]:checked')?.value;\n    var curE = wrap.querySelector('input[name=\"kfg-exthub\"]:checked')?.value;\n    var curA = [];\n    wrap.querySelectorAll('input[type=\"checkbox\"][name^=\"kfg-addon-\"]:checked').forEach(function(cb) {\n      curA.push(cb.value);\n    });\n    wrap.querySelectorAll(\".kfg-preset\").forEach(function(p) {\n      var pK = p.dataset.presetKiosk;\n      var pS = p.dataset.presetStand || \"none\";\n      var pE = p.dataset.presetExthub || \"\";\n      var pA = (p.dataset.presetAddons || \"\").split(\",\").filter(Boolean).sort().join(\",\");\n      var cAStr = curA.slice().sort().join(\",\");\n      if (pK === curK) {\n        if (pS === (curS || \"none\")) {\n          if (pE === (curE || \"\")) {\n            if (pA === cAStr) {\n              matchingPreset = p;\n            }\n          }\n        }\n      }\n    });\n    if (matchingPreset) matchingPreset.classList.add(\"active\");\n  }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Postavte si AI recepci na m\u00edru: kiosek Zebra KC50, stojan, \u010dte\u010dka OP a ExtHUB. Cena bez DPH se p\u0159epo\u010d\u00edt\u00e1 \u017eiv\u011b.<\/p>","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-36566","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Konfigur\u00e1tor HW | aReception.ai<\/title>\n<meta name=\"description\" content=\"Sestavte si vlastn\u00ed hardware aReception: kiosek, stojan, dopl\u0148ky. Cena se p\u0159epo\u010d\u00edt\u00e1 \u017eiv\u011b. Nab\u00eddka do 1 dne.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.areception.ai\/cs\/konfigurator\/\" \/>\n<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Konfigur\u00e1tor HW | aReception.ai\" \/>\n<meta property=\"og:description\" content=\"Sestavte si vlastn\u00ed hardware aReception: kiosek, stojan, dopl\u0148ky. Cena se p\u0159epo\u010d\u00edt\u00e1 \u017eiv\u011b. Nab\u00eddka do 1 dne.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.areception.ai\/cs\/konfigurator\/\" \/>\n<meta property=\"og:site_name\" content=\"aReception.ai\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/aReceptionAI\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-11T08:43:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-none.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@aReceptionAI\" \/>\n<meta name=\"twitter:label1\" content=\"Odhadovan\u00e1 doba \u010dten\u00ed\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.areception.ai\\\/konfigurator\\\/\",\"url\":\"https:\\\/\\\/www.areception.ai\\\/konfigurator\\\/\",\"name\":\"Konfigur\u00e1tor HW | aReception.ai\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.areception.ai\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.areception.ai\\\/konfigurator\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.areception.ai\\\/konfigurator\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.areception.ai\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/konfig-combo-kc50-15-none.png\",\"datePublished\":\"2026-05-06T17:54:25+00:00\",\"dateModified\":\"2026-06-11T08:43:53+00:00\",\"description\":\"Sestavte si vlastn\u00ed hardware aReception: kiosek, stojan, dopl\u0148ky. Cena se p\u0159epo\u010d\u00edt\u00e1 \u017eiv\u011b. Nab\u00eddka do 1 dne.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.areception.ai\\\/konfigurator\\\/#breadcrumb\"},\"inLanguage\":\"cs\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.areception.ai\\\/konfigurator\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"cs\",\"@id\":\"https:\\\/\\\/www.areception.ai\\\/konfigurator\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.areception.ai\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/konfig-combo-kc50-15-none.png\",\"contentUrl\":\"https:\\\/\\\/www.areception.ai\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/konfig-combo-kc50-15-none.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.areception.ai\\\/konfigurator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Dom\u016f\",\"item\":\"https:\\\/\\\/www.areception.ai\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Konfigur\u00e1tor HW\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.areception.ai\\\/#website\",\"url\":\"https:\\\/\\\/www.areception.ai\\\/\",\"name\":\"aReception.ai\",\"description\":\"AI Receptionist &amp; Visitor Management System\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.areception.ai\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.areception.ai\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"cs\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.areception.ai\\\/#organization\",\"name\":\"aReception.ai s.r.o.\",\"url\":\"https:\\\/\\\/www.areception.ai\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"cs\",\"@id\":\"https:\\\/\\\/www.areception.ai\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.areception.ai\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/Logo-aReception.ai_.svg\",\"contentUrl\":\"https:\\\/\\\/www.areception.ai\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/Logo-aReception.ai_.svg\",\"width\":188,\"height\":33,\"caption\":\"aReception.ai s.r.o.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.areception.ai\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/aReceptionAI\",\"https:\\\/\\\/x.com\\\/aReceptionAI\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/areception\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@aReception\"],\"legalName\":\"aReception.ai s.r.o.\",\"alternateName\":\"aReception\",\"description\":\"aReception.ai is an AI receptionist and visitor management platform. Its AI Avatar runs on Zebra Technologies kiosks and tablets, and its web Portal digitises visitor registration, host notifications, safety training and access management for office buildings, industrial sites, museums, healthcare and education. aReception.ai s.r.o. is an official Zebra Technologies ISV partner.\",\"vatID\":\"CZ19836082\",\"identifier\":[{\"@type\":\"PropertyValue\",\"propertyID\":\"ICO\",\"name\":\"Company registration number (I\u010cO)\",\"value\":\"19836082\"},{\"@type\":\"PropertyValue\",\"propertyID\":\"VAT\",\"name\":\"VAT ID (DI\u010c)\",\"value\":\"CZ19836082\"}],\"address\":{\"@type\":\"PostalAddress\",\"addressCountry\":\"CZ\"},\"areaServed\":[\"CZ\",\"SK\",\"GB\",\"US\",\"AE\"],\"knowsAbout\":[\"AI receptionist\",\"Visitor management\",\"Visitor management system\",\"Digital reception\",\"Self-service visitor check-in kiosk\",\"Contractor safety training\"],\"contactPoint\":{\"@type\":\"ContactPoint\",\"contactType\":\"sales\",\"email\":\"info@areception.ai\",\"telephone\":\"+420580000888\",\"areaServed\":[\"CZ\",\"SK\",\"GB\",\"US\",\"AE\"],\"availableLanguage\":[\"Czech\",\"Slovak\",\"English\"]}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Konfigur\u00e1tor HW | aReception.ai","description":"P\u0159izp\u016fsobte si vlastn\u00ed hardware a recepci: kiosek, stojan, p\u0159\u00edslu\u0161enstv\u00ed. Cena se p\u0159epo\u010d\u00edt\u00e1 \u017eiv\u011b. Nab\u00eddka do 1 dne.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.areception.ai\/cs\/konfigurator\/","og_locale":"cs_CZ","og_type":"article","og_title":"Konfigur\u00e1tor HW | aReception.ai","og_description":"Sestavte si vlastn\u00ed hardware aReception: kiosek, stojan, dopl\u0148ky. Cena se p\u0159epo\u010d\u00edt\u00e1 \u017eiv\u011b. Nab\u00eddka do 1 dne.","og_url":"https:\/\/www.areception.ai\/cs\/konfigurator\/","og_site_name":"aReception.ai","article_publisher":"https:\/\/www.facebook.com\/aReceptionAI","article_modified_time":"2026-06-11T08:43:53+00:00","og_image":[{"url":"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-none.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_site":"@aReceptionAI","twitter_misc":{"Odhadovan\u00e1 doba \u010dten\u00ed":"4 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.areception.ai\/konfigurator\/","url":"https:\/\/www.areception.ai\/konfigurator\/","name":"Konfigur\u00e1tor HW | aReception.ai","isPartOf":{"@id":"https:\/\/www.areception.ai\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.areception.ai\/konfigurator\/#primaryimage"},"image":{"@id":"https:\/\/www.areception.ai\/konfigurator\/#primaryimage"},"thumbnailUrl":"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-none.png","datePublished":"2026-05-06T17:54:25+00:00","dateModified":"2026-06-11T08:43:53+00:00","description":"P\u0159izp\u016fsobte si vlastn\u00ed hardware a recepci: kiosek, stojan, p\u0159\u00edslu\u0161enstv\u00ed. Cena se p\u0159epo\u010d\u00edt\u00e1 \u017eiv\u011b. Nab\u00eddka do 1 dne.","breadcrumb":{"@id":"https:\/\/www.areception.ai\/konfigurator\/#breadcrumb"},"inLanguage":"cs","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.areception.ai\/konfigurator\/"]}]},{"@type":"ImageObject","inLanguage":"cs","@id":"https:\/\/www.areception.ai\/konfigurator\/#primaryimage","url":"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-none.png","contentUrl":"https:\/\/www.areception.ai\/wp-content\/uploads\/2026\/06\/konfig-combo-kc50-15-none.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.areception.ai\/konfigurator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Dom\u016f","item":"https:\/\/www.areception.ai\/"},{"@type":"ListItem","position":2,"name":"Konfigur\u00e1tor HW"}]},{"@type":"WebSite","@id":"https:\/\/www.areception.ai\/#website","url":"https:\/\/www.areception.ai\/","name":"aReception.ai","description":"AI recep\u010dn\u00ed a syst\u00e9m pro spr\u00e1vu n\u00e1v\u0161t\u011bv","publisher":{"@id":"https:\/\/www.areception.ai\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.areception.ai\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"cs"},{"@type":"Organization","@id":"https:\/\/www.areception.ai\/#organization","name":"aReception.ai s.r.o.","url":"https:\/\/www.areception.ai\/","logo":{"@type":"ImageObject","inLanguage":"cs","@id":"https:\/\/www.areception.ai\/#\/schema\/logo\/image\/","url":"https:\/\/www.areception.ai\/wp-content\/uploads\/2023\/03\/Logo-aReception.ai_.svg","contentUrl":"https:\/\/www.areception.ai\/wp-content\/uploads\/2023\/03\/Logo-aReception.ai_.svg","width":188,"height":33,"caption":"aReception.ai s.r.o."},"image":{"@id":"https:\/\/www.areception.ai\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/aReceptionAI","https:\/\/x.com\/aReceptionAI","https:\/\/www.linkedin.com\/company\/areception\/","https:\/\/www.youtube.com\/@aReception"],"legalName":"aReception.ai s.r.o.","alternateName":"aReception","description":"aReception.ai is an AI receptionist and visitor management platform. Its AI Avatar runs on Zebra Technologies kiosks and tablets, and its web Portal digitises visitor registration, host notifications, safety training and access management for office buildings, industrial sites, museums, healthcare and education. aReception.ai s.r.o. is an official Zebra Technologies ISV partner.","vatID":"CZ19836082","identifier":[{"@type":"PropertyValue","propertyID":"ICO","name":"Company registration number (I\u010cO)","value":"19836082"},{"@type":"PropertyValue","propertyID":"VAT","name":"VAT ID (DI\u010c)","value":"CZ19836082"}],"address":{"@type":"PostalAddress","addressCountry":"CZ"},"areaServed":["CZ","SK","GB","US","AE"],"knowsAbout":["AI receptionist","Visitor management","Visitor management system","Digital reception","Self-service visitor check-in kiosk","Contractor safety training"],"contactPoint":{"@type":"ContactPoint","contactType":"sales","email":"info@areception.ai","telephone":"+420580000888","areaServed":["CZ","SK","GB","US","AE"],"availableLanguage":["Czech","Slovak","English"]}}]}},"_links":{"self":[{"href":"https:\/\/www.areception.ai\/cs\/wp-json\/wp\/v2\/pages\/36566","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.areception.ai\/cs\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.areception.ai\/cs\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.areception.ai\/cs\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.areception.ai\/cs\/wp-json\/wp\/v2\/comments?post=36566"}],"version-history":[{"count":50,"href":"https:\/\/www.areception.ai\/cs\/wp-json\/wp\/v2\/pages\/36566\/revisions"}],"predecessor-version":[{"id":55386,"href":"https:\/\/www.areception.ai\/cs\/wp-json\/wp\/v2\/pages\/36566\/revisions\/55386"}],"wp:attachment":[{"href":"https:\/\/www.areception.ai\/cs\/wp-json\/wp\/v2\/media?parent=36566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}