{"id":512,"date":"2026-01-25T11:47:16","date_gmt":"2026-01-25T11:47:16","guid":{"rendered":"https:\/\/demo.sans.org.sa\/?page_id=512"},"modified":"2026-03-05T08:36:49","modified_gmt":"2026-03-05T08:36:49","slug":"workshops","status":"publish","type":"page","link":"https:\/\/sans.org.sa\/sans2026\/workshops\/","title":{"rendered":"Workshops"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"512\" class=\"elementor elementor-512\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5f7237b elementor-section-height-min-height eael_liquid_glass-effect2 elementor-section-boxed elementor-section-height-default elementor-section-items-middle\" data-id=\"5f7237b\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9b54f34\" data-id=\"9b54f34\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ec26b79 elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"ec26b79\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Workshops<\/h2>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-02ecc93 elementor-section-height-min-height elementor-section-boxed elementor-section-height-default elementor-section-items-middle\" data-id=\"02ecc93\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-81cccd9 eael_liquid_glass-effect2 elementor-invisible\" data-id=\"81cccd9\" data-element_type=\"column\" data-settings=\"{&quot;animation&quot;:&quot;fadeInUp&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-9ebe2c4 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9ebe2c4\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-bcc05f6\" data-id=\"bcc05f6\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-6f15ed8\" data-id=\"6f15ed8\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bd92f5e elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"bd92f5e\" data-element_type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm elementor-animation-grow\" href=\"https:\/\/kr-virtual.com\/RegWorkshops\/Index\/MTAxNjgEPEqualzib0001-YEbmBKKI6uMEPEqualzib0001\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Register For Workshops<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-1747f45\" data-id=\"1747f45\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-502919a elementor-grid-eael-col-2 elementor-grid-tablet-eael-col-2 elementor-grid-mobile-eael-col-1 elementor-widget elementor-widget-eael-post-grid\" data-id=\"502919a\" data-element_type=\"widget\" data-settings=\"{&quot;eael_post_grid_columns&quot;:&quot;eael-col-2&quot;,&quot;eael_post_grid_columns_tablet&quot;:&quot;eael-col-2&quot;,&quot;eael_post_grid_columns_mobile&quot;:&quot;eael-col-1&quot;,&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"eael-post-grid.default\">\n\t\t\t\t\t<div id=\"eael-post-grid-502919a\" class=\"eael-post-grid-container\">\n            <div class=\"eael-post-grid eael-post-appender eael-post-appender-502919a eael-post-grid-style-one\" data-layout-mode=\"masonry\"><article class=\"eael-grid-post  eael-post-grid-column eael-pg-post-790 category-workshops\" data-id=\"790\">\n        <div class=\"eael-grid-post-holder\">\n            <div class=\"eael-grid-post-holder-inner\"><div class=\"eael-entry-media\"><div class=\"eael-entry-overlay fade-in\"><i class=\"fas fa-long-arrow-alt-right\" aria-hidden=\"true\"><\/i><a href=\"https:\/\/sans.org.sa\/sans2026\/neurovascular-workshop\/\"><\/a><\/div><div class=\"eael-entry-thumbnail \">\n                <img fetchpriority=\"high\" decoding=\"async\" width=\"1748\" height=\"2480\" src=\"https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/02\/SANS-2026-Neurovascular-Course-Booklet.pdf_1.jpg\" class=\"attachment-full size-full wp-image-894\" alt=\"\" srcset=\"https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/02\/SANS-2026-Neurovascular-Course-Booklet.pdf_1.jpg 1748w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/02\/SANS-2026-Neurovascular-Course-Booklet.pdf_1-211x300.jpg 211w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/02\/SANS-2026-Neurovascular-Course-Booklet.pdf_1-722x1024.jpg 722w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/02\/SANS-2026-Neurovascular-Course-Booklet.pdf_1-768x1090.jpg 768w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/02\/SANS-2026-Neurovascular-Course-Booklet.pdf_1-1083x1536.jpg 1083w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/02\/SANS-2026-Neurovascular-Course-Booklet.pdf_1-1444x2048.jpg 1444w\" sizes=\"(max-width: 1748px) 100vw, 1748px\" \/>\n            <\/div>\n        <\/div><div class=\"eael-entry-wrapper\"><header class=\"eael-entry-header\"><h2 class=\"eael-entry-title\"><a class=\"eael-grid-post-link\" href=\"https:\/\/sans.org.sa\/sans2026\/neurovascular-workshop\/\" title=\"Neurovascular Workshop\">Neurovascular Workshop<\/a><\/h2><\/header><div class=\"eael-entry-content\">\n                        <div class=\"eael-grid-post-excerpt\"><a href=\"https:\/\/sans.org.sa\/sans2026\/neurovascular-workshop\/\" class=\"eael-post-elements-readmore-btn\">Read More<\/a><\/div>\n                    <\/div><\/div><\/div>\n        <\/div>\n    <\/article><article class=\"eael-grid-post  eael-post-grid-column eael-pg-post-540 category-workshops\" data-id=\"540\">\n        <div class=\"eael-grid-post-holder\">\n            <div class=\"eael-grid-post-holder-inner\"><div class=\"eael-entry-media\"><div class=\"eael-entry-overlay fade-in\"><i class=\"fas fa-long-arrow-alt-right\" aria-hidden=\"true\"><\/i><a href=\"https:\/\/sans.org.sa\/sans2026\/pituitary-adenoma-intensive-course\/\"><\/a><\/div><div class=\"eael-entry-thumbnail \">\n                <img decoding=\"async\" width=\"1080\" height=\"1532\" src=\"https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-Pituitary-Adenoma-Intensive-Course.jpg-1.jpeg\" class=\"attachment-full size-full wp-image-958\" alt=\"\" srcset=\"https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-Pituitary-Adenoma-Intensive-Course.jpg-1.jpeg 1080w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-Pituitary-Adenoma-Intensive-Course.jpg-1-211x300.jpeg 211w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-Pituitary-Adenoma-Intensive-Course.jpg-1-722x1024.jpeg 722w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-Pituitary-Adenoma-Intensive-Course.jpg-1-768x1089.jpeg 768w\" sizes=\"(max-width: 1080px) 100vw, 1080px\" \/>\n            <\/div>\n        <\/div><div class=\"eael-entry-wrapper\"><header class=\"eael-entry-header\"><h2 class=\"eael-entry-title\"><a class=\"eael-grid-post-link\" href=\"https:\/\/sans.org.sa\/sans2026\/pituitary-adenoma-intensive-course\/\" title=\"Pituitary Adenoma Intensive Course\">Pituitary Adenoma Intensive Course<\/a><\/h2><\/header><div class=\"eael-entry-content\">\n                        <div class=\"eael-grid-post-excerpt\"><a href=\"https:\/\/sans.org.sa\/sans2026\/pituitary-adenoma-intensive-course\/\" class=\"eael-post-elements-readmore-btn\">Read More<\/a><\/div>\n                    <\/div><\/div><\/div>\n        <\/div>\n    <\/article><article class=\"eael-grid-post  eael-post-grid-column eael-pg-post-535 category-workshops\" data-id=\"535\">\n        <div class=\"eael-grid-post-holder\">\n            <div class=\"eael-grid-post-holder-inner\"><div class=\"eael-entry-media\"><div class=\"eael-entry-overlay fade-in\"><i class=\"fas fa-long-arrow-alt-right\" aria-hidden=\"true\"><\/i><a href=\"https:\/\/sans.org.sa\/sans2026\/student-boot-camp\/\"><\/a><\/div><div class=\"eael-entry-thumbnail \">\n                <img decoding=\"async\" width=\"1080\" height=\"1350\" src=\"https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Student-Boot-Camp.jpg\" class=\"attachment-full size-full wp-image-875\" alt=\"\" srcset=\"https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Student-Boot-Camp.jpg 1080w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Student-Boot-Camp-240x300.jpg 240w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Student-Boot-Camp-819x1024.jpg 819w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Student-Boot-Camp-768x960.jpg 768w\" sizes=\"(max-width: 1080px) 100vw, 1080px\" \/>\n            <\/div>\n        <\/div><div class=\"eael-entry-wrapper\"><header class=\"eael-entry-header\"><h2 class=\"eael-entry-title\"><a class=\"eael-grid-post-link\" href=\"https:\/\/sans.org.sa\/sans2026\/student-boot-camp\/\" title=\"Student Boot Camp\">Student Boot Camp<\/a><\/h2><\/header><div class=\"eael-entry-content\">\n                        <div class=\"eael-grid-post-excerpt\"><a href=\"https:\/\/sans.org.sa\/sans2026\/student-boot-camp\/\" class=\"eael-post-elements-readmore-btn\">Read More<\/a><\/div>\n                    <\/div><\/div><\/div>\n        <\/div>\n    <\/article><article class=\"eael-grid-post  eael-post-grid-column eael-pg-post-531 category-workshops\" data-id=\"531\">\n        <div class=\"eael-grid-post-holder\">\n            <div class=\"eael-grid-post-holder-inner\"><div class=\"eael-entry-media\"><div class=\"eael-entry-overlay fade-in\"><i class=\"fas fa-long-arrow-alt-right\" aria-hidden=\"true\"><\/i><a href=\"https:\/\/sans.org.sa\/sans2026\/neurolife\/\"><\/a><\/div><div class=\"eael-entry-thumbnail \">\n                <img loading=\"lazy\" decoding=\"async\" width=\"1748\" height=\"2480\" src=\"https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Neurolife.jpg\" class=\"attachment-full size-full wp-image-868\" alt=\"\" srcset=\"https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Neurolife.jpg 1748w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Neurolife-211x300.jpg 211w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Neurolife-722x1024.jpg 722w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Neurolife-768x1090.jpg 768w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Neurolife-1083x1536.jpg 1083w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Neurolife-1444x2048.jpg 1444w\" sizes=\"(max-width: 1748px) 100vw, 1748px\" \/>\n            <\/div>\n        <\/div><div class=\"eael-entry-wrapper\"><header class=\"eael-entry-header\"><h2 class=\"eael-entry-title\"><a class=\"eael-grid-post-link\" href=\"https:\/\/sans.org.sa\/sans2026\/neurolife\/\" title=\"Neurolife\">Neurolife<\/a><\/h2><\/header><div class=\"eael-entry-content\">\n                        <div class=\"eael-grid-post-excerpt\"><a href=\"https:\/\/sans.org.sa\/sans2026\/neurolife\/\" class=\"eael-post-elements-readmore-btn\">Read More<\/a><\/div>\n                    <\/div><\/div><\/div>\n        <\/div>\n    <\/article><article class=\"eael-grid-post  eael-post-grid-column eael-pg-post-527 category-workshops\" data-id=\"527\">\n        <div class=\"eael-grid-post-holder\">\n            <div class=\"eael-grid-post-holder-inner\"><div class=\"eael-entry-media\"><div class=\"eael-entry-overlay fade-in\"><i class=\"fas fa-long-arrow-alt-right\" aria-hidden=\"true\"><\/i><a href=\"https:\/\/sans.org.sa\/sans2026\/neuroimaging-processing-and-integration-course\/\"><\/a><\/div><div class=\"eael-entry-thumbnail \">\n                <img loading=\"lazy\" decoding=\"async\" width=\"1080\" height=\"1350\" src=\"https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Neuroimaging-Processing-and-Integration-Course-1.jpg\" class=\"attachment-full size-full wp-image-861\" alt=\"\" srcset=\"https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Neuroimaging-Processing-and-Integration-Course-1.jpg 1080w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Neuroimaging-Processing-and-Integration-Course-1-240x300.jpg 240w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Neuroimaging-Processing-and-Integration-Course-1-819x1024.jpg 819w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Neuroimaging-Processing-and-Integration-Course-1-768x960.jpg 768w\" sizes=\"(max-width: 1080px) 100vw, 1080px\" \/>\n            <\/div>\n        <\/div><div class=\"eael-entry-wrapper\"><header class=\"eael-entry-header\"><h2 class=\"eael-entry-title\"><a class=\"eael-grid-post-link\" href=\"https:\/\/sans.org.sa\/sans2026\/neuroimaging-processing-and-integration-course\/\" title=\"Neuroimaging Processing And Integration Course\">Neuroimaging Processing And Integration Course<\/a><\/h2><\/header><div class=\"eael-entry-content\">\n                        <div class=\"eael-grid-post-excerpt\"><a href=\"https:\/\/sans.org.sa\/sans2026\/neuroimaging-processing-and-integration-course\/\" class=\"eael-post-elements-readmore-btn\">Read More<\/a><\/div>\n                    <\/div><\/div><\/div>\n        <\/div>\n    <\/article><article class=\"eael-grid-post  eael-post-grid-column eael-pg-post-516 category-workshops\" data-id=\"516\">\n        <div class=\"eael-grid-post-holder\">\n            <div class=\"eael-grid-post-holder-inner\"><div class=\"eael-entry-media\"><div class=\"eael-entry-overlay fade-in\"><i class=\"fas fa-long-arrow-alt-right\" aria-hidden=\"true\"><\/i><a href=\"https:\/\/sans.org.sa\/sans2026\/spine-101\/\"><\/a><\/div><div class=\"eael-entry-thumbnail \">\n                <img loading=\"lazy\" decoding=\"async\" width=\"1080\" height=\"1350\" src=\"https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Spine-101.jpg\" class=\"attachment-full size-full wp-image-854\" alt=\"\" srcset=\"https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Spine-101.jpg 1080w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Spine-101-240x300.jpg 240w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Spine-101-819x1024.jpg 819w, https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/SANS-2026-SM-Spine-101-768x960.jpg 768w\" sizes=\"(max-width: 1080px) 100vw, 1080px\" \/>\n            <\/div>\n        <\/div><div class=\"eael-entry-wrapper\"><header class=\"eael-entry-header\"><h2 class=\"eael-entry-title\"><a class=\"eael-grid-post-link\" href=\"https:\/\/sans.org.sa\/sans2026\/spine-101\/\" title=\"Spine 101\">Spine 101<\/a><\/h2><\/header><div class=\"eael-entry-content\">\n                        <div class=\"eael-grid-post-excerpt\"><a href=\"https:\/\/sans.org.sa\/sans2026\/spine-101\/\" class=\"eael-post-elements-readmore-btn\">Read More<\/a><\/div>\n                    <\/div><\/div><\/div>\n        <\/div>\n    <\/article><\/div>\n            <div class=\"clearfix\"><\/div>\n        <\/div>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-45f44c2 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"45f44c2\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4b79218\" data-id=\"4b79218\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-721c434 elementor-widget elementor-widget-html\" data-id=\"721c434\" data-element_type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- THREE.JS BG NO SECTION OFFSET -->\r\n<div id=\"canvas-container\" style=\"width: 100%; height: 100vh; position: fixed; top: 0; left: 0; overflow: hidden; z-index: -1;\">\r\n    <canvas id=\"cubeCanvas\" style=\"width: 100%; height: 100%; \"><\/canvas>\r\n\r\n<\/div>\r\n\r\n<!-- Three.js core scripts -->\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/three@0.128.0\/build\/three.min.js\"><\/script>\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/three@0.128.0\/examples\/js\/loaders\/GLTFLoader.js\"><\/script>\r\n\r\n<!-- Postprocessing scripts -->\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/three@0.128.0\/examples\/js\/postprocessing\/EffectComposer.js\"><\/script>\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/three@0.128.0\/examples\/js\/postprocessing\/RenderPass.js\"><\/script>\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/three@0.128.0\/examples\/js\/postprocessing\/UnrealBloomPass.js\"><\/script>\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/three@0.128.0\/examples\/js\/shaders\/CopyShader.js\"><\/script>\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/three@0.128.0\/examples\/js\/shaders\/LuminosityHighPassShader.js\"><\/script>\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/three@0.128.0\/examples\/js\/postprocessing\/ShaderPass.js\"><\/script>\r\n\r\n\r\n<script type=\"module\">\r\n  import { MeshSurfaceSampler } from 'https:\/\/cdn.jsdelivr.net\/npm\/three-full@28.0.2\/sources\/math\/MeshSurfaceSampler.js';\r\n\r\n  \/\/ MODIFY\r\n  const MODEL_URL = 'https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/source.glb';\r\n  const PARTICLE_URL = 'https:\/\/sans.org.sa\/sans2026\/wp-content\/uploads\/2026\/01\/smoke.png';\r\n\r\n  \/\/ Particle parameters\r\n  const PARTICLE_RATE = 1000.0;\r\n  const PARTICLE_COLOR = 0x8080ff;\r\n  const TRAIL_COUNT = 5;\r\n  const TRAIL_DIST = 0.05;\r\n\r\n  \/\/ Model parameters\r\n  const INITIAL_SCALE = 1.9;\r\n  const MODEL_COLOR = 0x055d5e; \/\/0x8080ff, 0x063859, 0x9c9cff\r\n  const MODEL_INITIAL_OFFSET_Y = -1.4;\r\n  const MODEL_FINAL_OFFSET_Y = 2;\r\n  const DOT_SIZE = 0.01; \/\/ 0.005\r\n  const MAX_LINEAR_SCALE = 1.005;\r\n  const GRADUAL_SCALE_RATE = 0.025;\r\n    \r\n  \/\/ Camera\r\n  const ROTATION_SPEED = 0.005;\r\n  const CAMERA_FOV = 55;\r\n  const CAMERA_NEAR = 0.1;\r\n  const CAMERA_FAR = 3000;\r\n  const CAMERA_DISTANCE_FACTOR_DESKTOP = 5;\r\n  const CAMERA_DISTANCE_FACTOR_MOBILE = 5;\r\n  let CAMERA_OFFSET_X = 0;\r\n  let CAMERA_OFFSET_Y = 0;\r\n\r\n  \/\/ Bloom effect variables\r\n  const BLOOM_INTENSITY = 3;\r\n  const BLOOM_THRESHOLD = 0.4;\r\n  const BLOOM_RADIUS = 0.65;\r\n\r\n  \/\/ Updated light settings\r\n  const DIRECTIONAL_LIGHT_COLOR = 0xffffff;\r\n  const DIRECTIONAL_LIGHT_INTENSITY = 2;\r\n  const AMBIENT_LIGHT_COLOR = 0xffffff;\r\n  const AMBIENT_LIGHT_INTENSITY = 10;\/\/1\r\n  const ADDITIONAL_LIGHT_COLOR = 0xffffff;\r\n  const ADDITIONAL_LIGHT_INTENSITY = 2;\r\n\r\n  \/\/ background colour settings\r\n  const BACKGROUND_COLOUR_SCENE = 0x000000; \/\/ White background\r\n  const BACKGROUND_COLOUR_TRANSPARENCE = 0; \/\/ Fully opaque\r\n\r\n\/\/----------------\r\n\/\/ End of controls\r\n\/\/----------------\r\n\r\n\/\/---------------------\r\n\/\/ GETPARTICLESYSTEM JS\r\n\/\/---------------------\r\n  let updateParticles = true;\r\n  const _VS = `\r\n  uniform float pointMultiplier;\r\n\r\n  attribute float size;\r\n  attribute float angle;\r\n  attribute vec4 aColor;\r\n\r\n  varying vec4 vColor;\r\n  varying vec2 vAngle;\r\n\r\n  void main() {\r\n    vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\r\n\r\n    gl_Position = projectionMatrix * mvPosition;\r\n    gl_PointSize = size * pointMultiplier \/ gl_Position.w;\r\n\r\n    vAngle = vec2(cos(angle), sin(angle));\r\n    vColor = aColor;\r\n  }`;\r\n\r\n  const _FS = `\r\n  uniform sampler2D diffuseTexture;\r\n\r\n  varying vec4 vColor;\r\n  varying vec2 vAngle;\r\n\r\n  void main() {\r\n    vec2 coords = (gl_PointCoord - 0.5) * mat2(vAngle.x, vAngle.y, -vAngle.y, vAngle.x) + 0.5;\r\n    gl_FragColor = texture2D(diffuseTexture, coords) * vColor;\r\n  }`;\r\n\r\n\r\n  function getLinearSpline(lerp) {\r\n\r\n    const points = [];\r\n    const _lerp = lerp;\r\n\r\n    function addPoint(t, d) {\r\n      points.push([t, d]);\r\n    }\r\n\r\n    function getValueAt(t) {\r\n      let p1 = 0;\r\n\r\n      for (let i = 0; i < points.length; i++) {\r\n        if (points[i][0] >= t) {\r\n          break;\r\n        }\r\n        p1 = i;\r\n      }\r\n\r\n      const p2 = Math.min(points.length - 1, p1 + 1);\r\n\r\n      if (p1 == p2) {\r\n        return points[p1][1];\r\n      }\r\n\r\n      return _lerp(\r\n        (t - points[p1][0]) \/ (\r\n          points[p2][0] - points[p1][0]),\r\n        points[p1][1], points[p2][1]);\r\n    }\r\n    return { addPoint, getValueAt };\r\n  }\r\n      \r\n  function getParticleSystem(params) {\r\n    const { camera, emitter, parent, rate, texture } = params;\r\n    let sampler = new MeshSurfaceSampler(emitter).build();\r\n\r\n    const uniforms = {\r\n      diffuseTexture: {\r\n        value: new THREE.TextureLoader().load(texture)\r\n      },\r\n      pointMultiplier: {\r\n        value: window.innerHeight \/ (2.0 * Math.tan(30.0 * Math.PI \/ 180.0))\r\n      }\r\n    };\r\n\r\n    const _material = new THREE.ShaderMaterial({\r\n      uniforms: uniforms,\r\n      vertexShader: _VS,\r\n      fragmentShader: _FS,\r\n      blending: THREE.AdditiveBlending,\r\n      depthTest: true,\r\n      depthWrite: false,\r\n      transparent: true,\r\n      vertexColors: true\r\n    });\r\n\r\n    let _particles = [];\r\n\r\n    const geometry = new THREE.BufferGeometry();\r\n    geometry.setAttribute('position', new THREE.Float32BufferAttribute([], 3));\r\n    geometry.setAttribute('size', new THREE.Float32BufferAttribute([], 1));\r\n    geometry.setAttribute('aColor', new THREE.Float32BufferAttribute([], 4));\r\n    geometry.setAttribute('angle', new THREE.Float32BufferAttribute([], 1));\r\n\r\n    const _points = new THREE.Points(geometry, _material);\r\n\r\n    parent.add(_points);\r\n\r\n    const alphaSpline = getLinearSpline((t, a, b) => {\r\n      return a + t * (b - a);\r\n    });\r\n    alphaSpline.addPoint(0.0, 0.0);\r\n    alphaSpline.addPoint(0.6, 1.0);\r\n    alphaSpline.addPoint(1.0, 0.0);\r\n\r\n    const colorSpline = getLinearSpline((t, a, b) => {\r\n      const c = a.clone();\r\n      return c.lerp(b, t);\r\n    });\r\n    colorSpline.addPoint(0.0, new THREE.Color(0xFFFFFF));\r\n    colorSpline.addPoint(1.0, new THREE.Color(PARTICLE_COLOR));\r\n\r\n    const sizeSpline = getLinearSpline((t, a, b) => {\r\n      return a + t * (b - a);\r\n    });\r\n    sizeSpline.addPoint(0.0, 0.0);\r\n    sizeSpline.addPoint(1.0, 1.0);\r\n  \/\/ max point size = 512; => console.log(ctx.getParameter(ctx.ALIASED_POINT_SIZE_RANGE));\r\n    const maxLife = 1.5;\r\n    const maxSize = 0.08;\/\/.15\r\n    let gdfsghk = 0.0;\r\n\r\n    function _AddParticles(timeElapsed) {\r\n      if (!updateParticles) return;\r\n      let radius = objGroup.scale.x * INITIAL_SCALE;\r\n      let y_offset = objGroup.position.y;\r\n\r\n      gdfsghk += timeElapsed;\r\n      const n = Math.floor(gdfsghk * rate);\r\n      gdfsghk -= n \/ rate;\r\n      \r\n      for (let i = 0; i < n; i += 1) {\r\n        const life = (Math.random() * 0.75 + 0.25) * maxLife;\r\n        \r\n        \r\n        const pos = new THREE.Vector3();\r\n        sampler.sample(pos, pos);\r\n\r\n        const direction = Math.random() * 2.0 * Math.PI;\r\n\r\n        \/\/ Add trailing points\r\n        for (let j = 0; j < TRAIL_COUNT; j +=1 ) {\r\n          _particles.push({\r\n\r\n            \/\/ Initial Position\r\n            position: new THREE.Vector3(\r\n              pos.x*radius,\r\n              (pos.y*radius)-(j*TRAIL_DIST) + y_offset,\r\n              pos.z*radius\r\n            ),\r\n\r\n            size: (Math.random() * 0.5 + 0.5) * maxSize,\r\n            colour: new THREE.Color(),\r\n            alpha: 1.0,\r\n            life: life,\r\n            maxLife: life,\r\n            rotation: direction,\r\n            rotationRate: Math.random() * 0.01 - 0.005,\r\n            velocity: new THREE.Vector3(0, .75, 0),\/\/1.5\r\n          });\r\n        }\r\n\r\n      }\r\n    }\r\n\r\n    function _UpdateGeometry() {\r\n      const positions = [];\r\n      const sizes = [];\r\n      const colours = [];\r\n      const angles = [];\r\n\r\n      for (let p of _particles) {\r\n        positions.push(p.position.x, p.position.y, p.position.z);\r\n        colours.push(p.colour.r, p.colour.g, p.colour.b, p.alpha);\r\n        sizes.push(p.currentSize);\r\n        angles.push(p.rotation);\r\n      }\r\n\r\n      geometry.setAttribute(\r\n        'position', new THREE.Float32BufferAttribute(positions, 3));\r\n      geometry.setAttribute(\r\n        'size', new THREE.Float32BufferAttribute(sizes, 1));\r\n      geometry.setAttribute(\r\n        'aColor', new THREE.Float32BufferAttribute(colours, 4));\r\n      geometry.setAttribute(\r\n        'angle', new THREE.Float32BufferAttribute(angles, 1));\r\n\r\n      geometry.attributes.position.needsUpdate = true;\r\n      geometry.attributes.size.needsUpdate = true;\r\n      geometry.attributes.aColor.needsUpdate = true;\r\n      geometry.attributes.angle.needsUpdate = true;\r\n    }\r\n    _UpdateGeometry();\r\n\r\n    function _UpdateParticles(timeElapsed) {\r\n      for (let p of _particles) {\r\n        p.life -= timeElapsed;\r\n      }\r\n\r\n      _particles = _particles.filter(p => {\r\n        return p.life > 0.0;\r\n      });\r\n\r\n      for (let p of _particles) {\r\n        const t = 1.0 - p.life \/ p.maxLife;\r\n        p.rotation += p.rotationRate;\r\n        p.alpha = alphaSpline.getValueAt(t);\r\n        p.currentSize = p.size * sizeSpline.getValueAt(t);\r\n        p.colour.copy(colorSpline.getValueAt(t));\r\n\r\n        p.position.add(p.velocity.clone().multiplyScalar(timeElapsed));\r\n\r\n        const drag = p.velocity.clone();\r\n        drag.multiplyScalar(timeElapsed * 0.1);\r\n        drag.x = Math.sign(p.velocity.x) * Math.min(Math.abs(drag.x), Math.abs(p.velocity.x));\r\n        drag.y = Math.sign(p.velocity.y) * Math.min(Math.abs(drag.y), Math.abs(p.velocity.y));\r\n        drag.z = Math.sign(p.velocity.z) * Math.min(Math.abs(drag.z), Math.abs(p.velocity.z));\r\n        p.velocity.sub(drag);\r\n      }\r\n\r\n      _particles.sort((a, b) => {\r\n        const d1 = camera.position.distanceTo(a.position);\r\n        const d2 = camera.position.distanceTo(b.position);\r\n\r\n        if (d1 > d2) {\r\n          return -1;\r\n        }\r\n        if (d1 < d2) {\r\n          return 1;\r\n        }\r\n        return 0;\r\n      });\r\n    }\r\n\r\n    function update(timeElapsed) {\r\n      _AddParticles(timeElapsed);\r\n      _UpdateParticles(timeElapsed);\r\n      _UpdateGeometry();\r\n    }\r\n    return { update };\r\n  }\r\n\r\n\/\/-------------\r\n\/\/ THREEJS MAIN\r\n\/\/-------------\r\n\r\n  let canvas, renderer, scene, camera, light, ambientLight, additionalLight;\r\n  let model, objGroup, camGroup, mixer, clock, composer, smokeEffect, scrollPercent;\r\n\r\n  const pointMaterial = new THREE.PointsMaterial({\r\n    color: MODEL_COLOR,\r\n    size: DOT_SIZE,\r\n    transparent: true,\r\n    opacity: 0,\r\n    sizeAttenuation: true\r\n  })\r\n\r\n  function setupScene() {\r\n    canvas = document.getElementById('cubeCanvas');\r\n    renderer = new THREE.WebGLRenderer({ canvas: canvas, alpha: false, antialias: true });\r\n    renderer.setClearColor(BACKGROUND_COLOUR_SCENE, BACKGROUND_COLOUR_TRANSPARENCE);\r\n    renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\r\n\r\n    scene = new THREE.Scene();\r\n    scene.background = new THREE.Color(BACKGROUND_COLOUR_SCENE);\r\n    camera = new THREE.PerspectiveCamera(CAMERA_FOV, canvas.clientWidth \/ canvas.clientHeight, CAMERA_NEAR, CAMERA_FAR);\r\n    camGroup = new THREE.Group();\r\n    camGroup.add(camera);\r\n\r\n    \/\/ Use updated light settings\r\n    ambientLight = new THREE.AmbientLight(AMBIENT_LIGHT_COLOR, AMBIENT_LIGHT_INTENSITY);\r\n    scene.add(ambientLight);\r\n\r\n    light = new THREE.DirectionalLight(DIRECTIONAL_LIGHT_COLOR, DIRECTIONAL_LIGHT_INTENSITY);\r\n    light.position.set(10, 10, 10).normalize();\r\n    scene.add(light);\r\n\r\n    additionalLight = new THREE.PointLight(ADDITIONAL_LIGHT_COLOR, ADDITIONAL_LIGHT_INTENSITY, 100);\r\n    additionalLight.position.set(-15, 0, -15);\r\n    scene.add(additionalLight);\r\n\r\n    objGroup = new THREE.Group();\r\n    scene.add(objGroup);\r\n\r\n    clock = new THREE.Clock();\r\n\r\n    \/\/ Postprocessing setup\r\n    composer = new THREE.EffectComposer(renderer);\r\n    const renderPass = new THREE.RenderPass(scene, camera);\r\n    renderPass.clearColor = new THREE.Color(BACKGROUND_COLOUR_SCENE);\r\n    renderPass.clearAlpha = BACKGROUND_COLOUR_TRANSPARENCE;\r\n    composer.addPass(renderPass);\r\n\r\n    const bloomPass = new THREE.UnrealBloomPass(\r\n        new THREE.Vector2(window.innerWidth \/ 2, window.innerHeight \/ 2), \/\/ Reduced resolution\r\n        BLOOM_INTENSITY,\r\n        BLOOM_THRESHOLD,\r\n        BLOOM_RADIUS\r\n    );\r\n    composer.addPass(bloomPass);\r\n\r\n    resizeCanvas();\r\n  }\r\n\r\n  function fitModelToCanvas() {\r\n    if (!model) return;\r\n\r\n    const box = new THREE.Box3().setFromObject(model);\r\n    const center = box.getCenter(new THREE.Vector3());\r\n\r\n    model.position.sub(center);\r\n\r\n    const isMobile = window.innerWidth <= 768;\r\n    let distance = isMobile ? CAMERA_DISTANCE_FACTOR_MOBILE : CAMERA_DISTANCE_FACTOR_DESKTOP;\r\n\r\n    camera.position.set(CAMERA_OFFSET_X, CAMERA_OFFSET_Y, distance);\r\n    camera.lookAt(new THREE.Vector3(0, 0, 0));\r\n    camera.updateProjectionMatrix();\r\n  \r\n    renderer.setSize(canvas.clientWidth, canvas.clientHeight);\r\n  }\r\n\r\n  function animate() {\r\n    requestAnimationFrame(animate);\r\n\r\n    if (mixer) {\r\n      mixer.update(clock.getDelta());\r\n    }\r\n    if (pointMaterial.opacity < 1) pointMaterial.opacity += 0.005;\r\n\r\n    smokeEffect.update(0.016);\r\n\r\n    camGroup.rotation.y += ROTATION_SPEED;\r\n\r\n    camera.lookAt(new THREE.Vector3(0, 0, 0));\r\n    composer.render();\r\n  }\r\n\r\n  function resizeCanvas() {\r\n    \/*if ((canvas && renderer && camera)) {*\/\r\n      camera.aspect = canvas.clientWidth \/ canvas.clientHeight;\r\n      camera.updateProjectionMatrix();\r\n      renderer.setSize(canvas.clientWidth, canvas.clientHeight);\r\n      composer.setSize(canvas.clientWidth, canvas.clientHeight);\r\n      if (model) {\r\n        fitModelToCanvas();\r\n      }\r\n    \/\/}\r\n  }\r\n\r\n  function updateLoadingScreen(progress) {\r\n    const progressText = document.getElementById('loading-progress');\r\n    if (progressText) {\r\n        progressText.textContent = `Loading 3D Model: ${Math.round(progress * 100)}%`;\r\n    }\r\n  }\r\n\r\n  function hideLoadingScreen() {\r\n      const loadingScreen = document.getElementById('loading-screen');\r\n      if (loadingScreen) {\r\n          loadingScreen.style.display = 'none';\r\n      }\r\n  }\r\n\r\n  function startModelLoad() {\r\n    const loadingManager = new THREE.LoadingManager();\r\n\r\n    loadingManager.onProgress = function (url, itemsLoaded, itemsTotal) {\r\n      updateLoadingScreen(itemsLoaded \/ itemsTotal);\r\n    };\r\n\r\n    loadingManager.onLoad = function () {\r\n      hideLoadingScreen();\r\n    };\r\n\r\n    const loader = new THREE.GLTFLoader(loadingManager);\r\n\r\n    loader.load(MODEL_URL,\r\n      function (gltf) {\r\n        model = gltf.scene;\r\n              \r\n        model.traverse((mesh) => {\r\n          if (mesh.isMesh) {\r\n            \r\n\r\n            let points = new THREE.Points(mesh.geometry, pointMaterial);\r\n            points.rotation.copy(mesh.rotation);\r\n            points.rotation.x = -90 * (Math.PI\/180);\r\n            points.scale.set(INITIAL_SCALE, INITIAL_SCALE, INITIAL_SCALE);\r\n            model = points;\r\n\r\n            model.position.set(0, 0, 0);\r\n          }\r\n        }) \r\n\r\n        objGroup.add(model);\r\n        fitModelToCanvas();\r\n\r\n        if (gltf.animations && gltf.animations.length) {\r\n            mixer = new THREE.AnimationMixer(model);\r\n            const animation = gltf.animations[0];\r\n            const action = mixer.clipAction(animation);\r\n            action.play();\r\n        }\r\n\r\n        smokeEffect = getParticleSystem({\r\n          camera,\r\n          emitter: model,\r\n          parent: scene,\r\n          rate: PARTICLE_RATE,\r\n          texture: PARTICLE_URL,\r\n        })\r\n\r\n        scrollPercent = window.scrollY \/ (document.documentElement.scrollHeight - window.innerHeight);\r\n        const position = (MODEL_FINAL_OFFSET_Y * scrollPercent) + MODEL_INITIAL_OFFSET_Y;\r\n        objGroup.position.y = position;\r\n\r\n        animate();\r\n      },\r\n      function (xhr) {\r\n          \/\/ Progress callback\r\n      },\r\n      function (error) {\r\n          \/\/ Error callback\r\n      }\r\n    );\r\n  }\r\n\r\n  function onScroll() {\r\n    if (model) {\r\n      scrollPercent = window.scrollY \/ (document.documentElement.scrollHeight - window.innerHeight);\r\n\r\n      \/\/ Scale\r\n      const scale = 1 + (scrollPercent * 10);\r\n      if (scale <= 1) objGroup.scale.set(1, 1, 1)\r\n      else if (scale < MAX_LINEAR_SCALE) objGroup.scale.set(scale, scale, scale);\r\n      else if (scale >= MAX_LINEAR_SCALE) {\r\n        const gradualScale = MAX_LINEAR_SCALE + ((scale-MAX_LINEAR_SCALE)*GRADUAL_SCALE_RATE);\r\n        objGroup.scale.set(gradualScale, gradualScale, gradualScale);\r\n      }\r\n\r\n      \/\/ Position \r\n      const position = (MODEL_FINAL_OFFSET_Y * scrollPercent) + MODEL_INITIAL_OFFSET_Y;\r\n      objGroup.position.y = position;\r\n    }\r\n  }\r\n\r\n  function initiateBackgroundLoading() {\r\n    setupScene();\r\n    startModelLoad();\r\n  }\r\n\r\n  initiateBackgroundLoading();\r\n  window.addEventListener('resize', resizeCanvas);\r\n\r\n  \/\/ Use requestAnimationFrame for smoother scrolling\r\n  let ticking = false;\r\n  window.addEventListener('scroll', function() {\r\n    if (!ticking) {\r\n      window.requestAnimationFrame(function() {\r\n        onScroll();\r\n        ticking = false;\r\n      });\r\n      ticking = true;\r\n    }\r\n  });\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Workshops Register For Workshops Neurovascular Workshop Read More Pituitary Adenoma Intensive Course Read More Student Boot Camp Read More Neurolife Read More Neuroimaging Processing And Integration Course Read More Spine 101 Read More<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-512","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/sans.org.sa\/sans2026\/wp-json\/wp\/v2\/pages\/512","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sans.org.sa\/sans2026\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sans.org.sa\/sans2026\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sans.org.sa\/sans2026\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sans.org.sa\/sans2026\/wp-json\/wp\/v2\/comments?post=512"}],"version-history":[{"count":24,"href":"https:\/\/sans.org.sa\/sans2026\/wp-json\/wp\/v2\/pages\/512\/revisions"}],"predecessor-version":[{"id":892,"href":"https:\/\/sans.org.sa\/sans2026\/wp-json\/wp\/v2\/pages\/512\/revisions\/892"}],"wp:attachment":[{"href":"https:\/\/sans.org.sa\/sans2026\/wp-json\/wp\/v2\/media?parent=512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}