{"id":50275,"date":"2026-09-15T07:01:44","date_gmt":"2026-09-15T06:01:44","guid":{"rendered":"https:\/\/cctvacademy.be\/?page_id=50275"},"modified":"2026-09-15T21:37:19","modified_gmt":"2026-09-15T20:37:19","slug":"spatial-kernel-camsketch","status":"publish","type":"page","link":"https:\/\/cctvacademy.be\/nl\/spatial-kernel-camsketch\/","title":{"rendered":"Spatial Kernel CamSketch"},"content":{"rendered":"\t\t<div data-elementor-type=\"masteriyo-course-archive-page\" data-elementor-id=\"50275\" class=\"elementor elementor-50275\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1e3e959 e-flex e-con-boxed e-con e-parent\" data-id=\"1e3e959\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7ccd956 elementor-widget elementor-widget-html\" data-id=\"7ccd956\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- =========================================================\r\n     CAMSKETCH SPATIAL KERNEL\r\n     BLOCK 1 \u2014 BEFORE CONSOLE\r\n     ========================================================= -->\r\n\r\n<section class=\"skp-page skp-before-console\">\r\n\r\n  <div class=\"skp-atmosphere\" aria-hidden=\"true\">\r\n    <span class=\"skp-glow skp-glow-a\"><\/span>\r\n    <span class=\"skp-glow skp-glow-b\"><\/span>\r\n    <span class=\"skp-bg-gear skp-bg-gear-a\">\u2699<\/span>\r\n    <span class=\"skp-bg-gear skp-bg-gear-b\">\u2699<\/span>\r\n  <\/div>\r\n\r\n  <div class=\"skp-shell\">\r\n\r\n    <!-- TOPBAR -->\r\n    <div class=\"skp-topbar\">\r\n\r\n      <div class=\"skp-topbrand\">\r\n\r\n        <div class=\"skp-toplogo-frame\">\r\n          <img data-recalc-dims=\"1\" decoding=\"async\"\r\n            src=\"https:\/\/i0.wp.com\/cctvacademy.be\/wp-content\/uploads\/2026\/09\/CamSketch_logo_HD-scaled.png?w=812&#038;ssl=1\"\r\n            alt=\"CamSketch CCTV Academy\"\r\n            class=\"skp-logo skp-logo-top\"\r\n          >\r\n        <\/div>\r\n\r\n        <span class=\"skp-led skp-led-green\"><\/span>\r\n\r\n        <span>KORTRIJK<\/span>\r\n\r\n        <i><\/i>\r\n\r\n        <span>CCTV ACADEMY<\/span>\r\n\r\n      <\/div>\r\n\r\n      <div class=\"skp-topcenter\">\r\n        CAMSKETCH ENGINEERING PLATFORM\r\n      <\/div>\r\n\r\n      <div class=\"skp-version\">\r\n        <small>ENGINE REV.<\/small>\r\n        <strong>0.1<\/strong>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n\r\n    <!-- HERO -->\r\n    <header class=\"skp-hero\">\r\n\r\n      <div class=\"skp-eyebrow\">\r\n        <span><\/span>\r\n        COMPUTATIONAL CCTV ANALYSIS\r\n        <span><\/span>\r\n      <\/div>\r\n\r\n      <div class=\"skp-hero-grid\">\r\n\r\n        <div class=\"skp-hero-copy\">\r\n\r\n          <div class=\"skp-code\">\r\n            CAMSKETCH \/\/ SPATIAL ENGINE MODULE\r\n          <\/div>\r\n\r\n          <h1>\r\n            SPATIAL\r\n            <span>KERNEL<\/span>\r\n          <\/h1>\r\n\r\n          <p class=\"skp-lead\">\r\n            Ruimtelijke CCTV-analyse op basis van een\r\n            tweedimensionale plattegrond.\r\n          <\/p>\r\n\r\n          <p class=\"skp-copy\">\r\n            Spatial Kernel analyseert camera's, muren,\r\n            obstakels, doelzones en terreinbegrenzingen\r\n            en berekent daaruit theoretische en effectief\r\n            zichtbare cameradekking.\r\n          <\/p>\r\n\r\n          <div class=\"skp-actions\">\r\n\r\n            <a\r\n              href=\"#spatial-kernel-console\"\r\n              class=\"skp-button skp-button-main\"\r\n            >\r\n              <span class=\"skp-button-led\"><\/span>\r\n              OPEN SPATIAL ENGINE\r\n              <b>\u2193<\/b>\r\n            <\/a>\r\n\r\n            <a\r\n              href=\"https:\/\/cctvacademy.be\/nl\/camsketch3\/\"\r\n              target=\"_blank\"\r\n              rel=\"noopener\"\r\n              class=\"skp-button\"\r\n            >\r\n              CAMSKETCH\r\n              <b>\u2197<\/b>\r\n            <\/a>\r\n\r\n          <\/div>\r\n\r\n        <\/div>\r\n\r\n\r\n        <!-- HERO VISUAL -->\r\n        <div class=\"skp-hero-visual\">\r\n\r\n          <div class=\"skp-kernel\">\r\n\r\n            <div class=\"skp-ring skp-ring-1\"><\/div>\r\n            <div class=\"skp-ring skp-ring-2\"><\/div>\r\n            <div class=\"skp-ring skp-ring-3\"><\/div>\r\n\r\n            <span class=\"skp-axis skp-axis-h\"><\/span>\r\n            <span class=\"skp-axis skp-axis-v\"><\/span>\r\n\r\n            <i class=\"skp-node skp-node-a\"><\/i>\r\n            <i class=\"skp-node skp-node-b\"><\/i>\r\n            <i class=\"skp-node skp-node-c\"><\/i>\r\n\r\n            <div class=\"skp-kernel-center\">\r\n              <small>SPATIAL<\/small>\r\n              <strong>2D<\/strong>\r\n              <span>KERNEL ACTIVE<\/span>\r\n            <\/div>\r\n\r\n          <\/div>\r\n\r\n\r\n          <!-- LARGE LOGO PLATE -->\r\n          <div class=\"skp-logo-plate\">\r\n\r\n            <small>\r\n              POWERED BY\r\n            <\/small>\r\n\r\n            <img data-recalc-dims=\"1\" decoding=\"async\"\r\n              src=\"https:\/\/i0.wp.com\/cctvacademy.be\/wp-content\/uploads\/2026\/09\/CamSketch_logo_HD-scaled.png?w=812&#038;ssl=1\"\r\n              alt=\"CamSketch CCTV Academy\"\r\n              class=\"skp-logo skp-logo-hero\"\r\n            >\r\n\r\n            <div class=\"skp-logo-status\">\r\n              <span class=\"skp-led skp-led-cyan\"><\/span>\r\n              GEOMETRIC ANALYSIS ENGINE\r\n            <\/div>\r\n\r\n          <\/div>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n\r\n      <!-- STATUS BAR -->\r\n      <div class=\"skp-status\">\r\n\r\n        <div>\r\n          <span class=\"skp-led skp-led-green\"><\/span>\r\n          <p>\r\n            <small>ENGINE<\/small>\r\n            <strong>OPERATIONAL<\/strong>\r\n          <\/p>\r\n        <\/div>\r\n\r\n        <div>\r\n          <span class=\"skp-led skp-led-amber\"><\/span>\r\n          <p>\r\n            <small>ANALYSIS MODEL<\/small>\r\n            <strong>2D OCCLUSION<\/strong>\r\n          <\/p>\r\n        <\/div>\r\n\r\n        <div>\r\n          <span class=\"skp-led skp-led-cyan\"><\/span>\r\n          <p>\r\n            <small>CALCULATION<\/small>\r\n            <strong>DETERMINISTIC<\/strong>\r\n          <\/p>\r\n        <\/div>\r\n\r\n        <div>\r\n          <span class=\"skp-led skp-led-red\"><\/span>\r\n          <p>\r\n            <small>HEIGHT MODEL<\/small>\r\n            <strong>2.5D PENDING<\/strong>\r\n          <\/p>\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n    <\/header>\r\n\r\n\r\n    <!-- =====================================================\r\n         01 \u2014 INPUT MATRIX\r\n         ===================================================== -->\r\n\r\n    <section class=\"skp-section\">\r\n\r\n      <div class=\"skp-heading\">\r\n\r\n        <div class=\"skp-number\">\r\n          01\r\n        <\/div>\r\n\r\n        <div>\r\n\r\n          <span class=\"skp-kicker\">\r\n            INPUT MATRIX\r\n          <\/span>\r\n\r\n          <h2>\r\n            Wat analyseert\r\n            <em>Spatial Kernel?<\/em>\r\n          <\/h2>\r\n\r\n          <p>\r\n            De rekenmodule combineert de ruimtelijke gegevens\r\n            uit een CamSketch-plan tot \u00e9\u00e9n geometrisch zichtmodel.\r\n          <\/p>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n\r\n      <div class=\"skp-input-grid\">\r\n\r\n        <article class=\"skp-input-card\">\r\n\r\n          <div class=\"skp-card-top\">\r\n            <span>CAM<\/span>\r\n            <b>01<\/b>\r\n          <\/div>\r\n\r\n          <div class=\"skp-icon skp-camera-icon\">\r\n            <span><\/span>\r\n          <\/div>\r\n\r\n          <h3>Camera's<\/h3>\r\n\r\n          <p>\r\n            Positie, kijkrichting, horizontale openingshoek\r\n            en maximaal ingesteld bereik.\r\n          <\/p>\r\n\r\n          <div class=\"skp-card-meter\">\r\n            <span style=\"width:92%\"><\/span>\r\n          <\/div>\r\n\r\n        <\/article>\r\n\r\n\r\n        <article class=\"skp-input-card\">\r\n\r\n          <div class=\"skp-card-top\">\r\n            <span>GEO<\/span>\r\n            <b>02<\/b>\r\n          <\/div>\r\n\r\n          <div class=\"skp-icon skp-wall-icon\">\r\n            <i><\/i>\r\n            <i><\/i>\r\n            <i><\/i>\r\n          <\/div>\r\n\r\n          <h3>Muren<\/h3>\r\n\r\n          <p>\r\n            Structurele elementen die een zichtlijn\r\n            tussen camera en terrein kunnen onderbreken.\r\n          <\/p>\r\n\r\n          <div class=\"skp-card-meter\">\r\n            <span style=\"width:74%\"><\/span>\r\n          <\/div>\r\n\r\n        <\/article>\r\n\r\n\r\n        <article class=\"skp-input-card\">\r\n\r\n          <div class=\"skp-card-top\">\r\n            <span>OBS<\/span>\r\n            <b>03<\/b>\r\n          <\/div>\r\n\r\n          <div class=\"skp-icon skp-obstacle-icon\">\r\n            <span><\/span>\r\n          <\/div>\r\n\r\n          <h3>Obstakels<\/h3>\r\n\r\n          <p>\r\n            Objecten die delen van het theoretische\r\n            cameragezichtsveld kunnen blokkeren.\r\n          <\/p>\r\n\r\n          <div class=\"skp-card-meter\">\r\n            <span style=\"width:63%\"><\/span>\r\n          <\/div>\r\n\r\n        <\/article>\r\n\r\n\r\n        <article class=\"skp-input-card\">\r\n\r\n          <div class=\"skp-card-top\">\r\n            <span>ZONE<\/span>\r\n            <b>04<\/b>\r\n          <\/div>\r\n\r\n          <div class=\"skp-icon skp-zone-icon\">\r\n            <span><\/span>\r\n          <\/div>\r\n\r\n          <h3>Doelzones<\/h3>\r\n\r\n          <p>\r\n            Bewakingsgebieden waarvoor de zichtbare\r\n            cameradekking wordt onderzocht.\r\n          <\/p>\r\n\r\n          <div class=\"skp-card-meter\">\r\n            <span style=\"width:87%\"><\/span>\r\n          <\/div>\r\n\r\n        <\/article>\r\n\r\n\r\n        <article class=\"skp-input-card\">\r\n\r\n          <div class=\"skp-card-top\">\r\n            <span>PER<\/span>\r\n            <b>05<\/b>\r\n          <\/div>\r\n\r\n          <div class=\"skp-icon skp-boundary-icon\">\r\n            <span><\/span>\r\n          <\/div>\r\n\r\n          <h3>Terreingrens<\/h3>\r\n\r\n          <p>\r\n            De eigendoms- of terreinbegrenzing wordt\r\n            meegenomen in de ruimtelijke analyse.\r\n          <\/p>\r\n\r\n          <div class=\"skp-card-meter\">\r\n            <span style=\"width:81%\"><\/span>\r\n          <\/div>\r\n\r\n        <\/article>\r\n\r\n      <\/div>\r\n\r\n    <\/section>\r\n\r\n\r\n    <!-- =====================================================\r\n         02 \u2014 PIPELINE\r\n         ===================================================== -->\r\n\r\n    <section class=\"skp-section skp-dark-section\">\r\n\r\n      <div class=\"skp-heading\">\r\n\r\n        <div class=\"skp-number\">\r\n          02\r\n        <\/div>\r\n\r\n        <div>\r\n\r\n          <span class=\"skp-kicker\">\r\n            COMPUTATIONAL PIPELINE\r\n          <\/span>\r\n\r\n          <h2>\r\n            Van camera naar\r\n            <em>zichtbare dekking<\/em>\r\n          <\/h2>\r\n\r\n          <p>\r\n            Spatial Kernel construeert eerst het theoretische\r\n            gezichtsveld en corrigeert dit vervolgens\r\n            voor ruimtelijke obstructies.\r\n          <\/p>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n\r\n      <div class=\"skp-pipeline\">\r\n\r\n        <article>\r\n          <span class=\"skp-step\">A<\/span>\r\n          <small>CAMERA INPUT<\/small>\r\n          <h3>Positie<\/h3>\r\n          <p>Locatie van de camera op het plan.<\/p>\r\n        <\/article>\r\n\r\n        <i class=\"skp-pipe\"><\/i>\r\n\r\n        <article>\r\n          <span class=\"skp-step\">B<\/span>\r\n          <small>VIEW VECTOR<\/small>\r\n          <h3>Richting<\/h3>\r\n          <p>Ori\u00ebntatie van de camerazichtlijn.<\/p>\r\n        <\/article>\r\n\r\n        <i class=\"skp-pipe\"><\/i>\r\n\r\n        <article>\r\n          <span class=\"skp-step\">C<\/span>\r\n          <small>OPTICAL MODEL<\/small>\r\n          <h3>HFOV<\/h3>\r\n          <p>Horizontale openingshoek van het beeld.<\/p>\r\n        <\/article>\r\n\r\n        <i class=\"skp-pipe\"><\/i>\r\n\r\n        <article>\r\n          <span class=\"skp-step\">D<\/span>\r\n          <small>DISTANCE<\/small>\r\n          <h3>Bereik<\/h3>\r\n          <p>Maximale onderzochte zichtafstand.<\/p>\r\n        <\/article>\r\n\r\n        <i class=\"skp-pipe\"><\/i>\r\n\r\n        <article class=\"skp-output-step\">\r\n          <span class=\"skp-step\">E<\/span>\r\n          <small>COMPUTED OUTPUT<\/small>\r\n          <h3>Zichtmodel<\/h3>\r\n          <p>FOV gecorrigeerd voor blokkeringen.<\/p>\r\n        <\/article>\r\n\r\n      <\/div>\r\n\r\n    <\/section>\r\n\r\n\r\n    <!-- =====================================================\r\n         03 \u2014 ANALYSIS\r\n         ===================================================== -->\r\n\r\n    <section class=\"skp-section\">\r\n\r\n      <div class=\"skp-heading\">\r\n\r\n        <div class=\"skp-number\">\r\n          03\r\n        <\/div>\r\n\r\n        <div>\r\n\r\n          <span class=\"skp-kicker\">\r\n            ANALYTICAL CAPABILITIES\r\n          <\/span>\r\n\r\n          <h2>\r\n            Beschikbare\r\n            <em>analyses<\/em>\r\n          <\/h2>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n\r\n      <div class=\"skp-analysis-grid\">\r\n\r\n        <article class=\"skp-analysis-card\">\r\n          <span class=\"skp-analysis-no\">01<\/span>\r\n          <div class=\"skp-analysis-icon\">%<\/div>\r\n          <h3>Dekkingspercentage<\/h3>\r\n          <p>\r\n            Bepaal welk gedeelte van een doelzone\r\n            effectief zichtbaar is.\r\n          <\/p>\r\n        <\/article>\r\n\r\n\r\n        <article class=\"skp-analysis-card\">\r\n          <span class=\"skp-analysis-no\">02<\/span>\r\n          <div class=\"skp-analysis-icon\">\u25c1<\/div>\r\n          <h3>Theoretisch FOV<\/h3>\r\n          <p>\r\n            Visualiseer het nominale gezichtsveld\r\n            op basis van camera-instellingen.\r\n          <\/p>\r\n        <\/article>\r\n\r\n\r\n        <article class=\"skp-analysis-card\">\r\n          <span class=\"skp-analysis-no\">03<\/span>\r\n          <div class=\"skp-analysis-icon\">\u2573<\/div>\r\n          <h3>Zichtblokkering<\/h3>\r\n          <p>\r\n            Analyseer welk gedeelte van het zicht\r\n            door obstakels wordt afgeschermd.\r\n          <\/p>\r\n        <\/article>\r\n\r\n\r\n        <article class=\"skp-analysis-card\">\r\n          <span class=\"skp-analysis-no\">04<\/span>\r\n          <div class=\"skp-analysis-icon\">\u25cf<\/div>\r\n          <h3>Blinde zones<\/h3>\r\n          <p>\r\n            Identificeer gebieden die vanuit een\r\n            camerapositie niet zichtbaar zijn.\r\n          <\/p>\r\n        <\/article>\r\n\r\n\r\n        <article class=\"skp-analysis-card\">\r\n          <span class=\"skp-analysis-no\">05<\/span>\r\n          <div class=\"skp-analysis-icon\">\u2317<\/div>\r\n          <h3>Buiten terreingrens<\/h3>\r\n          <p>\r\n            Meet hoeveel van het zichtgebied\r\n            buiten de opgegeven grens valt.\r\n          <\/p>\r\n        <\/article>\r\n\r\n\r\n        <article class=\"skp-analysis-card skp-analysis-live\">\r\n          <span class=\"skp-analysis-no\">LIVE<\/span>\r\n          <div class=\"skp-analysis-icon\">\u21bb<\/div>\r\n          <h3>Herberekening<\/h3>\r\n          <p>\r\n            Nieuwe camera-instellingen leveren onmiddellijk\r\n            een nieuwe geometrische analyse.\r\n          <\/p>\r\n        <\/article>\r\n\r\n      <\/div>\r\n\r\n    <\/section>\r\n\r\n\r\n    <!-- =====================================================\r\n         04 \u2014 CALCULATION\r\n         ===================================================== -->\r\n\r\n    <section class=\"skp-section skp-calculation\">\r\n\r\n      <div class=\"skp-calc-visual\">\r\n\r\n        <div class=\"skp-mini-grid\">\r\n\r\n          <span class=\"skp-mini-camera\"><\/span>\r\n\r\n          <div class=\"skp-mini-fov\"><\/div>\r\n\r\n          <div class=\"skp-mini-wall\"><\/div>\r\n\r\n          <div class=\"skp-mini-target\"><\/div>\r\n\r\n          <i class=\"skp-sample skp-sample-a\"><\/i>\r\n          <i class=\"skp-sample skp-sample-b\"><\/i>\r\n          <i class=\"skp-sample skp-sample-c\"><\/i>\r\n          <i class=\"skp-sample skp-sample-d\"><\/i>\r\n          <i class=\"skp-sample skp-sample-e\"><\/i>\r\n\r\n        <\/div>\r\n\r\n        <div class=\"skp-mini-caption\">\r\n          GRID SAMPLING \/\/ LINE-OF-SIGHT\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n\r\n      <div class=\"skp-calc-copy\">\r\n\r\n        <span class=\"skp-kicker\">\r\n          COVERAGE CALCULATION\r\n        <\/span>\r\n\r\n        <h2>\r\n          Berekening van\r\n          <em>cameradekking<\/em>\r\n        <\/h2>\r\n\r\n        <p>\r\n          Een doelzone wordt bemonsterd met een raster\r\n          van meetpunten. Voor ieder punt wordt onderzocht\r\n          of het geometrisch zichtbaar is.\r\n        <\/p>\r\n\r\n\r\n        <div class=\"skp-checks\">\r\n\r\n          <div>\r\n            <span>01<\/span>\r\n            <p>\r\n              Bevindt het punt zich binnen het FOV\r\n              en het ingestelde bereik?\r\n            <\/p>\r\n          <\/div>\r\n\r\n          <div>\r\n            <span>02<\/span>\r\n            <p>\r\n              Bestaat er een vrije zichtlijn tussen\r\n              camera en meetpunt?\r\n            <\/p>\r\n          <\/div>\r\n\r\n          <div>\r\n            <span>03<\/span>\r\n            <p>\r\n              Wordt deze zichtlijn onderbroken\r\n              door een obstakel?\r\n            <\/p>\r\n          <\/div>\r\n\r\n        <\/div>\r\n\r\n\r\n        <div class=\"skp-formula\">\r\n\r\n          <small>\r\n            COVERAGE RATIO\r\n          <\/small>\r\n\r\n          <div>\r\n            <span>ZICHTBARE MEETPUNTEN<\/span>\r\n            <i><\/i>\r\n            <span>TOTAAL ONDERZOCHTE MEETPUNTEN<\/span>\r\n          <\/div>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n    <\/section>\r\n\r\n\r\n    <!-- =====================================================\r\n         LIMITATION\r\n         ===================================================== -->\r\n\r\n    <section class=\"skp-warning\">\r\n\r\n      <div class=\"skp-warning-icon\">\r\n        !\r\n      <\/div>\r\n\r\n\r\n      <div>\r\n\r\n        <span class=\"skp-kicker\">\r\n          TECHNISCHE BEPERKING \/\/ VERSION 0.1\r\n        <\/span>\r\n\r\n        <h2>\r\n          Momenteel een\r\n          <em>2D-analysemodel<\/em>\r\n        <\/h2>\r\n\r\n        <p>\r\n          Spatial Kernel v0.1 analyseert de situatie\r\n          vanuit het bovenaanzicht van de plattegrond.\r\n        <\/p>\r\n\r\n        <p>\r\n          Montagehoogtes, verticale kijkhoeken,\r\n          niveauverschillen en andere driedimensionale\r\n          factoren maken nog geen deel uit van deze versie.\r\n        <\/p>\r\n\r\n        <div class=\"skp-warning-note\">\r\n          De berekende dekking is daarom een geometrische\r\n          inschatting op basis van de beschikbare 2D-planinformatie.\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n\r\n      <div class=\"skp-model-meter\">\r\n\r\n        <small>\r\n          SPATIAL MODEL\r\n        <\/small>\r\n\r\n        <strong>\r\n          2D\r\n        <\/strong>\r\n\r\n        <div>\r\n          <span><\/span>\r\n        <\/div>\r\n\r\n        <p>\r\n          2.5D LAYER\r\n          <b>FUTURE<\/b>\r\n        <\/p>\r\n\r\n      <\/div>\r\n\r\n    <\/section>\r\n\r\n\r\n    <!-- =====================================================\r\n         REPRODUCIBILITY\r\n         ===================================================== -->\r\n\r\n    <section class=\"skp-section skp-repeat\">\r\n\r\n      <div class=\"skp-repeat-symbol\">\r\n        \u21bb\r\n      <\/div>\r\n\r\n\r\n      <div>\r\n\r\n        <span class=\"skp-kicker\">\r\n          REPRODUCIBILITY\r\n        <\/span>\r\n\r\n        <h2>\r\n          Deterministische\r\n          <em>berekening<\/em>\r\n        <\/h2>\r\n\r\n        <p>\r\n          Een ongewijzigde configuratie van plan,\r\n          obstakels en camera-instellingen levert\r\n          opnieuw hetzelfde geometrische resultaat.\r\n        <\/p>\r\n\r\n      <\/div>\r\n\r\n\r\n      <div class=\"skp-repeat-status\">\r\n\r\n        <span class=\"skp-led skp-led-green\"><\/span>\r\n\r\n        <small>ENGINE STATE<\/small>\r\n\r\n        <strong>REPRODUCIBLE<\/strong>\r\n\r\n        <code>INPUT = OUTPUT<\/code>\r\n\r\n      <\/div>\r\n\r\n    <\/section>\r\n\r\n\r\n    <!-- =====================================================\r\n         BRAND TRANSITION \u2014 CONSOLE COMES AFTER THIS BLOCK\r\n         ===================================================== -->\r\n\r\n    <div\r\n      id=\"spatial-kernel-console\"\r\n      class=\"skp-console-transition\"\r\n    >\r\n\r\n      <span class=\"skp-transition-line\"><\/span>\r\n\r\n\r\n      <div class=\"skp-transition-center\">\r\n\r\n        <small>\r\n          LIVE ENGINE INTERFACE\r\n        <\/small>\r\n\r\n        <img data-recalc-dims=\"1\" decoding=\"async\"\r\n          src=\"https:\/\/i0.wp.com\/cctvacademy.be\/wp-content\/uploads\/2026\/09\/CamSketch_logo_HD-scaled.png?w=812&#038;ssl=1\"\r\n          alt=\"CamSketch CCTV Academy\"\r\n          class=\"skp-logo skp-logo-transition\"\r\n        >\r\n\r\n        <div>\r\n          <span class=\"skp-led skp-led-green\"><\/span>\r\n          SPATIAL KERNEL READY\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n\r\n      <span class=\"skp-transition-line\"><\/span>\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n<\/section>\r\n\r\n\r\n\r\n<style>\r\n\r\n\/* ==========================================================\r\n   CAMSKETCH SPATIAL KERNEL PAGE SYSTEM\r\n   PREFIX: skp-\r\n   ========================================================== *\/\r\n\r\n.skp-page {\r\n  --skp-bg:#030404;\r\n  --skp-panel:#111210;\r\n  --skp-panel2:#1a1916;\r\n\r\n  --skp-bronze:#96612b;\r\n  --skp-brass:#c68a3e;\r\n  --skp-gold:#e4ba71;\r\n\r\n  --skp-text:#dfd1ae;\r\n  --skp-muted:#81796b;\r\n\r\n  --skp-cyan:#6bd6eb;\r\n  --skp-green:#8ef2a6;\r\n  --skp-amber:#e2a34d;\r\n  --skp-red:#dc674d;\r\n\r\n  position:relative;\r\n  isolation:isolate;\r\n\r\n  width:100%;\r\n  max-width:1500px;\r\n\r\n  margin:24px auto;\r\n\r\n  overflow:hidden;\r\n\r\n  color:var(--skp-text);\r\n\r\n  border:1px solid rgba(217,164,80,.28);\r\n  border-radius:22px;\r\n\r\n  background:\r\n    radial-gradient(\r\n      circle at 50% 0%,\r\n      rgba(195,120,37,.12),\r\n      transparent 31%\r\n    ),\r\n    linear-gradient(\r\n      145deg,\r\n      #161511,\r\n      #090a0a 43%,\r\n      #030404\r\n    );\r\n\r\n  box-shadow:\r\n    0 35px 85px rgba(0,0,0,.48),\r\n    inset 0 0 85px rgba(0,0,0,.58);\r\n\r\n  font-family:\r\n    Inter,\r\n    Arial,\r\n    Helvetica,\r\n    sans-serif;\r\n}\r\n\r\n\r\n.skp-page *,\r\n.skp-page *::before,\r\n.skp-page *::after {\r\n  box-sizing:border-box;\r\n}\r\n\r\n\r\n.skp-page::after {\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:0;\r\n  z-index:50;\r\n  pointer-events:none;\r\n  opacity:.11;\r\n\r\n  background:\r\n    repeating-linear-gradient(\r\n      0deg,\r\n      transparent 0,\r\n      transparent 2px,\r\n      rgba(255,255,255,.022) 3px\r\n    );\r\n}\r\n\r\n\r\n\/* SHELL *\/\r\n\r\n.skp-shell {\r\n  position:relative;\r\n  z-index:4;\r\n\r\n  padding:\r\n    clamp(22px,4vw,58px);\r\n}\r\n\r\n\r\n.skp-shell::before {\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:10px;\r\n  pointer-events:none;\r\n\r\n  border:\r\n    1px solid rgba(215,161,78,.16);\r\n\r\n  border-radius:14px;\r\n\r\n  box-shadow:\r\n    inset 0 0 0 3px rgba(69,41,15,.36);\r\n}\r\n\r\n\r\n\/* ATMOSPHERE *\/\r\n\r\n.skp-atmosphere {\r\n  position:absolute;\r\n  inset:0;\r\n  z-index:1;\r\n  overflow:hidden;\r\n  pointer-events:none;\r\n}\r\n\r\n\r\n.skp-glow {\r\n  position:absolute;\r\n  width:500px;\r\n  height:500px;\r\n  border-radius:50%;\r\n  filter:blur(85px);\r\n}\r\n\r\n\r\n.skp-glow-a {\r\n  left:-280px;\r\n  top:12%;\r\n  background:rgba(203,121,32,.13);\r\n}\r\n\r\n\r\n.skp-glow-b {\r\n  right:-280px;\r\n  bottom:10%;\r\n  background:rgba(62,187,215,.065);\r\n}\r\n\r\n\r\n.skp-bg-gear {\r\n  position:absolute;\r\n  color:rgba(194,130,47,.045);\r\n  font-family:Georgia,serif;\r\n  line-height:1;\r\n}\r\n\r\n\r\n.skp-bg-gear-a {\r\n  right:-120px;\r\n  top:-120px;\r\n  font-size:410px;\r\n  animation:skpRotate 60s linear infinite;\r\n}\r\n\r\n\r\n.skp-bg-gear-b {\r\n  left:-90px;\r\n  bottom:-130px;\r\n  font-size:330px;\r\n  animation:skpRotateReverse 52s linear infinite;\r\n}\r\n\r\n\r\n\/* LOGOS *\/\r\n\r\n.skp-logo {\r\n  display:block;\r\n  max-width:100%;\r\n  height:auto;\r\n  object-fit:contain;\r\n}\r\n\r\n\r\n.skp-toplogo-frame {\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n\r\n  width:84px;\r\n  min-height:38px;\r\n\r\n  padding:3px 7px;\r\n\r\n  border:1px solid rgba(83,193,220,.15);\r\n  border-radius:5px;\r\n\r\n  background:\r\n    rgba(55,142,175,.025);\r\n}\r\n\r\n\r\n.skp-logo-top {\r\n  width:72px;\r\n\r\n  filter:\r\n    drop-shadow(\r\n      0 0 8px rgba(43,182,228,.17)\r\n    );\r\n}\r\n\r\n\r\n.skp-logo-plate {\r\n  width:min(100%,390px);\r\n\r\n  padding:11px 18px 14px;\r\n\r\n  border:1px solid rgba(197,142,63,.23);\r\n  border-radius:8px;\r\n\r\n  background:\r\n    radial-gradient(\r\n      circle at 25% 50%,\r\n      rgba(30,153,204,.075),\r\n      transparent 50%\r\n    ),\r\n    linear-gradient(\r\n      145deg,\r\n      #1d1c18,\r\n      #080909\r\n    );\r\n\r\n  box-shadow:\r\n    inset 0 0 0 2px rgba(68,41,16,.28),\r\n    0 18px 35px rgba(0,0,0,.27);\r\n\r\n  text-align:center;\r\n}\r\n\r\n\r\n.skp-logo-plate > small {\r\n  display:block;\r\n\r\n  color:#5b5750;\r\n\r\n  font-size:6px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.23em;\r\n}\r\n\r\n\r\n.skp-logo-hero {\r\n  width:100%;\r\n  max-width:305px;\r\n\r\n  margin:2px auto 0;\r\n\r\n  filter:\r\n    drop-shadow(\r\n      0 0 12px rgba(45,182,226,.18)\r\n    );\r\n}\r\n\r\n\r\n.skp-logo-status {\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n\r\n  gap:7px;\r\n\r\n  color:#607f87;\r\n\r\n  font-size:6px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.13em;\r\n}\r\n\r\n\r\n.skp-logo-transition {\r\n  width:min(270px,70vw);\r\n\r\n  filter:\r\n    drop-shadow(\r\n      0 0 15px rgba(40,183,229,.19)\r\n    );\r\n}\r\n\r\n\r\n\/* LEDS *\/\r\n\r\n.skp-led {\r\n  display:inline-block;\r\n  width:7px;\r\n  height:7px;\r\n  flex:0 0 auto;\r\n  border-radius:50%;\r\n}\r\n\r\n\r\n.skp-led-green {\r\n  background:var(--skp-green);\r\n  box-shadow:\r\n    0 0 7px rgba(142,242,166,.85),\r\n    0 0 15px rgba(142,242,166,.32);\r\n}\r\n\r\n\r\n.skp-led-cyan {\r\n  background:var(--skp-cyan);\r\n  box-shadow:\r\n    0 0 7px rgba(107,214,235,.72);\r\n}\r\n\r\n\r\n.skp-led-amber {\r\n  background:var(--skp-amber);\r\n  box-shadow:\r\n    0 0 7px rgba(226,163,77,.7);\r\n}\r\n\r\n\r\n.skp-led-red {\r\n  background:var(--skp-red);\r\n  box-shadow:\r\n    0 0 7px rgba(220,103,77,.65);\r\n}\r\n\r\n\r\n\/* TOPBAR *\/\r\n\r\n.skp-topbar {\r\n  position:relative;\r\n  z-index:4;\r\n\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    1fr auto 1fr;\r\n\r\n  align-items:center;\r\n\r\n  gap:20px;\r\n\r\n  padding-bottom:16px;\r\n\r\n  border-bottom:\r\n    1px solid rgba(196,141,62,.17);\r\n\r\n  color:#846b48;\r\n\r\n  font-size:8px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.17em;\r\n}\r\n\r\n\r\n.skp-topbrand {\r\n  display:flex;\r\n  align-items:center;\r\n  gap:9px;\r\n}\r\n\r\n\r\n.skp-topbrand i {\r\n  width:1px;\r\n  height:14px;\r\n  background:rgba(194,139,61,.35);\r\n}\r\n\r\n\r\n.skp-topcenter {\r\n  color:#60584d;\r\n  text-align:center;\r\n}\r\n\r\n\r\n.skp-version {\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:flex-end;\r\n\r\n  gap:10px;\r\n}\r\n\r\n\r\n.skp-version small {\r\n  font-size:7px;\r\n}\r\n\r\n\r\n.skp-version strong {\r\n  color:#deb36c;\r\n  font-family:Georgia,serif;\r\n  font-size:18px;\r\n}\r\n\r\n\r\n\/* HERO *\/\r\n\r\n.skp-hero {\r\n  position:relative;\r\n  z-index:4;\r\n\r\n  padding:\r\n    clamp(50px,8vw,100px) 0\r\n    clamp(55px,8vw,90px);\r\n}\r\n\r\n\r\n.skp-eyebrow {\r\n  display:flex;\r\n  align-items:center;\r\n\r\n  gap:14px;\r\n\r\n  margin-bottom:40px;\r\n\r\n  color:#97703b;\r\n\r\n  font-size:8px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.30em;\r\n}\r\n\r\n\r\n.skp-eyebrow span {\r\n  width:40px;\r\n  height:1px;\r\n\r\n  background:\r\n    linear-gradient(\r\n      90deg,\r\n      #966a35,\r\n      transparent\r\n    );\r\n}\r\n\r\n\r\n.skp-eyebrow span:last-child {\r\n  transform:scaleX(-1);\r\n}\r\n\r\n\r\n.skp-hero-grid {\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    minmax(0,1.15fr)\r\n    minmax(300px,.85fr);\r\n\r\n  align-items:center;\r\n\r\n  gap:\r\n    clamp(45px,8vw,100px);\r\n}\r\n\r\n\r\n.skp-code {\r\n  margin-bottom:14px;\r\n\r\n  color:#696053;\r\n\r\n  font-size:8px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.23em;\r\n}\r\n\r\n\r\n.skp-hero h1 {\r\n  margin:0;\r\n\r\n  color:#cca762;\r\n\r\n  font-family:\r\n    Georgia,\r\n    \"Times New Roman\",\r\n    serif;\r\n\r\n  font-size:\r\n    clamp(56px,8vw,105px);\r\n\r\n  font-weight:400;\r\n\r\n  line-height:.78;\r\n\r\n  text-transform:uppercase;\r\n\r\n  text-shadow:\r\n    0 2px 0 #301b09,\r\n    0 7px 0 #070808,\r\n    0 20px 45px rgba(0,0,0,.72);\r\n}\r\n\r\n\r\n.skp-hero h1 span {\r\n  display:block;\r\n\r\n  margin-top:17px;\r\n\r\n  color:#efd08f;\r\n\r\n  font-size:.57em;\r\n  font-weight:800;\r\n\r\n  letter-spacing:.14em;\r\n}\r\n\r\n\r\n.skp-lead {\r\n  max-width:700px;\r\n\r\n  margin:38px 0 0;\r\n\r\n  color:#c7b994;\r\n\r\n  font-family:Georgia,serif;\r\n\r\n  font-size:\r\n    clamp(18px,2vw,24px);\r\n\r\n  line-height:1.55;\r\n}\r\n\r\n\r\n.skp-copy {\r\n  max-width:680px;\r\n\r\n  margin:18px 0 0;\r\n\r\n  color:var(--skp-muted);\r\n\r\n  font-size:13px;\r\n\r\n  line-height:1.8;\r\n}\r\n\r\n\r\n.skp-actions {\r\n  display:flex;\r\n  flex-wrap:wrap;\r\n\r\n  gap:11px;\r\n\r\n  margin-top:34px;\r\n}\r\n\r\n\r\n\/* BUTTONS *\/\r\n\r\n.skp-button {\r\n  display:inline-flex;\r\n  align-items:center;\r\n\r\n  gap:10px;\r\n\r\n  padding:15px 20px;\r\n\r\n  color:#c3a470 !important;\r\n\r\n  text-decoration:none !important;\r\n\r\n  border:\r\n    1px solid rgba(198,146,68,.34);\r\n\r\n  border-radius:5px;\r\n\r\n  background:\r\n    linear-gradient(\r\n      180deg,\r\n      #22211d,\r\n      #0d0e0e\r\n    );\r\n\r\n  box-shadow:\r\n    inset 0 0 0 2px rgba(74,43,16,.3);\r\n\r\n  font-size:8px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.16em;\r\n\r\n  transition:.3s ease;\r\n}\r\n\r\n\r\n.skp-button-main {\r\n  color:#efd295 !important;\r\n\r\n  border-color:\r\n    rgba(226,170,81,.53);\r\n\r\n  background:\r\n    linear-gradient(\r\n      180deg,\r\n      #342819,\r\n      #15120e\r\n    );\r\n}\r\n\r\n\r\n.skp-button:hover {\r\n  transform:translateY(-3px);\r\n\r\n  color:#f4d99d !important;\r\n\r\n  border-color:\r\n    rgba(234,185,96,.74);\r\n}\r\n\r\n\r\n.skp-button b {\r\n  font-size:15px;\r\n  font-weight:400;\r\n}\r\n\r\n\r\n.skp-button-led {\r\n  width:5px;\r\n  height:5px;\r\n\r\n  border-radius:50%;\r\n\r\n  background:var(--skp-green);\r\n\r\n  box-shadow:\r\n    0 0 6px rgba(142,242,166,.7);\r\n}\r\n\r\n\r\n\/* HERO VISUAL *\/\r\n\r\n.skp-hero-visual {\r\n  display:flex;\r\n  align-items:center;\r\n  flex-direction:column;\r\n\r\n  gap:23px;\r\n}\r\n\r\n\r\n.skp-kernel {\r\n  position:relative;\r\n\r\n  width:min(100%,425px);\r\n\r\n  aspect-ratio:1;\r\n\r\n  border-radius:50%;\r\n\r\n  background:\r\n    radial-gradient(\r\n      circle,\r\n      rgba(74,195,218,.07),\r\n      transparent 44%\r\n    );\r\n}\r\n\r\n\r\n.skp-kernel::before {\r\n  content:\"\";\r\n\r\n  position:absolute;\r\n  inset:5%;\r\n\r\n  border:\r\n    1px dashed rgba(200,145,64,.20);\r\n\r\n  border-radius:50%;\r\n\r\n  animation:\r\n    skpRotate 34s linear infinite;\r\n}\r\n\r\n\r\n.skp-ring {\r\n  position:absolute;\r\n  border-radius:50%;\r\n}\r\n\r\n\r\n.skp-ring-1 {\r\n  inset:12%;\r\n\r\n  border:\r\n    5px double rgba(166,109,42,.49);\r\n\r\n  box-shadow:\r\n    inset 0 0 0 4px #0b0b09,\r\n    0 0 0 3px rgba(67,39,14,.75);\r\n\r\n  animation:\r\n    skpRotate 47s linear infinite;\r\n}\r\n\r\n\r\n.skp-ring-2 {\r\n  inset:22%;\r\n\r\n  border:\r\n    2px dotted rgba(220,167,81,.35);\r\n\r\n  animation:\r\n    skpRotateReverse 25s linear infinite;\r\n}\r\n\r\n\r\n.skp-ring-3 {\r\n  inset:32%;\r\n\r\n  border:\r\n    1px solid rgba(103,211,232,.29);\r\n\r\n  box-shadow:\r\n    0 0 25px rgba(83,203,226,.09);\r\n}\r\n\r\n\r\n.skp-axis {\r\n  position:absolute;\r\n\r\n  left:50%;\r\n  top:50%;\r\n\r\n  width:88%;\r\n  height:1px;\r\n\r\n  background:\r\n    linear-gradient(\r\n      90deg,\r\n      transparent,\r\n      rgba(197,142,63,.28),\r\n      transparent\r\n    );\r\n}\r\n\r\n\r\n.skp-axis-h {\r\n  transform:translate(-50%,-50%);\r\n}\r\n\r\n\r\n.skp-axis-v {\r\n  transform:\r\n    translate(-50%,-50%)\r\n    rotate(90deg);\r\n}\r\n\r\n\r\n.skp-node {\r\n  position:absolute;\r\n\r\n  width:8px;\r\n  height:8px;\r\n\r\n  border-radius:50%;\r\n\r\n  background:var(--skp-cyan);\r\n\r\n  box-shadow:\r\n    0 0 9px rgba(107,214,235,.78);\r\n}\r\n\r\n\r\n.skp-node-a {\r\n  top:16%;\r\n  left:49%;\r\n}\r\n\r\n\r\n.skp-node-b {\r\n  right:15%;\r\n  bottom:30%;\r\n}\r\n\r\n\r\n.skp-node-c {\r\n  left:18%;\r\n  bottom:25%;\r\n}\r\n\r\n\r\n.skp-kernel-center {\r\n  position:absolute;\r\n\r\n  left:50%;\r\n  top:50%;\r\n\r\n  z-index:4;\r\n\r\n  display:flex;\r\n  flex-direction:column;\r\n  align-items:center;\r\n  justify-content:center;\r\n\r\n  width:30%;\r\n  aspect-ratio:1;\r\n\r\n  transform:translate(-50%,-50%);\r\n\r\n  border:\r\n    1px solid rgba(211,158,78,.42);\r\n\r\n  border-radius:50%;\r\n\r\n  background:\r\n    radial-gradient(\r\n      circle,\r\n      #20201b,\r\n      #070808 72%\r\n    );\r\n\r\n  box-shadow:\r\n    0 0 0 5px rgba(77,47,17,.42),\r\n    inset 0 0 25px rgba(0,0,0,.85);\r\n}\r\n\r\n\r\n.skp-kernel-center small {\r\n  color:#705634;\r\n\r\n  font-size:6px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.20em;\r\n}\r\n\r\n\r\n.skp-kernel-center strong {\r\n  color:#ebcd8a;\r\n\r\n  font-family:Georgia,serif;\r\n\r\n  font-size:\r\n    clamp(30px,4vw,49px);\r\n}\r\n\r\n\r\n.skp-kernel-center span {\r\n  color:#61b7c8;\r\n\r\n  font-size:6px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.12em;\r\n}\r\n\r\n\r\n\/* STATUS *\/\r\n\r\n.skp-status {\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    repeat(4,1fr);\r\n\r\n  margin-top:\r\n    clamp(55px,8vw,90px);\r\n\r\n  border:\r\n    1px solid rgba(194,139,61,.20);\r\n\r\n  background:\r\n    linear-gradient(\r\n      180deg,\r\n      rgba(31,29,25,.83),\r\n      rgba(9,10,10,.90)\r\n    );\r\n}\r\n\r\n\r\n.skp-status > div {\r\n  display:flex;\r\n  align-items:center;\r\n\r\n  gap:11px;\r\n\r\n  min-height:65px;\r\n\r\n  padding:13px 18px;\r\n\r\n  border-right:\r\n    1px solid rgba(191,137,60,.13);\r\n}\r\n\r\n\r\n.skp-status > div:last-child {\r\n  border-right:0;\r\n}\r\n\r\n\r\n.skp-status p {\r\n  display:flex;\r\n  flex-direction:column;\r\n\r\n  gap:3px;\r\n\r\n  margin:0;\r\n}\r\n\r\n\r\n.skp-status small {\r\n  color:#575249;\r\n\r\n  font-size:6px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.14em;\r\n}\r\n\r\n\r\n.skp-status strong {\r\n  color:#a98a5c;\r\n\r\n  font-size:8px;\r\n\r\n  letter-spacing:.09em;\r\n}\r\n\r\n\r\n\/* SECTIONS *\/\r\n\r\n.skp-section {\r\n  position:relative;\r\n  z-index:4;\r\n\r\n  padding:\r\n    clamp(65px,9vw,115px) 0;\r\n\r\n  border-top:\r\n    1px solid rgba(192,138,61,.13);\r\n}\r\n\r\n\r\n.skp-dark-section {\r\n  margin:\r\n    0 calc(clamp(22px,4vw,58px) * -1);\r\n\r\n  padding-left:\r\n    clamp(22px,4vw,58px);\r\n\r\n  padding-right:\r\n    clamp(22px,4vw,58px);\r\n\r\n  background:\r\n    linear-gradient(\r\n      180deg,\r\n      rgba(0,0,0,.05),\r\n      rgba(0,0,0,.33),\r\n      rgba(0,0,0,.05)\r\n    );\r\n}\r\n\r\n\r\n.skp-heading {\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    60px minmax(0,720px);\r\n\r\n  gap:25px;\r\n\r\n  margin-bottom:\r\n    clamp(38px,6vw,65px);\r\n}\r\n\r\n\r\n.skp-number {\r\n  color:rgba(198,143,62,.33);\r\n\r\n  font-family:Georgia,serif;\r\n\r\n  font-size:34px;\r\n}\r\n\r\n\r\n.skp-kicker {\r\n  display:block;\r\n\r\n  margin-bottom:10px;\r\n\r\n  color:#946a36;\r\n\r\n  font-size:8px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.25em;\r\n}\r\n\r\n\r\n.skp-section h2,\r\n.skp-warning h2,\r\n.skp-repeat h2,\r\n.skp-after-title h2,\r\n.skp-source h2,\r\n.skp-final-cta h2 {\r\n  margin:0;\r\n\r\n  color:#e2d3af;\r\n\r\n  font-family:\r\n    Georgia,\r\n    \"Times New Roman\",\r\n    serif;\r\n\r\n  font-size:\r\n    clamp(32px,5vw,54px);\r\n\r\n  font-weight:400;\r\n\r\n  line-height:1.05;\r\n}\r\n\r\n\r\n.skp-section h2 em,\r\n.skp-warning h2 em,\r\n.skp-repeat h2 em,\r\n.skp-after-title h2 em,\r\n.skp-source h2 em,\r\n.skp-final-cta h2 em {\r\n  color:#bd8440;\r\n  font-style:normal;\r\n}\r\n\r\n\r\n.skp-heading p {\r\n  max-width:650px;\r\n\r\n  margin:15px 0 0;\r\n\r\n  color:#80786b;\r\n\r\n  font-size:12px;\r\n\r\n  line-height:1.8;\r\n}\r\n\r\n\r\n\/* INPUT CARDS *\/\r\n\r\n.skp-input-grid {\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    repeat(5,1fr);\r\n\r\n  gap:13px;\r\n}\r\n\r\n\r\n.skp-input-card {\r\n  position:relative;\r\n\r\n  min-height:282px;\r\n\r\n  padding:20px;\r\n\r\n  overflow:hidden;\r\n\r\n  border:\r\n    1px solid rgba(196,142,63,.22);\r\n\r\n  border-radius:8px;\r\n\r\n  background:\r\n    radial-gradient(\r\n      circle at 90% 0,\r\n      rgba(195,130,47,.06),\r\n      transparent 35%\r\n    ),\r\n    linear-gradient(\r\n      145deg,\r\n      #1c1c18,\r\n      #090a0a\r\n    );\r\n\r\n  box-shadow:\r\n    inset 0 0 0 3px rgba(68,40,15,.24);\r\n\r\n  transition:.3s ease;\r\n}\r\n\r\n\r\n.skp-input-card:hover {\r\n  transform:translateY(-5px);\r\n\r\n  border-color:\r\n    rgba(220,165,80,.52);\r\n}\r\n\r\n\r\n.skp-card-top {\r\n  display:flex;\r\n  justify-content:space-between;\r\n\r\n  color:#665c4c;\r\n\r\n  font-size:7px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.15em;\r\n}\r\n\r\n\r\n.skp-card-top b {\r\n  color:#98703b;\r\n}\r\n\r\n\r\n.skp-icon {\r\n  position:relative;\r\n\r\n  height:65px;\r\n\r\n  margin-top:22px;\r\n}\r\n\r\n\r\n.skp-input-card h3 {\r\n  margin:20px 0 8px;\r\n\r\n  color:#d2c29b;\r\n\r\n  font-family:Georgia,serif;\r\n\r\n  font-size:21px;\r\n  font-weight:400;\r\n}\r\n\r\n\r\n.skp-input-card p {\r\n  margin:0;\r\n\r\n  color:#756f65;\r\n\r\n  font-size:10px;\r\n\r\n  line-height:1.7;\r\n}\r\n\r\n\r\n.skp-card-meter {\r\n  position:absolute;\r\n\r\n  left:20px;\r\n  right:20px;\r\n  bottom:18px;\r\n\r\n  height:3px;\r\n\r\n  overflow:hidden;\r\n\r\n  background:#070808;\r\n}\r\n\r\n\r\n.skp-card-meter span {\r\n  display:block;\r\n  height:100%;\r\n\r\n  background:\r\n    linear-gradient(\r\n      90deg,\r\n      #523619,\r\n      #bc7b36\r\n    );\r\n}\r\n\r\n\r\n\/* CAMERA ICON *\/\r\n\r\n.skp-camera-icon::before {\r\n  content:\"\";\r\n\r\n  position:absolute;\r\n\r\n  left:6px;\r\n  top:20px;\r\n\r\n  width:38px;\r\n  height:23px;\r\n\r\n  border:1px solid #a77335;\r\n\r\n  background:#171614;\r\n}\r\n\r\n\r\n.skp-camera-icon::after {\r\n  content:\"\";\r\n\r\n  position:absolute;\r\n\r\n  left:44px;\r\n  top:25px;\r\n\r\n  border-top:7px solid transparent;\r\n  border-bottom:7px solid transparent;\r\n  border-left:18px solid #95662f;\r\n}\r\n\r\n\r\n.skp-camera-icon span {\r\n  position:absolute;\r\n\r\n  left:18px;\r\n  top:43px;\r\n\r\n  width:4px;\r\n  height:16px;\r\n\r\n  transform:rotate(25deg);\r\n\r\n  background:#8b602d;\r\n}\r\n\r\n\r\n\/* WALL ICON *\/\r\n\r\n.skp-wall-icon {\r\n  display:flex;\r\n  align-items:center;\r\n\r\n  gap:4px;\r\n}\r\n\r\n\r\n.skp-wall-icon i {\r\n  width:25px;\r\n  height:14px;\r\n\r\n  border:1px solid #916430;\r\n\r\n  background:#181714;\r\n}\r\n\r\n\r\n.skp-wall-icon i:nth-child(2) {\r\n  transform:translateY(13px);\r\n}\r\n\r\n\r\n.skp-wall-icon i:nth-child(3) {\r\n  transform:translateY(-7px);\r\n}\r\n\r\n\r\n\/* OBSTACLE *\/\r\n\r\n.skp-obstacle-icon span {\r\n  position:absolute;\r\n\r\n  left:12px;\r\n  top:13px;\r\n\r\n  width:45px;\r\n  height:45px;\r\n\r\n  transform:rotate(45deg);\r\n\r\n  border:1px solid #a77335;\r\n\r\n  background:\r\n    repeating-linear-gradient(\r\n      90deg,\r\n      #171614 0,\r\n      #171614 6px,\r\n      #4e3418 7px,\r\n      #4e3418 8px\r\n    );\r\n}\r\n\r\n\r\n\/* ZONE *\/\r\n\r\n.skp-zone-icon span {\r\n  position:absolute;\r\n\r\n  left:7px;\r\n  top:8px;\r\n\r\n  width:70px;\r\n  height:48px;\r\n\r\n  border:1px dashed #5cacc0;\r\n\r\n  background:\r\n    repeating-linear-gradient(\r\n      45deg,\r\n      rgba(83,185,206,.07) 0,\r\n      rgba(83,185,206,.07) 5px,\r\n      transparent 6px,\r\n      transparent 11px\r\n    );\r\n}\r\n\r\n\r\n\/* BOUNDARY *\/\r\n\r\n.skp-boundary-icon span {\r\n  position:absolute;\r\n\r\n  left:7px;\r\n  top:8px;\r\n\r\n  width:70px;\r\n  height:48px;\r\n\r\n  border:1px dashed #a87739;\r\n}\r\n\r\n\r\n\/* PIPELINE *\/\r\n\r\n.skp-pipeline {\r\n  display:flex;\r\n  align-items:stretch;\r\n}\r\n\r\n\r\n.skp-pipeline article {\r\n  flex:1;\r\n\r\n  min-width:0;\r\n\r\n  padding:21px 16px;\r\n\r\n  border:\r\n    1px solid rgba(194,140,62,.20);\r\n\r\n  border-radius:7px;\r\n\r\n  background:\r\n    linear-gradient(\r\n      180deg,\r\n      #1a1b17,\r\n      #0a0b0b\r\n    );\r\n}\r\n\r\n\r\n.skp-output-step {\r\n  border-color:\r\n    rgba(94,199,219,.25) !important;\r\n}\r\n\r\n\r\n.skp-step {\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n\r\n  width:31px;\r\n  height:31px;\r\n\r\n  margin-bottom:27px;\r\n\r\n  color:#bc8541;\r\n\r\n  border:1px solid #735029;\r\n\r\n  border-radius:50%;\r\n\r\n  font-family:Georgia,serif;\r\n}\r\n\r\n\r\n.skp-pipeline small {\r\n  color:#61584b;\r\n\r\n  font-size:6px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.14em;\r\n}\r\n\r\n\r\n.skp-pipeline h3 {\r\n  margin:5px 0 8px;\r\n\r\n  color:#cdbb96;\r\n\r\n  font-family:Georgia,serif;\r\n\r\n  font-size:18px;\r\n  font-weight:400;\r\n}\r\n\r\n\r\n.skp-pipeline p {\r\n  margin:0;\r\n\r\n  color:#6d675e;\r\n\r\n  font-size:9px;\r\n\r\n  line-height:1.6;\r\n}\r\n\r\n\r\n.skp-pipe {\r\n  position:relative;\r\n  align-self:center;\r\n\r\n  width:24px;\r\n  height:2px;\r\n\r\n  background:\r\n    linear-gradient(\r\n      90deg,\r\n      #523719,\r\n      #a66e31\r\n    );\r\n}\r\n\r\n\r\n.skp-pipe::after {\r\n  content:\"\";\r\n\r\n  position:absolute;\r\n\r\n  right:-1px;\r\n  top:-2px;\r\n\r\n  width:6px;\r\n  height:6px;\r\n\r\n  border-radius:50%;\r\n\r\n  background:#d09647;\r\n\r\n  box-shadow:\r\n    0 0 6px rgba(208,150,71,.6);\r\n}\r\n\r\n\r\n\/* ANALYSIS *\/\r\n\r\n.skp-analysis-grid {\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    repeat(3,1fr);\r\n\r\n  gap:14px;\r\n}\r\n\r\n\r\n.skp-analysis-card {\r\n  position:relative;\r\n\r\n  min-height:248px;\r\n\r\n  padding:26px;\r\n\r\n  border:\r\n    1px solid rgba(192,139,62,.20);\r\n\r\n  border-radius:9px;\r\n\r\n  background:\r\n    radial-gradient(\r\n      circle at 90% 0,\r\n      rgba(197,131,46,.06),\r\n      transparent 32%\r\n    ),\r\n    linear-gradient(\r\n      145deg,\r\n      #1c1b18,\r\n      #080909\r\n    );\r\n\r\n  transition:.3s ease;\r\n}\r\n\r\n\r\n.skp-analysis-card:hover {\r\n  transform:translateY(-5px);\r\n\r\n  border-color:\r\n    rgba(219,164,79,.48);\r\n}\r\n\r\n\r\n.skp-analysis-live {\r\n  border-color:\r\n    rgba(91,194,215,.22);\r\n}\r\n\r\n\r\n.skp-analysis-no {\r\n  position:absolute;\r\n\r\n  top:19px;\r\n  right:21px;\r\n\r\n  color:#635746;\r\n\r\n  font-size:7px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.14em;\r\n}\r\n\r\n\r\n.skp-analysis-icon {\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n\r\n  width:49px;\r\n  height:49px;\r\n\r\n  margin-bottom:29px;\r\n\r\n  color:#d2a057;\r\n\r\n  border:\r\n    1px solid rgba(200,146,66,.35);\r\n\r\n  border-radius:50%;\r\n\r\n  background:#111210;\r\n\r\n  font-family:Georgia,serif;\r\n\r\n  font-size:21px;\r\n}\r\n\r\n\r\n.skp-analysis-card h3 {\r\n  margin:0 0 9px;\r\n\r\n  color:#d7c7a2;\r\n\r\n  font-family:Georgia,serif;\r\n\r\n  font-size:20px;\r\n  font-weight:400;\r\n}\r\n\r\n\r\n.skp-analysis-card p {\r\n  margin:0;\r\n\r\n  color:#756e63;\r\n\r\n  font-size:10px;\r\n\r\n  line-height:1.7;\r\n}\r\n\r\n\r\n\/* CALCULATION *\/\r\n\r\n.skp-calculation {\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    minmax(280px,.9fr)\r\n    minmax(320px,1.1fr);\r\n\r\n  align-items:center;\r\n\r\n  gap:\r\n    clamp(40px,7vw,90px);\r\n}\r\n\r\n\r\n.skp-calc-visual {\r\n  padding:18px;\r\n\r\n  border:\r\n    1px solid rgba(192,140,63,.22);\r\n\r\n  background:#070909;\r\n}\r\n\r\n\r\n.skp-mini-grid {\r\n  position:relative;\r\n\r\n  min-height:400px;\r\n\r\n  overflow:hidden;\r\n\r\n  border:\r\n    1px solid rgba(87,180,199,.12);\r\n\r\n  background-color:#0a0d0d;\r\n\r\n  background-image:\r\n    linear-gradient(\r\n      rgba(99,180,196,.065) 1px,\r\n      transparent 1px\r\n    ),\r\n    linear-gradient(\r\n      90deg,\r\n      rgba(99,180,196,.065) 1px,\r\n      transparent 1px\r\n    );\r\n\r\n  background-size:24px 24px;\r\n}\r\n\r\n\r\n.skp-mini-camera {\r\n  position:absolute;\r\n  z-index:5;\r\n\r\n  left:13%;\r\n  top:49%;\r\n\r\n  width:13px;\r\n  height:13px;\r\n\r\n  border:2px solid #dda75a;\r\n\r\n  border-radius:50%;\r\n\r\n  background:#17140f;\r\n\r\n  box-shadow:\r\n    0 0 12px rgba(221,167,90,.45);\r\n}\r\n\r\n\r\n.skp-mini-fov {\r\n  position:absolute;\r\n\r\n  left:calc(13% + 6px);\r\n  top:23%;\r\n\r\n  width:67%;\r\n  height:54%;\r\n\r\n  clip-path:\r\n    polygon(\r\n      0 50%,\r\n      100% 0,\r\n      100% 100%\r\n    );\r\n\r\n  background:\r\n    linear-gradient(\r\n      90deg,\r\n      rgba(83,188,210,.17),\r\n      rgba(83,188,210,.025)\r\n    );\r\n}\r\n\r\n\r\n.skp-mini-wall {\r\n  position:absolute;\r\n  z-index:4;\r\n\r\n  left:53%;\r\n  top:22%;\r\n\r\n  width:8px;\r\n  height:56%;\r\n\r\n  transform:rotate(-12deg);\r\n\r\n  background:#ae7133;\r\n}\r\n\r\n\r\n.skp-mini-target {\r\n  position:absolute;\r\n\r\n  right:9%;\r\n  top:31%;\r\n\r\n  width:25%;\r\n  height:40%;\r\n\r\n  border:\r\n    1px dashed rgba(93,202,222,.44);\r\n\r\n  background:\r\n    repeating-linear-gradient(\r\n      45deg,\r\n      rgba(78,180,201,.05) 0,\r\n      rgba(78,180,201,.05) 5px,\r\n      transparent 6px,\r\n      transparent 12px\r\n    );\r\n}\r\n\r\n\r\n.skp-sample {\r\n  position:absolute;\r\n  z-index:6;\r\n\r\n  width:4px;\r\n  height:4px;\r\n\r\n  border-radius:50%;\r\n\r\n  background:#72dfef;\r\n\r\n  box-shadow:\r\n    0 0 5px rgba(114,223,239,.75);\r\n}\r\n\r\n\r\n.skp-sample-a {left:70%;top:39%;}\r\n.skp-sample-b {left:76%;top:47%;}\r\n.skp-sample-c {left:82%;top:58%;}\r\n.skp-sample-d {left:68%;top:62%;}\r\n.skp-sample-e {left:87%;top:43%;}\r\n\r\n\r\n.skp-mini-caption {\r\n  margin-top:10px;\r\n\r\n  color:#625a4f;\r\n\r\n  font-size:7px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.17em;\r\n\r\n  text-align:center;\r\n}\r\n\r\n\r\n.skp-calc-copy > p {\r\n  color:#81796b;\r\n\r\n  font-size:12px;\r\n\r\n  line-height:1.8;\r\n}\r\n\r\n\r\n.skp-checks {\r\n  margin-top:27px;\r\n}\r\n\r\n\r\n.skp-checks > div {\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    40px 1fr;\r\n\r\n  gap:14px;\r\n\r\n  padding:14px 0;\r\n\r\n  border-bottom:\r\n    1px solid rgba(192,139,61,.12);\r\n}\r\n\r\n\r\n.skp-checks span {\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n\r\n  width:34px;\r\n  height:34px;\r\n\r\n  color:#b47e3a;\r\n\r\n  border:1px solid #6f4d23;\r\n  border-radius:50%;\r\n\r\n  font-family:Georgia,serif;\r\n\r\n  font-size:10px;\r\n}\r\n\r\n\r\n.skp-checks p {\r\n  margin:5px 0 0;\r\n\r\n  color:#aa9f89;\r\n\r\n  font-family:Georgia,serif;\r\n\r\n  font-size:13px;\r\n\r\n  line-height:1.6;\r\n}\r\n\r\n\r\n.skp-formula {\r\n  margin-top:28px;\r\n\r\n  padding:17px;\r\n\r\n  border:\r\n    1px solid rgba(95,193,213,.16);\r\n\r\n  background:\r\n    rgba(55,176,199,.03);\r\n}\r\n\r\n\r\n.skp-formula small {\r\n  display:block;\r\n\r\n  margin-bottom:11px;\r\n\r\n  color:#59949f;\r\n\r\n  font-size:6px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.14em;\r\n}\r\n\r\n\r\n.skp-formula div {\r\n  display:flex;\r\n  align-items:center;\r\n\r\n  gap:12px;\r\n\r\n  color:#938876;\r\n\r\n  font-size:7px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.09em;\r\n}\r\n\r\n\r\n.skp-formula i {\r\n  width:1px;\r\n  height:19px;\r\n\r\n  background:\r\n    rgba(96,191,210,.27);\r\n}\r\n\r\n\r\n\/* WARNING *\/\r\n\r\n.skp-warning {\r\n  position:relative;\r\n  z-index:4;\r\n\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    70px minmax(0,1fr) 220px;\r\n\r\n  gap:30px;\r\n\r\n  margin:\r\n    clamp(50px,7vw,80px) 0;\r\n\r\n  padding:\r\n    clamp(28px,5vw,48px);\r\n\r\n  border:\r\n    1px solid rgba(209,129,48,.35);\r\n\r\n  border-radius:9px;\r\n\r\n  background:\r\n    radial-gradient(\r\n      circle at 0 50%,\r\n      rgba(193,100,31,.10),\r\n      transparent 36%\r\n    ),\r\n    linear-gradient(\r\n      145deg,\r\n      #201813,\r\n      #0a0b0b 68%\r\n    );\r\n}\r\n\r\n\r\n.skp-warning-icon {\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n\r\n  width:59px;\r\n  height:59px;\r\n\r\n  color:#e5ab58;\r\n\r\n  border:1px solid #99632a;\r\n  border-radius:50%;\r\n\r\n  background:#20150c;\r\n\r\n  font-family:Georgia,serif;\r\n\r\n  font-size:31px;\r\n}\r\n\r\n\r\n.skp-warning p {\r\n  color:#8c8273;\r\n\r\n  font-size:11px;\r\n\r\n  line-height:1.75;\r\n}\r\n\r\n\r\n.skp-warning-note {\r\n  margin-top:20px;\r\n\r\n  padding:12px 14px;\r\n\r\n  color:#bf9762;\r\n\r\n  border-left:\r\n    2px solid #bc7732;\r\n\r\n  background:\r\n    rgba(185,105,34,.055);\r\n\r\n  font-size:9px;\r\n\r\n  line-height:1.6;\r\n}\r\n\r\n\r\n.skp-model-meter {\r\n  align-self:center;\r\n\r\n  padding:20px;\r\n\r\n  border:\r\n    1px solid rgba(194,139,61,.18);\r\n\r\n  background:\r\n    rgba(0,0,0,.16);\r\n\r\n  text-align:center;\r\n}\r\n\r\n\r\n.skp-model-meter small {\r\n  color:#5c5448;\r\n\r\n  font-size:6px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.15em;\r\n}\r\n\r\n\r\n.skp-model-meter > strong {\r\n  display:block;\r\n\r\n  margin:7px 0 12px;\r\n\r\n  color:#dfb36b;\r\n\r\n  font-family:Georgia,serif;\r\n\r\n  font-size:48px;\r\n}\r\n\r\n\r\n.skp-model-meter > div {\r\n  height:5px;\r\n  background:#060707;\r\n}\r\n\r\n\r\n.skp-model-meter > div span {\r\n  display:block;\r\n\r\n  width:55%;\r\n  height:100%;\r\n\r\n  background:\r\n    linear-gradient(\r\n      90deg,\r\n      #84501f,\r\n      #d89845\r\n    );\r\n}\r\n\r\n\r\n.skp-model-meter p {\r\n  display:flex;\r\n  justify-content:space-between;\r\n\r\n  margin:11px 0 0;\r\n\r\n  color:#61594f;\r\n\r\n  font-size:6px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.10em;\r\n}\r\n\r\n\r\n.skp-model-meter p b {\r\n  color:#8b6437;\r\n}\r\n\r\n\r\n\/* REPEATABILITY *\/\r\n\r\n.skp-repeat {\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    120px minmax(0,1fr) 220px;\r\n\r\n  align-items:center;\r\n\r\n  gap:\r\n    clamp(25px,5vw,60px);\r\n}\r\n\r\n\r\n.skp-repeat-symbol {\r\n  color:rgba(193,138,57,.24);\r\n\r\n  font-family:Georgia,serif;\r\n\r\n  font-size:\r\n    clamp(70px,10vw,125px);\r\n\r\n  animation:\r\n    skpRotateReverse 28s linear infinite;\r\n}\r\n\r\n\r\n.skp-repeat > div:nth-child(2) p {\r\n  max-width:680px;\r\n\r\n  color:#81796c;\r\n\r\n  font-size:11px;\r\n\r\n  line-height:1.75;\r\n}\r\n\r\n\r\n.skp-repeat-status {\r\n  padding:20px;\r\n\r\n  border:\r\n    1px solid rgba(103,203,124,.15);\r\n\r\n  background:\r\n    rgba(84,172,103,.03);\r\n}\r\n\r\n\r\n.skp-repeat-status small {\r\n  display:block;\r\n\r\n  margin-top:11px;\r\n\r\n  color:#59655a;\r\n\r\n  font-size:6px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.14em;\r\n}\r\n\r\n\r\n.skp-repeat-status strong {\r\n  display:block;\r\n\r\n  margin-top:5px;\r\n\r\n  color:#95c39d;\r\n\r\n  font-size:10px;\r\n\r\n  letter-spacing:.12em;\r\n}\r\n\r\n\r\n.skp-repeat-status code {\r\n  display:block;\r\n\r\n  margin-top:18px;\r\n\r\n  color:#617064;\r\n\r\n  font-size:8px;\r\n}\r\n\r\n\r\n\/* CONSOLE TRANSITION *\/\r\n\r\n.skp-console-transition {\r\n  position:relative;\r\n  z-index:4;\r\n\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    1fr auto 1fr;\r\n\r\n  align-items:center;\r\n\r\n  gap:\r\n    clamp(15px,4vw,40px);\r\n\r\n  padding:\r\n    32px 0 12px;\r\n}\r\n\r\n\r\n.skp-transition-line {\r\n  height:1px;\r\n\r\n  background:\r\n    linear-gradient(\r\n      90deg,\r\n      transparent,\r\n      rgba(196,141,62,.34)\r\n    );\r\n}\r\n\r\n\r\n.skp-transition-line:last-child {\r\n  transform:scaleX(-1);\r\n}\r\n\r\n\r\n.skp-transition-center {\r\n  display:flex;\r\n  flex-direction:column;\r\n  align-items:center;\r\n\r\n  gap:5px;\r\n\r\n  min-width:min(360px,70vw);\r\n}\r\n\r\n\r\n.skp-transition-center small {\r\n  color:#736651;\r\n\r\n  font-size:6px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.22em;\r\n}\r\n\r\n\r\n.skp-transition-center > div {\r\n  display:flex;\r\n  align-items:center;\r\n\r\n  gap:7px;\r\n\r\n  color:#76927b;\r\n\r\n  font-size:6px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.13em;\r\n}\r\n\r\n\r\n\/* ==========================================================\r\n   BLOCK 2 STYLES\r\n   ========================================================== *\/\r\n\r\n.skp-after-console .skp-shell {\r\n  padding-top:\r\n    clamp(30px,5vw,60px);\r\n}\r\n\r\n\r\n.skp-after-header {\r\n  position:relative;\r\n  z-index:4;\r\n\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    minmax(0,1fr) auto;\r\n\r\n  align-items:center;\r\n\r\n  gap:40px;\r\n\r\n  padding:\r\n    10px 0\r\n    clamp(50px,7vw,80px);\r\n}\r\n\r\n\r\n.skp-after-title p {\r\n  max-width:700px;\r\n\r\n  color:#81796c;\r\n\r\n  font-size:11px;\r\n\r\n  line-height:1.8;\r\n}\r\n\r\n\r\n.skp-after-logo {\r\n  width:min(320px,35vw);\r\n\r\n  padding:15px 20px;\r\n\r\n  border:\r\n    1px solid rgba(194,140,63,.2);\r\n\r\n  border-radius:8px;\r\n\r\n  background:\r\n    linear-gradient(\r\n      145deg,\r\n      #1c1b18,\r\n      #080909\r\n    );\r\n}\r\n\r\n\r\n.skp-logo-after {\r\n  width:100%;\r\n\r\n  filter:\r\n    drop-shadow(\r\n      0 0 14px rgba(44,180,225,.18)\r\n    );\r\n}\r\n\r\n\r\n\/* SOURCES *\/\r\n\r\n.skp-source {\r\n  position:relative;\r\n  z-index:4;\r\n\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    1fr 1fr;\r\n\r\n  gap:\r\n    clamp(35px,7vw,80px);\r\n\r\n  padding:\r\n    clamp(55px,8vw,90px) 0;\r\n\r\n  border-top:\r\n    1px solid rgba(190,137,60,.13);\r\n}\r\n\r\n\r\n.skp-source h2 {\r\n  font-size:\r\n    clamp(30px,4vw,44px);\r\n}\r\n\r\n\r\n.skp-source p {\r\n  max-width:650px;\r\n\r\n  color:#80786a;\r\n\r\n  font-size:10px;\r\n\r\n  line-height:1.75;\r\n}\r\n\r\n\r\n.skp-disclaimer {\r\n  margin-top:18px;\r\n\r\n  padding:11px 13px;\r\n\r\n  color:#a17b4d;\r\n\r\n  border-left:\r\n    2px solid #9c6732;\r\n\r\n  background:\r\n    rgba(173,107,42,.035);\r\n\r\n  font-size:9px;\r\n\r\n  line-height:1.6;\r\n}\r\n\r\n\r\n.skp-source-links {\r\n  display:flex;\r\n  flex-direction:column;\r\n  justify-content:center;\r\n\r\n  gap:9px;\r\n}\r\n\r\n\r\n.skp-source-links a {\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    70px 1fr auto;\r\n\r\n  align-items:center;\r\n\r\n  gap:14px;\r\n\r\n  min-height:76px;\r\n\r\n  padding:13px 16px;\r\n\r\n  color:#bca67c !important;\r\n\r\n  text-decoration:none !important;\r\n\r\n  border:\r\n    1px solid rgba(190,138,62,.18);\r\n\r\n  background:\r\n    linear-gradient(\r\n      145deg,\r\n      rgba(31,30,26,.65),\r\n      rgba(8,9,9,.88)\r\n    );\r\n\r\n  transition:.3s ease;\r\n}\r\n\r\n\r\n.skp-source-links a:hover {\r\n  transform:translateX(4px);\r\n\r\n  border-color:\r\n    rgba(215,161,78,.46);\r\n}\r\n\r\n\r\n.skp-source-logo {\r\n  width:64px;\r\n\r\n  filter:\r\n    drop-shadow(\r\n      0 0 8px rgba(50,182,223,.15)\r\n    );\r\n}\r\n\r\n\r\n.skp-source-text {\r\n  display:flex;\r\n  flex-direction:column;\r\n\r\n  gap:4px;\r\n}\r\n\r\n\r\n.skp-source-text span {\r\n  color:#655a48;\r\n\r\n  font-size:6px;\r\n  font-weight:900;\r\n\r\n  letter-spacing:.13em;\r\n}\r\n\r\n\r\n.skp-source-text strong {\r\n  color:#bca67c;\r\n\r\n  font-family:Georgia,serif;\r\n\r\n  font-size:13px;\r\n  font-weight:400;\r\n}\r\n\r\n\r\n.skp-source-links b {\r\n  color:#bd843f;\r\n  font-size:15px;\r\n}\r\n\r\n\r\n\/* FINAL CTA *\/\r\n\r\n.skp-final-cta {\r\n  position:relative;\r\n  z-index:4;\r\n\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    230px minmax(0,1fr) auto;\r\n\r\n  align-items:center;\r\n\r\n  gap:\r\n    clamp(25px,5vw,55px);\r\n\r\n  padding:\r\n    clamp(28px,5vw,48px);\r\n\r\n  border:\r\n    1px solid rgba(202,149,68,.27);\r\n\r\n  border-radius:10px;\r\n\r\n  background:\r\n    radial-gradient(\r\n      circle at 0 50%,\r\n      rgba(34,158,205,.07),\r\n      transparent 35%\r\n    ),\r\n    linear-gradient(\r\n      145deg,\r\n      #1a1916,\r\n      #080909\r\n    );\r\n}\r\n\r\n\r\n.skp-final-logo {\r\n  width:100%;\r\n\r\n  filter:\r\n    drop-shadow(\r\n      0 0 15px rgba(45,182,227,.17)\r\n    );\r\n}\r\n\r\n\r\n.skp-final-cta h2 {\r\n  font-size:\r\n    clamp(29px,4vw,45px);\r\n}\r\n\r\n\r\n.skp-final-cta p {\r\n  max-width:670px;\r\n\r\n  color:#827a6c;\r\n\r\n  font-size:11px;\r\n\r\n  line-height:1.75;\r\n}\r\n\r\n\r\n.skp-final-buttons {\r\n  display:flex;\r\n  flex-direction:column;\r\n\r\n  gap:8px;\r\n\r\n  min-width:210px;\r\n}\r\n\r\n\r\n\/* FOOTER *\/\r\n\r\n.skp-footer {\r\n  position:relative;\r\n  z-index:4;\r\n\r\n  display:grid;\r\n\r\n  grid-template-columns:\r\n    auto 1fr auto;\r\n\r\n  align-items:center;\r\n\r\n  gap:22px;\r\n\r\n  padding:25px 0 8px;\r\n\r\n  margin-top:\r\n    clamp(45px,7vw,80px);\r\n\r\n  border-top:\r\n    1px solid rgba(190,137,60,.12);\r\n}\r\n\r\n\r\n.skp-footer-left {\r\n  display:flex;\r\n  align-items:center;\r\n\r\n  gap:13px;\r\n}\r\n\r\n\r\n.skp-footer-logo {\r\n  width:92px;\r\n\r\n  filter:\r\n    drop-shadow(\r\n      0 0 8px rgba(50,181,221,.14)\r\n    );\r\n}\r\n\r\n\r\n.skp-footer-meta {\r\n  display:flex;\r\n  align-items:center;\r\n\r\n  gap:8px;\r\n}\r\n\r\n\r\n.skp-footer p {\r\n  margin:0;\r\n\r\n  color:#605a50;\r\n\r\n  font-size:6px;\r\n\r\n  letter-spacing:.12em;\r\n}\r\n\r\n\r\n.skp-footer p strong {\r\n  display:block;\r\n\r\n  margin-top:3px;\r\n\r\n  color:#947044;\r\n}\r\n\r\n\r\n.skp-footer-rule span {\r\n  display:block;\r\n  height:1px;\r\n\r\n  background:\r\n    linear-gradient(\r\n      90deg,\r\n      transparent,\r\n      rgba(192,139,61,.17),\r\n      transparent\r\n    );\r\n}\r\n\r\n\r\n.skp-footer-brand {\r\n  text-align:right;\r\n}\r\n\r\n\r\n\/* ANIMATIONS *\/\r\n\r\n@keyframes skpRotate {\r\n  to {\r\n    transform:rotate(360deg);\r\n  }\r\n}\r\n\r\n\r\n@keyframes skpRotateReverse {\r\n  to {\r\n    transform:rotate(-360deg);\r\n  }\r\n}\r\n\r\n\r\n\/* TABLET *\/\r\n\r\n@media (max-width:1100px) {\r\n\r\n  .skp-input-grid {\r\n    grid-template-columns:\r\n      repeat(3,1fr);\r\n  }\r\n\r\n}\r\n\r\n\r\n@media (max-width:900px) {\r\n\r\n  .skp-hero-grid {\r\n    grid-template-columns:1fr;\r\n  }\r\n\r\n\r\n  .skp-kernel {\r\n    width:min(74vw,390px);\r\n  }\r\n\r\n\r\n  .skp-status {\r\n    grid-template-columns:\r\n      1fr 1fr;\r\n  }\r\n\r\n\r\n  .skp-analysis-grid {\r\n    grid-template-columns:\r\n      1fr 1fr;\r\n  }\r\n\r\n\r\n  .skp-pipeline {\r\n    display:grid;\r\n\r\n    grid-template-columns:\r\n      1fr 1fr;\r\n\r\n    gap:9px;\r\n  }\r\n\r\n\r\n  .skp-pipe {\r\n    display:none;\r\n  }\r\n\r\n\r\n  .skp-calculation {\r\n    grid-template-columns:1fr;\r\n  }\r\n\r\n\r\n  .skp-warning {\r\n    grid-template-columns:\r\n      60px 1fr;\r\n  }\r\n\r\n\r\n  .skp-model-meter {\r\n    grid-column:\r\n      1 \/ -1;\r\n  }\r\n\r\n\r\n  .skp-repeat {\r\n    grid-template-columns:\r\n      90px 1fr;\r\n  }\r\n\r\n\r\n  .skp-repeat-status {\r\n    grid-column:\r\n      1 \/ -1;\r\n  }\r\n\r\n\r\n  .skp-source {\r\n    grid-template-columns:1fr;\r\n  }\r\n\r\n\r\n  .skp-after-header {\r\n    grid-template-columns:1fr;\r\n  }\r\n\r\n\r\n  .skp-after-logo {\r\n    width:min(320px,100%);\r\n  }\r\n\r\n\r\n  .skp-final-cta {\r\n    grid-template-columns:\r\n      180px 1fr;\r\n  }\r\n\r\n\r\n  .skp-final-buttons {\r\n    grid-column:\r\n      1 \/ -1;\r\n\r\n    flex-direction:row;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* MOBILE *\/\r\n\r\n@media (max-width:650px) {\r\n\r\n  .skp-page {\r\n    margin:12px auto;\r\n    border-radius:14px;\r\n  }\r\n\r\n\r\n  .skp-shell {\r\n    padding:24px 15px;\r\n  }\r\n\r\n\r\n  .skp-topbar {\r\n    grid-template-columns:\r\n      1fr auto;\r\n  }\r\n\r\n\r\n  .skp-topcenter {\r\n    display:none;\r\n  }\r\n\r\n\r\n  .skp-topbrand > span:not(.skp-led),\r\n  .skp-topbrand > i {\r\n    display:none;\r\n  }\r\n\r\n\r\n  .skp-eyebrow {\r\n    margin-bottom:28px;\r\n\r\n    font-size:6px;\r\n\r\n    letter-spacing:.18em;\r\n  }\r\n\r\n\r\n  .skp-eyebrow span {\r\n    width:20px;\r\n  }\r\n\r\n\r\n  .skp-hero h1 {\r\n    font-size:\r\n      clamp(48px,16vw,72px);\r\n  }\r\n\r\n\r\n  .skp-hero h1 span {\r\n    font-size:.48em;\r\n  }\r\n\r\n\r\n  .skp-lead {\r\n    font-size:17px;\r\n  }\r\n\r\n\r\n  .skp-actions {\r\n    flex-direction:column;\r\n  }\r\n\r\n\r\n  .skp-button {\r\n    width:100%;\r\n\r\n    justify-content:center;\r\n  }\r\n\r\n\r\n  .skp-logo-plate {\r\n    width:100%;\r\n  }\r\n\r\n\r\n  .skp-logo-hero {\r\n    max-width:245px;\r\n  }\r\n\r\n\r\n  .skp-status {\r\n    grid-template-columns:1fr;\r\n  }\r\n\r\n\r\n  .skp-status > div {\r\n    border-right:0;\r\n\r\n    border-bottom:\r\n      1px solid rgba(191,137,60,.13);\r\n  }\r\n\r\n\r\n  .skp-heading {\r\n    grid-template-columns:1fr;\r\n\r\n    gap:10px;\r\n  }\r\n\r\n\r\n  .skp-number {\r\n    font-size:23px;\r\n  }\r\n\r\n\r\n  .skp-input-grid,\r\n  .skp-analysis-grid,\r\n  .skp-pipeline {\r\n    grid-template-columns:1fr;\r\n  }\r\n\r\n\r\n  .skp-warning,\r\n  .skp-repeat {\r\n    grid-template-columns:1fr;\r\n  }\r\n\r\n\r\n  .skp-console-transition {\r\n    grid-template-columns:1fr;\r\n  }\r\n\r\n\r\n  .skp-transition-line {\r\n    display:none;\r\n  }\r\n\r\n\r\n  .skp-transition-center {\r\n    min-width:0;\r\n  }\r\n\r\n\r\n  .skp-source-links a {\r\n    grid-template-columns:\r\n      53px 1fr auto;\r\n\r\n    gap:9px;\r\n  }\r\n\r\n\r\n  .skp-source-logo {\r\n    width:48px;\r\n  }\r\n\r\n\r\n  .skp-final-cta {\r\n    grid-template-columns:1fr;\r\n  }\r\n\r\n\r\n  .skp-final-logo {\r\n    max-width:220px;\r\n    margin:auto;\r\n  }\r\n\r\n\r\n  .skp-final-buttons {\r\n    grid-column:auto;\r\n\r\n    flex-direction:column;\r\n  }\r\n\r\n\r\n  .skp-footer {\r\n    grid-template-columns:\r\n      1fr auto;\r\n  }\r\n\r\n\r\n  .skp-footer-rule {\r\n    display:none;\r\n  }\r\n\r\n\r\n  .skp-footer-logo {\r\n    width:68px;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* ACCESSIBILITY *\/\r\n\r\n@media (prefers-reduced-motion:reduce) {\r\n\r\n  .skp-page *,\r\n  .skp-page *::before,\r\n  .skp-page *::after {\r\n    animation-duration:.001ms !important;\r\n    animation-iteration-count:1 !important;\r\n    transition-duration:.001ms !important;\r\n  }\r\n\r\n}\r\n\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0f6f270 e-flex e-con-boxed e-con e-parent\" data-id=\"0f6f270\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d61cdd0 elementor-widget elementor-widget-spacer\" data-id=\"d61cdd0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-83d5022 e-flex e-con-boxed e-con e-parent\" data-id=\"83d5022\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d687b21 elementor-widget elementor-widget-html\" data-id=\"d687b21\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!doctype html>\n<html lang=\"nl\">\n<head>\n<meta charset=\"utf-8\" \/>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" \/>\n<title>CamSketch Spatial Kernel v0.1<\/title>\n<style>\n  *{box-sizing:border-box} body{margin:0;font-family:Inter,system-ui,-apple-system,Segoe UI,sans-serif;background:#f4f6f8;color:#17202a}\n  .app{display:grid;grid-template-columns:minmax(620px,1fr) 360px;height:100vh;gap:0}.canvas{padding:24px;display:flex;flex-direction:column;gap:14px}\n  .bar{display:flex;align-items:center;justify-content:space-between}.title{font-weight:750;font-size:19px}.sub{font-size:12px;color:#68727d}\n  .stage{background:white;border:1px solid #d8dee5;border-radius:14px;box-shadow:0 8px 24px rgba(26,39,55,.06);overflow:hidden;flex:1;min-height:620px}\n  svg{width:100%;height:100%;touch-action:none}.sidebar{background:#fff;border-left:1px solid #d8dee5;padding:22px;overflow:auto}\n  .cameraHead{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.cameraHead h2{margin:0;font-size:20px}\n  .badge{font-size:12px;font-weight:700;padding:6px 9px;border-radius:999px;background:#eef2f5}.section{margin:18px 0}.section h3{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:#747e88;margin:0 0 8px}\n  .finding{border:1px solid #e0e5ea;border-radius:11px;padding:12px;margin:8px 0}.finding strong{display:block;margin-bottom:4px}.finding p{margin:5px 0;font-size:13px;line-height:1.4;color:#4f5963}\n  .pass{border-left:4px solid #2d9d78}.warn{border-left:4px solid #d9911b}.fail{border-left:4px solid #d64a4a}.review{border-left:4px solid #8066cc}\n  .controls{display:grid;grid-template-columns:1fr;gap:10px}.ctrl{display:grid;grid-template-columns:80px 1fr 50px;align-items:center;gap:8px;font-size:12px}.ctrl input{width:100%}\n  .metrics{display:grid;grid-template-columns:1fr 1fr;gap:8px}.metric{background:#f6f8fa;border-radius:10px;padding:10px}.metric b{display:block;font-size:18px}.metric span{font-size:11px;color:#69737d}\n  .source{font-size:11px;color:#66717c;line-height:1.4}.source a{color:inherit}.hint{font-size:12px;color:#66717c}.legend{display:flex;gap:14px;font-size:11px;color:#66717c}.dot{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}\n<\/style>\n<\/head>\n<body>\n<div class=\"app\">\n  <main class=\"canvas\">\n    <div class=\"bar\"><div><div class=\"title\">CamSketch \u2014 dynamische plananalyse<\/div><div class=\"sub\">Sleep C03 op het plan of wijzig richting\/FOV. Analyse wordt direct opnieuw berekend.<\/div><\/div><div class=\"legend\"><span><i class=\"dot\" style=\"background:#8fc7ff\"><\/i>zichtbaar<\/span><span><i class=\"dot\" style=\"background:#ffc869\"><\/i>doelzone<\/span><span><i class=\"dot\" style=\"background:#7d8791\"><\/i>obstakel<\/span><\/div><\/div>\n    <div class=\"stage\"><svg id=\"plan\" viewBox=\"0 0 900 620\" aria-label=\"CamSketch demo plan\"><\/svg><\/div>\n  <\/main>\n  <aside class=\"sidebar\">\n    <div class=\"cameraHead\"><div><div class=\"sub\">CAMERA<\/div><h2>C03 \u2014 Hoofdingang<\/h2><\/div><span class=\"badge\" id=\"overallBadge\">Analyse<\/span><\/div>\n    <div class=\"controls\">\n      <div class=\"ctrl\"><label>Richting<\/label><input id=\"yaw\" type=\"range\" min=\"-180\" max=\"180\" step=\"1\"><output id=\"yawOut\"><\/output><\/div>\n      <div class=\"ctrl\"><label>HFOV<\/label><input id=\"hfov\" type=\"range\" min=\"20\" max=\"120\" step=\"1\"><output id=\"hfovOut\"><\/output><\/div>\n      <div class=\"ctrl\"><label>Bereik<\/label><input id=\"range\" type=\"range\" min=\"3\" max=\"16\" step=\"0.5\"><output id=\"rangeOut\"><\/output><\/div>\n    <\/div>\n    <div class=\"section\"><h3>Planmetrics<\/h3><div class=\"metrics\">\n      <div class=\"metric\"><b id=\"coverageMetric\">\u2014<\/b><span>zichtbare doeldekking<\/span><\/div>\n      <div class=\"metric\"><b id=\"occlusionMetric\">\u2014<\/b><span>afscherming<\/span><\/div>\n      <div class=\"metric\"><b id=\"privacyMetric\">\u2014<\/b><span>buiten grens<\/span><\/div>\n      <div class=\"metric\"><b id=\"revisionMetric\">0<\/b><span>engine revision<\/span><\/div>\n    <\/div><\/div>\n    <div class=\"section\"><h3>Bevindingen<\/h3><div id=\"findings\"><\/div><\/div>\n    <div class=\"section\"><h3>Bronbeleid<\/h3><div class=\"source\">Technische CCTV-conclusies in deze demo verwijzen alleen naar CCTV Academy. De geometrie zelf is de interne CamSketch-rekenmethode.<br><br><a href=\"https:\/\/cctvacademy.be\/nl\/van-luchtfoto-tot-beveiligingsplan\/\" target=\"_blank\">CCTV Academy \u2014 Van luchtfoto tot beveiligingsplan<\/a><br><a href=\"https:\/\/cctvacademy.be\/nl\/belangrijk-principe-proportionaliteit\/\" target=\"_blank\">CCTV Academy \u2014 proportionaliteit<\/a><\/div><\/div>\n    <div class=\"hint\">v0.1 gebruikt 2D-planocclusie. Hoogtes worden in de volgende 2.5D-laag meegenomen.<\/div>\n  <\/aside>\n<\/div>\n<script>\nconst svg=document.getElementById('plan'); const NS='http:\/\/www.w3.org\/2000\/svg';\nconst SCALE=55, OX=62, OY=70, W=14, H=9;\nconst plan={camera:{id:'C03',x:2,y:4,yaw:0,hfov:70,range:12},target:[[10.5,3],[12.5,3],[12.5,5],[10.5,5]],obstacle:[[6,3.2],[7.2,3.2],[7.2,5.2],[6,5.2]],boundary:[[0,0],[14,0],[14,9],[0,9]]};\nlet revision=0, dragging=false;\nconst X=x=>OX+x*SCALE, Y=y=>OY+(H-y)*SCALE;\nfunction el(name,attrs={}){const n=document.createElementNS(NS,name);for(const[k,v]of Object.entries(attrs))n.setAttribute(k,v);return n}\nfunction polyStr(poly){return poly.map(p=>`${X(p[0])},${Y(p[1])}`).join(' ')}\nfunction pointInPoly(p,poly){let inside=false;for(let i=0,j=poly.length-1;i<poly.length;j=i++){const a=poly[i],b=poly[j];if(((a[1]>p[1])!=(b[1]>p[1]))&&(p[0]<(b[0]-a[0])*(p[1]-a[1])\/((b[1]-a[1])||1e-9)+a[0]))inside=!inside}return inside}\nfunction raySeg(ox,oy,a,s1,s2){const dx=Math.cos(a),dy=Math.sin(a),sx=s2[0]-s1[0],sy=s2[1]-s1[1],det=dx*(-sy)-dy*(-sx);if(Math.abs(det)<1e-9)return null;const rx=s1[0]-ox,ry=s1[1]-oy,t=(rx*(-sy)-ry*(-sx))\/det,u=(dx*ry-dy*rx)\/det;return t>1e-6&&u>=0&&u<=1?t:null}\nfunction edges(poly){return poly.map((p,i)=>[p,poly[(i+1)%poly.length]])}\nfunction visiblePoly(){const c=plan.camera,left=c.yaw-c.hfov\/2,right=c.yaw+c.hfov\/2,angs=[];for(let a=left;a<=right+1e-6;a+=2)angs.push(a);angs.push(right);for(const p of plan.obstacle){let a=Math.atan2(p[1]-c.y,p[0]-c.x)*180\/Math.PI;while(a-c.yaw>180)a-=360;while(a-c.yaw<-180)a+=360;if(a>=left-.2&&a<=right+.2){angs.push(a-.03,a,a+.03)}}angs.sort((a,b)=>a-b);const es=edges(plan.obstacle);return [[c.x,c.y],...angs.map(ad=>{const ar=ad*Math.PI\/180;let d=c.range;for(const e of es){const h=raySeg(c.x,c.y,ar,e[0],e[1]);if(h!==null&&h<d)d=h}return[c.x+Math.cos(ar)*d,c.y+Math.sin(ar)*d]})]}\nfunction nominalPoly(){const c=plan.camera,left=c.yaw-c.hfov\/2,right=c.yaw+c.hfov\/2,a=[[c.x,c.y]];for(let d=left;d<=right+1e-6;d+=2){const r=d*Math.PI\/180;a.push([c.x+Math.cos(r)*c.range,c.y+Math.sin(r)*c.range])}return a}\nfunction coverage(target,vis){let total=0,seen=0;const minX=Math.min(...target.map(p=>p[0])),maxX=Math.max(...target.map(p=>p[0])),minY=Math.min(...target.map(p=>p[1])),maxY=Math.max(...target.map(p=>p[1]));for(let iy=0;iy<45;iy++)for(let ix=0;ix<45;ix++){const p=[minX+(ix+.5)*(maxX-minX)\/45,minY+(iy+.5)*(maxY-minY)\/45];if(pointInPoly(p,target)){total++;if(pointInPoly(p,vis))seen++}}return total?seen\/total:0}\nfunction outsideRatio(vis,bound){const xs=vis.map(p=>p[0]),ys=vis.map(p=>p[1]),minX=Math.min(...xs),maxX=Math.max(...xs),minY=Math.min(...ys),maxY=Math.max(...ys);let total=0,out=0;for(let iy=0;iy<55;iy++)for(let ix=0;ix<55;ix++){const p=[minX+(ix+.5)*(maxX-minX)\/55,minY+(iy+.5)*(maxY-minY)\/55];if(pointInPoly(p,vis)){total++;if(!pointInPoly(p,bound))out++}}return total?out\/total:0}\nfunction pct(v){return `${Math.round(v*100)}%`}\nfunction finding(cls,title,body,advice){return `<div class=\"finding ${cls}\"><strong>${title}<\/strong><p>${body}<\/p><p><b>Advies:<\/b> ${advice}<\/p><\/div>`}\nfunction render(){revision++;svg.innerHTML='';\n  svg.append(el('rect',{x:X(0),y:Y(9),width:W*SCALE,height:H*SCALE,fill:'#fbfcfd',stroke:'#45505b','stroke-width':2}));\n  const grid=el('g',{'stroke':'#e8edf1','stroke-width':1});for(let x=1;x<W;x++)grid.append(el('line',{x1:X(x),y1:Y(0),x2:X(x),y2:Y(9)}));for(let y=1;y<H;y++)grid.append(el('line',{x1:X(0),y1:Y(y),x2:X(14),y2:Y(y)}));svg.append(grid);\n  const nom=nominalPoly(),vis=visiblePoly();svg.append(el('polygon',{points:polyStr(nom),fill:'#d9ebff','fill-opacity':.28,stroke:'#8bbcf1','stroke-width':1}));svg.append(el('polygon',{points:polyStr(vis),fill:'#77b7f7','fill-opacity':.26,stroke:'#4b97df','stroke-width':2}));\n  svg.append(el('polygon',{points:polyStr(plan.target),fill:'#ffc869','fill-opacity':.34,stroke:'#d98a12','stroke-width':2}));svg.append(el('polygon',{points:polyStr(plan.obstacle),fill:'#7d8791',stroke:'#4e5862','stroke-width':2}));\n  const c=plan.camera, cg=el('g',{id:'camera','data-draggable':'1',cursor:'grab'});cg.append(el('circle',{cx:X(c.x),cy:Y(c.y),r:13,fill:'#17202a'}));cg.append(el('circle',{cx:X(c.x),cy:Y(c.y),r:5,fill:'#fff'}));const ar=c.yaw*Math.PI\/180;cg.append(el('line',{x1:X(c.x),y1:Y(c.y),x2:X(c.x+Math.cos(ar)*.55),y2:Y(c.y+Math.sin(ar)*.55),stroke:'#fff','stroke-width':3}));svg.append(cg);\n  const cov=coverage(plan.target,vis),nomCov=coverage(plan.target,nom),occ=nomCov>.005?Math.max(0,(nomCov-cov)\/nomCov):0,priv=outsideRatio(vis,plan.boundary);\n  document.getElementById('coverageMetric').textContent=pct(cov);document.getElementById('occlusionMetric').textContent=pct(occ);document.getElementById('privacyMetric').textContent=pct(priv);document.getElementById('revisionMetric').textContent=revision;\n  let html='',critical=false,warn=false;\n  if(cov>=.995)html+=finding('pass','Kritieke doelzone gedekt','De ingang valt binnen de zichtbare cameradekking.','Geen geometrische correctie nodig.'); else if(cov<=.005){critical=true;html+=finding('fail','Kritieke doelzone niet gedekt','De ingang valt niet binnen de zichtbare cameradekking.','Pas positie, richting of FOV aan zodat de doelzone volledig wordt afgedekt.')} else {warn=true;html+=finding('warn','Doelzone gedeeltelijk gedekt',`Slechts ${pct(cov)} van de doelzone is zichtbaar.`,'Pas positie of richting aan om de ontbrekende dekking weg te nemen.')}\n  if(occ>.20){critical=true;html+=finding('fail','Object blokkeert belangrijk deel',`${pct(occ)} van de nominale doeldekking gaat verloren door het obstakel.`,'Verplaats de camera of het obstakel, of wijzig de kijkrichting.')} else if(occ>.005){warn=true;html+=finding('warn','Gedeeltelijke afscherming',`${pct(occ)} van de nominale doeldekking wordt afgeschermd.`,'Controleer of de resterende zichtlijn voldoende is voor het doel.')} else html+=finding('pass','Geen relevante afscherming','Het rek veroorzaakt geen relevante afscherming van de doelzone.','Geen aanpassing nodig.');\n  if(priv>.005){warn=true;html+=finding('review','Privacyreview',`${pct(priv)} van de zichtbare beeldzone valt buiten de gemarkeerde eigendomsgrens.`,'Beperk richting\/FOV of laat de proportionaliteit beoordelen. CamSketch verklaart geen juridische conformiteit.')}\n  document.getElementById('findings').innerHTML=html;const b=document.getElementById('overallBadge');b.textContent=critical?'Probleem':warn?'Aandachtspunt':'Goed';b.style.background=critical?'#fdeaea':warn?'#fff3df':'#e5f5ef';\n}\nconst yaw=document.getElementById('yaw'),hfov=document.getElementById('hfov'),range=document.getElementById('range');yaw.value=plan.camera.yaw;hfov.value=plan.camera.hfov;range.value=plan.camera.range;\nfunction sync(){plan.camera.yaw=+yaw.value;plan.camera.hfov=+hfov.value;plan.camera.range=+range.value;document.getElementById('yawOut').value=`${plan.camera.yaw}\u00b0`;document.getElementById('hfovOut').value=`${plan.camera.hfov}\u00b0`;document.getElementById('rangeOut').value=`${plan.camera.range}m`;render()}\n[yaw,hfov,range].forEach(i=>i.addEventListener('input',sync));\nsvg.addEventListener('pointerdown',e=>{if(e.target.closest&&e.target.closest('#camera')){dragging=true;svg.setPointerCapture(e.pointerId)}});svg.addEventListener('pointerup',()=>dragging=false);svg.addEventListener('pointermove',e=>{if(!dragging)return;const r=svg.getBoundingClientRect(),vx=(e.clientX-r.left)*900\/r.width,vy=(e.clientY-r.top)*620\/r.height;plan.camera.x=Math.max(0,Math.min(W,(vx-OX)\/SCALE));plan.camera.y=Math.max(0,Math.min(H,H-(vy-OY)\/SCALE));render()});\nsync();\n<\/script>\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6c3659f e-flex e-con-boxed e-con e-parent\" data-id=\"6c3659f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d865e90 elementor-widget elementor-widget-html\" data-id=\"d865e90\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- =========================================================\r\n     CAMSKETCH SPATIAL KERNEL\r\n     BLOCK 2 \u2014 AFTER CONSOLE\r\n     ========================================================= -->\r\n\r\n<section class=\"skp-page skp-after-console\">\r\n\r\n  <div class=\"skp-atmosphere\" aria-hidden=\"true\">\r\n    <span class=\"skp-glow skp-glow-a\"><\/span>\r\n    <span class=\"skp-glow skp-glow-b\"><\/span>\r\n    <span class=\"skp-bg-gear skp-bg-gear-a\">\u2699<\/span>\r\n  <\/div>\r\n\r\n\r\n  <div class=\"skp-shell\">\r\n\r\n\r\n    <!-- =====================================================\r\n         RETURN FROM LIVE ENGINE\r\n         ===================================================== -->\r\n\r\n    <header class=\"skp-after-header\">\r\n\r\n      <div class=\"skp-after-title\">\r\n\r\n        <span class=\"skp-kicker\">\r\n          SPATIAL KERNEL \/\/ ANALYSIS ENVIRONMENT\r\n        <\/span>\r\n\r\n        <h2>\r\n          Van berekening naar\r\n          <em>technische interpretatie<\/em>\r\n        <\/h2>\r\n\r\n        <p>\r\n          Spatial Kernel visualiseert de geometrische\r\n          relatie tussen camera, gezichtsveld, doelzone,\r\n          obstructies en terreinbegrenzing. De resultaten\r\n          ondersteunen het technische ontwerpproces binnen\r\n          CamSketch.\r\n        <\/p>\r\n\r\n      <\/div>\r\n\r\n\r\n      <div class=\"skp-after-logo\">\r\n\r\n        <img data-recalc-dims=\"1\" decoding=\"async\"\r\n          src=\"https:\/\/i0.wp.com\/cctvacademy.be\/wp-content\/uploads\/2026\/09\/CamSketch_logo_HD-scaled.png?w=812&#038;ssl=1\"\r\n          alt=\"CamSketch CCTV Academy\"\r\n          class=\"skp-logo skp-logo-after\"\r\n        >\r\n\r\n      <\/div>\r\n\r\n    <\/header>\r\n\r\n\r\n    <!-- =====================================================\r\n         SOURCE POLICY\r\n         ===================================================== -->\r\n\r\n    <section class=\"skp-source\">\r\n\r\n      <div>\r\n\r\n        <span class=\"skp-kicker\">\r\n          SOURCE POLICY\r\n        <\/span>\r\n\r\n        <h2>\r\n          Technische\r\n          <em>basis<\/em>\r\n        <\/h2>\r\n\r\n        <p>\r\n          CCTV-inhoudelijke uitgangspunten en aanbevelingen\r\n          verwijzen naar CCTV Academy.\r\n        <\/p>\r\n\r\n        <p>\r\n          De geometrische methode voor zichtlijnen,\r\n          oppervlaktedekking, zichtblokkering en\r\n          dekkingspercentages wordt binnen CamSketch gebruikt\r\n          als interne rekenmethode.\r\n        <\/p>\r\n\r\n        <div class=\"skp-disclaimer\">\r\n          De CamSketch-rekenmethode vormt op zichzelf geen\r\n          offici\u00eble CCTV-norm, certificeringsmethode\r\n          of erkende sectorstandaard.\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n\r\n      <div class=\"skp-source-links\">\r\n\r\n\r\n        <a\r\n          href=\"https:\/\/cctvacademy.be\/nl\/van-luchtfoto-tot-beveiligingsplan\/\"\r\n          target=\"_blank\"\r\n          rel=\"noopener\"\r\n        >\r\n\r\n          <img data-recalc-dims=\"1\" decoding=\"async\"\r\n            src=\"https:\/\/i0.wp.com\/cctvacademy.be\/wp-content\/uploads\/2026\/09\/CamSketch_logo_website_transparent.png?w=812&#038;ssl=1\"\r\n            alt=\"CamSketch\"\r\n            class=\"skp-logo skp-source-logo\"\r\n          >\r\n\r\n\r\n          <div class=\"skp-source-text\">\r\n\r\n            <span>\r\n              REFERENCE 01\r\n            <\/span>\r\n\r\n            <strong>\r\n              Van luchtfoto tot beveiligingsplan\r\n            <\/strong>\r\n\r\n          <\/div>\r\n\r\n\r\n          <b>\r\n            \u2197\r\n          <\/b>\r\n\r\n        <\/a>\r\n\r\n\r\n        <a\r\n          href=\"https:\/\/cctvacademy.be\/nl\/belangrijk-principe-proportionaliteit\/\"\r\n          target=\"_blank\"\r\n          rel=\"noopener\"\r\n        >\r\n\r\n          <img data-recalc-dims=\"1\" decoding=\"async\"\r\n            src=\"https:\/\/i0.wp.com\/cctvacademy.be\/wp-content\/uploads\/2026\/09\/CamSketch_logo_website_transparent.png?w=812&#038;ssl=1\"\r\n            alt=\"CamSketch\"\r\n            class=\"skp-logo skp-source-logo\"\r\n          >\r\n\r\n\r\n          <div class=\"skp-source-text\">\r\n\r\n            <span>\r\n              REFERENCE 02\r\n            <\/span>\r\n\r\n            <strong>\r\n              Belangrijk principe: proportionaliteit\r\n            <\/strong>\r\n\r\n          <\/div>\r\n\r\n\r\n          <b>\r\n            \u2197\r\n          <\/b>\r\n\r\n        <\/a>\r\n\r\n      <\/div>\r\n\r\n    <\/section>\r\n\r\n\r\n    <!-- =====================================================\r\n         FINAL CAMSKETCH CTA\r\n         ===================================================== -->\r\n\r\n    <section class=\"skp-final-cta\">\r\n\r\n      <div>\r\n\r\n        <img data-recalc-dims=\"1\" decoding=\"async\"\r\n          src=\"https:\/\/i0.wp.com\/cctvacademy.be\/wp-content\/uploads\/2026\/09\/CamSketch_logo_HD-scaled.png?w=812&#038;ssl=1\"\r\n          alt=\"CamSketch CCTV Academy\"\r\n          class=\"skp-logo skp-final-logo\"\r\n        >\r\n\r\n      <\/div>\r\n\r\n\r\n      <div>\r\n\r\n        <span class=\"skp-kicker\">\r\n          CCTV DESIGN ENVIRONMENT\r\n        <\/span>\r\n\r\n        <h2>\r\n          Ontwerp.\r\n          Analyseer.\r\n          <em>Optimaliseer.<\/em>\r\n        <\/h2>\r\n\r\n        <p>\r\n          CamSketch brengt ruimtelijk CCTV-ontwerp,\r\n          camerageometrie en technische analyse samen\r\n          in \u00e9\u00e9n visuele ontwerpomgeving.\r\n        <\/p>\r\n\r\n      <\/div>\r\n\r\n\r\n      <div class=\"skp-final-buttons\">\r\n\r\n        <a\r\n          href=\"https:\/\/cctvacademy.be\/nl\/camsketch3\/\"\r\n          target=\"_blank\"\r\n          rel=\"noopener\"\r\n          class=\"skp-button skp-button-main\"\r\n        >\r\n          OPEN CAMSKETCH\r\n          <b>\u2197<\/b>\r\n        <\/a>\r\n\r\n\r\n        <a\r\n          href=\"https:\/\/cctvacademy.be\/\"\r\n          target=\"_blank\"\r\n          rel=\"noopener\"\r\n          class=\"skp-button\"\r\n        >\r\n          CCTV ACADEMY\r\n          <b>\u2197<\/b>\r\n        <\/a>\r\n\r\n      <\/div>\r\n\r\n    <\/section>\r\n\r\n\r\n    <!-- =====================================================\r\n         FOOTER\r\n         ===================================================== -->\r\n\r\n    <footer class=\"skp-footer\">\r\n\r\n      <div class=\"skp-footer-left\">\r\n\r\n        <img data-recalc-dims=\"1\" decoding=\"async\"\r\n          src=\"https:\/\/i0.wp.com\/cctvacademy.be\/wp-content\/uploads\/2026\/09\/CamSketch_logo_HD-scaled.png?w=812&#038;ssl=1\"\r\n          alt=\"CamSketch CCTV Academy\"\r\n          class=\"skp-logo skp-footer-logo\"\r\n        >\r\n\r\n\r\n        <div class=\"skp-footer-meta\">\r\n\r\n          <span class=\"skp-led skp-led-green\"><\/span>\r\n\r\n          <p>\r\n            CAMSKETCH\r\n            <strong>\r\n              SPATIAL KERNEL v0.1\r\n            <\/strong>\r\n          <\/p>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n\r\n      <div class=\"skp-footer-rule\">\r\n        <span><\/span>\r\n      <\/div>\r\n\r\n\r\n      <p class=\"skp-footer-brand\">\r\n        KORTRIJK\r\n        <strong>\r\n          CCTV ACADEMY\r\n        <\/strong>\r\n      <\/p>\r\n\r\n    <\/footer>\r\n\r\n  <\/div>\r\n\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u2699 \u2699 KORTRIJK CCTV ACADEMY CAMSKETCH ENGINEERING PLATFORM ENGINE REV. 0.1 COMPUTATIONAL CCTV ANALYSIS CAMSKETCH \/\/ SPATIAL ENGINE MODULE SPATIAL KERNEL Ruimtelijke CCTV-analyse op basis van een tweedimensionale plattegrond. Spatial Kernel analyseert camera&#8217;s, muren, obstakels, doelzones en terreinbegrenzingen en berekent daaruit theoretische en effectief zichtbare cameradekking. OPEN SPATIAL ENGINE \u2193 CAMSKETCH \u2197 SPATIAL 2D KERNEL [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_acf_changed":false,"zakra_page_container_layout":"customizer","zakra_page_sidebar_layout":"customizer","zakra_remove_content_margin":false,"zakra_sidebar":"customizer","zakra_transparent_header":"customizer","zakra_logo":0,"zakra_main_header_style":"default","zakra_menu_item_color":"","zakra_menu_item_hover_color":"","zakra_menu_item_active_color":"","zakra_menu_active_style":"","zakra_page_header":true,"h5ap_radio_sources":[],"_glsr_average":0,"_glsr_ranking":0,"_glsr_reviews":0,"footnotes":""},"class_list":["post-50275","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spatial Kernel CamSketch - RAS\/AIS CCTV Academy<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cctvacademy.be\/nl\/spatial-kernel-camsketch\/\" \/>\n<meta property=\"og:locale\" content=\"nl_BE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spatial Kernel CamSketch - RAS\/AIS CCTV Academy\" \/>\n<meta property=\"og:description\" content=\"\u2699 \u2699 KORTRIJK CCTV ACADEMY CAMSKETCH ENGINEERING PLATFORM ENGINE REV. 0.1 COMPUTATIONAL CCTV ANALYSIS CAMSKETCH \/\/ SPATIAL ENGINE MODULE SPATIAL KERNEL Ruimtelijke CCTV-analyse op basis van een tweedimensionale plattegrond. Spatial Kernel analyseert camera&#8217;s, muren, obstakels, doelzones en terreinbegrenzingen en berekent daaruit theoretische en effectief zichtbare cameradekking. OPEN SPATIAL ENGINE \u2193 CAMSKETCH \u2197 SPATIAL 2D KERNEL [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cctvacademy.be\/nl\/spatial-kernel-camsketch\/\" \/>\n<meta property=\"og:site_name\" content=\"RAS\/AIS CCTV Academy\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61576769152561\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-15T20:37:19+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/cctvacademy.be\\\/spatial-kernel-camsketch\\\/\",\"url\":\"https:\\\/\\\/cctvacademy.be\\\/spatial-kernel-camsketch\\\/\",\"name\":\"Spatial Kernel CamSketch - RAS\\\/AIS CCTV Academy\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cctvacademy.be\\\/#website\"},\"datePublished\":\"2026-09-15T06:01:44+00:00\",\"dateModified\":\"2026-09-15T20:37:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/cctvacademy.be\\\/spatial-kernel-camsketch\\\/#breadcrumb\"},\"inLanguage\":\"nl-BE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/cctvacademy.be\\\/spatial-kernel-camsketch\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/cctvacademy.be\\\/spatial-kernel-camsketch\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/cctvacademy.be\\\/nl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spatial Kernel CamSketch\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/cctvacademy.be\\\/#website\",\"url\":\"https:\\\/\\\/cctvacademy.be\\\/\",\"name\":\"CCTV Academy\",\"description\":\"CCTV Opleidingen en CCTV Micro Learning\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/cctvacademy.be\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-BE\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spatial Kernel CamSketch - RAS\/AIS CCTV Academy","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:\/\/cctvacademy.be\/nl\/spatial-kernel-camsketch\/","og_locale":"nl_BE","og_type":"article","og_title":"Spatial Kernel CamSketch - RAS\/AIS CCTV Academy","og_description":"\u2699 \u2699 KORTRIJK CCTV ACADEMY CAMSKETCH ENGINEERING PLATFORM ENGINE REV. 0.1 COMPUTATIONAL CCTV ANALYSIS CAMSKETCH \/\/ SPATIAL ENGINE MODULE SPATIAL KERNEL Ruimtelijke CCTV-analyse op basis van een tweedimensionale plattegrond. Spatial Kernel analyseert camera&#8217;s, muren, obstakels, doelzones en terreinbegrenzingen en berekent daaruit theoretische en effectief zichtbare cameradekking. OPEN SPATIAL ENGINE \u2193 CAMSKETCH \u2197 SPATIAL 2D KERNEL [&hellip;]","og_url":"https:\/\/cctvacademy.be\/nl\/spatial-kernel-camsketch\/","og_site_name":"RAS\/AIS CCTV Academy","article_publisher":"https:\/\/www.facebook.com\/profile.php?id=61576769152561","article_modified_time":"2026-09-15T20:37:19+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/cctvacademy.be\/spatial-kernel-camsketch\/","url":"https:\/\/cctvacademy.be\/spatial-kernel-camsketch\/","name":"Spatial Kernel CamSketch - RAS\/AIS CCTV Academy","isPartOf":{"@id":"https:\/\/cctvacademy.be\/#website"},"datePublished":"2026-09-15T06:01:44+00:00","dateModified":"2026-09-15T20:37:19+00:00","breadcrumb":{"@id":"https:\/\/cctvacademy.be\/spatial-kernel-camsketch\/#breadcrumb"},"inLanguage":"nl-BE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cctvacademy.be\/spatial-kernel-camsketch\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/cctvacademy.be\/spatial-kernel-camsketch\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cctvacademy.be\/nl\/"},{"@type":"ListItem","position":2,"name":"Spatial Kernel CamSketch"}]},{"@type":"WebSite","@id":"https:\/\/cctvacademy.be\/#website","url":"https:\/\/cctvacademy.be\/","name":"CCTV Academy","description":"CCTV Opleidingen en CCTV Micro Learning","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cctvacademy.be\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-BE"}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cctvacademy.be\/nl\/wp-json\/wp\/v2\/pages\/50275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cctvacademy.be\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cctvacademy.be\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cctvacademy.be\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cctvacademy.be\/nl\/wp-json\/wp\/v2\/comments?post=50275"}],"version-history":[{"count":24,"href":"https:\/\/cctvacademy.be\/nl\/wp-json\/wp\/v2\/pages\/50275\/revisions"}],"predecessor-version":[{"id":50595,"href":"https:\/\/cctvacademy.be\/nl\/wp-json\/wp\/v2\/pages\/50275\/revisions\/50595"}],"wp:attachment":[{"href":"https:\/\/cctvacademy.be\/nl\/wp-json\/wp\/v2\/media?parent=50275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}