PageSourceSearch

https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/?source=tn

html code-maze.com collected 2026-10-02 07:30:25 UTC 435,186 bytes, 6,952 lines download raw bytes

1<!DOCTYPE html>
2<!--[if IE 6]>
3<html id="ie6" lang="en-US">
4<![endif]-->
5<!--[if IE 7]>
6<html id="ie7" lang="en-US">
7<![endif]-->
8<!--[if IE 8]>
9<html id="ie8" lang="en-US">
10<![endif]-->
11<!--[if !(IE 6) | !(IE 7) | !(IE 8)  ]><!-->
12<html lang="en-US">
13<!--<![endif]-->
14<head>
15	<meta charset="UTF-8" />
16			
17	
18	<meta http-equiv="X-UA-Compatible" content="IE=edge">
19	<link rel="pingback" href="https://courses.code-maze.com/xmlrpc.php" />
20
21		<!--[if lt IE 9]>
22	
22<script src="https://courses.code-maze.com/wp-content/themes/Extra/scripts/ext/html5.js" type="text/javascript"></script>
22
23	<![endif]-->
24
25	
25<script type="text/javascript">
26		document.documentElement.className = 'js';
27	</script>
27
28	
29	<!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 29-30
29
30	<script async src="https://www.googletagmanager.com/gtag/js?id=
30G-3NXGERBSKL
vendor: 13 bytes, lines 30-31
30"></script>
31	
31<script>
32	  
vendor: 137 bytes, lines 32-36
32window.dataLayer = window.dataLayer || [];
33	  function gtag(){dataLayer.push(arguments);}
34	  gtag('js', new Date());
35
36	  gtag('config', '
36G-3NXGERBSKL
vendor: 5 bytes, lines 36-37
36');
37	
37</script>
37
38
39	
40	
40<script>
41		!function(t,e){var o,n,p,r;e.__SV||(window.posthog && window.posthog.__loaded)||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="Mi Ri init Vi Gi Rr Wi Ji Bi capture calculateEventProperties tn register register_once register_for_session unregister unregister_for_session an getFeatureFlag getFeatureFlagPayload getFeatureFlagResult isFeatureEnabled reloadFeatureFlags updateFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSurveysLoaded onSessionId getSurveys getActiveMatchingSurveys renderSurvey displaySurvey cancelPendingSurvey canRenderSurvey canRenderSurveyAsync un identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset setIdentity clearIdentity get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException addExceptionStep captureLog startExceptionAutocapture stopExceptionAutocapture loadToolbar get_property getSessionProperty nn Xi createPersonProfile setInternalOrTestUser sn Hi cn opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing get_explicit_consent_status is_capturing clear_opt_in_out_capturing Ki debug Lr rn getPageViewId captureTraceFeedback captureTraceMetric Di".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
42		posthog.init('phc_pYM44quiQ6uswXphwPTWSQKHg3wynRzZk9doseJmU4HA', {
43			api_host: 'https://t.code-maze.com', // your managed reverse proxy domain
44			ui_host: 'https://eu.posthog.com', // necessary because you're using a proxy, this way links will point back to PostHog properly
45			defaults: '2026-01-30',
46			person_profiles: 'identified_only', // or 'always' to create profiles for anonymous users as well
47		})
48	</script>
48
49	
50  
51<script>  
52  posthog.reset();  
53</script>
53  
54  
55	
56	
57	
57<script>(function(){try{
58var k="cmz-theme",r=document.documentElement,s=null;
59try{s=localStorage.getItem(k);}catch(e){}
60if(s){r.setAttribute('data-cmz-used','1');}
61var t=s,q=location.search;
62if(q.indexOf('cmz-theme=dark')>-1){t='dark';}
63else if(q.indexOf('cmz-theme=light')>-1){t='light';}
64if(t==='dark'){r.setAttribute('data-theme','dark');}
65}catch(e){}})();</script>
65
66<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
67<script id="cmz-attr">(function(){try{
68if(/(^|; )cmz_attr=/.test(document.cookie))return;
69var q=new URLSearchParams(location.search),c=q.get('utm_campaign'),s=q.get('utm_source');
70if(!c&&!s)return;
71var clip=function(v){return (v||'').slice(0,80);};
72var v={c:clip(c),s:clip(s),m:clip(q.get('utm_medium')),t:clip(q.get('utm_content')),l:clip(location.pathname),d:new Date().toISOString().slice(0,10)};
73var exp=new Date(Date.now()+90*864e5).toUTCString();
74document.cookie='cmz_attr='+encodeURIComponent(JSON.stringify(v))+'; expires='+exp+'; path=/; SameSite=Lax'+(location.protocol==='https:'?'; Secure':'');
75}catch(e){}})();</script>
75
76		
77	<!-- This site is optimized with the Yoast SEO plugin v28.1 - https://yoast.com/product/yoast-seo-wordpress/ -->
78	<title>Ultimate ASP.NET Core Web API - Online Text Course</title>
79	<meta name="description" content="The Ultimate ASP.NET Core Web API online text course covers critical aspects of Web API development, from scratch to advanced topics." />
80	<link rel="canonical" href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/" />
81	<meta property="og:locale" content="en_US" />
82	<meta property="og:type" content="article" />
83	<meta property="og:title" content="Ultimate ASP.NET Core Web API - Online Text Course" />
84	<meta property="og:description" content="The Ultimate ASP.NET Core Web API online text course covers critical aspects of Web API development, from scratch to advanced topics." />
85	<meta property="og:url" content="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/" />
86	<meta property="og:site_name" content="Code Maze" />
87	<meta property="article:modified_time" content="2026-09-12T13:24:10+00:00" />
88	<meta property="og:image" content="https://courses.code-maze.com/wp-content/uploads/2026/01/Ultimate-ASP.NET-Core-Web-API-Featured.webp" />
89	<meta property="og:image:width" content="848" />
90	<meta property="og:image:height" content="481" />
91	<meta property="og:image:type" content="image/webp" />
92	<meta name="twitter:card" content="summary_large_image" />
93	<meta name="twitter:site" content="@CodeMazeBlog" />
94	<meta name="twitter:label1" content="Est. reading time" />
95	<meta name="twitter:data1" content="2 minutes" />
96	
96<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/","url":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/","name":"Ultimate ASP.NET Core Web API - Online Text Course","isPartOf":{"@id":"https:\/\/courses.code-maze.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/#primaryimage"},"image":{"@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/#primaryimage"},"thumbnailUrl":"https:\/\/courses.code-maze.com\/wp-content\/uploads\/2026\/01\/Ultimate-ASP.NET-Core-Web-API-Featured.webp","datePublished":"2024-11-24T11:23:30+00:00","dateModified":"2026-09-12T13:24:10+00:00","description":"The Ultimate ASP.NET Core Web API online text course covers critical aspects of Web API development, from scratch to advanced topics.","breadcrumb":{"@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/#primaryimage","url":"https:\/\/courses.code-maze.com\/wp-content\/uploads\/2026\/01\/Ultimate-ASP.NET-Core-Web-API-Featured.webp","contentUrl":"https:\/\/courses.code-maze.com\/wp-content\/uploads\/2026\/01\/Ultimate-ASP.NET-Core-Web-API-Featured.webp","width":848,"height":481},{"@type":"BreadcrumbList","@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/courses.code-maze.com\/"},{"@type":"ListItem","position":2,"name":"Courses","item":"https:\/\/courses.code-maze.com\/courses\/"},{"@type":"ListItem","position":3,"name":"Ultimate ASP.NET Core Web API"}]},{"@type":"WebSite","@id":"https:\/\/courses.code-maze.com\/#website","url":"https:\/\/courses.code-maze.com\/","name":"Code Maze","description":"Learn. Code. Succeed.","publisher":{"@id":"https:\/\/courses.code-maze.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/courses.code-maze.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/courses.code-maze.com\/#organization","name":"Code Maze","url":"https:\/\/courses.code-maze.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/courses.code-maze.com\/#\/schema\/logo\/image\/","url":"https:\/\/code-maze.com\/wp-content\/uploads\/2020\/01\/Code-Maze-Only-Logo-Transparent-HRez.png","contentUrl":"https:\/\/code-maze.com\/wp-content\/uploads\/2020\/01\/Code-Maze-Only-Logo-Transparent-HRez.png","width":3511,"height":3510,"caption":"Code Maze"},"image":{"@id":"https:\/\/courses.code-maze.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/CodeMazeBlog"]},{"@type":"Course","@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/#course","name":"Ultimate ASP.NET Core Web API","description":"The Ultimate ASP.NET Core Web API online text course covers critical aspects of Web API development, from scratch to advanced topics.","url":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/","provider":{"@type":"Organization","@id":"https:\/\/courses.code-maze.com\/#organization","name":"Code Maze","url":"https:\/\/courses.code-maze.com\/"},"mainEntityOfPage":{"@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/#webpage"},"educationalLevel":"Intermediate","offers":{"@type":"Offer","price":"97.00","priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","category":"Paid","url":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/"},"hasCourseInstance":{"@type":"CourseInstance","courseMode":"Online","courseWorkload":"PT8H15M"},"aggregateRating":{"@type":"AggregateRating","ratingValue":"4.93","ratingCount":362,"bestRating":"5","worstRating":"1"}}]}</script>
96
97	<!-- / Yoast SEO plugin. -->
98
99
100<link rel='dns-prefetch' href='//courses.code-maze.com' />
101
102<link rel="alternate" type="application/rss+xml" title="Code Maze &raquo; Feed" href="https://courses.code-maze.com/feed/" />
103<link rel="alternate" type="application/rss+xml" title="Code Maze &raquo; Comments Feed" href="https://courses.code-maze.com/comments/feed/" />
104<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://courses.code-maze.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fcourses.code-maze.com%2Fcourses%2Fultimate-aspnet-core-webapi%2F" />
105<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://courses.code-maze.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fcourses.code-maze.com%2Fcourses%2Fultimate-aspnet-core-webapi%2F&#038;format=xml" />
106<meta content="Extra v.4.9.7" name="generator"/>		<style id="content-control-block-styles">
107			@media (max-width: 640px) {
108	.cc-hide-on-mobile {
109		display: none !important;
110	}
111}
112@media (min-width: 641px) and (max-width: 920px) {
113	.cc-hide-on-tablet {
114		display: none !important;
115	}
116}
117@media (min-width: 921px) and (max-width: 1440px) {
118	.cc-hide-on-desktop {
119		display: none !important;
120	}
121}		</style>
122		<style id="wp-img-auto-sizes-contain-inline-css">
123img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
124/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
125</style>
126<style id="classic-theme-styles-inline-css">
127/*! This file is auto-generated */
128.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
129/*# sourceURL=/wp-includes/css/classic-themes.min.css */
130</style>
131
132<link rel='stylesheet' id='wc-blocks-style-css' href='https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks.css?ver=wc-9.3.6' media='all' />
133
134<link rel='stylesheet' id='content-control-block-styles-css' href='https://courses.code-maze.com/wp-content/plugins/content-control/dist/style-block-editor.css?ver=2.6.5' media='all' />
135<style id="global-styles-inline-css">
136:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
136--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-family--inter: "Inter", sans-serif;--wp--preset--font-family--cardo: Cardo;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
136.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-inter-font-family{font-family: var(--wp--preset--font-family--inter) !important;}.has-cardo-font-family{font-family: var(--wp--preset--font-family--cardo) !important;}
137/*# sourceURL=global-styles-inline-css */
138</style>
139
140<link rel='stylesheet' id='tutor-icon-css' href='https://courses.code-maze.com/wp-content/plugins/tutor/assets/css/tutor-icon.min.css?ver=4.0.4' media='all' />
141<link rel='stylesheet' id='tutor-css' href='https://courses.code-maze.com/wp-content/plugins/tutor/assets/css/tutor.min.css?ver=4.0.4' media='all' />
142<link rel='stylesheet' id='tutor-plyr-css' href='https://courses.code-maze.com/wp-content/plugins/tutor/assets/lib/plyr/plyr.css?ver=4.0.4' media='all' />
143<link rel='stylesheet' id='tutor-frontend-css' href='https://courses.code-maze.com/wp-content/plugins/tutor/assets/css/tutor-front.min.css?ver=4.0.4' media='all' />
144<style id="tutor-frontend-inline-css">
145:root{--tutor-color-primary:#239371;--tutor-color-primary-rgb:35, 147, 113;--tutor-color-primary-hover:#38bd9b;--tutor-color-primary-hover-rgb:56, 189, 155;--tutor-body-color:#212327;--tutor-body-color-rgb:33, 35, 39;--tutor-border-color:#E3E5EB;--tutor-border-color-rgb:227, 229, 235;--tutor-color-gray:#CDCFD5;--tutor-color-gray-rgb:205, 207, 213;}
146/*# sourceURL=tutor-frontend-inline-css */
147</style>
148<link rel='stylesheet' id='tutor-prism-css-css' href='https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/lib/codesample/prism.css?ver=4.0.4' media='all' />
149<link rel='stylesheet' id='tutor-pro-course-details-css' href='https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/css/course-details.css?ver=4.0.4' media='all' />
150<link rel='stylesheet' id='tutor-pro-front-css' href='https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/css/front.css?ver=4.0.4' media='all' />
151<link rel='stylesheet' id='tutor-course-bundle-frontend-css' href='https://courses.code-maze.com/wp-content/plugins/tutor-pro/addons/course-bundle/assets/css/frontend.css?ver=4.0.4' media='all' />
152<link rel='stylesheet' id='enrollment-frontend-css-css' href='https://courses.code-maze.com/wp-content/plugins/tutor-pro/addons/enrollments/assets/css/enroll.css?ver=4.0.4' media='all' />
153<link rel='stylesheet' id='woocommerce-layout-css' href='https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/css/woocommerce-layout.css?ver=9.3.6' media='all' />
154<link rel='stylesheet' id='woocommerce-smallscreen-css' href='https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/css/woocommerce-smallscreen.css?ver=9.3.6' media='only screen and (max-width: 768px)' />
155<link rel='stylesheet' id='woocommerce-general-css' href='https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/css/woocommerce.css?ver=9.3.6' media='all' />
156<style id="woocommerce-general-inline-css">
157.lemon-squeezy-direct-checkout {
158					background: #7047ec !important;
159					color: #ffffff !important;
160					border: none !important;
161					padding: 12px 24px !important;
162					font-size: 16px !important;
163					border-radius: 4px !important;
164					cursor: pointer !important;
165					text-decoration: none !important;
166					display: inline-flex !important;
167					align-items: center !important;
168					justify-content: center !important;
169					margin: 10px 0 !important;
170					transition: background-color 0.3s ease !important;
171				}
172				.lemon-squeezy-direct-checkout:hover {
173					background: #7e59ed !important;
174					color: #ffffff !important;
175				}
176				.lemon-squeezy-direct-checkout:disabled {
177					opacity: 0.6 !important;
178					cursor: not-allowed !important;
179				}
180				.lemon-squeezy-button-wrapper {
181					margin: 15px 0 !important;
182				}
183				/* Style Pay What You Want price display */
184				.lemon-squeezy-pwyw-price {
185					color: #666 !important;
186					font-style: italic !important;
187					font-size: 1.1em !important;
188					font-weight: 500 !important;
189				}
190				/* Icon color handling based on text color */
191				
192				.lemon-squeezy-button-icon {
193					filter: brightness(0) invert(1); /* Make icon white */
194				}
195
196				/* My Account order actions customization */
197				.woocommerce-MyAccount-orders .woocommerce-button.processing {
198					background: #6c757d !important;
199					color: white !important;
200					cursor: default !important;
201					pointer-events: none !important;
202				}
203				.woocommerce-MyAccount-orders .woocommerce-button.manage_subscription {
204					background: #7047ec !important;
205					color: #ffffff !important;
206				}
207				.woocommerce-MyAccount-orders .woocommerce-button.manage_subscription:hover {
208					background: #7e59ed !important;
209				}
210/*# sourceURL=woocommerce-general-inline-css */
211</style>
212<style id="woocommerce-inline-inline-css">
213.woocommerce form .form-row .required { visibility: visible; }
214/*# sourceURL=woocommerce-inline-inline-css */
215</style>
216<link rel='stylesheet' id='hide-admin-bar-based-on-user-roles-css' href='https://courses.code-maze.com/wp-content/plugins/hide-admin-bar-based-on-user-roles/public/css/hide-admin-bar-based-on-user-roles-public.css?ver=7.2.4' media='all' />
217<link rel='stylesheet' id='extra-fonts-css' href='//courses.code-maze.com/wp-content/uploads/omgf/extra-fonts/extra-fonts.css?ver=1769342455' media='all' />
218<link rel='stylesheet' id='extra-style-css' href='https://courses.code-maze.com/wp-content/themes/Extra/style.css?ver=4.9.7' media='all' />
219<link rel='stylesheet' id='fancybox-css' href='https://courses.code-maze.com/wp-content/plugins/easy-fancybox/fancybox/1.5.4/jquery.fancybox.css?ver=1790926221' media='screen' />
220<link rel='stylesheet' id='cmz-dark-mode-css' href='https://courses.code-maze.com/wp-content/mu-plugins/cmz-dark-mode/dark-mode.css?ver=1790173506' media='screen' />
221<link rel='stylesheet' id='cmz-dark-mode-images-css' href='https://courses.code-maze.com/wp-content/mu-plugins/cmz-dark-mode/dark-mode-images.css?ver=1786298694' media='screen' />
222<link rel='stylesheet' id='cmz-overrides-css' href='https://courses.code-maze.com/wp-content/mu-plugins/cmz-overrides/overrides.css?ver=1790629255' media='all' />
223<link rel='stylesheet' id='enlighterjs-css' href='https://courses.code-maze.com/wp-content/plugins/enlighter/cache/enlighterjs.min.css?ver=QIGroSBnr%2BtDXuU' media='all' />
224<style id="cmz-rating-count-inline-css">
225/* 1. Loop / archive cards: the "(35)" after the average. */ .tutor-course-ratings .tutor-ratings-count{display:none !important;} /* 2. Course detail header: the "(35 Ratings)" beside the average. */ .tutor-course-details-ratings .tutor-ratings-count{display:none !important;} /* 3. Reviews tab: "Total 35 Ratings". */ .tutor-total-rating-count{display:none !important;} /* 4. Reviews tab: per-star "N Ratings" labels. Drop the column so the progress bar reclaims the space rather than leaving a gap. */ .tutor-review-summary-rating .tutor-col-4{display:none !important;}
226/*# sourceURL=cmz-rating-count-inline-css */
227</style>
228<script id="jquery-core-js" src="https://courses.code-maze.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
vendor: 1 bytes, line 228
228
229<script id="jquery-migrate-js" src="https://courses.code-maze.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
vendor: 1 bytes, line 229
229
230<script data-wp-strategy="defer" defer id="jquery-blockui-js" src="https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.9.3.6"></script>
vendor: 1 bytes, line 230
230
231<script data-wp-strategy="defer" defer id="js-cookie-js" src="https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.9.3.6"></script>
vendor: 1 bytes, line 231
231
232<script id="woocommerce-js-extra">
233var woocommerce_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%"};
234//# sourceURL=woocommerce-js-extra
235</script>
vendor: 1 bytes, line 235
235
236<script data-wp-strategy="defer" defer id="woocommerce-js" src="https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=9.3.6"></script>
vendor: 1 bytes, line 236
236
237<script id="hide-admin-bar-based-on-user-roles-js" src="https://courses.code-maze.com/wp-content/plugins/hide-admin-bar-based-on-user-roles/public/js/hide-admin-bar-based-on-user-roles-public.js?ver=7.2.4"></script>
237
238<link rel="https://api.w.org/" href="https://courses.code-maze.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://courses.code-maze.com/wp-json/wp/v2/courses/75594" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://courses.code-maze.com/xmlrpc.php?rsd" />
239<meta name="generator" content="WordPress 7.1" />
240<meta name="generator" content="TutorLMS 4.0.4" />
241<meta name="generator" content="WooCommerce 9.3.6" />
242<link rel='shortlink' href='https://courses.code-maze.com/?p=75594' />
243<style>
244	.cf-turnstile-wrap{overflow:hidden}
245	.cf-turnstile iframe{max-width:100%}
246	#login .cf-turnstile{transform:scale(.9);transform-origin:0 0}
247	.woocommerce-form .cf-turnstile-wrap,.tutor-login-form-wrapper .cf-turnstile-wrap{display:flex;justify-content:center}
248	.cf-turnstile-wrap{transition:opacity .4s ease,max-height .4s ease .2s;max-height:120px}
249	.cf-turnstile-wrap.cmz-ts-done{opacity:0;max-height:0;padding:0!important}
250	</style>	<style>
251	.tutor-course-retake-button.tutor-btn-outline-primary,
252	button[name="complete_course_btn"].tutor-btn-outline-primary {
253		background-color: rgb(35,147,113) !important;
254		border-color: rgb(35,147,113) !important;
255		color: #fff !important;
256	}
257	.tutor-course-retake-button.tutor-btn-outline-primary:hover,
258	button[name="complete_course_btn"].tutor-btn-outline-primary:hover {
259		background-color: rgb(28,120,92) !important;
260		border-color: rgb(28,120,92) !important;
261		color: #fff !important;
262	}
263	:root[data-theme="dark"] .tutor-course-retake-button.tutor-btn-outline-primary,
264	:root[data-theme="dark"] button[name="complete_course_btn"].tutor-btn-outline-primary {
265		background-color: rgb(35,147,113) !important;
266		border-color: rgb(35,147,113) !important;
267		color: #fff !important;
268	}
269	</style>
270				<!--Facebook-->
271			<meta property="og:type" content="website"/>
272			<meta property="og:image" content="https://courses.code-maze.com/wp-content/uploads/2026/01/Ultimate-ASP.NET-Core-Web-API-Featured.webp" />
273			<meta property="og:description" content="&lt;p data-pm-slice=&quot;1 1 []&quot;&gt;&lt;strong&gt;Ultimate ASP.NET Core Web API - Our bestselling program&lt;/strong&gt;&lt;/p&gt;
274
275&lt;h3&gt;&lt;strong&gt;&lt;u&gt;What&#039;s included?&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt;
276&lt;ul&gt;
277 	&lt;li&gt;Ultimate ASP.NET Core Web API - The Online Text Course&lt;/li&gt;
278&lt;/ul&gt;
279&lt;strong&gt;Additional bonus materials:&lt;/strong&gt;
280&lt;ol&gt;
281 	&lt;li&gt;&lt;strong&gt;Dockerizing&lt;/strong&gt; ASP.NET Core Application (&lt;strong&gt;Online Text Course&lt;/strong&gt;) - &lt;a href=&quot;https://code-maze.com/wp-content/uploads/2021/11/Bonus-4-Docker-TOC.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Full Table of Contents Here.&lt;/a&gt;&lt;/li&gt;
282 	&lt;li&gt;Practical &lt;strong&gt;JSON Requests Collection&lt;/strong&gt;&lt;/li&gt;
283 	&lt;li&gt;Mastering ASP.NET Core &lt;strong&gt;Security &lt;/strong&gt;(&lt;strong&gt;Online Text Course&lt;/strong&gt;) - &lt;a href=&quot;https://code-maze.com/wp-content/uploads/2020/06/Bonus-6-Table-of-Content.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Full Table of Contents Here.&lt;/a&gt;&lt;/li&gt;
284 	&lt;li&gt;ASP.NET Core Web API With &lt;strong&gt;Dapper &lt;/strong&gt;(&lt;strong&gt;PDF&lt;/strong&gt;) - &lt;a href=&quot;https://code-maze.com/wp-content/uploads/2022/08/Bonus-7-Dapper-TOC.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Full Table of Contents Here.&lt;/a&gt;&lt;/li&gt;
285&lt;/ol&gt;
286All materials are available in .NET 10 with &lt;strong&gt;Community Support&lt;/strong&gt; over Discord.
287&lt;h3&gt;&lt;strong&gt;&lt;u&gt;What you&#039;ll learn&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt;
288This course dives into the foundational aspects and advanced techniques essential for building robust and scalable Web APIs.
289
290After understanding the basics of project configuration, you&#039;ll learn how to effectively utilize dependency injection, configure logging services, and implement the Onion Architecture for a maintainable project structure.
291
292The course covers critical aspects of web API development, including routing, naming, and binding, handling various types of HTTP requests, and ensuring method safety and idempotency.
293
294As you progress, you will explore advanced topics like content negotiation, validation, asynchronous programming, and global error handling. You&#039;ll gain proficiency in managing data through paging, filtering, searching, and sorting techniques. Moreover, the course addresses the importance of security by teaching authentication, authorization, and the use of refresh tokens.
295
296Additionally, you will also learn about action filters, health checks, API versioning, and how to document APIs effectively.
297
298Additional bonus chapters provide insights into performance improvements, CQRS with MediatR, and working with multiple databases, rounding out a thorough and practical learning experience.
299
300By the end of the course, you will have a solid grasp of ASP.NETCore Web API development, equipped with the skills to build, deploy, and maintain high-performance web applications.  This comprehensive course ensures you are ready to tackle real-world challenges and create efficient, scalable APIs.
301&lt;h4&gt;You can find an entire TOC with preview lessons in the &lt;strong&gt;Course Content&lt;/strong&gt; section below.&lt;/h4&gt;" />
302			<!--Twitter-->
303			<meta name="twitter:image" content="https://courses.code-maze.com/wp-content/uploads/2026/01/Ultimate-ASP.NET-Core-Web-API-Featured.webp">
304			<meta name="twitter:description" content="&lt;
304p data-pm-slice=&quot;1 1 []&quot;&gt;&lt;strong&gt;Ultimate ASP.NET Core Web API - Our bestselling program&lt;/strong&gt;&lt;/p&gt;
305
306&lt;h3&gt;&lt;strong&gt;&lt;u&gt;What&#039;s included?&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt;
307&lt;ul&gt;
308 	&lt;li&gt;Ultimate ASP.NET Core Web API - The Online Text Course&lt;/li&gt;
309&lt;/ul&gt;
310&lt;strong&gt;Additional bonus materials:&lt;/strong&gt;
311&lt;ol&gt;
312 	&lt;li&gt;&lt;strong&gt;Dockerizing&lt;/strong&gt; ASP.NET Core Application (&lt;strong&gt;Online Text Course&lt;/strong&gt;) - &lt;a href=&quot;https://code-maze.com/wp-content/uploads/2021/11/Bonus-4-Docker-TOC.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Full Table of Contents Here.&lt;/a&gt;&lt;/li&gt;
313 	&lt;li&gt;Practical &lt;strong&gt;JSON Requests Collection&lt;/strong&gt;&lt;/li&gt;
314 	&lt;li&gt;Mastering ASP.NET Core &lt;strong&gt;Security &lt;/strong&gt;(&lt;strong&gt;Online Text Course&lt;/strong&gt;) - &lt;a href=&quot;https://code-maze.com/wp-content/uploads/2020/06/Bonus-6-Table-of-Content.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Full Table of Contents Here.&lt;/a&gt;&lt;/li&gt;
315 	&lt;li&gt;ASP.NET Core Web API With &lt;strong&gt;Dapper &lt;/strong&gt;(&lt;strong&gt;PDF&lt;/strong&gt;) - &lt;a href=&quot;https://code-maze.com/wp-content/uploads/2022/08/Bonus-7-Dapper-TOC.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Full Table of Contents Here.&lt;/a&gt;&lt;/li&gt;
316&lt;/ol&gt;
317All materials are available in .NET 10 with &lt;strong&gt;Community Support&lt;/strong&gt; over Discord.
318&lt;h3&gt;&lt;strong&gt;&lt;u&gt;What you&#039;ll learn&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt;
319This course dives into the foundational aspects and advanced techniques essential for building robust and scalable Web APIs.
320
321After understanding the basics of project configuration, you&#039;ll learn how to effectively utilize dependency injection, configure logging services, and implement the Onion Architecture for a maintainable project structure.
322
323The course covers critical aspects of web API development, including routing, naming, and binding, handling various types of HTTP requests, and ensuring method safety and idempotency.
324
325As you progress, you will explore advanced topics like content negotiation, validation, asynchronous programming, and global error handling. You&#039;ll gain proficiency in managing data through paging, filtering, searching, and sorting techniques. Moreover, the course addresses the importance of security by teaching authentication, authorization, and the use of refresh tokens.
326
327Additionally, you will also learn about action filters, health checks, API versioning, and how to document APIs effectively.
328
329Additional bonus chapters provide insights into performance improvements, CQRS with MediatR, and working with multiple databases, rounding out a thorough and practical learning experience.
330
331By the end of the course, you will have a solid grasp of ASP.NETCore Web API development, equipped with the skills to build, deploy, and maintain high-performance web applications.  This comprehensive course ensures you are ready to tackle real-world challenges and create efficient, scalable APIs.
332&lt;h4&gt;You can find an entire TOC with preview lessons in the &lt;strong&gt;Course Content&lt;/strong&gt; section below.&lt;/h4&gt;">
333			<!--Google+-->
334			<meta itemprop="image" content="https://courses.code-maze.com/wp-content/uploads/2026/01/Ultimate-ASP.NET-Core-Web-API-Featured.webp">
335			<meta itemprop="description" content="&lt;p data-pm-slice=&quot;1 1 []&quot;&gt;&lt;strong&gt;Ultimate ASP.NET Core Web API - Our bestselling program&lt;/strong&gt;&lt;/p&gt;
336
337&lt;h3&gt;&lt;strong&gt;&lt;u&gt;What&#039;s included?&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt;
338&lt;ul&gt;
339 	&lt;li&gt;Ultimate ASP.NET Core Web API - The Online Text Course&lt;/li&gt;
340&lt;/ul&gt;
341&lt;strong&gt;Additional bonus materials:&lt;/strong&gt;
342&lt;ol&gt;
343 	&lt;li&gt;&lt;strong&gt;Dockerizing&lt;/strong&gt; ASP.NET Core Application (&lt;strong&gt;Online Text Course&lt;/strong&gt;) - &lt;a href=&quot;https://code-maze.com/wp-content/uploads/2021/11/Bonus-4-Docker-TOC.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Full Table of Contents Here.&lt;/a&gt;&lt;/li&gt;
344 	&lt;li&gt;Practical &lt;strong&gt;JSON Requests Collection&lt;/strong&gt;&lt;/li&gt;
345 	&lt;li&gt;Mastering ASP.NET Core &lt;strong&gt;Security &lt;/strong&gt;(&lt;strong&gt;Online Text Course&lt;/strong&gt;) - &lt;a href=&quot;https://code-maze.com/wp-content/uploads/2020/06/Bonus-6-Table-of-Content.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Full Table of Contents Here.&lt;/a&gt;&lt;/li&gt;
346 	&lt;li&gt;ASP.NET Core Web API With &lt;strong&gt;Dapper &lt;/strong&gt;(&lt;strong&gt;PDF&lt;/strong&gt;) - &lt;a href=&quot;https://code-maze.com/wp-content/uploads/2022/08/Bonus-7-Dapper-TOC.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Full Table of Contents Here.&lt;/a&gt;&lt;/li&gt;
347&lt;/ol&gt;
348All materials are available in .NET 10 with &lt;strong&gt;
348Community Support&lt;/strong&gt; over Discord.
349&lt;h3&gt;&lt;strong&gt;&lt;u&gt;What you&#039;ll learn&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt;
350This course dives into the foundational aspects and advanced techniques essential for building robust and scalable Web APIs.
351
352After understanding the basics of project configuration, you&#039;ll learn how to effectively utilize dependency injection, configure logging services, and implement the Onion Architecture for a maintainable project structure.
353
354The course covers critical aspects of web API development, including routing, naming, and binding, handling various types of HTTP requests, and ensuring method safety and idempotency.
355
356As you progress, you will explore advanced topics like content negotiation, validation, asynchronous programming, and global error handling. You&#039;ll gain proficiency in managing data through paging, filtering, searching, and sorting techniques. Moreover, the course addresses the importance of security by teaching authentication, authorization, and the use of refresh tokens.
357
358Additionally, you will also learn about action filters, health checks, API versioning, and how to document APIs effectively.
359
360Additional bonus chapters provide insights into performance improvements, CQRS with MediatR, and working with multiple databases, rounding out a thorough and practical learning experience.
361
362By the end of the course, you will have a solid grasp of ASP.NETCore Web API development, equipped with the skills to build, deploy, and maintain high-performance web applications.  This comprehensive course ensures you are ready to tackle real-world challenges and create efficient, scalable APIs.
363&lt;h4&gt;You can find an entire TOC with preview lessons in the &lt;strong&gt;Course Content&lt;/strong&gt; section below.&lt;/h4&gt;">
364			<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=1" /><link rel="preload" href="https://courses.code-maze.com/wp-content/themes/Extra/core/admin/fonts/modules.ttf" as="font" crossorigin="anonymous">	<noscript><style>.woocommerce-product-gallery{ opacity: 1 !important; }</style></noscript>
365	<link rel="preload" href="https://courses.code-maze.com/wp-content/themes/Extra/fonts/ET-Extra.woff" as="font" crossorigin="anonymous">
366	<style id="cmz-paddle-cart-style">
367		/* Tutor prints an inline <style> block with `button.tutor-btn { background-color:
368		   transparent; border-color: transparent }` at specificity (0,1,1) — element + class —
369		   which beats the external tutor.min.css `.tutor-btn-outline-primary { border-color: … }`
370		   rule at (0,1,0), regardless of load order. Both our buttons keep their Tutor variant
371		   classes (tutor-btn-primary / tutor-btn-outline-primary) so dark-mode.css's own,
372		   already-accessible overrides — which target those exact classes under
373		   :root[data-theme="dark"], a strictly higher specificity — still win in dark mode. This
374		   block only supplies the light/base fill that the specificity war was eating. */
375		.cmz-paddle-buttons .cmz-paddle-direct-checkout {
376			/* MEASURED IN A REAL BROWSER, 2026-08-06: white on Tutor's #239371 is 3.83:1 — below
377			   WCAG AA — and this is the highest-traffic buy button on the site. The subscription
378			   panel's round-5 contrast pass fixed exactly this colour (#239371 -> #1e7d60, 5.05)
379			   but its matrix covered the PANEL only, so the same failing green stayed live here.
380			   decisions.md already ratifies the remedy: "the brand green keeps its hue and is
381			   darkened for the light-theme FILL only". Hence a literal rather than
382			   var( --tutor-color-primary ) — the variable resolves to the value that fails.
383			   Dark mode is untouched: dark-mode.css targets .tutor-btn-primary under
384			   :root[data-theme="dark"] at higher specificity and keeps its own #1d7c60 (5.12). */
385			background-color: #1e7d60 !important;
386			border-color: #1e7d60 !important;
387			color: #fff !important;
388			white-space: nowrap; /* "Buy Now →" never wraps between the word and the arrow */
389			/* Founder round 6 — the round-5 fix inverted the intent and is corrected here.
390			   The ask was never "make Buy Now lighter": Buy Now's weight was the RIGHT one and
391			   Add to Cart was the odd one out. Round 5 unified them by pinning Buy Now DOWN to
392			   400, which matched the two buttons to each other but against the wrong reference.
393			   Correct end state, founder's words ("the font on the buy button was good, it was
394			   the add to cart button that should be fixed"): BOTH at Tutor's own 600 — the weight
395			   `.tutor-btn-primary { font-weight: 600 }` gives every other primary button on the
396			   site, so the pair matches the site rather than only itself. Height stays unified
397			   DOWNWARD at Add to Cart's 40px (that half of round 5 was right and is untouched:
398			   tutor-btn-lg stays dropped, so both keep font-size 16px / padding 8px 16px). */
399			font-weight: 600 !important;
400		}
401		/*
402		 * Add to Cart, round 2 (founder: "gray-on-gray… that golden yellow for example"). Gold,
403		 * not another green, so it reads as a distinct SECOND action next to the green Buy Now —
404		 * the same green-is-brand/amber-is-highlight split the promo surfaces already use
405		 * (decisions.md, 2026-07-20). The exact pair (#ffb912 fill / #1e1600 text) is not a new
406		 * colour: it is the mentor-cursor gold already live on the "New" badge in
407		 * cmz-dark-mode.css, chosen there BECAUSE it measures 10.4:1 and was left un-themed for
408		 * dark mode on purpose (self-contained, reads the same on either page background) — so
409		 * reusing it here needs no separate dark-mode rule either.
410		 *
411		 * SPECIFICITY NOTE: this button still carries the `tutor-btn-outline-primary` class
412		 * (kept deliberately — see the button markup) so it stays excluded from dark-mode.css's
413		 * blanket `.tutor-btn:not([class*="outline"])…` catch-all. But that leaves it caught by
414		 * the OTHER, dedicated dark-mode rule for `.tutor-btn-outline-primary` itself, at
415		 * specificity (0,3,0) — higher than a plain `.cmz-paddle-buttons .cmz-paddle-add-to-cart`
416		 * (0,2,0). Repeating the class (a documented technique, e.g. the cache-safe-theming
417		 * playbook's `.active.active.active` note) lifts this rule to (0,4,0), a clean win in
418		 * both themes rather than a coin-flip on stylesheet order.
419		 */
420		.cmz-paddle-buttons .cmz-paddle-add-to-cart.cmz-paddle-add-to-cart.cmz-paddle-add-to-cart {
421			background-color: #ffb912 !important;
422			border-color: #ffb912 !important;
423			color: #1e1600 !important;
424			/* Round 6, the other half of the weight correction. Add to Cart carries
425			   `tutor-btn-outline-primary`, which Tutor's bare `.tutor-btn-primary{font-weight:600}`
426			   rule never matches — measured live at 400 while every other button on the page sat
427			   at 600. THIS was the button the founder wanted fixed. Raised to 600 so the pair is
428			   identical in family, size and weight, and differs only in colour. */
429			font-weight: 600 !important;
430		}
431		.cmz-paddle-buttons .cmz-paddle-direct-checkout:hover {
432			filter: brightness( 0.92 );
433		}
434		.cmz-paddle-buttons .cmz-paddle-add-to-cart.cmz-paddle-add-to-cart.cmz-paddle-add-to-cart:hover {
435			filter: brightness( 0.94 );
436		}
437		/*
438		 * In-cart state (founder round 4: "gray or some other shade of yellow (dimmed)"). Kept
439		 * as the SAME gold, just dimmed via opacity rather than a second colour — opacity is
440		 * theme-agnostic by construction (it dims whatever the fill already correctly is in
441		 * either mode), so this needed no separate dark-mode rule either, same reasoning as the
442		 * base gold itself. data-in-cart is set client-side only (see syncAddToCartButtons in
443		 * the enqueued script) — never baked into the server-rendered HTML.
444		 */
445		.cmz-paddle-buttons .cmz-paddle-add-to-cart[data-in-cart="1"] {
446			opacity: 0.55;
447			cursor: default;
448			pointer-events: none;
449		}
450		.cmz-paddle-buttons .cmz-paddle-add-to-cart[data-in-cart="1"]:hover {
451			filter: none;
452		}
453
454		/* -----------------------------------------------------------------------------
455		 * Archive-card add to cart. Tim Corey's layout (founder's reference), our palette —
456		 * the same #ffb912 gold as the course-page Add to Cart, so "gold means add to cart"
457		 * holds everywhere on the site rather than the archive inventing a third colour.
458		 * That gold is deliberately theme-agnostic (it already carries its own dark text at
459		 * 10.4:1 on either background), which is why this needs no dark-mode branch — the
460		 * same reasoning that kept the course-page button to one rule.
461		 * -------------------------------------------------------------------------- */
462		/* The card body is the chip's containing block. UNCONDITIONAL on purpose: if this ever
463		   fails to apply, the nearest positioned ancestor is `.tutor-card` (which IS relative)
464		   and the chip silently lands back ON the artwork — the exact defect this replaced. */
465		.tutor-card.tutor-course-card .tutor-card-body {
466			position: relative;
467		}
468		/* Keep the card's own text out from under the chip. :has() is only an optimisation here
469		   (pad just the cards that actually carry a chip); if it is unsupported the chip still
470		   sits correctly, the text simply is not indented. */
471		.tutor-card-body:has( > .cmz-paddle-loop-add ) > .tutor-course-ratings,
472		.tutor-card-body:has( > .cmz-paddle-loop-add ) > .tutor-course-name {
473			padding-right: 54px;
474		}
475
476		/*
477		 * The chip: top-right of the card BODY, level with the ratings row (founder).
478		 *
479		 * ARMOURED WITH !important AND A DOUBLED CLASS, deliberately. Extra styles EVERY bare
480		 * <button> on the site — `button:not(.et_pb_menu__icon)` in style-cpt.css sets
481		 * background, padding, border and radius — and this file already carries the scars of
482		 * that fight for the course-page buttons (see the 1.2.0 note above, where Tutor's own
483		 * inline reset beat an external class rule regardless of load order). A chip that does
484		 * not declare its own surface does not own it. This is the same trap class as the nav
485		 * work: anything dropped into theme-controlled markup must pin its own paint.
486		 *
487		 * opacity is pinned to 1 and REMOVED FROM THE TRANSITION so the chip cannot fade,
488		 * animate a fade, or inherit one — the founder reported it "just becomes transparent"
489		 * on hover. No site rule was found that does that (every stylesheet was scanned for a
490		 * :hover rule touching this element or any ancestor; there is none, and there is no
491		 * `button:hover` rule anywhere), so rather than guess at a cause this closes off the
492		 * whole mechanism, including our own former aria-busy dim below.
493		 */
494		.cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add {
495			position: absolute;
496			top: 12px;
497			right: 16px;
498			z-index: 2;
499			display: inline-flex;
500			align-items: center;
501			justify-content: center;
502			width: 40px;
503			height: 40px;
504			padding: 0 !important;
505			border: 1px solid #ffb912 !important;
506			border-radius: 8px !important;
507			background: #ffb912 !important;
508			color: #1e1600 !important;
509			opacity: 1 !important;
510			cursor: pointer;
511			box-shadow: 0 1px 4px rgba( 0, 0, 0, 0.22 );
512			transition: filter 120ms ease, transform 120ms ease, box-shadow 120ms ease;
513		}
514		/* Hover: the chip LIFTS and the plus thickens — it must never fade. */
515		.cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add:hover,
516		.cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add:focus-visible {
517			background: #ffc63a !important;
518			opacity: 1 !important;
519			filter: none;
520			transform: translateY( -1px );
521			box-shadow: 0 3px 10px rgba( 0, 0, 0, 0.3 );
522		}
523		.cmz-paddle-loop-add .cmz-paddle-loop-plus {
524			transition: stroke-width 120ms ease;
525		}
526		.cmz-paddle-loop-add:hover .cmz-paddle-loop-plus,
527		.cmz-paddle-loop-add:focus-visible .cmz-paddle-loop-plus {
528			stroke-width: 3;
529		}
530		.cmz-paddle-loop-add .cmz-paddle-loop-ico {
531			display: inline-flex;
532			align-items: center;
533			justify-content: center;
534			line-height: 0;
535		}
536		/* The two glyphs swap purely on the attribute the cart state already sets — no second
537		   piece of JS deciding what the icon should be. */
538		.cmz-paddle-loop-add[data-in-cart="0"] .cmz-paddle-loop-ico-in,
539		.cmz-paddle-loop-add[data-in-cart="1"] .cmz-paddle-loop-ico-add {
540			display: none;
541		}
542		/* IN CART. NOT a dim — dimming is what made the addable chip look broken, and a faded
543		   control reads as "disabled", not "done". The chip flips to a solid surface with a
544		   green check: unmistakably added, fully opaque, obviously the same control.
545		   THEME-AWARE since the founder's 2026-08-07 C3 finding ("checkmark is dark on the light
546		   theme"): light theme gets a light surface with the AA light-surface green #1e7d60
547		   (the Phase 4 rolled-everywhere value; ~5.2:1 on #f2f5f4), dark mode keeps the solid
548		   dark chip with #5dc49e — the dark-surface brand green from decisions.md ("keep the
549		   hue, lift the lightness"), the value that passes contrast on a dark fill, which
550		   #239371 does not. Doubled class + !important for the same reason as the base rule. */
551		.cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add[data-in-cart="1"],
552		.cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add[data-in-cart="1"]:hover {
553			background: #f2f5f4 !important;
554			border-color: rgba( 23, 25, 27, 0.35 ) !important;
555			color: #1e7d60 !important;
556			opacity: 1 !important;
557			cursor: default;
558			pointer-events: none;
559			filter: none;
560			transform: none;
561			box-shadow: 0 1px 4px rgba( 0, 0, 0, 0.22 );
562		}
563		:root[data-theme="dark"] .cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add[data-in-cart="1"],
564		:root[data-theme="dark"] .cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add[data-in-cart="1"]:hover {
565			background: #17191b !important;
566			border-color: rgba( 255, 255, 255, 0.34 ) !important;
567			color: #5dc49e !important;
568		}
569		/* BUSY: a real spinner (founder, release night 2026-08-07: "some kind of css loader …
570		   that's just good UX" — the AJAX round trip left the chip looking inert). Still NO
571		   opacity change anywhere: the old `opacity:.6` made the chip read as broken and was
572		   its own bug report. The glyph hides, a currentColor ring spins in its place, and
573		   both come back with the server's answer via syncAddToCartButtons(). */
574		.cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add[aria-busy="true"] {
575			opacity: 1 !important;
576			cursor: progress;
577			pointer-events: none;
578		}
579		.cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add[aria-busy="true"] svg {
580			visibility: hidden;
581		}
582		.cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add[aria-busy="true"]::after {
583			content: "";
584			position: absolute;
585			top: 50%;
586			left: 50%;
587			width: 14px;
588			height: 14px;
589			margin: -7px 0 0 -7px;
590			border-radius: 50%;
591			border: 2px solid currentColor;
592			border-top-color: transparent;
593			animation: cmz-paddle-chip-spin 0.6s linear infinite;
594		}
595		@keyframes cmz-paddle-chip-spin {
596			to { transform: rotate( 360deg ); }
597		}
598		@media only screen and ( max-width: 1024px ) {
599			/* 44px thumb target on touch, same floor as the mini-cart's controls. Doubled class
600			   to match the base rule's specificity — a media query adds none of its own, so an
601			   equal-specificity base rule later in the sheet would otherwise win (that exact
602			   mistake cost a round on the mini-cart's touch targets). */
603			.cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add {
604				width: 44px;
605				height: 44px;
606			}
607		}
608
609
610		/* -----------------------------------------------------------------------------
611		 * VIEWER PRICES (founder: "customers don't know how much either of the courses cost
612		 * … so that the customers know they've reached their budget").
613		 *
614		 * Visual language is the promo plugin's, which is where this site's strikethrough
615		 * already lives: muted + line-through for the list price, full weight for what they
616		 * actually pay. Every figure is rendered by the gateway; nothing here is computed.
617		 *
618		 * PER-THEME GREYS, because measured on the real card backgrounds (#fff light,
619		 * #1f1f22 dark) NO SINGLE GREY CLEARS AA ON BOTH: #6b7280 is 4.83 light but 3.40
620		 * dark, #8b949e is 5.35 dark but 3.08 light. So each theme gets the one that passes.
621		 * -------------------------------------------------------------------------- */
622		.cmz-paddle-loop-price {
623			position: absolute;
624			top: 58px;
625			right: 16px;
626			z-index: 2;
627			/* Column flex, so the struck span shrink-wraps to its digits. As a plain block it
628			   filled the card width and the rule below would have run out past the number. */
629			display: flex;
630			flex-direction: column;
631			align-items: flex-end;
632			text-align: right;
633			line-height: 1.25;
634			font-size: .95rem;
635		}
636		.cmz-paddle-loop-price[hidden] { display: none; }
637		/*
638		 * THE STRIKE IS A DRAWN RULE, NOT text-decoration (founder saw the line sitting below
639		 * the middle of the digits). `line-through` is positioned from font metrics, and this
640		 * face puts its strike low; no font-size nudge fixes that, it just moves the problem to
641		 * a different size. A centred pseudo-element crosses the digits' middle at ANY size, in
642		 * either surface, whatever face the theme loads. currentColor keeps it the exact grey
643		 * of the text it strikes, so the per-theme colours below need no duplicate rule.
644		 */
645		.cmz-paddle-price-was {
646			display: block;
647			position: relative;
648			font-size: .82rem;
649			text-decoration: none;
650			color: #6b7280;                 /* 4.83 on #fff */
651		}
652		.cmz-paddle-price-was::after,
653		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-was::after {
654			content: '';
655			position: absolute;
656			left: 0;
657			right: 0;
658			top: 47%;                       /* digits have no descender: their ink centre sits
659			                                   just above the box centre. Measured, not guessed. */
660			height: 1px;
661			background: currentColor;
662			pointer-events: none;
663		}
664		.cmz-paddle-price-now { font-weight: 700; color: #14171a; }   /* 17.99 on #fff */
665		:root[data-theme="dark"] .cmz-paddle-price-was { color: #8b949e; }  /* 5.35 on #1f1f22 */
666		:root[data-theme="dark"] .cmz-paddle-price-now { color: #e4e0da; }  /* 12.51 on #1f1f22 */
667
668		/* Mini-cart: per-line price, then one discount label and a subtotal by the actions. */
669		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-price {
670			flex: 0 0 auto;
671			margin-left: 8px;
672			display: flex;
673			flex-direction: column;
674			align-items: flex-end;
675			text-align: right;
676			line-height: 1.25;
677			white-space: nowrap;
678			font-size: .86rem !important;
679		}
680		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-was {
681			display: block;
682			position: relative;
683			font-size: .76rem !important;
684			text-decoration: none !important;
685			color: #6b7280 !important;
686			font-weight: 400 !important;
687		}
688		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-now {
689			color: #14171a !important;
690			font-weight: 700 !important;
691		}
692		/*
693		 * THE FOOTER DIVIDER (founder round 7, from a marked-up screenshot).
694		 *
695		 * The Subtotal row opens the totals block, so the divider belongs to IT rather than to
696		 * the list: the list's last row deliberately carries `border-bottom: 0` (its own edge is
697		 * the divider), and putting the line back on that row would resurrect the dangling rule
698		 * for the priceless case, where no totals block renders at all and the list must still
699		 * end clean against the actions row.
700		 *
701		 * Full-bleed, exactly like every other divider in this panel — the dropdown's own
702		 * padding is 0 precisely "so dividers can run edge to edge", and this element is a block
703		 * child of it, so its border spans the full 320px with no extra rule.
704		 *
705		 * The 1px reset at (1,1,1) sets `border: 0` on every div in here; these rules are
706		 * (1,2,0), which outranks it — the same margin by which the row rules win.
707		 *
708		 * HORIZONTAL INSET, 14px — a change the founder's ask did not name, and here is why it
709		 * is in the same commit. Measured on the rendered panel before the fix: the row content
710		 * edge sits at x=15 from the panel's outer edge (1px border + 14px padding) and the
711		 * header's does too, while the totals block sat at x=3 (1px + 2px). With no divider that
712		 * read as a loose caption; with one it reads as a misprint, because a full-bleed line
713		 * makes the text under it measurable against the text above it. 14px puts the totals on
714		 * the header's and the rows' own inset, so the footer lines up with the panel it closes.
715		 * Vertical rhythm is unchanged apart from the line itself: 10px above Subtotal as
716		 * before, and the last row's own 10px bottom padding sits below the line, so the rule
717		 * lands centred in a 20px band rather than crowding either side.
718		 */
719		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-sub {
720			display: flex;
721			justify-content: space-between;
722			align-items: baseline;
723			gap: 10px;
724			padding: 10px 14px 0;
725			border-top: 1px solid var( --cmz-mc-border-strong );
726			font-weight: 700 !important;
727			color: #14171a !important;
728		}
729		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-disc {
730			display: block;
731			padding: 2px 14px 0;
732			font-size: .78rem !important;
733			font-weight: 600 !important;
734			color: #1e7d60 !important;      /* 5.05 on white */
735		}
736		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-note {
737			display: block;
738			padding: 2px 14px 6px;
739			font-size: .74rem !important;
740			font-weight: 400 !important;
741			color: #6b7280 !important;
742		}
743		:root[data-theme="dark"] #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-was,
744		:root[data-theme="dark"] #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-note {
745			color: #8b949e !important;
746		}
747		:root[data-theme="dark"] #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-now,
748		:root[data-theme="dark"] #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-sub {
749			color: #e4e0da !important;
750		}
751		:root[data-theme="dark"] #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-disc {
752			color: #5dc49e !important;      /* 7.72 on the dark panel */
753		}
754		/* course-entry-box.php (a Code Maze override inside plugins/tutor/templates/…) renders
755		   the Lemon Squeezy button unconditionally, with no filter around it to hook a suppression
756		   into — the cmz_paddle_suppress_ls_button name in the design contract was never actually
757		   wired. :has() keeps the fix entirely inside this file instead of editing the vendored
758		   template again, and it only ever matches when our own buttons are present, i.e. only for
759		   a gated user; a non-gated visitor's entry box is untouched. */
760		.tutor-card-body:has( .cmz-paddle-buttons ) .lemon-squeezy-direct-checkout {
761			display: none !important;
762		}
763
764		/* Cart icon in the nav — same menu-item shape and absolute-badge convention as
765		   cmz-dark-mode's own toggle. Round 3 (founder, screenshot review): a stray white line
766		   at the pill's edge, "too round", background not differentiated, doesn't match its
767		   neighbours. Rebuilt on TWO measured facts, not assumption:
768		   (1) #main-header is background:rgba(0,0,0,.91) UNCONDITIONALLY — the nav bar is
769		       always near-black, on every theme. It does not follow :root[data-theme="dark"]
770		       (that attribute governs the CONTENT area only) — confirmed live: data-theme was
771		       null while the nav still rendered black. The first version branched the chip's
772		       colours on data-theme anyway, which is why the fill was invisible (rgba(0,0,0,.05)
773		       — near-black on near-black) whenever content mode happened to be light. Fixed by
774		       dropping the branch: one set of dark-surface-safe values, always, matching what
775		       the nav itself always is.
776		   (2) The neighbours (My Learning / Explore Courses / the moon toggle) are plain WHITE
777		       (rgb(255,255,255), measured), not brand green. A green-bordered chip stood out AS
778		       AN OUTLIER instead of belonging to the family. Colour now follows the nav's own
779		       white, and the ONLY accent colour left is the badge — same role the gold "NEW"
780		       pill already plays next door: a neutral control, one colourful accent on top.
781		   The badge sits ABOVE the chip (bottom:100%), never overlapping its border — same
782		   placement cmz-dm-new already uses safely, which also removes the likely source of the
783		   stray line (two independently-antialiased curves — the badge's circle and the old
784		   pill's border-radius:999px — meeting at a shallow angle). 4px radius, not a pill. */
785		/*
786		 * Vertical alignment (founder, folded into the redesign): #et-menu is display:flex,
787		 * align-items:normal (~stretch), so every <li> — including this one — is already
788		 * stretched to the SAME height as its siblings (measured: 53px, identical top/bottom
789		 * for all of them). The misalignment was never between <li> elements; it was that a
790		 * sibling <a> fills that full 53px itself and centres its own content some other way,
791		 * while my chip — an inline-flex <div> sized to its own content, maybe 30px tall —
792		 * defaulted to sitting at the TOP of the block-level <li> with nothing centring it.
793		 * Making the <li> a flex container for ITS OWN children (not to be confused with
794		 * #et-menu's flex, one level up) centres the chip in the same space every other item
795		 * occupies, regardless of what mechanism Extra's own <a> uses internally.
796		 */
797		.cmz-paddle-cart-item {
798			position: relative;
799		}
800		/* Same #et-navigation specificity fight as everything else this round — plain
801		   `.cmz-paddle-cart-item { display:flex… }` measured LIVE as never applying at all
802		   (computed display stayed "block", height stayed the chip's own 32px, not the li's
803		   stretched 53px) against Extra's own #et-navigation li rules. Scoped + !important. */
804		#et-navigation .cmz-paddle-cart-item {
805			display: flex !important;
806			align-items: center !important;
807			/* NOT height:100% — measured live that it backfires: #et-menu never sets an
808			   explicit height of its own (only content-driven flex stretch), so a percentage
809			   height on the li has no resolvable reference and computes to auto, COLLAPSING
810			   the li to its content's 32px instead of the 53px every sibling gets from
811			   #et-menu's own align-items:normal (~stretch). Leaving height unset lets that
812			   outer stretch keep working exactly as it already did for every other item —
813			   this rule's only job is centring the child WITHIN whatever height results. */
814		}
815
816		/* ---------------------------------------------------------------------------------
817		 * ROUND 6 — the alignment defect that survived three previous "fixes", and why.
818		 *
819		 * Every earlier round verified alignment by comparing BOX centres: the cart <li> and a
820		 * sibling <li> both measured centre-y 107 (later 160), so it was declared aligned and
821		 * shipped — while the founder kept seeing the chip sit low. Both readings were correct;
822		 * the comparison was against the wrong reference.
823		 *
824		 * Measured on the running page (CSSOM + Range over the real text nodes):
825		 *     sibling menu-item text INK centre .... 141
826		 *     dark-mode toggle glyph centre ........ 142
827		 *     cart chip / glyph centre ............. 160     ← 19px low, exactly as drawn
828		 *
829		 * Mechanism: Extra reserves empty space UNDER every nav link, as bottom padding on the
830		 * anchor itself — `#et-navigation > ul > li > a { padding: 0 0 54px }`, overridden per
831		 * header style and per state. Authoritative list, read out of the live CSSOM:
832		 *     #et-navigation > ul > li > a ......................................... 54px
833		 *     .header.left-right … > a           @media(min-width:768px) [inline] ... 36px  ← this page
834		 *     .et-fixed-header .header.left-right … > a ............................ 32px
835		 *     .et-fixed-header .header.left-right … > a  @media(min-width:768px) ... 44px
836		 *     .et-fixed-header .header.centered … > a .............................. 20px
837		 * So a 53px row is really a ~17px band of ink sitting on top of a 36px empty reserve.
838		 * Every sibling's CONTENT therefore lives in the TOP of the row. The chip is a <div>,
839		 * not an <a>, so `#et-navigation > ul > li > a` never matches it and it never gets the
840		 * reserve — and centring it in the FULL row height parks it half a reserve too low.
841		 *
842		 * The correction is exact and needs no fudge factor: row = band + reserve, so the true
843		 * centre is band/2 while naive centring gives (band+reserve)/2 — the error is always
844		 * exactly reserve/2. Applied as a TRANSFORM, deliberately: the chip's margin box must not
845		 * grow, or the li's flex cross-size would grow with it and stretch the whole nav row
846		 * (verified after: #et-menu height 53px before and after, unchanged).
847		 *
848		 * The value is a custom property rather than a literal because the reserve is not a
849		 * constant — it changes with breakpoint, header style AND scroll state, and two of the
850		 * five values above come from Extra's customizer output, so they move if the founder
851		 * ever changes the header height. The CSS default below covers the variants the theme
852		 * ships; the enqueued script then overwrites --cmz-nav-reserve with the value MEASURED
853		 * off a real sibling anchor, which is correct by construction in every variant including
854		 * ones that do not exist yet. CSS is the no-JS floor, JS is the truth.
855		 *
856		 * Scoped to #et-menu (the desktop <ul>) and NOT to #et-navigation, because
857		 * #et-extra-mobile-menu is nested INSIDE #et-navigation — the clone trap this file has
858		 * already been bitten by twice. The stacked mobile menu has no reserve to correct
859		 * (its rows are `padding: 15px 0`), so it must not receive the transform at all.
860		 * ------------------------------------------------------------------------------- */
861		#et-navigation > #et-menu > .cmz-paddle-cart-item {
862			--cmz-nav-reserve: 36px;
863		}
864		.et-fixed-header .header.left-right #et-navigation > #et-menu > .cmz-paddle-cart-item {
865			--cmz-nav-reserve: 44px;
866		}
867		.et-fixed-header .header.centered #et-navigation > #et-menu > .cmz-paddle-cart-item {
868			--cmz-nav-reserve: 20px;
869		}
870		#et-navigation > #et-menu > .cmz-paddle-cart-item > .cmz-paddle-cart-chip {
871			transform: translateY( calc( var( --cmz-nav-reserve, 36px ) / -2 ) );
872		}
873		/* The dropdown hangs off the chip's ORIGINAL (untransformed) box, so it would open with
874		   the same half-reserve gap the chip no longer has. Pull it up by the same amount so it
875		   still sits directly under the chip in every variant. */
876		#et-navigation > #et-menu > .cmz-paddle-cart-item > .cmz-paddle-cart-dropdown {
877			transform: translateY( calc( var( --cmz-nav-reserve, 36px ) / -2 ) );
878		}
879		.cmz-paddle-cart-chip {
880			display: inline-flex;
881			align-items: center;
882			position: relative;
883		}
884		/*
885		 * Extra styles its navigation through #et-navigation — an ID — so a plain-class rule
886		 * loses to it regardless of !important (cache-safe-theming.md documents this exact trap
887		 * for this exact theme; caught live twice already this round, on the border AND the
888		 * padding — #et-navigation > ul > li > a carries both at (1,0,3)). Every property that
889		 * has to win against the nav's own item styling is scoped under #et-navigation here.
890		 */
891		#et-navigation .cmz-paddle-cart-chip {
892			padding: 5px 8px !important;
893			border: 1px solid rgba( 255, 255, 255, 0.3 ) !important;
894			border-radius: 4px !important;
895			background-color: rgba( 255, 255, 255, 0.12 ) !important;
896			gap: 6px;
897		}
898		/* The link and caret are transparent passengers inside the chip now — the chip alone
899		   carries the border/background, so there is only ever ONE box being drawn, not two
900		   overlapping ones. Colour pinned to white explicitly: without this, the site-wide dark
901		   -mode link-colour rule (a:not([style*="background"])…) would tint this anchor toward
902		   --cmz-link whenever CONTENT mode is dark — inconsistent with a nav that looks
903		   identical regardless, and the exact kind of "why did the icon change colour" bug the
904		   two-facts note above exists to prevent from recurring elsewhere. */
905		#et-navigation .cmz-paddle-cart-link {
906			display: inline-flex !important;
907			align-items: center;
908			gap: 6px;
909			cursor: pointer;
910			border: 0 !important;
911			padding: 0 !important;
912			background: transparent !important;
913			color: #fff !important;
914		}
915		/* Wording kept for assistive tech and the mobile stacked menu; hidden on the desktop
916		   bar, where the glyph alone reads and horizontal space is tight — same treatment as
917		   cmz-dark-mode's .cmz-dm-text. */
918		.cmz-paddle-cart-text {
919			position: absolute;
920			width: 1px;
921			height: 1px;
922			margin: -1px;
923			padding: 0;
924			overflow: hidden;
925			clip: rect( 0, 0, 0, 0 );
926			white-space: nowrap;
927			border: 0;
928		}
929		/*
930		 * Count badge — appearance only. Placement is per-variant and lives in the two rules
931		 * below, because the desktop chip wants a corner badge and the stacked mobile row wants
932		 * an inline one.
933		 *
934		 * Round 3 parked this ABOVE the chip (bottom:100%) to dodge a seam the founder saw where
935		 * two independently-antialiased curves met. Round 6 puts it back on the corner, which is
936		 * what the founder asked for and what the reference does — the seam is prevented properly
937		 * this time, by the ring below, rather than by keeping the two shapes apart.
938		 */
939		.cmz-paddle-cart-badge {
940			box-sizing: border-box;
941			min-width: 16px;
942			height: 16px;
943			padding: 0 4px;
944			border-radius: 999px;
945			/* Same 3.83:1 white-on-#239371 failure as the buy button, and worse here because the
946			   count is 10px. Hue unchanged, fill darkened to the ratified #1e7d60 (5.05). The
947			   badge's separation from the near-black nav comes from its 2px ring, not from its
948			   own luminance, so darkening the disc costs nothing there. */
949			background: var( --cmz-accent-fill, #1e7d60 );
950			color: #fff;
951			font-size: 10px;
952			font-weight: 700;
953			line-height: 16px;
954			text-align: center;
955			pointer-events: none;
956			z-index: 3;
957		}
958		/* The `hidden` attribute is how the script hides a zero count. Any author `display`
959		   declaration would silently defeat it, so state the intent explicitly rather than
960		   relying on nobody ever adding one. */
961		.cmz-paddle-cart-badge[hidden] {
962			display: none !important;
963		}
964		/*
965		 * DESKTOP: glued to the chip's top-right corner (founder, with Dometrain cited as the
966		 * reference — measured on dometrain.com rather than eyeballed from the screenshot):
967		 *
968		 *     their chip ......... 44x44, position:relative, 8px radius
969		 *     their badge ........ 20x20 circle, min-width 20 + padding 0 6px so 2 digits grow it
970		 *     their anchor ....... position:absolute; top:-6px; right:-6px
971		 *     measured overhang .. 5px past the top edge and 5px past the right edge
972		 *     their ratio ........ badge is 0.45x the chip's size
973		 *     their separation ... no ring; a coloured glow (0 2px 10px -2px, badge colour @55%)
974		 *
975		 * Ported, not copied. Our chip is 32px tall, so the 16px badge we already had is ratio
976		 * 0.50 — right in their range and already legible at 10px/700, so the size is unchanged.
977		 * Offsets are -7px against a 16px badge, which puts the badge's centre 1px inside the
978		 * corner point: it straddles the border almost exactly half in / half out, which is what
979		 * the founder described, and is a touch more overlap than Dometrain's 25%.
980		 *
981		 * Colour stays OUR green (the brief: keep the scheme, position is the point). Their glow
982		 * works because their badge sits on a flat dark-blue chip; ours lands ON a 1px light
983		 * border, so it needs the ring the founder mentioned — 2px in the nav's own colour, which
984		 * reads as a cut-out and kills the seam risk at the same time.
985		 *
986		 * ONE ring colour for both themes, deliberately: #main-header measures
987		 * background rgba(0,0,0,.91) UNCONDITIONALLY — the nav bar is always near-black and does
988		 * NOT follow :root[data-theme] (that governs the content area only). Branching this on
989		 * the content theme is the exact bug round 3 shipped; it is not repeated here.
990		 *
991		 * Anchored to .cmz-paddle-cart-chip, which is position:relative AND carries the
992		 * alignment transform — a transformed element is a containing block for its absolutely
993		 * positioned descendants, so the badge rides the chip through every header variant,
994		 * breakpoint and scroll state for free, with no second offset to keep in sync.
995		 *
996		 * Applied to BOTH menu clones, not just #et-menu: the founder's follow-up is that the
997		 * mobile chip must look the same as the desktop one, so there is now a single chip design
998		 * and a single badge placement rather than two that drift.
999		 */
1000		#et-navigation .cmz-paddle-cart-item .cmz-paddle-cart-badge {
1001			position: absolute;
1002			top: -7px;
1003			right: -7px;
1004			box-shadow: 0 0 0 2px rgba( 10, 10, 10, 0.94 );
1005		}
1006		/* Extra's own breakpoint (#et-mobile-navigation switches at 1024px) — see
1007		   cmz-dark-mode.css's own note on why a guessed value leaves a dead zone. */
1008		@media only screen and ( max-width: 1024px ) {
1009			/* Founder: vertical alignment in the mobile stacked menu too — measured live in
1010			   #et-extra-mobile-menu (the clone that actually renders on mobile; Extra hides the
1011			   #et-navigation copy there — see cache-safe-theming.md's own note on this exact
1012			   trap). Sibling rows are ~46px tall via #et-navigation li a's padding:15px 0 +
1013			   15px line-height; my row measured 34px with nothing supplying the same rhythm.
1014			   6px top/bottom closes that gap without touching the chip's own size. */
1015			#et-navigation .cmz-paddle-cart-item {
1016				padding: 6px 0 !important;
1017			}
1018			/*
1019			 * COMPACT CHIP IN THE STACKED MENU (founder: "it should look the same" as desktop).
1020			 *
1021			 * The previous version stretched the chip to width:100% and un-hid the "Cart" label,
1022			 * on the reasoning that a menu row should look like a menu row. The founder's
1023			 * screenshot shows what that actually produced: a full-width bordered box with a
1024			 * glyph, the word CART, the badge and the caret strung across the whole menu — a
1025			 * completely different component from the desktop chip, in the same nav.
1026			 *
1027			 * So the chip is now sized to its content in both clones and the label goes back to
1028			 * screen-reader-only, leaving exactly the desktop object: glyph + caret + corner
1029			 * badge. Assistive tech is unaffected — the label is still in the accessibility tree,
1030			 * and the link keeps its aria-label besides.
1031			 *
1032			 * PLACEMENT, chosen deliberately rather than inherited: left-aligned, so the chip
1033			 * starts on the same vertical edge every sibling row's text starts on. In a stacked
1034			 * menu the left edge is the alignment spine; a compact control centred or
1035			 * right-floated in a full-width row would read as unrelated to the list it belongs to.
1036			 */
1037			#et-navigation .cmz-paddle-cart-item {
1038				justify-content: flex-start;
1039			}
1040			#et-navigation .cmz-paddle-cart-item .cmz-paddle-cart-chip {
1041				display: inline-flex !important;
1042				width: auto;
1043				flex: 0 0 auto;
1044				justify-content: flex-start;
1045				box-sizing: border-box;
1046			}
1047			/* The li is a flex container (it has to be, to centre the chip), so the panel would
1048			   sit BESIDE the chip and be squeezed — measured at 145px before this. Wrapping the
1049			   li and giving the panel a full-width flex basis puts it on its own line, which is
1050			   what "full width in the stacked menu" actually requires. */
1051			#et-navigation .cmz-paddle-cart-item {
1052				flex-wrap: wrap !important;
1053			}
1054			/* The reserve correction is a desktop-nav concept only; the stacked menu has no
1055			   reserve. #et-menu is display:none at this width so this is belt-and-braces, but
1056			   the selector has to carry the same two IDs or it loses to the rule it undoes. */
1057			#et-navigation > #et-menu > .cmz-paddle-cart-item > .cmz-paddle-cart-chip,
1058			#et-navigation > #et-menu > .cmz-paddle-cart-item > .cmz-paddle-cart-dropdown {
1059				transform: none;
1060			}
1061		}
1062
1063		/*
1064		 * HOVER BRIDGE. The panel hangs 10px below the chip, and that gap belongs to neither
1065		 * element — a pointer crossing it leaves both, which is what makes naive hover menus
1066		 * flicker shut just as you reach for them. Two things stop that here: a close DELAY in
1067		 * the script, and this invisible strip which extends the panel's hover area upward
1068		 * across the gap so the pointer never actually leaves. Belt and braces, because the
1069		 * delay alone still drops the menu if the pointer pauses in the gap.
1070		 *
1071		 * Not applied on touch: there is no hover there, and the panel is static in the stacked
1072		 * menu so an upward strip would overlay the row above it.
1073		 */
1074		@media ( hover: hover ) and ( pointer: fine ) {
1075			#et-navigation > #et-menu > .cmz-paddle-cart-item > .cmz-paddle-cart-dropdown::before {
1076				content: "";
1077				position: absolute;
1078				left: 0;
1079				right: 0;
1080				top: -14px;
1081				height: 14px;
1082			}
1083		}
1084
1085		/* =================================================================================
1086		 * MINI-CART DROPDOWN — rebuilt round 6 (founder: "it's like a 3 year old made it").
1087		 *
1088		 * ROOT CAUSE of the blank rows, measured on the running page, NOT the hypothesis that
1089		 * was offered. It is not dark-mode text colour branching. The dropdown is a descendant
1090		 * of #et-navigation, so Extra's SUBMENU rule captured every element inside it:
1091		 *
1092		 *     #et-navigation li a {
1093		 *         padding: 15px 0;  border-bottom: 1px solid rgba(255,255,255,.1);
1094		 *         font-weight: 600; color: rgba(255,255,255,.6); text-transform: uppercase;
1095		 *     }
1096		 *
1097		 * That rule is written for Extra's own dropdown menus, which are dark. It is ID-scoped,
1098		 * (1,0,2), so the previous `.cmz-paddle-cart-dropdown-row a { color: inherit }` at
1099		 * (0,1,1) never applied — verified live: the row link computed
1100		 * color: rgb(255,255,255) on a rgb(255,255,255) dropdown. White on white. The rows were
1101		 * never empty; they were invisible. The same one rule also produced every other defect
1102		 * the founder listed: the SHOUTING CAPS titles (text-transform), the 78px uneven rows
1103		 * and cramped edges (padding: 15px 0), and phantom dividers (border-bottom).
1104		 *
1105		 * This is the third instance of the same trap class in this file (border, then padding,
1106		 * now the whole dropdown), so it is handled as a class this time: everything inside the
1107		 * dropdown is explicitly reset below at a specificity that beats an ID-scoped rule
1108		 * (#et-navigation + a class + a type = (1,1,1) > (1,0,2)), instead of styling one
1109		 * property at a time and waiting to find out which one the theme owns 
1109next.
1110		 *
1111		 * The × being dark-on-dark in dark mode was the mirror image of the same failure: the
1112		 * button took `color` from a global button rule (measured rgba(0,0,0,.6)) rather than
1113		 * from the component, so it was invisible on the dark surface. Both themes now get
1114		 * explicit tokens; neither is derived from "whatever it inherits".
1115		 *
1116		 * THEMING: the dropdown follows the CONTENT theme (:root[data-theme]), not the nav.
1117		 * The nav is always near-black, but this panel overlays the page and is read as part of
1118		 * the page, so a white sheet over a dark article was the wrong call. Every colour comes
1119		 * from the four tokens below, so a change is one edit and both themes move together.
1120		 * ============================================================================== */
1121		.cmz-paddle-cart-dropdown {
1122			--cmz-mc-surface: #fff;
1123			--cmz-mc-text: #14171a;
1124			--cmz-mc-muted: #5c6570;
1125			--cmz-mc-border: rgba( 0, 0, 0, 0.10 );
1126			/* A SECOND weight of hairline, for the one line that separates SECTIONS rather than
1127			   peers (founder round 7: the totals ran straight into the last cart line with
1128			   nothing between them — measured before the fix, the gap from the last row's box to
1129			   the Subtotal row's box was exactly 0px). Reusing --cmz-mc-border there would have
1130			   drawn a line the eye reads as one more row boundary, which is the opposite of
1131			   "this block is the footer". Exactly DOUBLE the row alpha in both themes, so the
1132			   step is the same size on white and on the dark panel and neither theme gets a
1133			   heavier rule than the other. Deliberately NOT applied to the actions row's own
1134			   border-top: that line stays weak, so the totals and the buttons read as two parts
1135			   of ONE footer rather than as two more sections. */
1136			--cmz-mc-border-strong: rgba( 0, 0, 0, 0.20 );
1137			--cmz-mc-hover: rgba( 0, 0, 0, 0.055 );
1138			/* MEASURED 2026-08-06. This token had ONE value for two jobs across two themes, and
1139			   failed AA in three of the four combinations: as a fill under white text it is
1140			   3.83:1, and as link text on the dark dropdown surface (#232327) it is ~3.1:1.
1141			   Split into fill + ink, per theme, reusing the exact pair the subscription panel
1142			   already uses (light #1e7d60 on white 5.05; dark #5dc49e with #0b1f12 ink 8.08) so
1143			   the two Paddle surfaces finally speak one palette instead of two. */
1144			--cmz-mc-accent: #1e7d60;
1145			--cmz-mc-accent-ink: #ffffff;
1146			--cmz-mc-shadow: 0 12px 32px rgba( 0, 0, 0, 0.18 );
1147			/* Destructive hover for the empty-cart trash. Darkened for white; measures 5.7:1 on
1148			   this surface, so it is legible as text-weight stroke and not just as "a red". */
1149			--cmz-mc-danger: #c0392b;
1150			--cmz-mc-danger-bg: rgba( 192, 57, 43, 0.10 );
1151
1152			position: absolute;
1153			top: 100%;
1154			right: 0;
1155			z-index: 100;
1156			margin-top: 10px;
1157			width: 320px;
1158			max-width: calc( 100vw - 32px );
1159			padding: 0; /* rows own their padding, so dividers can run edge to edge */
1160			border-radius: 12px;
1161			border: 1px solid var( --cmz-mc-border );
1162			background: var( --cmz-mc-surface ) !important;
1163			color: var( --cmz-mc-text ) !important;
1164			box-shadow: var( --cmz-mc-shadow );
1165			overflow: hidden; /* clips anything that tries to escape the rounded corners */
1166			text-align: left;
1167		}
1168		:root[data-theme="dark"] .cmz-paddle-cart-dropdown {
1169			--cmz-mc-surface: #232327;
1170			--cmz-mc-text: #eceae7;
1171			--cmz-mc-muted: #a3a09b;
1172			--cmz-mc-border: rgba( 255, 255, 255, 0.13 );
1173			--cmz-mc-border-strong: rgba( 255, 255, 255, 0.26 ); /* double, as in light */
1174			--cmz-mc-hover: rgba( 255, 255, 255, 0.075 );
1175			--cmz-mc-shadow: 0 12px 32px rgba( 0, 0, 0, 0.5 );
1176			/* See the light block: the accent lifts and takes dark ink on a dark surface, exactly
1177			   as the subscription panel's dark primary does. */
1178			--cmz-mc-accent: #5dc49e;
1179			--cmz-mc-accent-ink: #0b1f12;
1180			/* The light theme's #c0392b measures ~3.0:1 on this dark surface — too dim to read as
1181			   a warning. Lightened instead of reused; ~6.4:1 here. */
1182			--cmz-mc-danger: #ff7a6b;
1183			--cmz-mc-danger-bg: rgba( 255, 122, 107, 0.14 );
1184		}
1185
1186		/* The reset. Scoped at (1,1,1)+ so it outranks #et-navigation's (1,0,2) submenu rule
1187		   and any global button styling, and applied to the element types the theme actually
1188		   claims — anchors, buttons, spans — rather than a blanket *, which would also flatten
1189		   the SVG sizing this component relies on.
1190		 *
1191		 * WHY colour AND font-weight CARRY !important THROUGHOUT THIS COMPONENT.
1192		 * Specificity alone is not enough here and the first version of this rebuild proved it:
1193		 * with the reset in place, the panel was correct in dark mode and STILL white-on-white
1194		 * in light. Auditing every !important declaration that can reach an element inside this
1195		 * panel turned up three more owners beyond Extra's stylesheet, none of them Extra's:
1196		 *     #et-navigation li a   { color: white !important }      (site inline CSS)
1197		 *     .menu-item a          { font-weight: 590 !important }  (site inline CSS)
1198		 *     :root[data-theme=dark] a:not(…) { color: var(--cmz-link) !important }  (dark-mode.css)
1199		 * An !important declaration outranks any non-important rule no matter how specific, so
1200		 * the only way this component owns its own text is to declare colour and weight
1201		 * !important as well. Treated as a CLASS: every colour and weight in the mini-cart does
1202		 * this, not just the one that was caught failing, because the next site-wide rule to
1203		 * appear will land on whichever one was left unarmoured. */
1204		#et-navigation .cmz-paddle-cart-dropdown a,
1205		#et-navigation .cmz-paddle-cart-dropdown button,
1206		#et-navigation .cmz-paddle-cart-dropdown span,
1207		#et-navigation .cmz-paddle-cart-dropdown div {
1208			margin: 0;
1209			border: 0;
1210			border-radius: 0;
1211			background: none;
1212			box-shadow: none;
1213			text-transform: none !important;
1214			letter-spacing: normal !important;
1215			text-decoration: none !important;
1216			font-family: inherit;
1217			color: inherit !important;
1218			text-align: left;
1219			/* Extra's submenu rule sets `padding: 15px 0` on every anchor in here; each element
1220			   below re-declares its own padding, so zeroing it here is the clean starting point
1221			   rather than fighting per-property. */
1222			padding: 0;
1223			min-width: 0; /* flex children must be allowed to shrink — see the title clamp */
1224		}
1225
1226		/* Panel header: says whose panel this is and how full it is, so the first row is not
1227		   the first thing the eye lands on with no context. */
1228		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-head {
1229			display: flex;
1230			align-items: baseline;
1231			justify-content: space-between;
1232			gap: 8px;
1233			padding: 12px 14px 10px;
1234			border-bottom: 1px solid var( --cmz-mc-border );
1235			font-size: 12px;
1236			line-height: 1.2;
1237			font-weight: 600 !important;
1238			color: var( --cmz-mc-muted ) !important;
1239		}
1240		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-count {
1241			font-weight: 500 !important;
1242			font-size: 12px;
1243			color: var( --cmz-mc-muted ) !important;
1244		}
1245
1246		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-list {
1247			max-height: 320px; /* ~4 rows, then scroll: the panel never grows off-screen */
1248			overflow-y: auto;
1249			overflow-x: hidden;
1250		}
1251
1252		/* Named cmz-paddle-cart-DROPDOWN-row, deliberately distinct from the fallback cart
1253		   page's .cmz-paddle-cart-row (that page's own remove-button click handler does
1254		   .closest('.cmz-paddle-cart-row') — sharing the name would make it ambiguous which
1255		   structure a click belonged to on a page where both exist, i.e. any page, since the
1256		   nav is site-wide). */
1257		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-row {
1258			display: flex;
1259			align-items: center;
1260			gap: 10px;
1261			padding: 10px 12px 10px 14px;
1262			border-bottom: 1px solid var( --cmz-mc-border );
1263		}
1264		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-row:last-child {
1265			border-bottom: 0; /* the list's own edge is the divider; no dangling rule */
1266		}
1267		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-row:hover {
1268			background: var( --cmz-mc-hover );
1269		}
1270		/* Course artwork on each row (founder, Dometrain reference). 16:9 to match the card
1271		   thumbnail the buyer just clicked, small enough to identify the course without
1272		   turning the panel into a gallery. Decorative: the title beside it is the accessible
1273		   name, so the img carries an empty alt. */
1274		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-thumb {
1275			flex: 0 0 auto;
1276			width: 48px;
1277			height: 27px;
1278			border-radius: 4px;
1279			object-fit: cover;
1280			background: var( --cmz-mc-hover );
1281		}
1282		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-row a {
1283			flex: 1 1 auto;
1284			min-width: 0;
1285			font-size: 13.5px;
1286			line-height: 1.35;
1287			font-weight: 500 !important;
1288			color: var( --cmz-mc-text ) !important;
1289			/*
1290			 * The founder's stray lone "t" at the panel edge, reproduced and fixed rather than
1291			 * styled around. Extra's cascade leaves `word-break: break-word` in force, which
1292			 * permits breaking INSIDE a word; in a flex row whose title had no min-width:0 and
1293			 * no clamp, a narrow render shattered titles mid-word. Measured, at a 160px row:
1294			 *     "Blazor WebAssembly Full-Stack Development"
1295			 *      → "Blazor" / "WebAssembl" / "y Full-Stack" / "Developmen" / "t"
1296			 * — a lone "t" on its own line at the row's edge, exactly the fragment reported.
1297			 * `word-break: normal` forbids mid-word breaks; the 2-line clamp plus ellipsis then
1298			 * bounds the row height instead of letting a long title dictate it.
1299			 */
1300			word-break: normal;
1301			overflow-wrap: break-word;
1302			display: -webkit-box;
1303			-webkit-line-clamp: 2;
1304			-webkit-box-orient: vertical;
1305			overflow: hidden;
1306		}
1307		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-row a:hover {
1308			color: var( --cmz-mc-accent ) !important;
1309		}
1310
1311		/* Remove control. A real 28px target with a drawn glyph, not a text "×" — a text glyph
1312		   inherits font-family/size/transform from whatever wins the cascade (which is how it
1313		   ended up mis-sized and off-centre), while an SVG stroke cannot be restyled by a font
1314		   rule and centres exactly. */
1315		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-row-remove {
1316			flex: 0 0 auto;
1317			display: inline-flex;
1318			align-items: center;
1319			justify-content: center;
1320			width: 28px;
1321			height: 28px;
1322			border-radius: 8px;
1323			background: transparent;
1324			color: var( --cmz-mc-muted ) !important;
1325			cursor: pointer;
1326			transition: background-color 120ms ease, color 120ms ease;
1327		}
1328		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-row-remove:hover,
1329		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-row-remove:focus-visible {
1330			background: var( --cmz-mc-hover );
1331			color: var( --cmz-mc-text ) !important;
1332		}
1333		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-row-remove:disabled {
1334			opacity: 0.4;
1335			cursor: default;
1336		}
1337
1338		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-empty {
1339			padding: 22px 14px;
1340			font-size: 13px;
1341			line-height: 1.4;
1342			text-align: center;
1343			color: var( --cmz-mc-muted ) !important;
1344		}
1345
1346		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-actions {
1347			display: flex;
1348			align-items: center;
1349			justify-content: space-between;
1350			gap: 10px;
1351			padding: 11px 12px 12px;
1352			border-top: 1px solid var( --cmz-mc-border );
1353		}
1354		/*
1355		 * Empty cart — a trash-can ICON, not a label (founder: "people will get that better").
1356		 * It stays the quiet secondary beside the filled green primary, so hierarchy is now
1357		 * carried entirely by weight of colour and mass: a bare muted glyph on the left, a solid
1358		 * brand-green button on the right. Nothing here is on a type scale any more, which also
1359		 * ends the wrapping problem the labelled version had for good.
1360		 *
1361		 * Destructive affordance: neutral at rest (it must not shout on a panel the buyer is
1362		 * only browsing), shifting to danger red on hover/focus — the conventional signal, and
1363		 * the only place red appears in this component, so it reads as a warning rather than
1364		 * decoration. Both themes get their own red: the light one is darkened for contrast on
1365		 * white, the dark one lightened, because a single red cannot be legible on both.
1366		 *
1367		 * The button keeps a real accessible name (aria-label) plus a title tooltip for mouse
1368		 * users, since the glyph alone carries no text for a screen reader to announce.
1369		 */
1370		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-empty-link {
1371			flex: 0 0 auto;
1372			display: inline-flex;
1373			align-items: center;
1374			justify-content: center;
1375			width: 32px;
1376			height: 32px;
1377			padding: 0;
1378			border-radius: 8px;
1379			line-height: 1;
1380			color: var( --cmz-mc-muted ) !important;
1381			cursor: pointer;
1382			transition: background-color 120ms ease, color 120ms ease;
1383		}
1384		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-empty-link:hover,
1385		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-empty-link:focus-visible {
1386			background: var( --cmz-mc-danger-bg );
1387			color: var( --cmz-mc-danger ) !important;
1388		}
1389		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-empty-link:disabled {
1390			opacity: 0.5;
1391			cursor: default;
1392		}
1393		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-empty-link:disabled:hover {
1394			background: transparent;
1395			color: var( --cmz-mc-muted ) !important;
1396		}
1397		/* Repeated class lifts this over Tutor's own .tutor-btn-primary declarations without
1398		   reaching for !important on every line (same technique already used by the Add to Cart
1399		   rule above, and documented in the cache-safe-theming playbook). */
1400		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-checkout.cmz-paddle-cart-dropdown-checkout {
1401			/* Grows to fill everything the trash does not (Dometrain's full-width checkout,
1402			   adapted: we keep the destructive action on the row, so "as wide as it can be"
1403			   is the honest port of "full width"). */
1404			flex: 1 1 auto;
1405			display: inline-flex;
1406			align-items: center;
1407			justify-content: center;
1408			gap: 6px;
1409			padding: 9px 14px;
1410			border-radius: 7px;
1411			background: var( --cmz-mc-accent ) !important;
1412			color: var( --cmz-mc-accent-ink, #fff ) !important;
1413			font-size: 13px;
1414			font-weight: 600 !important;
1415			line-height: 1;
1416			white-space: nowrap;
1417			cursor: pointer;
1418			transition: filter 120ms ease;
1419		}
1420		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-checkout.cmz-paddle-cart-dropdown-checkout:hover {
1421			filter: brightness( 1.08 );
1422		}
1423		#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-checkout .cmz-paddle-mc-arrow {
1424			font-size: 14px;
1425			line-height: 1;
1426		}
1427
1428		/*
1429		 * Touch sizing for the stacked menu. This block MUST come after the component's base
1430		 * rules, not up with the other mobile rules earlier in this stylesheet: its selectors
1431		 * carry the same specificity as the base ones they override, so ordering is the whole
1432		 * tie-break. Placing it earlier is exactly why the first attempt measured a 28px remove
1433		 * button on a 375px viewport instead of the 36px it declared — a media query does not
1434		 * add specificity, and this file is served as one stylesheet.
1435		 *
1436		 * Targets: Apple and Material both floor a touch target at ~44px. The rows reach that
1437		 * through padding, and the remove control is squared up to 36px rather than staying a
1438		 * 28px mouse-sized hit area next to a link the thumb is trying to avoid.
1439		 */
1440		@media only screen and ( max-width: 1024px ) {
1441			/* In the stacked menu the panel is not an overlay — it is a section of the menu, so
1442			   it drops the float and the shadow and runs the full width of the row. Tokens are
1443			   unchanged, so light and dark behave exactly as they do on desktop. */
1444			#et-navigation .cmz-paddle-cart-dropdown {
1445				position: static;
1446				flex: 0 0 100%;
1447				width: 100%;
1448				max-width: none;
1449				box-shadow: none;
1450				margin-top: 6px;
1451			}
1452			#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-row {
1453				padding: 12px 10px 12px 14px;
1454				gap: 12px;
1455			}
1456			#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-row a {
1457				font-size: 14px;
1458			}
1459			#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-row-remove {
1460				width: 36px;
1461				height: 36px;
1462			}
1463			#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-checkout.cmz-paddle-cart-dropdown-checkout {
1464				padding: 11px 14px;
1465				font-size: 13.5px;
1466			}
1467			/* The trash glyph stays 16px — it is an icon, not a target. The BUTTON grows to the
1468			   44px both Apple and Material floor a touch target at, so the hit area is thumb-safe
1469			   without the icon itself becoming a billboard for a secondary action. */
1470			#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-empty-link {
1471				width: 44px;
1472				height: 44px;
1473			}
1474			#et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-list {
1475				max-height: none; /* the page already scrolls; no nested scroller on touch */
1476			}
1477		}
1478	</style>
1479		<style id="cmz-account-signin-css">
1480		#et-navigation li a.cmz-account-signin {
1481			display: inline-flex !important;
1482			align-items: center;
1483			padding: 6px 14px !important;
1484			border: 1px solid rgba( 255, 255, 255, 0.35 ) !important;
1485			border-radius: 6px !important;
1486			background: rgba( 255, 255, 255, 0.10 ) !important;
1487			color: #fff !important;
1488			font-size: 13px;
1489			line-height: 1.2;
1490			font-weight: 600 !important;
1491			letter-spacing: 0.01em !important;
1492			text-transform: none !important; /* calm — Extra would shout SIGN IN */
1493			text-decoration: none !important;
1494			box-shadow: none !important;
1495			cursor: pointer;
1496			transition: background-color 120ms ease, border-color 120ms ease;
1497		}
1498		#et-navigation li a.cmz-account-signin:hover,
1499		#et-navigation li a.cmz-account-signin:focus,
1500		#et-navigation li a.cmz-account-signin:focus-visible,
1501		#et-navigation li a.cmz-account-signin:active,
1502		#et-navigation li a.cmz-account-signin:visited {
1503			text-decoration: none !important;
1504			box-shadow: none !important;
1505			color: #fff !important;
1506			border-color: rgba( 255, 255, 255, 0.35 ) !important;
1507		}
1508		#et-navigation li a.cmz-account-signin:hover,
1509		#et-navigation li a.cmz-account-signin:focus-visible {
1510			background: rgba( 255, 255, 255, 0.18 ) !important;
1511			border-color: rgba( 255, 255, 255, 0.55 ) !important;
1512		}
1513		#et-navigation li a.cmz-account-signin:focus-visible {
1514			outline: 2px solid #ffb912 !important;
1515			outline-offset: 2px;
1516		}
1517		/* Extra's animated 2px hover bar at (1,1,4). */
1518		#et-navigation > ul > li.cmz-account-item > a::before,
1519		#et-navigation > ul > li.cmz-account-item > a::after {
1520			content: none !important;
1521			display: none !important;
1522		}
1523		/* Desktop optical lift (~30px chip in the 16px-band-over-reserve anchor geometry);
1524		   #et-menu-scoped so the stacked clone never inherits it. */
1525		@media only screen and ( min-width: 1025px ) {
1526			#et-navigation > #et-menu > .cmz-account-item > a.cmz-account-signin {
1527				transform: translateY( -7px );
1528			}
1529		}
1530		/* Stacked mobile menu: compact chip on the list's left spine, row rhythm on the li. */
1531		@media only screen and ( max-width: 1024px ) {
1532			#et-navigation .cmz-account-item-signed-out {
1533				padding: 8px 0 !important;
1534			}
1535		}
1536		@media ( prefers-reduced-motion: reduce ) {
1537			#et-navigation li a.cmz-account-signin {
1538				transition: none;
1539			}
1540		}
1541	</style>
1542	<style class="wp-fonts-local">
1543@font-face{font-family:Inter;font-style:normal;font-weight:300 900;font-display:fallback;src:url('https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/fonts/Inter-VariableFont_slnt,wght.woff2') format('woff2');font-stretch:normal;}
1544@font-face{font-family:Cardo;font-style:normal;font-weight:400;font-display:fallback;src:url('https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/fonts/cardo_normal_400.woff2') format('woff2');}
1545</style>
1546<link rel="icon" href="https://courses.code-maze.com/wp-content/uploads/2020/01/Code-Maze-Favicon.png" sizes="32x32" />
1547<link rel="icon" href="https://courses.code-maze.com/wp-content/uploads/2020/01/Code-Maze-Favicon.png" sizes="192x192" />
1548<link rel="apple-touch-icon" href="https://courses.code-maze.com/wp-content/uploads/2020/01/Code-Maze-Favicon.png" />
1549<meta name="msapplication-TileImage" content="https://courses.code-maze.com/wp-content/uploads/2020/01/Code-Maze-Favicon.png" />
1550	<style id="cmz-hide-cart">
1551		.et-cart-info,
1552		#et-secondary-nav .et-cart-info,
1553		li.et-cart-info,
1554		.et_pb_menu_cart_line,
1555		.et-menu-cart { display: none !important; }
1556	</style>
1557	<style id="et-extra-customizer-global-cached-inline-styles">.widget_et_recent_tweets .widget_list a,.widget_et_recent_tweets .et-extra-icon,.widget_et_recent_tweets .widget-footer .et-extra-social-icon,.widget_et_recent_tweets .widget-footer .et-extra-social-icon::before,.project-details .project-details-title,.et_filterable_portfolio .filterable_portfolio_filter a.current,.et_extra_layout .et_pb_extra_column_main .et_pb_column .module-head h1,.et_pb_extra_column .module-head h1,#portfolio_filter a.current,.woocommerce div.product div.summary .product_meta a,.woocommerce-page div.product div.summary .product_meta a,.et_pb_widget.woocommerce .product_list_widget li .amount,.et_pb_widget li a:hover,.et_pb_widget.woocommerce .product_list_widget li a:hover,.et_pb_widget.widget_et_recent_videos .widget_list .title:hover,.et_pb_widget.widget_et_recent_videos .widget_list .title.active,.woocommerce .woocommerce-info:before,.woocommerce .summary .price .amount,.woocommerce-page .summary .price .amount,.et_pb_widget.woocommerce.widget_shopping_cart .widget_shopping_cart_content .total .amount,.woocommerce .star-rating span:before,.woocommerce ul.products li.product a .price ins .amount,.woocommerce-page ul.products li.product a .price ins .amount,.woocommerce ul.products li.product a .price .amount,.woocommerce-page ul.products li.product a .price .amount,.woocommerce ul.products li.product a .amount,.woocommerce-page ul.products li.product a .amount,widget.woocommerce.widget_shopping_cart .widget_shopping_cart_content .product_list_widget li a.remove,.woocommerce ul.products li.product a .price ins,.woocommerce-page ul.products li.product a .price ins,.et_pb_widget.woocommerce.widget_price_filter .price_slider_wrapper .price_slider_amount .price_label .to,.et_pb_widget.woocommerce.widget_price_filter .price_slider_wrapper .price_slider_amount .price_label .from{color:#3e5062}.single .score-bar,.widget_et_recent_reviews .review-breakdowns .score-bar,.et_pb_extra_module .posts-list article .post-thumbnail,.et_extra_other_module .posts-list article .post-thumbnail,.et_pb_widget .widget_list_portrait,.et_pb_widget .widget_list_thumbnail,.quote-format,.link-format,.audio-format .audio-wrapper,.paginated .pagination li.active,.score-bar,.review-summary-score-box,.post-footer .rating-stars #rating-stars img.star-on,.post-footer .rating-stars #rated-stars img.star-on,.author-box-module .author-box-avatar,.timeline-menu li.active a:before,.woocommerce div.product form.cart .button,.woocommerce div.product form.cart .button.disabled,.woocommerce div.product form.cart .button.disabled:hover,.woocommerce-page div.product form.cart .button,.woocommerce-page div.product form.cart .button.disabled,.woocommerce-page div.product form.cart .button.disabled:hover,.woocommerce div.product form.cart .read-more-button,.woocommerce-page div.product form.cart .read-more-button,.woocommerce div.product form.cart .post-nav .nav-links .button,.woocommerce-page div.product form.cart .post-nav .nav-links .button,.woocommerce .woocommerce-message,.woocommerce-page .woocommerce-message,.woocommerce button.button.alt,.woocommerce .et_pb_widget .buttons .button,.woocommerce .et_pb_widget .buttons .button:hover,.woocommerce .et_pb_widget .buttons .button:after,.woocommerce input[type="submit"],.woocommerce #respond #submit,.woocommerce .button.alt,.et_pb_widget.woocommerce.widget_shopping_cart .widget_shopping_cart_content .product_list_widget li a.remove:hover,.et_pb_widget.woocommerce.widget_price_filter .price_slider_wrapper .price_slider .ui-slider-range{background-color:#3e5062}
1557#et-menu>li>ul,#et-menu li>ul,#et-menu>li>ul>li>ul,.et-top-search-primary-menu-item .et-top-search,.et_pb_module,.module,.page article,.authors-page .page,#timeline-sticky-header,.et_extra_other_module,.woocommerce .woocommerce-info,.woocommerce div.product .woocommerce-tabs ul.tabs li.active a{border-color:#3e5062}body{font-size:15px}a,a:visited,.post-content a,.et_pb_pagebuilder_layout .et_pb_blurb_container p a,.et_pb_pagebuilder_layout .et_pb_code a,.et_pb_pagebuilder_layout .et_pb_promo_description a,.et_pb_pagebuilder_layout .et_pb_newsletter_description a,.et_pb_pagebuilder_layout .et_pb_team_member_description>a,.et_pb_pagebuilder_layout .et_pb_pricing li a,.et_pb_pagebuilder_layout .et_pb_slide_content a,.et_pb_pagebuilder_layout .et_pb_tab a,.et_pb_pagebuilder_layout .et_pb_text a,.et_pb_pagebuilder_layout .et_pb_toggle_content a,.et_pb_pagebuilder_layout .et_pb_fullwidth_code a{color:rgba(0,3,219,0.97)}body{color:#000000}h1,h2,h3,h4,h5,h6,h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:rgba(0,0,0,0.89)}.archive h1,.search h1{color:rgba(0,0,0,0.89)}#et-info .et-cart,#et-info .et-cart:before,#et-info .et-top-search .et-search-field,#et-info .et-top-search .et-search-submit:before{font-size:11.000000px}#et-info .et-extra-social-icons .et-extra-icon{font-size:14.000000px;line-height:27.500000px;width:27.500000px;height:27.500000px}#et-info .et-cart{padding:8.000000px 9.166667px}#et-info .et-top-search .et-search-field{padding:6.000000px 9.166667px}#et-info .et-top-search .et-search-field{width:110.000000px}#et-info .et-top-search .et-search-submit:before{margin-top:-5.500000px}@media only screen and (min-width:768px){#main-header .logo{height:51.92px;margin:18.04px 0}.header.left-right #et-navigation>ul>li>a{padding-bottom:36px}}@media only screen and (min-width:768px){.et-fixed-header #main-header .logo{height:30.16px;margin:36.92px 0}.et-fixed-header .header.left-right #et-navigation>ul>li>a{padding-bottom:44px}}.nav li ul{padding:10px 0}.tutor-container ul li{font-size:17px}#et-navigation li li{line-height:20px!important}.with_sidebar .et_extra_layout .et_pb_extra_column_main .et_pb_column_main,.with_sidebar .et_pb_extra_column_main{width:100%!important;max-width:100%!important;min-width:100%!important}article .post-header h1{font-size:35px}.post-content h2{font-size:30px}.post-content h2.entry-title{font-size:18px}.type-page h1.entry-title{font-size:35px}#wpd-bubble-wrapper{bottom:95px}.page-container{background-color:white!important}.tutor-wrap{margin-top:20px;background-color:white}#et-navigation li li{line-height:4px}body:not(.logged-in) #menu-item-85575{display:none}body:not(.logged-in) #menu-item-73074{display:none}.single-lesson header{display:none}.single-lesson footer{display:none}.single-tutor_quiz header{display:none}.single-tutor_quiz footer{display:none}.single-tutor_assignments header{display:none}.single-tutor_assignments footer{display:none}.tutor-quiz-single-entry-wrap{background:white}.tutor-accordion-item-header.is-active{background:var(--tutor-color-primary);color:white!important}.tutor-accordion-item-header.is-active::after{color:white!important}.tutor-accordion-item-header.is-active .tooltip-wrap.tooltip-icon{color:white}.tutor-accordion-item-header.is-active .tutor-course-topic-summary{color:white}.tutor-course-content-list-item-title a:visited{color:#8f9796}.tutor-btn-primary{text-transform:uppercase;font-weight:600;color:white}.tutor-btn-primary:visited{color:white}.tutor-btn-secondary{color:white;background-color:rgb(35 147 113)}.tutor-btn-secondary:visited{color:white}.tutor-card-footer .tutor-btn-outline-primary:visited{color:black}.tutor-card-footer .tutor-btn-outline-primary:hover{color:white}@media(min-width:768px){.tutor-course-details-widget-col-2 ul>li{width:calc(80% - 1.2rem)!important}}@media(min-width:1200px){.tutor-course-spotlight-wrapper .tutor-col-xl-8{flex:0 0 auto;width:80%}}.tutor-container h2{font-size:30px}.tutor-container p{font-size:17px}.enlighter-t-monokai .enlighter span{font-size:1.4em}.enlighter-default{padding-bottom:4px;padding-top:4px}.tutor-course-sidebar-card-pricing .woocommerce-Price-amount{font-size:35px}.plyr__poster{background-size:cover}button.plyr__control{background:rgb(255 255 255 / 40%)}#tutor-quiz-single-multiple-choice .tutor-form-check-input{display:block}.woocommerce-form-coupon-toggle{display:none}.tutor-card-footer{display:none}.tutor-card a{color:var(--tutor-color-primary)}.tutor-card a:visited{color:var(--tutor-color-primary)}.tutor-card .tutor-btn-primary{color:white}.tutor-card .tutor-btn-primary:visited{color:white}.tutor-card h3{font-weight:bold}.course-archive-page{margin-bottom:80px}.tutor-mt-auto{margin-top:0px}.tutor-meta:has(.tutor-icon-clock-line){display:none}.tutor-container a{color:#239371}.tutor-course-topic-single-footer{position:fixed;bottom:0px;width:-moz-available;width:-webkit-fill-available;width:fill-available}.tutor-accordion-item-body input[type='checkbox']{display:inherit}.tutor-course-single-content-wrapper input.tutor-form-check-input.tutor-form-check-circle{height:25px;margin-top:-1px;border:1px solid var(--tutor-border-color)}.tutor-course-single-sidebar-wrapper .tutor-course-topic-item .tutor-form-check-circle[checked]{border-color:#239371;background-color:#239371}
1557.tutor-instructor .profile-name :nth-child(4){display:none}.tutor-instructor .profile-name :nth-child(5){display:none}.tutor-course-topic-single-footer.tutor-px-32.tutor-py-12{padding-top:5px;padding-bottom:5px}button.tutor-btn{display:inline-flex;align-items:center;font-weight:400;line-height:1.4;color:var(--tutor-color-primary);text-align:center;text-decoration:none;vertical-align:middle;user-select:none;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);padding:8px 16px;font-size:16px;border-radius:6px;box-sizing:border-box;cursor:pointer;transition:color 200ms ease-in-out,background-color 200ms ease-in-out,border-color 200ms ease-in-out}button.start-quiz-btn{display:inline-flex;align-items:center;font-weight:400;line-height:1.4;color:var(--tutor-color-primary);text-align:center;text-decoration:none;vertical-align:middle;user-select:none;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);padding:8px 16px;font-size:16px;border-radius:6px;box-sizing:border-box;cursor:pointer;transition:color 200ms ease-in-out,background-color 200ms ease-in-out,border-color 200ms ease-in-out}button.tutor-btn-primary{text-transform:uppercase;font-weight:600;color:white;border-color:var(--tutor-color-primary);background-color:var(--tutor-color-primary);color:#fff}button.tutor-btn-ghost{padding:0px!important;position:relative;color:#757c8e;border-radius:0;outline:0}button.tutor-btn-ghost.tutor-has-underline{position:relative}button.tutor-btn-ghost.tutor-has-underline:after{content:" ";position:absolute;bottom:0px;left:0;width:100%;height:1px;background-color:#757c8e;transition:background-color 200ms ease-in-out}button.tutor-btn-ghost:hover,.tutor-btn-ghost:focus,.tutor-btn-ghost:active{color:var(--tutor-color-primary);outline:0;box-shadow:none}button.tutor-btn-ghost:hover.tutor-has-underline:after,.tutor-btn-ghost:focus.tutor-has-underline:after,.tutor-btn-ghost:active.tutor-has-underline:after{background-color:var(--tutor-color-primary)}.tutor-wrap .tutor-color-black{color:#212327}.single-course-bundle .tutor-fs-7 .woocommerce-Price-amount{text-decoration:line-through}.home-page-content article{border-radius:0px!important;box-shadow:none!important}.et_pb_code_inner .wrapper{min-height:50px}.et_pb_code_inner .wrapper-title span.bold{font-weight:bold}.et_pb_code_inner .wrapper-title h2{font-size:17px!important}.et_pb_row{max-width:1480px}.et_pb_image img{box-shadow:#e0e0e0 2px 2px 0px 1px}.home-page-content .post-content p{display:none}.home-page-content .entry-title{width:64%;font-size:17px;padding-left:5px}.home-page-content .post-content a{position:absolute;top:5px;right:0px;padding:5px 20px;background:#405061;color:white}@media(max-width:800px){.home-page-content .post-content a{top:-10px!important}}.home-page-content article{border-top-width:0px;background:transparent;border-bottom:1px solid;min-height:50px}.home-page-content a{font-weight:300;color:#3E5062}.wrapper{display:flex;border-bottom:1px solid}.wrapper-title{flex:2;padding-right:10px}.wrapper-title h2{font-size:20px}@media (max-width:1200px) and (min-width:982px){.wrapper-title{flex:1}}.wrapper-title a{font-weight:300;color:#3E5062!important}.read-more-wrapper{flex:1}.read-more-wrapper a{position:absolute;top:5px;right:0px;padding:5px 19px;background:#405061;color:white!important;text-transform:uppercase;font-size:13px;width:116px;text-align:center;box-shadow:#e0e0e0 2px 2px 0px 1px;min-height:35px}.read-more-wrapper a.series{background:#D4A753}.tablet-row .et_pb_column{width:45%!important;float:left;margin-right:50px}.advads-widget{}.advads-widget h4{display:none}.et_extra_layout .et_pb_column_sidebar,.et_pb_extra_column_sidebar{width:310px!important;max-width:310px!important;min-width:310px!important;display:table}@media (min-width:1025px){.et_pb_extra_column_sidebar{display:table!important;position:relative}}.fixed-sidebar{position:fixed}.relative-sidebar{position:relative}.et_pb_widget{}p+ul{margin-top:-25px}p:last-of-type+ul{margin-top:0px}#mc4wp_form_widget-2{border-top:6px solid #3e5062;border-radius:3px}#mc4wp_form_widget-2 h4{display:none}#mc4wp-form-1{width:300px}h1,h2,h3,h4,h5,h6{text-transform:initial}code{background:rgba(0,0,0,.05);padding:3px 4px;font-family:Menlo,Monaco,"Courier New",Courier,monospace;color:rgb(41 137 112)}.crayon-theme-visualstudiodark{margin-bottom:15px}.read-more-button{color:rgba(0,0,0,.8)!important}ol li,ul li{margin-bottom:0.6em;margin-left:40px}ul ul{margin-bottom:-10px;margin-left:-30px}article h2{font-size:25px}sup{vertical-align:super;font-size:smaller}sub{vertical-align:sub;font-size:smaller}.top_ad_placement{text-align:center;margin-bottom:15px}p:last-of-type{margin-bottom:24px}.fixed-max-width{max-width:360px}.cat-item{color:burlywood}.et_pb_main_blurb_image img{max-width:180px!important}@media (max-width:980px){#profile-blurb{width:100%!important;margin-bottom:100px}}@media(max-width:768px){.mobile_friendly_ad{display:none}}.wrap-collabsible{margin-bottom:15px}.lbl-toggle{display:block;font-weight:bold;font-family:monospace;font-size:1.2rem;text-transform:uppercase;padding:12px;padding-left:16px;color:#3e5062;background:#e8e8e8;cursor:pointer;border-radius:5px;transition:all 0.25s ease-out;border-top:5px solid #3e5062}.lbl-toggle:hover{color:#417ab3}.lbl-toggle::before{content:' ';display:inline-block;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid currentColor;vertical-align:middle;margin-right:.7rem;transform:translateY(-2px);transition:transform .2s ease-out}.toggle:checked+.lbl-toggle::before{transform:rotate(90deg) translateX(-3px)}.collapsible-content{max-height:0px;overflow:hidden;transition:max-height .25s ease-in-out}.toggle:checked+.lbl-toggle+.collapsible-content{max-height:450px}.toggle:checked+.lbl-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.collapsible-content .content-inner{background:#fbfbfb;border-bottom-left-radius:7px;border-bottom-right-radius:7px;padding:.5rem 1rem}.innerContent{margin-bottom:10px;margin-top:10px}.innerContent li a{color:#417ab3;font-weight:600}.innerContent li a:visited{color:#417ab3;font-weight:600}.innerContent li{font-weight:600;color:darkgoldenrod}#et-mobile-navigation nav{z-index:2}.et_pb_extra_column_sidebar .et_pb_widget{background:none;overflow:visible;width:300px;box-shadow:none}.et_pb_extra_column_sidebar{top:0;position:sticky;height:auto}.page-template .et_pb_image img{box-shadow:none!important}.page-id-50422 .et_pb_row_11,.page-id-50422 .et_pb_row_13,.page-id-50422 .et_pb_row_15,.page-id-50422 .et_pb_row_17,.page-id-50422 .et_pb_row_19{position:relative;width:80%;max-width:1080px;margin:auto}.post-content a.more-link{color:#fff!important;border-width:0!important;border-radius:3px;font-family:'Montserrat',Helvetica,Arial,Lucida,sans-serif!important;background-color:#FB275D;padding:10px}li#menu-item-51162 a{color:#ffc67d}.latest_posts_page a.more-link{width:120px!important;float:right;text-align:center;margin-bottom:2px}.et_pb_posts .et_pb_post{position:relative;border-bottom:2px solid #fb275d;border-radius:0px}.cdmz-emai-optin .et_pb_signup_custom_field_0{display:none!important}#tve_leads_end_content{border:0px!important}#main-header{background:#000000e8!important}#top-header{background:#333333!important}.menu-item a{font-weight:590!important}#et-navigation .menu-item-1757 a{color:rgb(255,198,125)!important}#et-navigation .menu-item-1757 a::before{background:rgb(255,198,125)!important}#et-navigation li a{color:white!important}.page-id-50422 header{display:none}.page-id-52634 header{display:none}.page-id-52634{background-color:white}.page-id-60192 header{display:none}.page-id-60192 footer{display:none}.page-id-50193 header{display:none}.page-id-50193 footer{display:none}.page-id-60022 header{display:none}.page-id-60022 footer{display:none}article.post a{color:#DC2323;text-decoration:none;font-weight:bold;transition:0.5s}article.page a{color:#DC2323;text-decoration:none;font-weight:bold;transition:0.5s}article.post a:hover{color:#333333;text-decoration:underline;transition:0.5s}.enlighter-default{font-family:consolas,monospace}code{padding:2px 4px;border:1px solid lightgray;border-radius:3px;font-weight:400;font-family:consolas,monospace;background:rgb(0 0 0 / 4%)}p+ol{margin-top:-25px}.enlighter-t-monokai.enlighter-v-codegroup .enlighter-codegroup-switch{padding:0px!important}.banner-wrapper{padding-bottom:1px;border-bottom:2px solid #fb275d;font-size:15px;width:70%;margin:15px auto}.banner-wrapper-blazor{border-color:#ffbc00}.banner-wrapper-blazor strong a{color:blueviolet}.image-row{margin-bottom:10px!important}.banner-image{margin-top:10px}.banner-text{margin-bottom:10px!important;text-align:center}.post-thumbnail.header{display:none}.post-header{padding-bottom:0px}.et_pb_widget.widget_text .textwidget{padding:0}.et_pb_widget .widgettitle{display:none}.mc4wp-form-theme{margin:0}#frmCSCF .input-xlarge{width:-webkit-fill-available}#frmCSCF #cscf_SubmitButton{margin-top:10px}@media only screen and (min-width:1200px){.tutor-course-single-content-wrapper{display:flex}.tutor-course-single-sidebar-wrapper{overflow-y:auto;min-height:0;max-height:100vh;
1557top:0;position:sticky}}.post-85544 .page article{border:none!important}.page article{border-top:0px solid!important;border-color:#00A8FF!important;margin:0 0 0!important;box-shadow:none}.page-id-85544 .entry-content{max-width:none!important;width:100%!important;padding:0!important}.page-id-85544 .post-wrap{max-width:none!important;width:100%!important;padding:0!important}.page-id-85544 h1{display:none}.tutor-course-details-content h2{display:none}.tutor-course-details-title{font-size:2rem}.cursor{display:inline-block;width:8px;height:1em;background:#ffb912;margin-left:4px;vertical-align:-2px;animation:blink 1.1s step-end infinite}@keyframes blink{50%{opacity:0}}.et-top-cart-total{display:none}.tutor-quiz-questions-pagination ul li a{padding:7px 3px}.tutor-lesson-wrapper{--v2-anti-border:#b85450;--v2-anti-bg:#fdf3f2;--v2-anti-head:#8c2f2b;--v2-note-border:#94a3b8;--v2-note-bg:#f5f7fa;--v2-prompt-border:#d79b00;--v2-prompt-bg:#fffaf0;--v2-sol-border:#1b7f4b;--v2-sol-bg:#f2faf5;--v2-text:inherit}:root[data-theme="dark"] .tutor-lesson-wrapper{--v2-anti-bg:rgba(184,84,80,0.14);--v2-anti-head:#f0a9a5;--v2-note-bg:rgba(148,163,184,0.12);--v2-prompt-bg:rgba(215,155,0,0.12);--v2-sol-bg:rgba(27,127,75,0.14)}.tutor-lesson-wrapper .antipattern,.tutor-lesson-wrapper .readnote,.tutor-lesson-wrapper .prompt,.tutor-lesson-wrapper .solution{margin:1.6em 0;padding:1em 1.2em;border-left:4px solid transparent;border-radius:4px;line-height:1.65}.tutor-lesson-wrapper .antipattern{border-left-color:var(--v2-anti-border);background:var(--v2-anti-bg)}.tutor-lesson-wrapper blockquote.antipattern{font-style:normal;quotes:none}.tutor-lesson-wrapper .antipattern>p:first-child,.tutor-lesson-wrapper .readnote>p:first-child,.tutor-lesson-wrapper .prompt>p:first-child,.tutor-lesson-wrapper .solution>p:first-child{margin-top:0}.tutor-lesson-wrapper .antipattern>p:last-child,.tutor-lesson-wrapper .readnote>p:last-child,.tutor-lesson-wrapper .prompt>p:last-child,.tutor-lesson-wrapper .solution>p:last-child{margin-bottom:0}.tutor-lesson-wrapper blockquote.antipattern::before,.tutor-lesson-wrapper blockquote.antipattern::after{content:none}.tutor-lesson-wrapper .antipattern strong{color:var(--v2-anti-head)}.tutor-lesson-wrapper .readnote{border-left-color:var(--v2-note-border);background:var(--v2-note-bg)}.tutor-lesson-wrapper .prompt{border-left-color:var(--v2-prompt-border);background:var(--v2-prompt-bg);font-weight:500}.tutor-lesson-wrapper .prompt::before{content:"Before you read on";display:block;margin-bottom:0.4em;font-size:0.78em;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;opacity:0.75}.tutor-lesson-wrapper .solution{border-left-color:var(--v2-sol-border);background:var(--v2-sol-bg)}.tutor-lesson-wrapper details.solution{padding:0;overflow:hidden}.tutor-lesson-wrapper details.solution>summary{cursor:pointer;padding:0.85em 1.2em;font-weight:700;list-style:none;user-select:none}.tutor-lesson-wrapper details.solution>summary::-webkit-details-marker{display:none}.tutor-lesson-wrapper details.solution>summary::before{content:"25B8";display:inline-block;width:1em;transition:transform 0.15s ease}.tutor-lesson-wrapper details.solution[open]>summary::before{transform:rotate(90deg)}.tutor-lesson-wrapper details.solution>*:not(summary){padding:0 1.2em}.tutor-lesson-wrapper details.solution>*:last-child{padding-bottom:1em}.tutor-lesson-wrapper figure{margin:1.8em 0;text-align:center}.tutor-lesson-wrapper figure svg{display:block;width:100%;max-width:720px;height:auto;margin:0 auto}.tutor-lesson-wrapper figcaption{margin-top:0.7em;font-size:0.9em;opacity:0.92;text-align:center}.tutor-lesson-wrapper figure svg{color:inherit}.tutor-lesson-wrapper{--v2-tbl-border:#d7dde5;--v2-tbl-head-bg:#f5f7fa;--v2-tbl-hover:#f0f3f7}:root[data-theme="dark"] .tutor-lesson-wrapper{--v2-tbl-border:#3a4149;--v2-tbl-head-bg:#262b31;--v2-tbl-hover:#22272d}.tutor-lesson-wrapper .tablepress{margin:1.6em 0;border-collapse:collapse;background:transparent;--text-color:currentColor;--head-text-color:currentColor;--odd-text-color:currentColor;--even-text-color:currentColor;--hover-text-color:currentColor;--head-bg-color:var(--v2-tbl-head-bg);--odd-bg-color:transparent;--even-bg-color:transparent;--hover-bg-color:var(--v2-tbl-hover);--border-color:var(--v2-tbl-border)}.tutor-lesson-wrapper .tablepress th,.tutor-lesson-wrapper .tablepress td{border:1px solid var(--v2-tbl-border);padding:0.55em 0.8em;line-height:1.55}.tutor-lesson-wrapper .tablepress thead th{font-weight:600}.tutor-lesson-wrapper blockquote.antipattern,.tutor-lesson-wrapper blockquote.readnote,.tutor-lesson-wrapper blockquote.solution{font-weight:400}.tutor-lesson-wrapper details.solution-fold{margin:1.6em 0}.tutor-lesson-wrapper details.solution-fold>summary{cursor:pointer;font-weight:400;padding:0.7em 1.1em;border-left:4px solid var(--v2-sol-border);background:var(--v2-sol-bg);border-radius:4px}.tutor-lesson-wrapper details.solution-fold>summary:hover{filter:brightness(0.97)}.tutor-lesson-wrapper details.solution-fold[open]>summary{border-radius:4px 4px 0 0}.tutor-lesson-wrapper details.solution-fold>blockquote.solution{margin-top:0;border-radius:0 0 4px 4px}:root[data-theme="dark"] .tutor-lesson-wrapper.tutor-color-secondary,:root[data-theme="dark"] .tutor-lesson-wrapper.tutor-color-muted,:root[data-theme="dark"] .tutor-lesson-wrapper.tutor-color-subdued{color:var(--cmz-text)!important}:root[data-theme="dark"] .tutor-lesson-wrapper .et-learn-more{background:var(--cmz-surface)!important;border-color:var(--cmz-border)!important;box-shadow:none!important}:root[data-theme="dark"] .tutor-lesson-wrapper .et-learn-more h3.heading-more{background:var(--cmz-surface-2)!important;background-image:none!important;color:var(--cmz-text)!important;text-shadow:none!important;border-left-color:var(--cmz-border)!important;border-top-color:var(--cmz-border)!important}:root[data-theme="dark"] .tutor-lesson-wrapper .et-learn-more h3.heading-more span.et_learnmore_arrow{border-left-color:var(--cmz-border)!important;box-shadow:-1px 0 0 0 var(--cmz-border)!important}:root[data-theme="dark"] .tutor-lesson-wrapper .et-learn-more .learn-more-content{color:var(--cmz-text)!important}:root[data-theme="dark"] .tutor-lesson-wrapper .et-learn-more span.et_learnmore_arrow span{filter:invert(1) brightness(1.5)}.tutor-form-check-input.tutor-form-check-input{padding:0}</style></head>
1558<body class="wp-singular courses-template-default single single-courses postid-75594 wp-custom-logo wp-theme-Extra theme-Extra tutor-lms tutor-frontend woocommerce-no-js et_extra et_non_fixed_nav et_pb_gutters3 et_primary_nav_dropdown_animation_flipInX et_secondary_nav_dropdown_animation_Default with_sidebar with_sidebar_right et_includes_sidebar et-db et_minified_js et_minified_css">
1559	
1560	<div id="page-container" class="page-container">
1561				<!-- Header -->
1562		<header class="header left-right">
1563						<!-- #top-header -->
1564			<div id="top-header" style="">
1565				<div class="container">
1566										<!-- Secondary Nav -->
1567											<div id="et-secondary-nav" class="et-trending">
1568													
1569							<!-- ET Trending -->
1570							<div id="et-trending">
1571								<!-- ET Trending Post Loop -->
1572								<div id='et-trending-container'>
1573									<div id="et-trending-post-sample">
1574
1575									</div>
1576								</div>
1577							</div>
1578							
1579												</div>
1580					
1581					<!-- #et-info -->
1582					<div id="et-info">
1583
1584						
1585						<!-- .et-top-search -->
1586												<div class="et-top-search" style="">
1587							<form role="search" class="et-search-form" method="get" action="https://courses.code-maze.com/">
1588			<input type="search" class="et-search-field" placeholder="Search" value="" name="s" title="Search for:" />
1589			<button class="et-search-submit"></button>
1590		</form>						</div>
1591						
1592						<!-- cart -->
1593												<span class="et-top-cart-total" style="">
1594							<a href="https://courses.code-maze.com/cart/" class="et-cart" title="0 Items in Cart">
1595				<span>0 Items</span>
1596			</a>						</span>
1597											</div>
1598				</div><!-- /.container -->
1599			</div><!-- /#top-header -->
1600
1601			
1602			<!-- Main Header -->
1603			<div id="main-header-wrapper">
1604				<div id="main-header" data-fixed-height="104">
1605					<div class="container">
1606					<!-- ET Ad -->
1607						
1608						
1609						<!-- Logo -->
1610						<a class="logo" href="https://courses.code-maze.com/" data-fixed-height="29">
1611							<img src="https://courses.code-maze.com/wp-content/uploads/2024/10/Code-Maze-Logo-White-Text-Transparent-Small.png" alt="Code Maze" id="logo" />
1612						</a>
1613
1614						
1615						<!-- ET Navigation -->
1616						<div id="et-navigation" class="">
1617							<ul id="et-menu" class="nav"><li id="menu-item-73074" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-73074"><a href="https://courses.code-maze.com/dashboard/" onClick="return true">My Learning</a></li>
1618<li id="menu-item-73075" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-73075"><a href="https://courses.code-maze.com/courses/" onClick="return true">Courses</a></li>
1619<li id="menu-item-85575" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-85575"><a href="https://courses.code-maze.com/code-maze-mentor/" onClick="return true">// AI Mentor <span class="cursor"></span></a></li>
1620<li id="menu-item-73314" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-73314"><a href="https://code-maze.com" onClick="return true">Blog</a></li>
1621<li class="menu-item cmz-paddle-cart-item"><div class="cmz-paddle-cart-chip"><a href="#" class="cmz-paddle-cart-link" role="button" aria-haspopup="true" aria-expanded="false" aria-label="Cart — go straight to checkout" title="Cart — go straight to checkout"><svg class="cmz-paddle-cart-glyph" viewBox="0 0 24 24" width="18" height="18" aria-hidden="true" focusable="false"><path fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" d="M3 4h2l2.4 12.2a2 2 0 0 0 2 1.6h7.6a2 2 0 0 0 2-1.6L21 8H6"/><circle cx="9.5" cy="20" r="1.4" fill="currentColor"/><circle cx="17.5" cy="20" r="1.4" fill="currentColor"/></svg><span class="cmz-paddle-cart-text tutor-fs-7">Cart</span><span class="cmz-paddle-cart-badge" aria-hidden="true" hidden>0</span></a></div><div class="cmz-paddle-cart-dropdown" hidden></div></li><li class="menu-item cmz-dm-item"><a href="#" class="cmz-dm-toggle" role="button" aria-pressed="false" aria-label="Toggle dark mode" title="Toggle dark mode"><svg class="cmz-dm-glyph cmz-dm-moon" viewBox="0 0 24 24" width="17" height="17" aria-hidden="true" focusable="false"><path fill="currentColor" d="M20.7 13.6A8.6 8.6 0 0 1 10.4 3.3a1 1 0 0 0-1.3-1.2 10.6 10.6 0 1 0 13 13 1 1 0 0 0-1.4-1.5z"/></svg><svg class="cmz-dm-glyph cmz-dm-sun" viewBox="0 0 24 24" width="17" height="17" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="4.1" fill="currentColor"/><g stroke="currentColor" stroke-width="1.9" stroke-linecap="round"><path d="M12 1.9v2.4M12 19.7v2.4M1.9 12h2.4M19.7 12h2.4"/><path d="M4.9 4.9l1.7 1.7M17.4 17.4l1.7 1.7M19.1 4.9l-1.7 1.7M6.6 17.4l-1.7 1.7"/></g></svg><span class="cmz-dm-text">Dark</span></a></li><li class="menu-item cmz-account-item cmz-account-item-signed-out"><a href="https://courses.code-maze.com/my-account/" class="cmz-account-signin">Sign in</a></li></ul>							<div id="et-mobile-navigation">
1622			<span class="show-menu">
1623				<div class="show-menu-button">
1624					<span></span>
1625					<span></span>
1626					<span></span>
1627				</div>
1628				<p>Select Page</p>
1629			</span>
1630			<nav>
1631			</nav>
1632		</div> <!-- /#et-mobile-navigation -->						</div><!-- /#et-navigation -->
1633					</div><!-- /.container -->
1634				</div><!-- /#main-header -->
1635			</div><!-- /#main-header-wrapper -->
1636
1637		</header>
1638		
1639				
1640<div class="tutor-wrap tutor-full-width-course-top tutor-course-top-info tutor-page-wrap tutor-wrap-parent post-75594 courses type-courses status-publish has-post-thumbnail hentry course-category-text-course course-category-web-development">
1641	<div class="tutor-course-details-page tutor-container">
1642		
1643<header class="tutor-course-details-header tutor-mb-44">
1644			<div class="tutor-course-details-ratings">
1645					<div class="tutor-ratings tutor-ratings-">
1646			<div class="tutor-ratings-stars">
1647			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
1648							<div class="tutor-ratings-average">
1649					4.93				</div>
1650				<div class="tutor-ratings-count">
1651					(362 Ratings)
1652				</div>
1653					</div>
1654					</div>
1655	
1656	<h1 class="tutor-course-details-title tutor-fs-4 tutor-fw-bold tutor-color-black tutor-mt-12 tutor-mb-0">
1657				<span>Ultimate ASP.NET Core Web API</span>
1658	</h1>
1659
1660	<div class="tutor-course-details-top tutor-mt-16">
1661		<div class="tutor-row">
1662			<div class="tutor-col">
1663				<div class="tutor-meta tutor-course-details-info"> 
1664										<div>
1665						<a href="https://courses.code-maze.com/profile/marinko?view=instru
1665ctor" class="tutor-d-flex">
1666							<div class="tutor-avatar"><div class="tutor-ratio tutor-ratio-1x1"><img src="https://courses.code-maze.com/wp-content/uploads/2026/01/marinko-profile-150x150.webp" alt="Marinko Spasojevic" /> </div></div>						</a>
1667					</div>
1668					
1669					<div>
1670													<span class="tutor-mr-16">
1671								By								<a href="https://courses.code-maze.com/profile/marinko?view=instructor">Marinko Spasojevic</a>
1672							</span>
1673						
1674													Categories:							<a href="https://courses.code-maze.com/course-category/text-course/?tutor-course-filter-category=1376">Text Course</a>, <a href="https://courses.code-maze.com/course-category/web-development/?tutor-course-filter-category=1373">Web Development</a>											</div>
1675				</div>
1676			</div>
1677
1678			<div class="tutor-col-auto">
1679				<div class="tutor-course-details-actions tutor-mt-12 tutor-mt-sm-0">
1680										<a href="#" class="tutor-btn tutor-btn-ghost tutor-course-wishlist-btn tutor-mr-16" data-course-id="75594">
1681						<i class="tutor-icon-bookmark-line tutor-mr-8"></i> Wishlist					</a>
1682					
1683									</div>
1684			</div>
1685		</div>
1686	</div>
1687</header>
1688		<div class="tutor-row tutor-gx-xl-5">
1689			<main class="tutor-col-xl-8">
1690				<div class="tutor-course-thumbnail">
1691            <img src="https://courses.code-maze.com/wp-content/uploads/2026/01/Ultimate-ASP.NET-Core-Web-API-Featured.webp" />
1692        </div>				
1693				
1694				<div class="tutor-course-details-tab tutor-mt-32">
1695											<div class="tutor-is-sticky">
1696							<nav class="tutor-nav" tutor-priority-nav>
1697	        <li class="tutor-nav-item">
1698            <a class="tutor-nav-link is-active" href="#" data-tutor-nav-target="tutor-course-details-tab-info">
1699                Course Info            </a>
1700        </li>
1701                <li class="tutor-nav-item">
1702            <a class="tutor-nav-link" href="#" data-tutor-nav-target="tutor-course-details-tab-reviews">
1703                Reviews            </a>
1704        </li>
1705        	<li class="tutor-nav-item tutor-nav-more tutor-d-none">
1706		<a class="tutor-nav-link tutor-nav-more-item" href="#"><span class="tutor-mr-4">More</span> <span class="tutor-nav-more-icon tutor-icon-times"></span></a>
1707		<ul class="tutor-nav-more-list tutor-dropdown"></ul>
1708	</li>
1709</nav>
1710						</div>
1711										<div class="tutor-tab tutor-pt-24">
1712													<div id="tutor-course-details-tab-info" class="tutor-tab-item is-active">
1713										<div class="tutor-course-details-content">
1714		<h2 class="tutor-fs-5 tutor-fw-bold tutor-color-black tutor-mb-12">
1715			About Course		</h2>
1716		
1717		<div class="tutor-fs-6 tutor-color-secondary">
1718			<p data-pm-slice="1 1 []"><strong>Ultimate ASP.NET Core Web API &#8211; Our bestselling program</strong></p>
1719<h3><strong><u>What&#8217;s included?</u></strong></h3>
1720<ul>
1721<li>Ultimate ASP.NET Core Web API &#8211; The Online Text Course</li>
1722</ul>
1723<p><strong>Additional bonus materials:</strong></p>
1724<ol>
1725<li><strong>Dockerizing</strong> ASP.NET Core Application (<strong>Online Text Course</strong>) &#8211; <a href="https://code-maze.com/wp-content/uploads/2021/11/Bonus-4-Docker-TOC.pdf" target="_blank" rel="noopener">Full Table of Contents Here.</a></li>
1726<li>Practical <strong>JSON Requests Collection</strong></li>
1727<li>Mastering ASP.NET Core <strong>Security </strong>(<strong>Online Text Course</strong>) &#8211; <a href="https://code-maze.com/wp-content/uploads/2020/06/Bonus-6-Table-of-Content.pdf" target="_blank" rel="noopener">Full Table of Contents Here.</a></li>
1728<li>ASP.NET Core Web API With <strong>Dapper </strong>(<strong>PDF</strong>) &#8211; <a href="https://code-maze.com/wp-content/uploads/2022/08/Bonus-7-Dapper-TOC.pdf" target="_blank" rel="noopener">Full Table of Contents Here.</a></li>
1729</ol>
1730<p>All materials are available in .NET 10 with <strong>Community Support</strong> over Discord.</p>
1731<h3><strong><u>What you&#8217;ll learn</u></strong></h3>
1732<p>This course dives into the foundational aspects and advanced techniques essential for building robust and scalable Web APIs.</p>
1733<p>After understanding the basics of project configuration, you&#8217;ll learn how to effectively utilize dependency injection, configure logging services, and implement the Onion Architecture for a maintainable project structure.</p>
1734<p>The course covers critical aspects of web API development, including routing, naming, and binding, handling various types of HTTP requests, and ensuring method safety and idempotency.<
1734/p>
1735<p>As you progress, you will explore advanced topics like content negotiation, validation, asynchronous programming, and global error handling. You&#8217;ll gain proficiency in managing data through paging, filtering, searching, and sorting techniques. Moreover, the course addresses the importance of security by teaching authentication, authorization, and the use of refresh tokens.</p>
1736<p>Additionally, you will also learn about action filters, health checks, API versioning, and how to document APIs effectively.</p>
1737<p>Additional bonus chapters provide insights into performance improvements, CQRS with MediatR, and working with multiple databases, rounding out a thorough and practical learning experience.</p>
1738<p>By the end of the course, you will have a solid grasp of ASP.NETCore Web API development, equipped with the skills to build, deploy, and maintain high-performance web applications.  This comprehensive course ensures you are ready to tackle real-world challenges and create efficient, scalable APIs.</p>
1739<h4>You can find an entire TOC with preview lessons in the <strong>Course Content</strong> section below.</h4>
1740		</div>
1741	</div>
1742
1743			<div class="tutor-mt-40">
1744	
1745		<h3 class="tutor-fs-5 tutor-fw-bold tutor-color-black tutor-mb-24 tutor-course-content-title">
1746			Course Content		</h3>
1747
1748		<div class="tutor-accordion tutor-mt-24">
1749								<div class="tutor-accordion-item">
1750				<h4 class="tutor-accordion-item-header is-active">
1751					Introduction									</h4>
1752	
1753													<div class="tutor-accordion-item-body" style="">
1754						<div class="tutor-accordion-item-body-content">
1755							<ul class="tutor-course-content-list">
1756																										<li class="tutor-course-content-list-item">
1757										<div class="tutor-d-flex">
1758											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1759											<h5 class="tutor-course-content-list-item-title">
1760												Mindset Going In											</h5>
1761										</div>
1762										
1763										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1764											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1765																							</span>
1766											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1767										</div>
1768									</li>
1769																										<li class="tutor-course-content-list-item">
1770										<div class="tutor-d-flex">
1771											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1772											<h5 class="tutor-course-content-list-item-title">
1773												Community Access											</h5>
1774										</div>
1775										
1776										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1777											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1778																							</span>
1779											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1780										</div>
1781									</li>
1782																										<li class="tutor-course-content-list-item">
1783										<div class="tutor-d-flex">
1784											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1785											<h5 class="tutor-course-content-list-item-title">
1786												SDK Versions, Visual Studio Community, and SQL Express											</h5>
1787										</div>
1788										
1789										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1790											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1791																							</span>
1792											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1793										</div>
1794									</li>
1795																										<li class="tutor-course-content-list-item">
1796										<div class="tutor-d-flex">
1797											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1798											<h5 class="tutor-course-content-list-item-title">
1799												The Source Code and Bonuses											</h5>
1800										</div>
1801										
1802										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1803											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1804																							</span>
1805											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1806										</div>
1807									</li>
1808															</ul>
1809						</div>
1810					</div>
1811												</div>
1812									<div class="tutor-accordion-item">
1813				<h4 class="tutor-accordion-item-header">
1814					ASP.NET Core Web API Fundamentials									</h4>
1815	
1816													<div class="tutor-accordion-item-body" style="display: none;">
1817						<div class="tutor-accordion-item-body-content">
1818							<ul class="tutor-course-content-list">
1819																										<li class="tutor-course-content-list-item">
1820										<div class="tutor-d-flex">
1821											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1822											<h5 class="tutor-course-content-list-item-title">
1823												Introduction to Web APIs											</h5>
1824										</div>
1825										
1826										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1827											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1828																							</span>
1829											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1830										</div>
1831									</li>
1832																										<li class="tutor-course-content-list-item">
1833										<div class="tutor-d-flex">
1834											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1835											<h5 class="tutor-course-content-list-item-title">
1836												Steps to Create a Web API											</h5>
1837										</div>
1838										
1839										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1840											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1841																							</span>
1842											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1843										</div>
1844									</li>
1845															</ul>
1846						</div>
1847					</div>
1848												</div>
1849									<div class="tutor-accordion-item">
1850				<h4 class="tutor-accordion-item-header">
1851					Project Configuration									</h4>
1852	
1853													<div class="tutor-accordion-item-body" style="display: none;">
1854						<div class="tutor-accordion-item-body-content">
1855							<ul class="tutor-course-content-list">
1856																										<li class="tutor-course-content-list-item">
1857										<div class="tutor-d-flex">
1858											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1859											<h5 class="tutor-course-content-list-item-title">
1860												Creating a New Project											</h5>
1861										</div>
1862										
1863										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1864											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1865																							</span>
1866											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1867										</div>
1868									</li>
1869																										<li class="tutor-course-content-list-item">
1870										<div class="tutor-d-flex">
1871											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1872											<h5 class="tutor-course-content-list-item-title">
1873												launchSettings.json File Configuration											</h5>
1874										</div>
1875										
1876										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1877											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1878																							</span>
1879											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1880										</div>
1881									</li>
1882																										<li class="tutor-course-content-list-item">
1883										<div class="tutor-d-flex">
1884											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1885											<h5 class="tutor-course-content-list-item-title">
1886												Program Class Explanation											</h5>
1887										</div>
1888										
1889										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1890											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1891																							</span>
1892											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1893										</div>
1894									</li>
1895																										<li class="tutor-course-content-list-item">
1896										<div class="tutor-d-flex">
1897											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1898											<h5 class="tutor-course-content-list-item-title">
1899												Extension Methods and CORS Configuration											</h5>
1900										</div>
1901										
1902										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1903											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1904																							</span>
1905											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1906										</div>
1907									</li>
1908																										<li class="tutor-course-content-list-item">
1909										<div class="tutor-d-flex">
1910											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1911											<h5 class="tutor-course-content-list-item-title">
1912												IIS Configuration											</h5>
1913										</div>
1914										
1915										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1916											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1917																							</span>
1918											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1919										</div>
1920									</li>
1921																										<li class="tutor-course-content-list-item">
1922										<div class="tutor-d-flex">
1923											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1924											<h5 class="tutor-course-content-list-item-title">
1925												Additional Code in the Program Class											</h5>
1926										</div>
1927										
1928										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1929											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1930																							</span>
1931											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1932										</div>
1933									</li>
1934																										<li class="tutor-course-content-list-item">
1935										<div class="tutor-d-flex">
1936											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1937											<h5 class="tutor-course-content-list-item-title">
1938												Environment-Based Settings											</h5>
1939										</div>
1940										
1941										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1942											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1943																							</span>
1944											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1945										</div>
1946									</li>
1947																										<li class="tutor-course-content-list-item">
1948										<div class="tutor-d-flex">
1949											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1950											<h5 class="tutor-course-content-list-item-title">
1951												ASP.NET Core Middleware											</h5>
1952										</div>
1953										
1954										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1955											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1956																							</span>
1957											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1958										</div>
1959									</li>
1960															</ul>
1961						</div>
1962					</div>
1963												</div>
1964									<div class="tutor-accordion-item">
1965				<h4 class="tutor-accordion-item-header">
1966					Dependency Injection in ASP.NET Core									</h4>
1967	
1968													<div class="tutor-accordion-item-body" style="display: none;">
1969						<div class="tutor-accordion-item-body-content">
1970							<ul class="tutor-course-content-list">
1971																										<li class="tutor-course-content-list-item">
1972										<div class="tutor-d-flex">
1973											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1974											<h5 class="tutor-course-content-list-item-title">
1975												What is Dependency Injection?											</h5>
1976										</div>
1977										
1978										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1979											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1980																							</span>
1981											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1982										</div>
1983									</li>
1984																										<li class="tutor-course-content-list-item">
1985										<div class="tutor-d-flex">
1986											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
1987											<h5 class="tutor-course-content-list-item-title">
1988												Inversion of Control With the Constructor Injection											</h5>
1989										</div>
1990										
1991										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
1992											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
1993																							</span>
1994											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
1995										</div>
1996									</li>
1997																										<li class="tutor-course-content-list-item">
1998										<div class="tutor-d-flex">
1999											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2000											<h5 class="tutor-course-content-list-item-title">
2001												Making the Solution More Flexible with Dependency Injection											</h5>
2002										</div>
2003										
2004										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2005											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2006																							</span>
2007											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2008										</div>
2009									</li>
2010																										<li class="tutor-course-content-list-item">
2011										<div class="tutor-d-flex">
2012											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2013											<h5 class="tutor-course-content-list-item-title">
2014												Service Registration With Dependency Injection Container											</h5>
2015										</div>
2016										
2017										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2018											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2019																							</span>
2020											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2021										</div>
2022									</li>
2023																										<li class="tutor-course-content-list-item">
2024										<div class="tutor-d-flex">
2025											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2026											<h5 class="tutor-course-content-list-item-title">
2027												Dependency Injection Lifetimes in ASP.NET Core											</h5>
2028										</div>
2029										
2030										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2031											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2032																							</span>
2033											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2034										</div>
2035									</li>
2036																										<li class="tutor-course-content-list-item">
2037										<div class="tutor-d-flex">
2038											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2039											<h5 class="tutor-course-content-list-item-title">
2040												<a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/keyed-services-to-resolve-dependencies-in-net/"><span class="lesson-preview-title">Keyed Services to Resolve Dependencies in .NET</span></a>											</h5>
2041										</div>
2042										
2043										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2044											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2045																							</span>
2046											<span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2047										</div>
2048									</li>
2049															</ul>
2050						</div>
2051					</div>
2052												</div>
2053									<div class="tutor-accordion-item">
2054				<h4 class="tutor-accordion-item-header">
2055					Configuring a Logging Service									</h4>
2056	
2057													<div class="tutor-accordion-item-body" style="display: none;">
2058						<div class="tutor-accordion-item-body-content">
2059							<ul class="tutor-course-content-list">
2060																										<li class="tutor-course-content-list-item">
2061										<div class="tutor-d-flex">
2062											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2063											<h5 class="tutor-course-content-list-item-title">
2064												Why Logging?											</h5>
2065										</div>
2066										
2067										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2068											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2069																							</span>
2070											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2071										</div>
2072									</li>
2073																										<li class="tutor-course-content-list-item">
2074										<div class="tutor-d-flex">
2075											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2076											<h5 class="tutor-course-content-list-item-title">
2077												Creating the LoggingService Project											</h5>
2078										</div>
2079										
2080										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2081											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2082																							</span>
2083											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2084										</div>
2085									</li>
2086																										<li class="tutor-course-content-list-item">
2087										<div class="tutor-d-flex">
2088											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2089											<h5 class="tutor-course-content-list-item-title">
2090												Creating the ILoggerManager Interface and Installing Serilog											</h5>
2091										</div>
2092										
2093										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2094											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2095																							</span>
2096											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2097										</div>
2098									</li>
2099																										<li class="tutor-course-content-list-item">
2100										<div class="tutor-d-flex">
2101											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2102											<h5 class="tutor-course-content-list-item-title">
2103												Implementing the Interface and Configuring Serilog											</h5>
2104										</div>
2105										
2106										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2107											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2108																							</span>
2109											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2110										</div>
2111									</li>
2112																										<li class="tutor-course-content-list-item">
2113										<div class="tutor-d-flex">
2114											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2115											<h5 class="tutor-course-content-list-item-title">
2116												Logging Service Testing											</h5>
2117										</div>
2118										
2119										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2120											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2121																							</span>
2122											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2123										</div>
2124									</li>
2125																										<li class="tutor-course-content-list-item">
2126										<div class="tutor-d-flex">
2127											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2128											<h5 class="tutor-course-content-list-item-title">
2129												Adding a New Sink &#8211; Seq											</h5>
2130										</div>
2131										
2132										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2133											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2134																							</span>
2135											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2136										</div>
2137									</li>
2138															</ul>
2139						</div>
2140					</div>
2141												</div>
2142									<div class="tutor-accordion-item">
2143				<h4 class="tutor-accordion-item-header">
2144					Onion Architecture Implementation									</h4>
2145	
2146													<div class="tutor-accordion-item-body" style="display: none;">
2147						<div class="tutor-accordion-item-body-content">
2148							<ul class="tutor-course-content-list">
2149																										<li class="tutor-course-content-list-item">
2150										<div class="tutor-d-flex">
2151											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2152											<h5 class="tutor-course-content-list-item-title">
2153												Why Onion Architecture?											</h5>
2154										</div>
2155										
2156										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2157											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2158																							</span>
2159											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2160										</div>
2161									</li>
2162																										<li class="tutor-course-content-list-item">
2163										<div class="tutor-d-flex">
2164											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2165											<h5 class="tutor-course-content-list-item-title">
2166												About Onion Architecture											</h5>
2167										</div>
2168										
2169										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2170											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2171																							</span>
2172											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2173										</div>
2174									</li>
2175																										<li class="tutor-course-content-list-item">
2176										<div class="tutor-d-flex">
2177											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2178											<h5 class="tutor-course-content-list-item-title">
2179												Creating Entities											</h5>
2180										</div>
2181										
2182										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2183											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2184																							</span>
2185											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2186										</div>
2187									</li>
2188																										<li class="tutor-course-content-list-item">
2189										<div class="tutor-d-flex">
2190											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2191											<h5 class="tutor-course-content-list-item-title">
2192												Context Class and Database Connection											</h5>
2193										</div>
2194										
2195										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2196											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2197																							</span>
2198											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2199										</div>
2200									</li>
2201																										<li class="tutor-course-content-list-item">
2202										<div class="tutor-d-flex">
2203											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2204											<h5 class="tutor-course-content-list-item-title">
2205												<a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/migration-and-initial-data-seed/"><span class="lesson-preview-title">Migration and Initial Data Seed</span></a>											</h5>
2206										</div>
2207										
2208										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2209											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2210																							</span>
2211											<span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2212										</div>
2213									</li>
2214																										<li class="tutor-course-content-list-item">
2215										<div class="tutor-d-flex">
2216											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2217											<h5 class="tutor-course-content-list-item-title">
2218												Fluent API Configuration											</h5>
2219										</div>
2220										
2221										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2222											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2223																							</span>
2224											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2225										</div>
2226									</li>
2227																										<li class="tutor-course-content-list-item">
2228										<div class="tutor-d-flex">
2229											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2230											<h5 class="tutor-course-content-list-item-title">
2231												Repository Pattern Logic											</h5>
2232										</div>
2233										
2234										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2235											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2236																							</span>
2237											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2238										</div>
2239									</li>
2240																										<li class="tutor-course-content-list-item">
2241										<div class="tutor-d-flex">
2242											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2243											<h5 class="tutor-course-content-list-item-title">
2244												Repository Interfaces and Classes											</h5>
2245										</div>
2246										
2247										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2248											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2249																							</span>
2250											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2251										</div>
2252									</li>
2253																										<li class="tutor-course-content-list-item">
2254										<div class="tutor-d-flex">
2255											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2256											<h5 class="tutor-course-content-list-item-title">
2257												C
2257reating a Repository Manager (Unit of Work)											</h5>
2258										</div>
2259										
2260										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2261											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2262																							</span>
2263											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2264										</div>
2265									</li>
2266																										<li class="tutor-course-content-list-item">
2267										<div class="tutor-d-flex">
2268											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2269											<h5 class="tutor-course-content-list-item-title">
2270												Adding a Service Layer											</h5>
2271										</div>
2272										
2273										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2274											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2275																							</span>
2276											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2277										</div>
2278									</li>
2279																										<li class="tutor-course-content-list-item">
2280										<div class="tutor-d-flex">
2281											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2282											<h5 class="tutor-course-content-list-item-title">
2283												Registering RepositoryContext at a Runtime											</h5>
2284										</div>
2285										
2286										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2287											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2288																							</span>
2289											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2290										</div>
2291									</li>
2292																										<li class="tutor-course-content-list-item">
2293										<div class="tutor-d-flex">
2294											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2295											<h5 class="tutor-course-content-list-item-title">
2296												Enforcing the Flow of Dependencies With a Test											</h5>
2297										</div>
2298										
2299										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2300											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2301																							</span>
2302											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2303										</div>
2304									</li>
2305															</ul>
2306						</div>
2307					</div>
2308												</div>
2309									<div class="tutor-accordion-item">
2310				<h4 class="tutor-accordion-item-header">
2311					Routing, Naming and Binding in ASP.NET Core Web API									</h4>
2312	
2313													<div class="tutor-accordion-item-body" style="display: none;">
2314						<div class="tutor-accordion-item-body-content">
2315							<ul class="tutor-course-content-list">
2316																										<li class="tutor-course-content-list-item">
2317										<div class="tutor-d-flex">
2318											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2319											<h5 class="tutor-course-content-list-item-title">
2320												Routing in ASP.NET Core Web API											</h5>
2321										</div>
2322										
2323										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2324											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2325																							</span>
2326											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2327										</div>
2328									</li>
2329																										<li class="tutor-course-content-list-item">
2330										<div class="tutor-d-flex">
2331											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2332											<h5 class="tutor-course-content-list-item-title">
2333												Using HttpMethods With Routing											</h5>
2334										</div>
2335										
2336										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2337											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2338																							</span>
2339											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2340										</div>
2341									</li>
2342																										<li class="tutor-course-content-list-item">
2343										<div class="tutor-d-flex">
2344											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2345											<h5 class="tutor-course-content-list-item-title">
2346												Route Constraints in ASP.NET Core Web API											</h5>
2347										</div>
2348										
2349										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2350											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2351																							</span>
2352											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2353										</div>
2354									</li>
2355																										<li class="tutor-course-content-list-item">
2356										<div class="tutor-d-flex">
2357											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2358											<h5 class="tutor-course-content-list-item-title">
2359												Route Binding In ASP.NET Core Web API											</h5>
2360										</div>
2361										
2362										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2363											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2364																							</span>
2365											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2366										</div>
2367									</li>
2368																										<li class="tutor-course-content-list-item">
2369										<div class="tutor-d-flex">
2370											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2371											<h5 class="tutor-course-content-list-item-title">
2372												Naming Our Resources											</h5>
2373										</div>
2374										
2375										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2376											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2377																							</span>
2378											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2379										</div>
2380									</li>
2381															</ul>
2382						</div>
2383					</div>
2384												</div>
2385									<div class="tutor-accordion-item">
2386				<h4 class="tutor-accordion-item-header">
2387					Handling GET Requests									</h4>
2388	
2389													<div class="tutor-accordion-item-body" style="display: none;">
2390						<div class="tutor-accordion-item-body-content">
2391							<ul class="tutor-course-content-list">
2392																										<li class="tutor-course-content-list-item">
2393										<div class="tutor-d-flex">
2394											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2395											<h5 class="tutor-course-content-list-item-title">
2396												Controllers in Web API											</h5>
2397										</div>
2398										
2399										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2400											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2401																							</span>
2402											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2403										</div>
2404									</li>
2405																										<li class="tutor-course-content-list-item">
2406										<div class="tutor-d-flex">
2407											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2408											<h5 class="tutor-course-content-list-item-title">
2409												Getting All Companies From the Database											</h5>
2410										</div>
2411										
2412										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2413											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2414																							</span>
2415											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2416										</div>
2417									</li>
2418																										<li class="tutor-course-content-list-item">
2419										<div class="tutor-d-flex">
2420											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2421											<h5 class="tutor-course-content-list-item-title">
2422												Testing the Result With Postman											</h5>
2423										</div>
2424										
2425										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2426											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2427																							</span>
2428											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2429										</div>
2430									</li>
2431																										<li class="tutor-course-content-list-item">
2432										<div class="tutor-d-flex">
2433											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2434											<h5 class="tutor-course-content-list-item-title">
2435												DTO Classes vs. Entity Model Classes											</h5>
2436										</div>
2437										
2438										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2439											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2440																							</span>
2441											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2442										</div>
2443									</li>
2444																										<li class="tutor-course-content-list-item">
2445										<div class="tutor-d-flex">
2446											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2447											<h5 class="tutor-course-content-list-item-title">
2448												Using AutoMapper in ASP.NET Core											</h5>
2449										</div>
2450										
2451										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2452											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2453																							</span>
2454											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2455										</div>
2456									</li>
2457															</ul>
2458						</div>
2459					</div>
2460												</div>
2461									<div class="tutor-accordion-item">
2462				<h4 class="tutor-accordion-item-header">
2463					Web API Return Types									</h4>
2464	
2465													<div class="tutor-accordion-item-body" style="display: none;">
2466						<div class="tutor-accordion-item-body-content">
2467							<ul class="tutor-course-content-list">
2468																										<li class="tutor-course-content-list-item">
2469										<div class="tutor-d-flex">
2470											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2471											<h5 class="tutor-course-content-list-item-title">
2472												Different Return Types To Use in Our Actions											</h5>
2473										</div>
2474										
2475										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2476											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2477																							</span>
2478											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2479										</div>
2480									</li>
2481															</ul>
2482						</div>
2483					</div>
2484												</div>
2485									<div class="tutor-accordion-item">
2486				<h4 class="tutor-accordion-item-header">
2487					Global Error Handling									</h4>
2488	
2489													<div class="tutor-accordion-item-body" style="display: none;">
2490						<div class="tutor-accordion-item-body-content">
2491							<ul class="tutor-course-content-list">
2492																										<li class="tutor-course-content-list-item">
2493										<div class="tutor-d-flex">
2494											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2495											<h5 class="tutor-course-content-list-item-title">
2496												Handling Errors Globally With the Built-In Middleware											</h5>
2497										</div>
2498										
2499										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2500											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2501																							</span>
2502											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2503										</div>
2504									</li>
2505																										<li class="tutor-course-content-list-item">
2506										<div class="tutor-d-flex">
2507											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2508											<h5 class="tutor-course-content-list-item-title">
2509												<a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/using-the-iexceptionhandler-interface/"><span class="lesson-preview-title">Using the IExceptionHandler Interface</span></a>											</h5>
2510										</div>
2511										
2512										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2513											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2514																							</span>
2515											<span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2516										</div>
2517									</li>
2518																										<li class="tutor-course-content-list-item">
2519										<div class="tutor-d-flex">
2520											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2521											<h5 class="tutor-course-content-list-item-title">
2522												Standardizing Exception Handling With ProblemDetails											</h5>
2523										</div>
2524										
2525										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2526											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2527																							</span>
2528											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2529										</div>
2530									</li>
2531															</ul>
2532						</div>
2533					</div>
2534												</div>
2535									<div class="tutor-accordion-item">
2536				<h4 class="tutor-accordion-item-header">
2537					Getting Additional Resources With Relations									</h4>
2538	
2539													<div class="tutor-accordion-item-body" style="display: none;">
2540						<div class="tutor-accordion-item-body-content">
2541							<ul class="tutor-course-content-list">
2542																										<li class="tutor-course-content-list-item">
2543										<div class="tutor-d-flex">
2544											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2545											<h5 class="tutor-course-content-list-item-title">
2546												Getting a Single Resource From the Database											</h5>
2547										</div>
2548										
2549										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2550											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2551																							</span>
2552											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2553										</div>
2554									</li>
2555																										<li class="tutor-course-content-list-it
2555em">
2556										<div class="tutor-d-flex">
2557											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2558											<h5 class="tutor-course-content-list-item-title">
2559												Handling Invalid Requests in a Service Layer											</h5>
2560										</div>
2561										
2562										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2563											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2564																							</span>
2565											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2566										</div>
2567									</li>
2568																										<li class="tutor-course-content-list-item">
2569										<div class="tutor-d-flex">
2570											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2571											<h5 class="tutor-course-content-list-item-title">
2572												Parent/Child Relationships in Web API											</h5>
2573										</div>
2574										
2575										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2576											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2577																							</span>
2578											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2579										</div>
2580									</li>
2581																										<li class="tutor-course-content-list-item">
2582										<div class="tutor-d-flex">
2583											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2584											<h5 class="tutor-course-content-list-item-title">
2585												Getting a Single Employee for Company											</h5>
2586										</div>
2587										
2588										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2589											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2590																							</span>
2591											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2592										</div>
2593									</li>
2594																										<li class="tutor-course-content-list-item">
2595										<div class="tutor-d-flex">
2596											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2597											<h5 class="tutor-course-content-list-item-title">
2598												Eager Loading To Fetch Multiple Entities in a Single Query											</h5>
2599										</div>
2600										
2601										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2602											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2603																							</span>
2604											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2605										</div>
2606									</li>
2607															</ul>
2608						</div>
2609					</div>
2610												</div>
2611									<div class="tutor-accordion-item">
2612				<h4 class="tutor-accordion-item-header">
2613					Content Negotiation									</h4>
2614	
2615													<div class="tutor-accordion-item-body" style="display: none;">
2616						<div class="tutor-accordion-item-body-content">
2617							<ul class="tutor-course-content-list">
2618																										<li class="tutor-course-content-list-item">
2619										<div class="tutor-d-flex">
2620											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2621											<h5 class="tutor-course-content-list-item-title">
2622												What Do We Get Out of the Box?											</h5>
2623										</div>
2624										
2625										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2626											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2627																							</span>
2628											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2629										</div>
2630									</li>
2631																										<li class="tutor-course-content-list-item">
2632										<div class="tutor-d-flex">
2633											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2634											<h5 class="tutor-course-content-list-item-title">
2635												Restricting Media Types											</h5>
2636										</div>
2637										
2638										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2639											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2640																							</span>
2641											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2642										</div>
2643									</li>
2644																										<li class="tutor-course-content-list-item">
2645										<div class="tutor-d-flex">
2646											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2647											<h5 class="tutor-course-content-list-item-title">
2648												Implementing a Custom Formatter											</h5>
2649										</div>
2650										
2651										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2652											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2653																							</span>
2654											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2655										</div>
2656									</li>
2657															</ul>
2658						</div>
2659					</div>
2660												</div>
2661									<div class="tutor-accordion-item">
2662				<h4 class="tutor-accordion-item-header">
2663					Method Safety And Method Idempotency									</h4>
2664	
2665													<div class="tutor-accordion-item-body" style="display: none;">
2666						<div class="tutor-accordion-item-body-content">
2667							<ul class="tutor-course-content-list">
2668																										<li class="tutor-course-content-list-item">
2669										<div class="tutor-d-flex">
2670											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2671											<h5 class="tutor-course-content-list-item-title">
2672												Important HTTP Standards											</h5>
2673										</div>
2674										
2675										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2676											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2677																							</span>
2678											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2679										</div>
2680									</li>
2681															</ul>
2682						</div>
2683					</div>
2684												</div>
2685									<div class="tutor-accordion-item">
2686				<h4 class="tutor-accordion-item-header">
2687					Creating Resources									</h4>
2688	
2689													<div class="tutor-accordion-item-body" style="display: none;">
2690						<div class="tutor-accordion-item-body-content">
2691							<ul class="tutor-course-content-list">
2692																										<li class="tutor-course-content-list-item">
2693										<div class="tutor-d-flex">
2694											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2695											<h5 class="tutor-course-content-list-item-title">
2696												Handling POST Requests											</h5>
2697										</div>
2698										
2699										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2700											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2701																							</span>
2702											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2703										</div>
2704									</li>
2705																										<li class="tutor-course-content-list-item">
2706										<div class="tutor-d-flex">
2707											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2708											<h5 class="tutor-course-content-list-item-title">
2709												Validation From the ApiController Attribute											</h5>
2710										</div>
2711										
2712										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2713											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2714																							</span>
2715											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2716										</div>
2717									</li>
2718																										<li class="tutor-course-content-list-item">
2719										<div class="tutor-d-flex">
2720											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2721											<h5 class="tutor-course-content-list-item-title">
2722												<a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/creating-a-child-resource/"><span class="lesson-preview-title">Creating a Child Resource</span></a>											</h5>
2723										</div>
2724										
2725										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2726											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2727																							</span>
2728											<span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2729										</div>
2730									</li>
2731																										<li class="tutor-course-content-list-item">
2732										<div class="tutor-d-flex">
2733											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2734											<h5 class="tutor-course-content-list-item-title">
2735												Creating Children Resources Together With a Parent											</h5>
2736										</div>
2737										
2738										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2739											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2740																							</span>
2741											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2742										</div>
2743									</li>
2744																										<li class="tutor-course-content-list-item">
2745										<div class="tutor-d-flex">
2746											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2747											<h5 class="tutor-course-content-list-item-title">
2748												Creating a Collection of Resources											</h5>
2749										</div>
2750										
2751										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2752											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2753																							</span>
2754											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2755										</div>
2756									</li>
2757																										<li class="tutor-course-content-list-item">
2758										<div class="tutor-d-flex">
2759											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2760											<h5 class="tutor-course-content-list-item-title">
2761												Model Binding in API											</h5>
2762										</div>
2763										
2764										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2765											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2766																							</span>
2767											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2768										</div>
2769									</li>
2770															</ul>
2771						</div>
2772					</div>
2773												</div>
2774									<div class="tutor-accordion-item">
2775				<h4 class="tutor-accordion-item-header">
2776					Deleting Resources									</h4>
2777	
2778													<div class="tutor-accordion-item-body" style="display: none;">
2779						<div class="tutor-accordion-item-body-content">
2780							<ul class="tutor-course-content-list">
2781																										<li class="tutor-course-content-list-item">
2782										<div class="tutor-d-flex">
2783											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2784											<h5 class="tutor-course-content-list-item-title">
2785												Deleting Resources in Web API											</h5>
2786										</div>
2787										
2788										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2789											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2790																							</span>
2791											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2792										</div>
2793									</li>
2794																										<li class="tutor-course-content-list-item">
2795										<div class="tutor-d-flex">
2796											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2797											<h5 class="tutor-course-content-list-item-title">
2798												Deleting a Parent Resource With its Children											</h5>
2799										</div>
2800										
2801										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2802											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2803																							</span>
2804											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2805										</div>
2806									</li>
2807																										<li class="tutor-course-content-list-item">
2808										<div class="tutor-d-flex">
2809											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2810											<h5 class="tutor-course-content-list-item-title">
2811												Deleting a Children Resource With a Parent &#8211; Transactions											</h5>
2812										</div>
2813										
2814										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2815											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2816																							</span>
2817											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2818										</div>
2819									</li>
2820															</ul>
2821						</div>
2822					</div>
2823												</div>
2824									<div class="tutor-accordion-item">
2825				<h4 class="tutor-accordion-item-header">
2826					Updating Resources in Web API									</h4>
2827	
2828													<div class="tutor-accordion-item-body" style="display: none;">
2829						<div class="tutor-accordion-item-body-content">
2830							<ul class="tutor-course-content-list">
2831																										<li class="tutor-course-content-list-item">
2832										<div class="tutor-d-flex">
2833											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2834											<h5 class="tutor-course-content-list-item-title">
2835												Working With Put Requests											</h5>
2836										</div>
2837										
2838										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2839											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2840																							</span>
2841											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2842										</div>
2843									</li>
2844																										<li class="tutor-course-content-list-item">
2845										<div class="tutor-d-flex">
2846											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2847											<h5 class="tutor-course-content-list-item-title">
2848												Inserting Resources While Updating One											</h5>
2849										</div>
2850										
2851										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2852											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2853																							</span>
2854											<span class="tutor-course-content-list-item-status tutor-icon-lock-
2854line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2855										</div>
2856									</li>
2857															</ul>
2858						</div>
2859					</div>
2860												</div>
2861									<div class="tutor-accordion-item">
2862				<h4 class="tutor-accordion-item-header">
2863					Partially Updating Resources									</h4>
2864	
2865													<div class="tutor-accordion-item-body" style="display: none;">
2866						<div class="tutor-accordion-item-body-content">
2867							<ul class="tutor-course-content-list">
2868																										<li class="tutor-course-content-list-item">
2869										<div class="tutor-d-flex">
2870											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2871											<h5 class="tutor-course-content-list-item-title">
2872												Working With Patch Requests											</h5>
2873										</div>
2874										
2875										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2876											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2877																							</span>
2878											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2879										</div>
2880									</li>
2881																										<li class="tutor-course-content-list-item">
2882										<div class="tutor-d-flex">
2883											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2884											<h5 class="tutor-course-content-list-item-title">
2885												Applying PATCH to the Employee Entity											</h5>
2886										</div>
2887										
2888										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2889											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2890																							</span>
2891											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2892										</div>
2893									</li>
2894															</ul>
2895						</div>
2896					</div>
2897												</div>
2898									<div class="tutor-accordion-item">
2899				<h4 class="tutor-accordion-item-header">
2900					Validation in ASP.NET Core Web API									</h4>
2901	
2902													<div class="tutor-accordion-item-body" style="display: none;">
2903						<div class="tutor-accordion-item-body-content">
2904							<ul class="tutor-course-content-list">
2905																										<li class="tutor-course-content-list-item">
2906										<div class="tutor-d-flex">
2907											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2908											<h5 class="tutor-course-content-list-item-title">
2909												About ModelState Validation											</h5>
2910										</div>
2911										
2912										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2913											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2914																							</span>
2915											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2916										</div>
2917									</li>
2918																										<li class="tutor-course-content-list-item">
2919										<div class="tutor-d-flex">
2920											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2921											<h5 class="tutor-course-content-list-item-title">
2922												Rerun Validation and Build-in Attributes											</h5>
2923										</div>
2924										
2925										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2926											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2927																							</span>
2928											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2929										</div>
2930									</li>
2931																										<li class="tutor-course-content-list-item">
2932										<div class="tutor-d-flex">
2933											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2934											<h5 class="tutor-course-content-list-item-title">
2935												Custom Attributes and IValidatableObject											</h5>
2936										</div>
2937										
2938										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2939											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2940																							</span>
2941											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2942										</div>
2943									</li>
2944																										<li class="tutor-course-content-list-item">
2945										<div class="tutor-d-flex">
2946											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2947											<h5 class="tutor-course-content-list-item-title">
2948												Validation While Creating Resources											</h5>
2949										</div>
2950										
2951										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2952											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2953																							</span>
2954											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2955										</div>
2956									</li>
2957																										<li class="tutor-course-content-list-item">
2958										<div class="tutor-d-flex">
2959											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2960											<h5 class="tutor-course-content-list-item-title">
2961												Validating Int Type											</h5>
2962										</div>
2963										
2964										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2965											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2966																							</span>
2967											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2968										</div>
2969									</li>
2970																										<li class="tutor-course-content-list-item">
2971										<div class="tutor-d-flex">
2972											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2973											<h5 class="tutor-course-content-list-item-title">
2974												Validation of PUT Requests											</h5>
2975										</div>
2976										
2977										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2978											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2979																							</span>
2980											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2981										</div>
2982									</li>
2983																										<li class="tutor-course-content-list-item">
2984										<div class="tutor-d-flex">
2985											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2986											<h5 class="tutor-course-content-list-item-title">
2987												Validation of PATCH Requests											</h5>
2988										</div>
2989										
2990										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
2991											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
2992																							</span>
2993											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
2994										</div>
2995									</li>
2996																										<li class="tutor-course-content-list-item">
2997										<div class="tutor-d-flex">
2998											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
2999											<h5 class="tutor-course-content-list-item-title">
3000												Assignment											</h5>
3001										</div>
3002										
3003										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3004											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3005																							</span>
3006											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3007										</div>
3008									</li>
3009																										<li class="tutor-course-content-list-item">
3010										<div class="tutor-d-flex">
3011											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3012											<h5 class="tutor-course-content-list-item-title">
3013												Fluent Validation in Web API											</h5>
3014										</div>
3015										
3016										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3017											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3018																							</span>
3019											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3020										</div>
3021									</li>
3022															</ul>
3023						</div>
3024					</div>
3025												</div>
3026									<div class="tutor-accordion-item">
3027				<h4 class="tutor-accordion-item-header">
3028					Asynchronous Code									</h4>
3029	
3030													<div class="tutor-accordion-item-body" style="display: none;">
3031						<div class="tutor-accordion-item-body-content">
3032							<ul class="tutor-course-content-list">
3033																										<li class="tutor-course-content-list-item">
3034										<div class="tutor-d-flex">
3035											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3036											<h5 class="tutor-course-content-list-item-title">
3037												What is Asynchronous Programming?											</h5>
3038										</div>
3039										
3040										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3041											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3042																							</span>
3043											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3044										</div>
3045									</li>
3046																										<li class="tutor-course-content-list-item">
3047										<div class="tutor-d-flex">
3048											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3049											<h5 class="tutor-course-content-list-item-title">
3050												Async, Await Keywords, and Return Types											</h5>
3051										</div>
3052										
3053										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3054											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3055																							</span>
3056											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3057										</div>
3058									</li>
3059																										<li class="tutor-course-content-list-item">
3060										<div class="tutor-d-flex">
3061											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3062											<h5 class="tutor-course-content-list-item-title">
3063												Repository Class and Interface Modifications											</h5>
3064										</div>
3065										
3066										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3067											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3068																							</span>
3069											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3070										</div>
3071									</li>
3072																										<li class="tutor-course-content-list-item">
3073										<div class="tutor-d-flex">
3074											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3075											<h5 class="tutor-course-content-list-item-title">
3076												Updating the Service Layer											</h5>
3077										</div>
3078										
3079										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3080											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3081																							</span>
3082											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3083										</div>
3084									</li>
3085																										<li class="tutor-course-content-list-item">
3086										<div class="tutor-d-flex">
3087											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3088											<h5 class="tutor-course-content-list-item-title">
3089												Controller Modification											</h5>
3090										</div>
3091										
3092										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3093											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3094																							</span>
3095											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3096										</div>
3097									</li>
3098																										<li class="tutor-course-content-list-item">
3099										<div class="tutor-d-flex">
3100											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3101											<h5 class="tutor-course-content-list-item-title">
3102												Assignment											</h5>
3103										</div>
3104										
3105										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3106											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3107																							</span>
3108											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3109										</div>
3110									</li>
3111																										<li class="tutor-course-content-list-item">
3112										<div class="tutor-d-flex">
3113											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3114											<h5 class="tutor-course-content-list-item-title">
3115												Continuation in Async Programming and Common Pitfalls											</h5>
3116										</div>
3117										
3118										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3119											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3120																							</span>
3121											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3122										</div>
3123									</li>
3124																										<li class="tutor-course-content-list-item">
3125										<div class="tutor-d-flex">
3126											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3127											<h5 class="tutor-course-content-list-item-title">
3128												Cancellation Token											</h5>
3129										</div>
3130										
3131										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3132											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3133																							</span>
3134											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3135										</div>
3136									</li>
3137																										<li class="tutor-course-content-list-item">
3138										<div class="tutor-d-flex">
3139											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3140											<h5 class="tutor-course-content-list-item-title">
3141												Assignment											</h5>
3142										</div>
3143										
3144										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3145											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3146																							</span>
3147											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3148										</div>
3149									</li>
3150															</ul>
3151						</div>
3152					</div>
3153												</div>
3154									<div class="tutor-accordion-item">
3155				<h4 class="tutor-accordion-item-header">
3156					Action Filters in ASP.NET Core Web API									</h4>
3157	
3158													<div class="tutor-accordion-item-body" style="display: none;">
3159						<div class="tutor-accordion-item-body-content">
3160							<ul class="tutor-course-content-list">
3161																										<li class="tutor-course-content-list-item">
3162										<div class="tutor-d-flex">
3163											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3164											<h5 class="tutor-course-content-list-item-title">
3165												About Action Filters											</h5>
3166										</div>
3167										
3168										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3169											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3170																							</span>
3171											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3172										</div>
3173									</li>
3174																										<li class="tutor-course-content-list-item">
3175										<div class="tutor-d-flex">
3176											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3177											<h5 class="tutor-course-content-list-item-title">
3178												<a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/the-scope-and-order-of-invocation-of-action-filters/"><span class="lesson-preview-title">The Scope and Order of Invocation of Action Filters</span></a>											</h5>
3179										</div>
3180										
3181										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3182											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3183																							</span>
3184											<span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3185										</div>
3186									</li>
3187																										<li class="tutor-course-content-list-item">
3188										<div class="tutor-d-flex">
3189											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3190											<h5 class="tutor-course-content-list-item-title">
3191												Improving the Code With Action Filters											</h5>
3192										</div>
3193										
3194										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3195											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3196																							</span>
3197											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3198										</div>
3199									</li>
3200																										<li class="tutor-course-content-list-item">
3201										<div class="tutor-d-flex">
3202											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3203											<h5 class="tutor-course-content-list-item-title">
3204												Refactoring the Service Layer											</h5>
3205										</div>
3206										
3207										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3208											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3209																							</span>
3210											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3211										</div>
3212									</li>
3213															</ul>
3214						</div>
3215					</div>
3216												</div>
3217									<div class="tutor-accordion-item">
3218				<h4 class="tutor-accordion-item-header">
3219					Paging in ASP.NET Core Web API									</h4>
3220	
3221													<div class="tutor-accordion-item-body" style="display: none;">
3222						<div class="tutor-accordion-item-body-content">
3223							<ul class="tutor-course-content-list">
3224																										<li class="tutor-course-content-list-item">
3225										<div class="tutor-d-flex">
3226											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3227											<h5 class="tutor-course-content-list-item-title">
3228												Paging Implementation											</h5>
3229										</div>
3230										
3231										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3232											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3233																							</span>
3234											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3235										</div>
3236									</li>
3237																										<li class="tutor-course-content-list-item">
3238										<div class="tutor-d-flex">
3239											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3240											<h5 class="tutor-course-content-list-item-title">
3241												Concrete Query											</h5>
3242										</div>
3243										
3244										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3245											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3246																							</span>
3247											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3248										</div>
3249									</li>
3250																										<li class="tutor-course-content-list-item">
3251										<div class="tutor-d-flex">
3252											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3253											<h5 class="tutor-course-content-list-item-title">
3254												Improving the Solution											</h5>
3255										</div>
3256										
3257										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3258											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3259																							</span>
3260											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3261										</div>
3262									</li>
3263																										<li class="tutor-course-content-list-item">
3264										<div class="tutor-d-flex">
3265											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3266											<h5 class="tutor-course-content-list-item-title">
3267												Additional Improvement											</h5>
3268										</div>
3269										
3270										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3271											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3272																							</span>
3273											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3274										</div>
3275									</li>
3276															</ul>
3277						</div>
3278					</div>
3279												</div>
3280									<div class="tutor-accordion-item">
3281				<h4 class="tutor-accordion-item-header">
3282					Filtering in ASP.NET Core Web API									</h4>
3283	
3284													<div class="tutor-accordion-item-body" style="display: none;">
3285						<div class="tutor-accordion-item-body-content">
3286							<ul class="tutor-course-content-list">
3287																										<li class="tutor-course-content-list-item">
3288										<div class="tutor-d-flex">
3289											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3290											<h5 class="tutor-course-content-list-item-title">
3291												What is Filtering?											</h5>
3292										</div>
3293										
3294										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3295											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3296																							</span>
3297											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3298										</div>
3299									</li>
3300																										<li class="tutor-course-content-list-item">
3301										<div class="tutor-d-flex">
3302											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3303											<h5 class="tutor-course-content-list-item-title">
3304												How is Filtering Different from Searching?											</h5>
3305										</div>
3306										
3307										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3308											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3309																							</span>
3310											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3311										</div>
3312									</li>
3313																										<li class="tutor-course-content-list-item">
3314										<div class="tutor-d-flex">
3315											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3316											<h5 class="tutor-course-content-list-item-title">
3317												Testing the Filtering Functionality											</h5>
3318										</div>
3319										
3320										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3321											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3322																							</span>
3323											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3324										</div>
3325									</li>
3326															</ul>
3327						</div>
3328					</div>
3329												</div>
3330									<div class="tutor-accordion-item">
3331				<h4 class="tutor-accordion-item-header">
3332					Searching in ASP.NET Core Web API									</h4>
3333	
3334													<div class="tutor-accordion-item-body" style="display: none;">
3335						<div class="tutor-accordion-item-body-content">
3336							<ul class="tutor-course-content-list">
3337																										<li class="tutor-course-content-list-item">
3338										<div class="tutor-d-flex">
3339											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3340											<h5 class="tutor-course-content-list-item-title">
3341												What is Searching?											</h5>
3342										</div>
3343										
3344										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3345											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3346																							</span>
3347											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3348										</div>
3349									</li>
3350																										<li class="tutor-course-content-list-item">
3351										<div class="tutor-d-flex">
3352											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3353											<h5 class="tutor-course-content-list-item-title">
3354												Implementing Searching in Our Application											</h5>
3355										</div>
3356										
3357										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3358											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3359																							</span>
3360											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3361										</div>
3362									</li>
3363																										<li class="tutor-course-content-list-item">
3364										<div class="tutor-d-flex">
3365											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3366											<h5 class="tutor-course-content-list-item-title">
3367												Testing Our Implementation											</h5>
3368										</div>
3369										
3370										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3371											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3372																							</span>
3373											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3374										</div>
3375									</li>
3376															</ul>
3377						</div>
3378					</div>
3379												</div>
3380									<div class="tutor-accordion-item">
3381				<h4 class="tutor-accordion-item-header">
3382					Sorting in ASP.NET Core Web API									</h4>
3383	
3384													<div class="tutor-accordion-item-body" style="display: none;">
3385						<div class="tutor-accordion-item-body-content">
3386							<ul class="tutor-course-content-list">
3387																										<li class="tutor-course-content-list-item">
3388										<div class="tutor-d-flex">
3389											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3390											<h5 class="tutor-course-content-list-item-title">
3391												What is Sorting											</h5>
3392										</div>
3393										
3394										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3395											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3396																							</span>
3397											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3398										</div>
3399									</li>
3400																										<li class="tutor-course-content-list-item">
3401										<div class="tutor-d-flex">
3402											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3403											<h5 class="tutor-course-content-list-item-title">
3404												<a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/sorting-implementation/"><span class="lesson-preview-title">Sorting Implementation</span></a>											</h5>
3405										</div>
3406										
3407										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3408											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3409																							</span>
3410											<span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3411										</div>
3412									</li>
3413																										<li class="tutor-course-content-list-item">
3414										<div class="tutor-d-flex">
3415											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3416											<h5 class="tutor-course-content-list-item-title">
3417												Testing The Sorting Implementation											</h5>
3418										</div>
3419										
3420										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3421											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3422																							</span>
3423											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3424										</div>
3425									</li>
3426																										<li class="tutor-course-content-list-item">
3427										<div class="tutor-d-flex">
3428											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3429											<h5 class="tutor-course-content-list-item-title">
3430												Improving the Sorting Implementation											</h5>
3431										</div>
3432										
3433										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3434											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3435																							</span>
3436											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3437										</div>
3438									</li>
3439															</ul>
3440						</div>
3441					</div>
3442												</div>
3443									<div class="tutor-accordion-item">
3444				<h4 class="tutor-accordion-item-header">
3445					Data Shaping									</h4>
3446	
3447													<div class="tutor-accordion-item-body" style="display: none;">
3448						<div class="tutor-accordion-item-body-content">
3449							<ul class="tutor-course-content-list">
3450																										<li class="tutor-course-content-list-item">
3451										<div class="tutor-d-flex">
3452											<span class="tutor-course-content-list-item-icon tutor-ic
3452on-document-text tutor-mr-12 tutor-mt-4"></span>
3453											<h5 class="tutor-course-content-list-item-title">
3454												What is Data Shaping?											</h5>
3455										</div>
3456										
3457										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3458											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3459																							</span>
3460											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3461										</div>
3462									</li>
3463																										<li class="tutor-course-content-list-item">
3464										<div class="tutor-d-flex">
3465											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3466											<h5 class="tutor-course-content-list-item-title">
3467												Data Shaping Implementation											</h5>
3468										</div>
3469										
3470										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3471											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3472																							</span>
3473											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3474										</div>
3475									</li>
3476																										<li class="tutor-course-content-list-item">
3477										<div class="tutor-d-flex">
3478											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3479											<h5 class="tutor-course-content-list-item-title">
3480												Finishing Data Shaping Implementation and Testing											</h5>
3481										</div>
3482										
3483										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3484											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3485																							</span>
3486											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3487										</div>
3488									</li>
3489																										<li class="tutor-course-content-list-item">
3490										<div class="tutor-d-flex">
3491											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3492											<h5 class="tutor-course-content-list-item-title">
3493												Resolving XML Serialization Problems											</h5>
3494										</div>
3495										
3496										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3497											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3498																							</span>
3499											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3500										</div>
3501									</li>
3502															</ul>
3503						</div>
3504					</div>
3505												</div>
3506									<div class="tutor-accordion-item">
3507				<h4 class="tutor-accordion-item-header">
3508					Supporting HATEOAS									</h4>
3509	
3510													<div class="tutor-accordion-item-body" style="display: none;">
3511						<div class="tutor-accordion-item-body-content">
3512							<ul class="tutor-course-content-list">
3513																										<li class="tutor-course-content-list-item">
3514										<div class="tutor-d-flex">
3515											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3516											<h5 class="tutor-course-content-list-item-title">
3517												What is HATEOAS and Why is it so Important?											</h5>
3518										</div>
3519										
3520										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3521											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3522																							</span>
3523											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3524										</div>
3525									</li>
3526																										<li class="tutor-course-content-list-item">
3527										<div class="tutor-d-flex">
3528											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3529											<h5 class="tutor-course-content-list-item-title">
3530												<a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/adding-links-in-the-project/"><span class="lesson-preview-title">Adding Links in the Project</span></a>											</h5>
3531										</div>
3532										
3533										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3534											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3535																							</span>
3536											<span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3537										</div>
3538									</li>
3539																										<li class="tutor-course-content-list-item">
3540										<div class="tutor-d-flex">
3541											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3542											<h5 class="tutor-course-content-list-item-title">
3543												Additional Project Changes											</h5>
3544										</div>
3545										
3546										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3547											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3548																							</span>
3549											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3550										</div>
3551									</li>
3552																										<li class="tutor-course-content-list-item">
3553										<div class="tutor-d-flex">
3554											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3555											<h5 class="tutor-course-content-list-item-title">
3556												Adding Custom Media Types											</h5>
3557										</div>
3558										
3559										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3560											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3561																							</span>
3562											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3563										</div>
3564									</li>
3565																										<li class="tutor-course-content-list-item">
3566										<div class="tutor-d-flex">
3567											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3568											<h5 class="tutor-course-content-list-item-title">
3569												Implementing HATEOAS											</h5>
3570										</div>
3571										
3572										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3573											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3574																							</span>
3575											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3576										</div>
3577									</li>
3578															</ul>
3579						</div>
3580					</div>
3581												</div>
3582									<div class="tutor-accordion-item">
3583				<h4 class="tutor-accordion-item-header">
3584					Working With OPTIONS and HEAD Requests									</h4>
3585	
3586													<div class="tutor-accordion-item-body" style="display: none;">
3587						<div class="tutor-accordion-item-body-content">
3588							<ul class="tutor-course-content-list">
3589																										<li class="tutor-course-content-list-item">
3590										<div class="tutor-d-flex">
3591											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3592											<h5 class="tutor-course-content-list-item-title">
3593												OPTIONS HTTP Request											</h5>
3594										</div>
3595										
3596										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3597											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3598																							</span>
3599											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3600										</div>
3601									</li>
3602																										<li class="tutor-course-content-list-item">
3603										<div class="tutor-d-flex">
3604											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3605											<h5 class="tutor-course-content-list-item-title">
3606												HEAD HTTP Request											</h5>
3607										</div>
3608										
3609										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3610											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3611																							</span>
3612											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3613										</div>
3614									</li>
3615															</ul>
3616						</div>
3617					</div>
3618												</div>
3619									<div class="tutor-accordion-item">
3620				<h4 class="tutor-accordion-item-header">
3621					Root Document in ASP.NET Core Web API									</h4>
3622	
3623													<div class="tutor-accordion-item-body" style="display: none;">
3624						<div class="tutor-accordion-item-body-content">
3625							<ul class="tutor-course-content-list">
3626																										<li class="tutor-course-content-list-item">
3627										<div class="tutor-d-flex">
3628											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3629											<h5 class="tutor-course-content-list-item-title">
3630												Root Document Implementation											</h5>
3631										</div>
3632										
3633										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3634											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3635																							</span>
3636											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3637										</div>
3638									</li>
3639															</ul>
3640						</div>
3641					</div>
3642												</div>
3643									<div class="tutor-accordion-item">
3644				<h4 class="tutor-accordion-item-header">
3645					Versioning APIs									</h4>
3646	
3647													<div class="tutor-accordion-item-body" style="display: none;">
3648						<div class="tutor-accordion-item-body-content">
3649							<ul class="tutor-course-content-list">
3650																										<li class="tutor-course-content-list-item">
3651										<div class="tutor-d-flex">
3652											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3653											<h5 class="tutor-course-content-list-item-title">
3654												About Versioning and Package Installation											</h5>
3655										</div>
3656										
3657										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3658											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3659																							</span>
3660											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3661										</div>
3662									</li>
3663																										<li class="tutor-course-content-list-item">
3664										<div class="tutor-d-flex">
3665											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3666											<h5 class="tutor-course-content-list-item-title">
3667												<a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/versioning-examples/"><span class="lesson-preview-title">Versioning Examples</span></a>											</h5>
3668										</div>
3669										
3670										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3671											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3672																							</span>
3673											<span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3674										</div>
3675									</li>
3676																										<li class="tutor-course-content-list-item">
3677										<div class="tutor-d-flex">
3678											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3679											<h5 class="tutor-course-content-list-item-title">
3680												Deprecating Versions And Conventions											</h5>
3681										</div>
3682										
3683										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3684											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3685																							</span>
3686											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3687										</div>
3688									</li>
3689															</ul>
3690						</div>
3691					</div>
3692												</div>
3693									<div class="tutor-accordion-item">
3694				<h4 class="tutor-accordion-item-header">
3695					Caching in ASP.NET Core									</h4>
3696	
3697													<div class="tutor-accordion-item-body" style="display: none;">
3698						<div class="tutor-accordion-item-body-content">
3699							<ul class="tutor-course-content-list">
3700																										<li class="tutor-course-content-list-item">
3701										<div class="tutor-d-flex">
3702											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3703											<h5 class="tutor-course-content-list-item-title">
3704												About Caching											</h5>
3705										</div>
3706										
3707										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3708											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3709																							</span>
3710											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3711										</div>
3712									</li>
3713																										<li class="tutor-course-content-list-item">
3714										<div class="tutor-d-flex">
3715											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3716											<h5 class="tutor-course-content-list-item-title">
3717												Adding Cache Headers											</h5>
3718										</div>
3719										
3720										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3721											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3722																							</span>
3723											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3724										</div>
3725									</li>
3726																										<li class="tutor-course-content-list-item">
3727										<div class="tutor-d-flex">
3728											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3729											<h5 class="tutor-course-content-list-item-title">
3730												Adding Cache-Store											</h5>
3731										</div>
3732										
3733										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3734											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3735																							</span>
3736											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3737										</div>
3738									</li>
3739																										<li class="tutor-course-content-list-item">
3740										<div class="tutor-d-flex">
3741											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3742											<h5 class="tutor-course-content-list-item-title">
3743												Output Caching											</h5>
3744										</div>
3745										
3746										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3747											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3748																							</span>
3749											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3750										</div>
3751									</li>
3752																										<li 
3752class="tutor-course-content-list-item">
3753										<div class="tutor-d-flex">
3754											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3755											<h5 class="tutor-course-content-list-item-title">
3756												Using Output Caching In Our App											</h5>
3757										</div>
3758										
3759										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3760											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3761																							</span>
3762											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3763										</div>
3764									</li>
3765																										<li class="tutor-course-content-list-item">
3766										<div class="tutor-d-flex">
3767											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3768											<h5 class="tutor-course-content-list-item-title">
3769												Output Cache Keys											</h5>
3770										</div>
3771										
3772										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3773											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3774																							</span>
3775											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3776										</div>
3777									</li>
3778																										<li class="tutor-course-content-list-item">
3779										<div class="tutor-d-flex">
3780											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3781											<h5 class="tutor-course-content-list-item-title">
3782												Caching Revalidation											</h5>
3783										</div>
3784										
3785										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3786											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3787																							</span>
3788											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3789										</div>
3790									</li>
3791															</ul>
3792						</div>
3793					</div>
3794												</div>
3795									<div class="tutor-accordion-item">
3796				<h4 class="tutor-accordion-item-header">
3797					Rate Limiting and Throttling									</h4>
3798	
3799													<div class="tutor-accordion-item-body" style="display: none;">
3800						<div class="tutor-accordion-item-body-content">
3801							<ul class="tutor-course-content-list">
3802																										<li class="tutor-course-content-list-item">
3803										<div class="tutor-d-flex">
3804											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3805											<h5 class="tutor-course-content-list-item-title">
3806												About Rate Limiting											</h5>
3807										</div>
3808										
3809										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3810											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3811																							</span>
3812											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3813										</div>
3814									</li>
3815																										<li class="tutor-course-content-list-item">
3816										<div class="tutor-d-flex">
3817											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3818											<h5 class="tutor-course-content-list-item-title">
3819												Implementing Rate Limiting											</h5>
3820										</div>
3821										
3822										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3823											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3824																							</span>
3825											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3826										</div>
3827									</li>
3828															</ul>
3829						</div>
3830					</div>
3831												</div>
3832									<div class="tutor-accordion-item">
3833				<h4 class="tutor-accordion-item-header">
3834					Authentication and Authorization in Web API									</h4>
3835	
3836													<div class="tutor-accordion-item-body" style="display: none;">
3837						<div class="tutor-accordion-item-body-content">
3838							<ul class="tutor-course-content-list">
3839																										<li class="tutor-course-content-list-item">
3840										<div class="tutor-d-flex">
3841											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3842											<h5 class="tutor-course-content-list-item-title">
3843												About The Authentication											</h5>
3844										</div>
3845										
3846										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3847											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3848																							</span>
3849											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3850										</div>
3851									</li>
3852																										<li class="tutor-course-content-list-item">
3853										<div class="tutor-d-flex">
3854											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3855											<h5 class="tutor-course-content-list-item-title">
3856												Implementing Identity in ASP.NET Core Project											</h5>
3857										</div>
3858										
3859										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3860											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3861																							</span>
3862											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3863										</div>
3864									</li>
3865																										<li class="tutor-course-content-list-item">
3866										<div class="tutor-d-flex">
3867											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3868											<h5 class="tutor-course-content-list-item-title">
3869												Creating Tables and Inserting Roles											</h5>
3870										</div>
3871										
3872										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3873											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3874																							</span>
3875											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3876										</div>
3877									</li>
3878																										<li class="tutor-course-content-list-item">
3879										<div class="tutor-d-flex">
3880											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3881											<h5 class="tutor-course-content-list-item-title">
3882												User Creation											</h5>
3883										</div>
3884										
3885										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3886											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3887																							</span>
3888											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3889										</div>
3890									</li>
3891																										<li class="tutor-course-content-list-item">
3892										<div class="tutor-d-flex">
3893											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3894											<h5 class="tutor-course-content-list-item-title">
3895												JWT Big Picture											</h5>
3896										</div>
3897										
3898										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3899											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3900																							</span>
3901											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3902										</div>
3903									</li>
3904																										<li class="tutor-course-content-list-item">
3905										<div class="tutor-d-flex">
3906											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3907											<h5 class="tutor-course-content-list-item-title">
3908												JWT Configuration											</h5>
3909										</div>
3910										
3911										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3912											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3913																							</span>
3914											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3915										</div>
3916									</li>
3917																										<li class="tutor-course-content-list-item">
3918										<div class="tutor-d-flex">
3919											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3920											<h5 class="tutor-course-content-list-item-title">
3921												Protecting Endpoints											</h5>
3922										</div>
3923										
3924										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3925											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3926																							</span>
3927											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3928										</div>
3929									</li>
3930																										<li class="tutor-course-content-list-item">
3931										<div class="tutor-d-flex">
3932											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3933											<h5 class="tutor-course-content-list-item-title">
3934												Implementing Authentication											</h5>
3935										</div>
3936										
3937										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3938											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3939																							</span>
3940											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3941										</div>
3942									</li>
3943																										<li class="tutor-course-content-list-item">
3944										<div class="tutor-d-flex">
3945											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3946											<h5 class="tutor-course-content-list-item-title">
3947												Role-Based Authorization											</h5>
3948										</div>
3949										
3950										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3951											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3952																							</span>
3953											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3954										</div>
3955									</li>
3956															</ul>
3957						</div>
3958					</div>
3959												</div>
3960									<div class="tutor-accordion-item">
3961				<h4 class="tutor-accordion-item-header">
3962					Refresh Token In ASP.NET Core Web API									</h4>
3963	
3964													<div class="tutor-accordion-item-body" style="display: none;">
3965						<div class="tutor-accordion-item-body-content">
3966							<ul class="tutor-course-content-list">
3967																										<li class="tutor-course-content-list-item">
3968										<div class="tutor-d-flex">
3969											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3970											<h5 class="tutor-course-content-list-item-title">
3971												About Refresh Token											</h5>
3972										</div>
3973										
3974										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3975											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3976																							</span>
3977											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3978										</div>
3979									</li>
3980																										<li class="tutor-course-content-list-item">
3981										<div class="tutor-d-flex">
3982											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3983											<h5 class="tutor-course-content-list-item-title">
3984												The Need for Refresh Tokens											</h5>
3985										</div>
3986										
3987										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
3988											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
3989																							</span>
3990											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
3991										</div>
3992									</li>
3993																										<li class="tutor-course-content-list-item">
3994										<div class="tutor-d-flex">
3995											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
3996											<h5 class="tutor-course-content-list-item-title">
3997												Refresh Token Implementation											</h5>
3998										</div>
3999										
4000										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4001											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4002																							</span>
4003											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4004										</div>
4005									</li>
4006																										<li class="tutor-course-content-list-item">
4007										<div class="tutor-d-flex">
4008											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4009											<h5 class="tutor-course-content-list-item-title">
4010												<a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/token-controller-implementation/"><span class="lesson-preview-title">Token Controller Implementation</span></a>											</h5>
4011										</div>
4012										
4013										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4014											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4015																							</span>
4016											<span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4017										</div>
4018									</li>
4019															</ul>
4020						</div>
4021					</div>
4022												</div>
4023									<div class="tutor-accordion-item">
4024				<h4 class="tutor-accordion-item-header">
4025					Binding Configuration and Options Pattern									</h4>
4026	
4027													<div class="tutor-accordion-item-body" style="display: none;">
4028						<div class="tutor-accordion-item-body-content">
4029							<ul class="tutor-course-content-list">
4030																										<li class="tutor-course-content-list-item">
4031										<div class="tutor-d-flex">
4032											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4033											<h5 class="tutor-course-content-list-item-title">
4034												The Previous Implementation											</h5>
4035										</div>
4036										
4037										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4038											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4039																							</span>
4040											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4041										</div>
4042									</li>
4043																										<li class="tutor-course-content-list-item">
4044										<div class="tutor-d-flex">
4045											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4046											<h5 class="tutor-course-content-list-item-title">
4047												Binding Configuration											</h5>
4048										</div>
4049										
4050										<div class="tutor-d-flex t
4050utor-align-center tutor-flex-shrink-0 tutor-mt-2">
4051											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4052																							</span>
4053											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4054										</div>
4055									</li>
4056																										<li class="tutor-course-content-list-item">
4057										<div class="tutor-d-flex">
4058											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4059											<h5 class="tutor-course-content-list-item-title">
4060												Options Pattern											</h5>
4061										</div>
4062										
4063										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4064											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4065																							</span>
4066											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4067										</div>
4068									</li>
4069																										<li class="tutor-course-content-list-item">
4070										<div class="tutor-d-flex">
4071											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4072											<h5 class="tutor-course-content-list-item-title">
4073												IOptionsSnapshot and IOptionsMonitor											</h5>
4074										</div>
4075										
4076										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4077											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4078																							</span>
4079											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4080										</div>
4081									</li>
4082															</ul>
4083						</div>
4084					</div>
4085												</div>
4086									<div class="tutor-accordion-item">
4087				<h4 class="tutor-accordion-item-header">
4088					Health Checks in ASP.NET Core Web API									</h4>
4089	
4090													<div class="tutor-accordion-item-body" style="display: none;">
4091						<div class="tutor-accordion-item-body-content">
4092							<ul class="tutor-course-content-list">
4093																										<li class="tutor-course-content-list-item">
4094										<div class="tutor-d-flex">
4095											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4096											<h5 class="tutor-course-content-list-item-title">
4097												About Health Checks in ASP.NET Core											</h5>
4098										</div>
4099										
4100										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4101											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4102																							</span>
4103											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4104										</div>
4105									</li>
4106																										<li class="tutor-course-content-list-item">
4107										<div class="tutor-d-flex">
4108											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4109											<h5 class="tutor-course-content-list-item-title">
4110												Implementing Health Checks in ASP.NET Core Web API											</h5>
4111										</div>
4112										
4113										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4114											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4115																							</span>
4116											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4117										</div>
4118									</li>
4119																										<li class="tutor-course-content-list-item">
4120										<div class="tutor-d-flex">
4121											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4122											<h5 class="tutor-course-content-list-item-title">
4123												Creating Database Health Check											</h5>
4124										</div>
4125										
4126										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4127											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4128																							</span>
4129											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4130										</div>
4131									</li>
4132																										<li class="tutor-course-content-list-item">
4133										<div class="tutor-d-flex">
4134											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4135											<h5 class="tutor-course-content-list-item-title">
4136												Creating Custom Health Checks											</h5>
4137										</div>
4138										
4139										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4140											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4141																							</span>
4142											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4143										</div>
4144									</li>
4145																										<li class="tutor-course-content-list-item">
4146										<div class="tutor-d-flex">
4147											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4148											<h5 class="tutor-course-content-list-item-title">
4149												Adding UI to Enhance Health Check Response											</h5>
4150										</div>
4151										
4152										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4153											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4154																							</span>
4155											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4156										</div>
4157									</li>
4158															</ul>
4159						</div>
4160					</div>
4161												</div>
4162									<div class="tutor-accordion-item">
4163				<h4 class="tutor-accordion-item-header">
4164					Documenting APIs									</h4>
4165	
4166													<div class="tutor-accordion-item-body" style="display: none;">
4167						<div class="tutor-accordion-item-body-content">
4168							<ul class="tutor-course-content-list">
4169																										<li class="tutor-course-content-list-item">
4170										<div class="tutor-d-flex">
4171											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4172											<h5 class="tutor-course-content-list-item-title">
4173												About Swagger											</h5>
4174										</div>
4175										
4176										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4177											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4178																							</span>
4179											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4180										</div>
4181									</li>
4182																										<li class="tutor-course-content-list-item">
4183										<div class="tutor-d-flex">
4184											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4185											<h5 class="tutor-course-content-list-item-title">
4186												Swagger Integration Into Our Project											</h5>
4187										</div>
4188										
4189										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4190											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4191																							</span>
4192											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4193										</div>
4194									</li>
4195																										<li class="tutor-course-content-list-item">
4196										<div class="tutor-d-flex">
4197											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4198											<h5 class="tutor-course-content-list-item-title">
4199												Adding Authorization Support											</h5>
4200										</div>
4201										
4202										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4203											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4204																							</span>
4205											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4206										</div>
4207									</li>
4208																										<li class="tutor-course-content-list-item">
4209										<div class="tutor-d-flex">
4210											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4211											<h5 class="tutor-course-content-list-item-title">
4212												Extending Swagger Configuration											</h5>
4213										</div>
4214										
4215										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4216											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4217																							</span>
4218											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4219										</div>
4220									</li>
4221															</ul>
4222						</div>
4223					</div>
4224												</div>
4225									<div class="tutor-accordion-item">
4226				<h4 class="tutor-accordion-item-header">
4227					Testing ASP.NET Core Web API									</h4>
4228	
4229													<div class="tutor-accordion-item-body" style="display: none;">
4230						<div class="tutor-accordion-item-body-content">
4231							<ul class="tutor-course-content-list">
4232																										<li class="tutor-course-content-list-item">
4233										<div class="tutor-d-flex">
4234											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4235											<h5 class="tutor-course-content-list-item-title">
4236												Why Testing Matters?											</h5>
4237										</div>
4238										
4239										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4240											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4241																							</span>
4242											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4243										</div>
4244									</li>
4245																										<li class="tutor-course-content-list-item">
4246										<div class="tutor-d-flex">
4247											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4248											<h5 class="tutor-course-content-list-item-title">
4249												Types Of Tests											</h5>
4250										</div>
4251										
4252										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4253											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4254																							</span>
4255											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4256										</div>
4257									</li>
4258																										<li class="tutor-course-content-list-item">
4259										<div class="tutor-d-flex">
4260											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4261											<h5 class="tutor-course-content-list-item-title">
4262												Choosing the Right Tools for the Job											</h5>
4263										</div>
4264										
4265										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4266											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4267																							</span>
4268											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4269										</div>
4270									</li>
4271																										<li class="tutor-course-content-list-item">
4272										<div class="tutor-d-flex">
4273											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4274											<h5 class="tutor-course-content-list-item-title">
4275												<a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/setting-up-xunit-with-testcontainers/"><span class="lesson-preview-title">Setting Up xUnit with Testcontainers</span></a>											</h5>
4276										</div>
4277										
4278										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4279											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4280																							</span>
4281											<span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4282										</div>
4283									</li>
4284																										<li class="tutor-course-content-list-item">
4285										<div class="tutor-d-flex">
4286											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4287											<h5 class="tutor-course-content-list-item-title">
4288												Creating Test Classes											</h5>
4289										</div>
4290										
4291										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4292											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4293																							</span>
4294											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4295										</div>
4296									</li>
4297																										<li class="tutor-course-content-list-item">
4298										<div class="tutor-d-flex">
4299											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4300											<h5 class="tutor-course-content-list-item-title">
4301												Validation Tests											</h5>
4302										</div>
4303										
4304										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4305											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4306																							</span>
4307											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4308										</div>
4309									</li>
4310																										<li class="tutor-course-content-list-item">
4311										<div class="tutor-d-flex">
4312											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4313											<h5 class="tutor-course-content-list-item-title">
4314												Authorization Tests											</h5>
4315										</div>
4316										
4317										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4318											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4319																							</span>
4320											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4321										</div>
4322									</li>
4323																										<li class="tutor-course-content-list-item">
4324										<div class="tutor-d-flex">
4325											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4326											<h5 class="tutor-course-content-list-item-title">
4327												Paging, Filtering, Searching, and Sorting Tests											</h5>
4328										</div>
4329										
4330										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4331											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4332																							</span>
4333											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4334										</div>
4335									</li>
4336																										<li class="tutor-course-content-list-item">
4337										<div class="tutor-d-flex">
4338											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4339											<h5 class="tutor-course-content-list-item-title">
4340												What&#8217;s Next?											</h5>
4341										</d
4341iv>
4342										
4343										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4344											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4345																							</span>
4346											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4347										</div>
4348									</li>
4349															</ul>
4350						</div>
4351					</div>
4352												</div>
4353									<div class="tutor-accordion-item">
4354				<h4 class="tutor-accordion-item-header">
4355					Deployment to IIS									</h4>
4356	
4357													<div class="tutor-accordion-item-body" style="display: none;">
4358						<div class="tutor-accordion-item-body-content">
4359							<ul class="tutor-course-content-list">
4360																										<li class="tutor-course-content-list-item">
4361										<div class="tutor-d-flex">
4362											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4363											<h5 class="tutor-course-content-list-item-title">
4364												Creating Publish Files											</h5>
4365										</div>
4366										
4367										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4368											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4369																							</span>
4370											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4371										</div>
4372									</li>
4373																										<li class="tutor-course-content-list-item">
4374										<div class="tutor-d-flex">
4375											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4376											<h5 class="tutor-course-content-list-item-title">
4377												Windows Server Hosting Bundle and IIS Installation											</h5>
4378										</div>
4379										
4380										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4381											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4382																							</span>
4383											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4384										</div>
4385									</li>
4386																										<li class="tutor-course-content-list-item">
4387										<div class="tutor-d-flex">
4388											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4389											<h5 class="tutor-course-content-list-item-title">
4390												Configuring Environment File											</h5>
4391										</div>
4392										
4393										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4394											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4395																							</span>
4396											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4397										</div>
4398									</li>
4399																										<li class="tutor-course-content-list-item">
4400										<div class="tutor-d-flex">
4401											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4402											<h5 class="tutor-course-content-list-item-title">
4403												Testing Deployed Application											</h5>
4404										</div>
4405										
4406										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4407											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4408																							</span>
4409											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4410										</div>
4411									</li>
4412															</ul>
4413						</div>
4414					</div>
4415												</div>
4416									<div class="tutor-accordion-item">
4417				<h4 class="tutor-accordion-item-header">
4418					APPENDIX: The HTTP Reference Tables									</h4>
4419	
4420													<div class="tutor-accordion-item-body" style="display: none;">
4421						<div class="tutor-accordion-item-body-content">
4422							<ul class="tutor-course-content-list">
4423																										<li class="tutor-course-content-list-item">
4424										<div class="tutor-d-flex">
4425											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4426											<h5 class="tutor-course-content-list-item-title">
4427												Request Methods											</h5>
4428										</div>
4429										
4430										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4431											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4432																							</span>
4433											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4434										</div>
4435									</li>
4436																										<li class="tutor-course-content-list-item">
4437										<div class="tutor-d-flex">
4438											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4439											<h5 class="tutor-course-content-list-item-title">
4440												Status Codes											</h5>
4441										</div>
4442										
4443										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4444											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4445																							</span>
4446											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4447										</div>
4448									</li>
4449																										<li class="tutor-course-content-list-item">
4450										<div class="tutor-d-flex">
4451											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4452											<h5 class="tutor-course-content-list-item-title">
4453												Request Headers											</h5>
4454										</div>
4455										
4456										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4457											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4458																							</span>
4459											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4460										</div>
4461									</li>
4462																										<li class="tutor-course-content-list-item">
4463										<div class="tutor-d-flex">
4464											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4465											<h5 class="tutor-course-content-list-item-title">
4466												Mime Types											</h5>
4467										</div>
4468										
4469										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4470											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4471																							</span>
4472											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4473										</div>
4474									</li>
4475															</ul>
4476						</div>
4477					</div>
4478												</div>
4479									<div class="tutor-accordion-item">
4480				<h4 class="tutor-accordion-item-header">
4481					BONUS: Improve Response Flow and Performance With Discriminated Unions									</h4>
4482	
4483													<div class="tutor-accordion-item-body" style="display: none;">
4484						<div class="tutor-accordion-item-body-content">
4485							<ul class="tutor-course-content-list">
4486																										<li class="tutor-course-content-list-item">
4487										<div class="tutor-d-flex">
4488											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4489											<h5 class="tutor-course-content-list-item-title">
4490												What are Discriminated Unions and Why Should We Use It											</h5>
4491										</div>
4492										
4493										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4494											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4495																							</span>
4496											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4497										</div>
4498									</li>
4499																										<li class="tutor-course-content-list-item">
4500										<div class="tutor-d-flex">
4501											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4502											<h5 class="tutor-course-content-list-item-title">
4503												Installation and Creating the Required Response Types											</h5>
4504										</div>
4505										
4506										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4507											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4508																							</span>
4509											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4510										</div>
4511									</li>
4512																										<li class="tutor-course-content-list-item">
4513										<div class="tutor-d-flex">
4514											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4515											<h5 class="tutor-course-content-list-item-title">
4516												CompanyService Modification											</h5>
4517										</div>
4518										
4519										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4520											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4521																							</span>
4522											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4523										</div>
4524									</li>
4525																										<li class="tutor-course-content-list-item">
4526										<div class="tutor-d-flex">
4527											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4528											<h5 class="tutor-course-content-list-item-title">
4529												CompaniesController Modifications											</h5>
4530										</div>
4531										
4532										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4533											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4534																							</span>
4535											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4536										</div>
4537									</li>
4538																										<li class="tutor-course-content-list-item">
4539										<div class="tutor-d-flex">
4540											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4541											<h5 class="tutor-course-content-list-item-title">
4542												Testing the Application											</h5>
4543										</div>
4544										
4545										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4546											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4547																							</span>
4548											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4549										</div>
4550									</li>
4551																										<li class="tutor-course-content-list-item">
4552										<div class="tutor-d-flex">
4553											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4554											<h5 class="tutor-course-content-list-item-title">
4555												EmployeeService Modification											</h5>
4556										</div>
4557										
4558										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4559											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4560																							</span>
4561											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4562										</div>
4563									</li>
4564																										<li class="tutor-course-content-list-item">
4565										<div class="tutor-d-flex">
4566											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4567											<h5 class="tutor-course-content-list-item-title">
4568												EmployeesController Modification											</h5>
4569										</div>
4570										
4571										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4572											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4573																							</span>
4574											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4575										</div>
4576									</li>
4577															</ul>
4578						</div>
4579					</div>
4580												</div>
4581									<div class="tutor-accordion-item">
4582				<h4 class="tutor-accordion-item-header">
4583					BONUS: CQRS and MediatR With ASP.NET Core Web API									</h4>
4584	
4585													<div class="tutor-accordion-item-body" style="display: none;">
4586						<div class="tutor-accordion-item-body-content">
4587							<ul class="tutor-course-content-list">
4588																										<li class="tutor-course-content-list-item">
4589										<div class="tutor-d-flex">
4590											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4591											<h5 class="tutor-course-content-list-item-title">
4592												About CQRS and Mediator Pattern											</h5>
4593										</div>
4594										
4595										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4596											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4597																							</span>
4598											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4599										</div>
4600									</li>
4601																										<li class="tutor-course-content-list-item">
4602										<div class="tutor-d-flex">
4603											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4604											<h5 class="tutor-course-content-list-item-title">
4605												Adding Application Project and Initial Configuration											</h5>
4606										</div>
4607										
4608										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4609											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4610																							</span>
4611											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4612										</div>
4613									</li>
4614																										<li class="tutor-course-content-list-item">
4615										<div class="tutor-d-flex">
4616											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4617											<h5 class="tutor-course-content-list-item-title">
4618												Requests With MediatR											</h5>
4619										</div>
4620										
4621										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4622											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4623																							</span>
4624											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4625										</div>
4626									</li>
4627																										<li class="tutor-course-content-list-item">
4628										<div class="tutor-d-flex">
4629											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4630											<h5 class="tutor-course-content-list-item-title">
4631												Commands with MediatR											</h5>
4632										</div>
4633										
4634										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4635											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4636																							</span>
4637											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4638										</div>
4639									</li>
4640																	
4640									<li class="tutor-course-content-list-item">
4641										<div class="tutor-d-flex">
4642											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4643											<h5 class="tutor-course-content-list-item-title">
4644												MediatR Notifications											</h5>
4645										</div>
4646										
4647										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4648											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4649																							</span>
4650											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4651										</div>
4652									</li>
4653																										<li class="tutor-course-content-list-item">
4654										<div class="tutor-d-flex">
4655											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4656											<h5 class="tutor-course-content-list-item-title">
4657												MediatR Behaviors											</h5>
4658										</div>
4659										
4660										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4661											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4662																							</span>
4663											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4664										</div>
4665									</li>
4666															</ul>
4667						</div>
4668					</div>
4669												</div>
4670									<div class="tutor-accordion-item">
4671				<h4 class="tutor-accordion-item-header">
4672					BONUS: Working With Multiple Databases									</h4>
4673	
4674													<div class="tutor-accordion-item-body" style="display: none;">
4675						<div class="tutor-accordion-item-body-content">
4676							<ul class="tutor-course-content-list">
4677																										<li class="tutor-course-content-list-item">
4678										<div class="tutor-d-flex">
4679											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4680											<h5 class="tutor-course-content-list-item-title">
4681												Adding Support For Another Database											</h5>
4682										</div>
4683										
4684										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4685											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4686																							</span>
4687											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4688										</div>
4689									</li>
4690																										<li class="tutor-course-content-list-item">
4691										<div class="tutor-d-flex">
4692											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4693											<h5 class="tutor-course-content-list-item-title">
4694												Injecting Multiple Databases in the Repository Pattern											</h5>
4695										</div>
4696										
4697										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4698											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4699																							</span>
4700											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4701										</div>
4702									</li>
4703																										<li class="tutor-course-content-list-item">
4704										<div class="tutor-d-flex">
4705											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4706											<h5 class="tutor-course-content-list-item-title">
4707												Client Repository Layer Implementation											</h5>
4708										</div>
4709										
4710										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4711											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4712																							</span>
4713											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4714										</div>
4715									</li>
4716																										<li class="tutor-course-content-list-item">
4717										<div class="tutor-d-flex">
4718											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4719											<h5 class="tutor-course-content-list-item-title">
4720												Client Service Layer Implementation											</h5>
4721										</div>
4722										
4723										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4724											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4725																							</span>
4726											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4727										</div>
4728									</li>
4729																										<li class="tutor-course-content-list-item">
4730										<div class="tutor-d-flex">
4731											<span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span>
4732											<h5 class="tutor-course-content-list-item-title">
4733												Testing Multiple Databases											</h5>
4734										</div>
4735										
4736										<div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2">
4737											<span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted">
4738																							</span>
4739											<span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span>
4740										</div>
4741									</li>
4742															</ul>
4743						</div>
4744					</div>
4745												</div>
4746					</div>
4747	</div>
4748
4749							</div>
4750													<div id="tutor-course-details-tab-reviews" class="tutor-tab-item">
4751								
4752<div class="tutor-pagination-wrapper-replaceable">
4753	<h3 class="tutor-fs-5 tutor-fw-bold tutor-color-black tutor-mb-24">
4754		Student Ratings &amp; Reviews	</h3>
4755
4756			<div class="tutor-card tutor-review-card">
4757			<div class="tutor-review-summary tutor-p-24 tutor-p-lg-40">
4758				<div class="tutor-row tutor-gx-xl-5 tutor-align-center">
4759					<div class="tutor-col-lg-auto tutor-text-center tutor-mb-16 tutor-mb-lg-0">
4760						<div class="tutor-review-summary-average-rating tutor-mb-20">
4761							4.9						</div>
4762
4763						<div>
4764							<div class="tutor-d-inline-block">
4765										<div class="tutor-ratings tutor-ratings-lg">
4766			<div class="tutor-ratings-stars">
4767			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
4768					</div>
4769										</div>
4770						</div>
4771
4772						<div class="tutor-fs-6 tutor-color-secondary tutor-mt-12 tutor-total-rating-count">
4773							Total 							25							 Ratings						</div>
4774					</div>
4775
4776					<div class="tutor-col-lg">
4777						<div class="tutor-review-summary-ratings">
4778																							<div class="tutor-row tutor-align-center tutor-review-summary-rating">
4779									<div class="tutor-col-auto">
4780										<div class="tutor-ratings">
4781											<div class="tutor-ratings-stars">
4782												<span class="tutor-icon-star-line" aria-hidden="true"></span>
4783											</div>
4784											<div class="tutor-ratings-average">
4785												5											</div>
4786										</div>
4787									</div>
4788
4789									<div class="tutor-col">
4790										<div class="tutor-progress-bar tutor-ratings-progress-bar" style="--tutor-progress-value: 94.198895027624%">
4791											<span class="tutor-progress-value" aria-hidden="true"></span>
4792										</div>
4793									</div>
4794
4795									<div class="tutor-col-4 tutor-col-lg-3">
4796										<span class="tutor-fs-6 tutor-color-secondary tutor-individual-star-rating">
4797											341 Ratings										</span>
4798									</div>
4799								</div>
4800																							<div class="tutor-row tutor-align-center tutor-review-summary-rating">
4801									<div class="tutor-col-auto">
4802										<div class="tutor-ratings">
4803											<div class="tutor-ratings-stars">
4804												<span class="tutor-icon-star-line" aria-hidden="true"></span>
4805											</div>
4806											<div class="tutor-ratings-average">
4807												4											</div>
4808										</div>
4809									</div>
4810
4811									<div class="tutor-col">
4812										<div class="tutor-progress-bar tutor-ratings-progress-bar" style="--tutor-progress-value: 5.2486187845304%">
4813											<span class="tutor-progress-value" aria-hidden="true"></span>
4814										</div>
4815									</div>
4816
4817									<div class="tutor-col-4 tutor-col-lg-3">
4818										<span class="tutor-fs-6 tutor-color-secondary tutor-individual-star-rating">
4819											19 Ratings										</span>
4820									</div>
4821								</div>
4822																							<div class="tutor-row tutor-align-center tutor-review-summary-rating">
4823									<div class="tutor-col-auto">
4824										<div class="tutor-ratings">
4825											<div class="tutor-ratings-stars">
4826												<span class="tutor-icon-star-line" aria-hidden="true"></span>
4827											</div>
4828											<div class="tutor-ratings-average">
4829												3											</div>
4830										</div>
4831									</div>
4832
4833									<div class="tutor-col">
4834										<div class="tutor-progress-bar tutor-ratings-progress-bar" style="--tutor-progress-value: 0.27624309392265%">
4835											<span class="tutor-progress-value" aria-hidden="true"></span>
4836										</div>
4837									</div>
4838
4839									<div class="tutor-col-4 tutor-col-lg-3">
4840										<span class="tutor-fs-6 tutor-color-secondary tutor-individual-star-rating">
4841											1 Rating										</span>
4842									</div>
4843								</div>
4844																							<div class="tutor-row tutor-align-center tutor-review-summary-rating">
4845									<div class="tutor-col-auto">
4846										<div class="tutor-ratings">
4847											<div class="tutor-ratings-stars">
4848												<span class="tutor-icon-star-line" aria-hidden="true"></span>
4849											</div>
4850											<div class="tutor-ratings-average">
4851												2											</div>
4852										</div>
4853									</div>
4854
4855									<div class="tutor-col">
4856										<div class="tutor-progress-bar tutor-ratings-progress-bar" style="--tutor-progress-value: 0%">
4857											<span class="tutor-progress-value" aria-hidden="true"></span>
4858										</div>
4859									</div>
4860
4861									<div class="tutor-col-4 tutor-col-lg-3">
4862										<span class="tutor-fs-6 tutor-color-secondary tutor-individual-star-rating">
4863											0 Rating										</span>
4864									</div>
4865								</div>
4866																							<div class="tutor-row tutor-align-center tutor-review-summary-rating">
4867									<div class="tutor-col-auto">
4868										<div class="tutor-ratings">
4869											<div class="tutor-ratings-stars">
4870												<span class="tutor-icon-star-line" aria-hidden="true"></span>
4871											</div>
4872											<div class="tutor-ratings-average">
4873												1											</div>
4874										</div>
4875									</div>
4876
4877									<div class="tutor-col">
4878										<div class="tutor-progress-bar tutor-ratings-progress-bar" style="--tutor-progress-value: 0.27624309392265%">
4879											<span class="tutor-progress-value" aria-hidden="true"></span>
4880										</div>
4881									</div>
4882
4883									<div class="tutor-col-4 tutor-col-lg-3">
4884										<span class="tutor-fs-6 tutor-color-secondary tutor-individual-star-rating">
4885											1 Rating										</span>
4886									</div>
4887								</div>
4888													</div>
4889					</div>
4890				</div>
4891			</div>
4892
4893			<div class="tutor-hr" aria-hidden="true"></div>
4894			
4895			<div class="tutor-reviews tutor-card-list tutor-pagination-content-appendable">
4896						<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
4897		<div class="tutor-row">
4898			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
4899				<div class="tutor-mb-12">
4900					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">TN</span></div></div>				</div>
4901
4902				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
4903					<a href="#" class="tutor-color-black">
4904						Tony Nguyen					</a>
4905				</div>
4906
4907				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
4908					2 months ago				</div>
4909			</div>
4910
4911			<div class="tutor-col-lg-9">
4912				
4913						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
4914			<div class="tutor-ratings-stars">
4915			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
4916					</div>
4917							
4918				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
4919					Vladimir and his AI Code Mentor are really helpful and cheerful, let even ADHDers can even finish the course.				</div>
4920			</div>
4921		</div>
4922	</div>
4923		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
4924		<div class="tutor-row">
4925			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
4926				<div class="tutor-mb-12">
4927					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">A</span></div></div>				</div>
4928
4929				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
4930					<a href="#" class="tutor-color-black">
4931						anderdominio					</a>
4932				</div>
4933
4934				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
4935					5 months ago				</div>
4936			</div>
4937
4938			<div class="tutor-col-lg-9">
4939				
4940						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
4941			<div class="tutor-ratings-stars">
4942			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
4943					</div>
4944							
4945				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
4946					Nice to know everything I learned from this course.				</div>
4947			</div>
4948		</div>
4949	</div>
4950		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
4951		<div class="tutor-row">
4952			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
4953				<div class="tutor-mb-12">
4954					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">M</span></div></div>				</div>
4955
4956				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
4957					<a href="#" class="tutor-color-black">
4958						marco.soriaa7					</a>
4959				</div>
4960
4961				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
4962					6 months ago				</div>
4963			</div>
4964
4965			<div class="tutor-col-lg-9">
4966				
4967						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
4968			<div class="tutor-ratings-stars">
4969			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-line"></span>			</div>
4970					</div>
4971							
4972				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
4973					I think it is a great course It shows many aspects and it is well documented. I would suggest to update the  code on some libraries. also change swagger for scalar and user azure for deploy rather than IIS				</div>
4974			</div>
4975		</div>
4976	</div>
4977		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
4978		<div class="tutor-row">
4979			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
4980				<div class="tutor-mb-12">
4981					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">DB</span></div></div>
4981				</div>
4982
4983				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
4984					<a href="#" class="tutor-color-black">
4985						Daniel Balaz					</a>
4986				</div>
4987
4988				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
4989					9 months ago				</div>
4990			</div>
4991
4992			<div class="tutor-col-lg-9">
4993				
4994						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
4995			<div class="tutor-ratings-stars">
4996			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
4997					</div>
4998							
4999				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5000					Great course!				</div>
5001			</div>
5002		</div>
5003	</div>
5004		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5005		<div class="tutor-row">
5006			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5007				<div class="tutor-mb-12">
5008					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><img src="https://courses.code-maze.com/wp-content/uploads/2025/02/20220413_124208-150x150.jpg" alt="rajada" /> </div></div>				</div>
5009
5010				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5011					<a href="#" class="tutor-color-black">
5012						rajada					</a>
5013				</div>
5014
5015				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5016					10 months ago				</div>
5017			</div>
5018
5019			<div class="tutor-col-lg-9">
5020				
5021						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5022			<div class="tutor-ratings-stars">
5023			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
5024					</div>
5025							
5026				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5027					This course was fundamental in improving my knowledge of Clean Architecture. The material is exceptionally well taught, being both educational and captivating. I was completely immersed in the content, delving so deeply into the subject that the experience was equivalent to a face-to-face course. I congratulate the entire team for their excellent work! You really deliver what you promise and are to be commende				</div>
5028			</div>
5029		</div>
5030	</div>
5031		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5032		<div class="tutor-row">
5033			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5034				<div class="tutor-mb-12">
5035					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">M</span></div></div>				</div>
5036
5037				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5038					<a href="#" class="tutor-color-black">
5039						marinakercov					</a>
5040				</div>
5041
5042				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5043					10 months ago				</div>
5044			</div>
5045
5046			<div class="tutor-col-lg-9">
5047				
5048						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5049			<div class="tutor-ratings-stars">
5050			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
5051					</div>
5052							
5053				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5054					Amazing course :-). The content is excellent and very easy to follow, truly engaging from start to finish. Bravo!				</div>
5055			</div>
5056		</div>
5057	</div>
5058		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5059		<div class="tutor-row">
5060			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5061				<div class="tutor-mb-12">
5062					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><img src="https://courses.code-maze.com/wp-content/uploads/2024/11/IMG_0832.jpg" alt="Gaga Demetrashvili" /> </div></div>				</div>
5063
5064				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5065					<a href="#" class="tutor-color-black">
5066						Gaga Demetrashvili					</a>
5067				</div>
5068
5069				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5070					1 year ago				</div>
5071			</div>
5072
5073			<div class="tutor-col-lg-9">
5074				
5075						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5076			<div class="tutor-ratings-stars">
5077			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-line"></span>			</div>
5078					</div>
5079							
5080				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5081					Maybe if some parts were going more deeply into real life scenarios it would be better, but overall I am satisfied with this course. Looking forward to additions and updates based on latest best practices.				</div>
5082			</div>
5083		</div>
5084	</div>
5085		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5086		<div class="tutor-row">
5087			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5088				<div class="tutor-mb-12">
5089					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">JV</span></div></div>				</div>
5090
5091				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5092					<a href="#" class="tutor-color-black">
5093						Jorge Viveros					</a>
5094				</div>
5095
5096				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5097					1 year ago				</div>
5098			</div>
5099
5100			<div class="tutor-col-lg-9">
5101				
5102						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5103			<div class="tutor-ratings-stars">
5104			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
5105					</div>
5106							
5107				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5108					This course is very importante for me				</div>
5109			</div>
5110		</div>
5111	</div>
5112		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5113		<div class="tutor-row">
5114			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5115				<div class="tutor-mb-12">
5116					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">AC</span></div></div>				</div>
5117
5118				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5119					<a href="#" class="tutor-color-black">
5120						Arkadiusz Chrobak					</a>
5121				</div>
5122
5123				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5124					1 year ago				</div>
5125			</div>
5126
5127			<div class="tutor-col-lg-9">
5128				
5129						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5130			<div class="tutor-ratings-stars">
5131			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
5132					</div>
5133							
5134				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5135					Course show valid project architecture				</div>
5136			</div>
5137		</div>
5138	</div>
5139		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5140		<div class="tutor-row">
5141			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5142				<div class="tutor-mb-12">
5143					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">G</span></div></div>				</div>
5144
5145				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5146					<a href="#" class="tutor-color-black">
5147						gwheeloc					</a>
5148				</div>
5149
5150				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5151					1 year ago				</div>
5152			</div>
5153
5154			<div class="tutor-col-lg-9">
5155				
5156						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5157			<div class="tutor-ratings-stars">
5158			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-line"></span>			</div>
5159					</div>
5160							
5161				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5162					I really enjoyed the course and learned a lot — I’ve even recommended it to others. One improvement I'd suggest is adding links to earlier lessons when key concepts are referenced later on. Since I completed the course over several months, fitting it in around other responsibilities, it was sometimes challenging to locate where certain ideas were originally explained.				</div>
5163			</div>
5164		</div>
5165	</div>
5166		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5167		<div class="tutor-row">
5168			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5169				<div class="tutor-mb-12">
5170					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">O</span></div></div>
5170				</div>
5171
5172				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5173					<a href="#" class="tutor-color-black">
5174						ostart					</a>
5175				</div>
5176
5177				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5178					1 year ago				</div>
5179			</div>
5180
5181			<div class="tutor-col-lg-9">
5182				
5183						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5184			<div class="tutor-ratings-stars">
5185			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
5186					</div>
5187							
5188				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5189					I am very grateful to Marinko and Valdimir for this wonderful course. It was a long journey, but it was always interesting. The main advantages of the course are the simplicity of presentation of difficult concepts and practical useful examples!				</div>
5190			</div>
5191		</div>
5192	</div>
5193		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5194		<div class="tutor-row">
5195			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5196				<div class="tutor-mb-12">
5197					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">PW</span></div></div>				</div>
5198
5199				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5200					<a href="#" class="tutor-color-black">
5201						Priyam Wadhawan					</a>
5202				</div>
5203
5204				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5205					1 year ago				</div>
5206			</div>
5207
5208			<div class="tutor-col-lg-9">
5209				
5210						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5211			<div class="tutor-ratings-stars">
5212			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
5213					</div>
5214							
5215				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5216					Excellent Course				</div>
5217			</div>
5218		</div>
5219	</div>
5220		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5221		<div class="tutor-row">
5222			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5223				<div class="tutor-mb-12">
5224					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">KL</span></div></div>				</div>
5225
5226				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5227					<a href="#" class="tutor-color-black">
5228						Kari Lappalainen					</a>
5229				</div>
5230
5231				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5232					1 year ago				</div>
5233			</div>
5234
5235			<div class="tutor-col-lg-9">
5236				
5237						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5238			<div class="tutor-ratings-stars">
5239			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
5240					</div>
5241							
5242				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5243					Very well structured and fulfilled my expectations. Thanks!				</div>
5244			</div>
5245		</div>
5246	</div>
5247		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5248		<div class="tutor-row">
5249			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5250				<div class="tutor-mb-12">
5251					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">S</span></div></div>				</div>
5252
5253				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5254					<a href="#" class="tutor-color-black">
5255						sebsronnie					</a>
5256				</div>
5257
5258				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5259					2 years ago				</div>
5260			</div>
5261
5262			<div class="tutor-col-lg-9">
5263				
5264						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5265			<div class="tutor-ratings-stars">
5266			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
5267					</div>
5268							
5269				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5270					Excellent course! The only recommendation I'd make is to include the CQRS/MediatR and Discriminated Unions as part of the course much earlier instead of them being bonus material.				</div>
5271			</div>
5272		</div>
5273	</div>
5274		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5275		<div class="tutor-row">
5276			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5277				<div class="tutor-mb-12">
5278					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">M</span></div></div>
5278				</div>
5279
5280				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5281					<a href="#" class="tutor-color-black">
5282						marek.petak					</a>
5283				</div>
5284
5285				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5286					2 years ago				</div>
5287			</div>
5288
5289			<div class="tutor-col-lg-9">
5290				
5291						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5292			<div class="tutor-ratings-stars">
5293			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
5294					</div>
5295							
5296				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5297					I've had every version of this course and loved every line I've read! These guys are fantastic!				</div>
5298			</div>
5299		</div>
5300	</div>
5301		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5302		<div class="tutor-row">
5303			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5304				<div class="tutor-mb-12">
5305					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">KO</span></div></div>				</div>
5306
5307				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5308					<a href="#" class="tutor-color-black">
5309						Kingsley Omon-Edo					</a>
5310				</div>
5311
5312				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5313					2 years ago				</div>
5314			</div>
5315
5316			<div class="tutor-col-lg-9">
5317				
5318						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5319			<div class="tutor-ratings-stars">
5320			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
5321					</div>
5322							
5323				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5324					I appreciate the effort that went into producing this course.<br />
5325<br />
5326The text-based nature of the course made my learning more effective, as I prefer textual materials to videos.<br />
5327<br />
5328The instructor was quite knowledgeable and the presentation and delivery of the content were nice.<br />
5329<br />
5330I look forward to taking the rest of the courses I purchased from CodeMaze.<br />
5331<br />
5332They offer real value for money.				</div>
5333			</div>
5334		</div>
5335	</div>
5336		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5337		<div class="tutor-row">
5338			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5339				<div class="tutor-mb-12">
5340					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">YT</span></div></div>				</div>
5341
5342				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5343					<a href="#" class="tutor-color-black">
5344						yap tel					</a>
5345				</div>
5346
5347				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5348					2 years ago				</div>
5349			</div>
5350
5351			<div class="tutor-col-lg-9">
5352				
5353						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5354			<div class="tutor-ratings-stars">
5355			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
5356					</div>
5357							
5358				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5359					Very informative and easy to read. Keep up				</div>
5360			</div>
5361		</div>
5362	</div>
5363		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5364		<div class="tutor-row">
5365			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5366				<div class="tutor-mb-12">
5367					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">BV</span></div></div>				</div>
5368
5369				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5370					<a href="#" class="tutor-color-black">
5371						Brandon Valenzuela					</a>
5372				</div>
5373
5374				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5375					2 years ago				</div>
5376			</div>
5377
5378			<div class="tutor-col-lg-9">
5379				
5380						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5381			<div class="tutor-ratings-stars">
5382			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
5383					</div>
5384							
5385				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5386					This book was instrumental in helping me secure a position at a multinational software company. As someone working with enterprise-grade APIs, I found its content to be both comprehensive and approachable. The author has a talent for breaking down complex concepts into clear, digestible explanations, making even advanced topics feel accessible.<br />
5387<br />
5388The chapters are well-structured, taking you step-by-step through the intricacies of C# and its application in building robust APIs. It’s not just a book to read—it’s a resource you’ll want to revisit repeatedly. The practical examples and exercises made it easy for me to translate the knowledge into real-world projects, which undoubtedly gave me an edge during interviews and in my day-to-day work.<br />
5389<br />
5390If you're serious about advancing your career in software development, this book is a fantastic investment. It's clear, well-organized, and packed with actionable insights that will make you a more confident and capable developer. Highly recommended!				</
5390div>
5391			</div>
5392		</div>
5393	</div>
5394		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5395		<div class="tutor-row">
5396			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5397				<div class="tutor-mb-12">
5398					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">SN</span></div></div>				</div>
5399
5400				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5401					<a href="#" class="tutor-color-black">
5402						srinivasaraju nadimpalli					</a>
5403				</div>
5404
5405				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5406					2 years ago				</div>
5407			</div>
5408
5409			<div class="tutor-col-lg-9">
5410				
5411						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5412			<div class="tutor-ratings-stars">
5413			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
5414					</div>
5415							
5416				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5417					Best course out there, and the knowledge gained in this course helped me in my professional journey. Thank you all for making good content.				</div>
5418			</div>
5419		</div>
5420	</div>
5421		<div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40">
5422		<div class="tutor-row">
5423			<div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0">
5424				<div class="tutor-mb-12">
5425					<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">A</span></div></div>				</div>
5426
5427				<div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4">
5428					<a href="#" class="tutor-color-black">
5429						aries544					</a>
5430				</div>
5431
5432				<div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5433					2 years ago				</div>
5434			</div>
5435
5436			<div class="tutor-col-lg-9">
5437				
5438						<div class="tutor-ratingstutor-is-sm tutor-ratings-">
5439			<div class="tutor-ratings-stars">
5440			<span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span>			</div>
5441					</div>
5442							
5443				<div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment">
5444					Amazing content, thank you so much				</div>
5445			</div>
5446		</div>
5447	</div>
5448			</div>
5449		</div>
5450	
5451	<div class="tutor-row tutor-mt-40 tutor-mb-20">
5452		<div class="tutor-col">
5453					</div>
5454
5455		<div class="tutor-col-auto">
5456			<nav  data-tutor_pagination_ajax="{&quot;action&quot;:&quot;tutor_single_course_reviews_load_more&quot;,&quot;course_id&quot;:75594}"  data-tutor_pagination_layout="{&quot;type&quot;:&quot;load_more&quot;,&quot;load_more_text&quot;:&quot;Load More&quot;}" class="" ><a class="tutor-btn tutor-btn-outline-primary page-numbers tutor-mr-16" href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/?source=tn&#038;current_page=2">Load More</a></nav>		</div>
5457	</div>
5458</div>
5459
5460
5461							</div>
5462											</div>
5463				</div>
5464							</main>
5465
5466			<aside class="tutor-col-xl-4">
5467								<div class="tutor-single-course-sidebar tutor-mt-40 tutor-mt-xl-0"  >
5468					
5469											
5470<div class="tutor-card tutor-card-md tutor-sidebar-card">
5471		<div class="tutor-card-body">
5472				<div>
5473			<div class="tutor-course-sidebar-card-pricing tutor-d-flex tutor-align-end tutor-justify-between">
5474										<div>
5475						<span class="tutor-fs-4 tutor-fw-bold tutor-color-black">
5476							<span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">&#36;</span>97</bdi></span>						</span>
5477											</div>
5478			</div>
5479			<div class="tutor-color-muted">
5480							</div>
5481			            <div class="cmz-ppp-price" data-course-id="75594" hidden></div>		</div>
5482			<button
5483		class="tutor-btn tutor-btn-lg tutor-btn-block tutor-mt-24 lemon-squeezy-direct-checkout"
5484		style="background-color:rgb(35,147,113) !important;border-color:rgb(35,147,113) !important;color:#fff !important;"
5485		data-product-id="85312"
5486		data-variant-id="1708453"
5487		data-lemon-product-id="1090559"
5488		data-nonce="8866add4f8"
5489	>
5490		Buy Now	</button>
5491		<div class="cmz-paddle-buttons" data-cmz-course-id="75594">
5492					<a
5493				href="https://courses.code-maze.com/wp-admin/admin-post.php?action=cmz_paddle_buy&#038;
5493courses=75594&#038;_cmz_nonce=6ade3cdfea"
5494								class="tutor-btn tutor-btn-primary tutor-btn-block tutor-mt-12 cmz-paddle-direct-checkout"
5495				data-product-id="85312"
5496				data-course-id="75594"
5497			>
5498								Buy Now<span aria-hidden="true">&nbsp;&rarr;</span>
5499			</a>
5500		
5501		<button
5502			type="button"
5503			class="tutor-btn tutor-btn-outline-primary tutor-btn-block tutor-mt-12 cmz-paddle-add-to-cart"
5504			data-course-id="75594"
5505			data-in-cart="0"
5506		>
5507			Add to Cart		</button>
5508	</div>
5509		</div>
5510		<!-- Course Info -->
5511	<div class="tutor-card-footer ">
5512		<ul class="tutor-ul">
5513											<li class="tutor-d-flex ">
5514					<span class="tutor-icon-level tutor-color-black tutor-mt-4 tutor-mr-12" aria-labelledby="Level"></span>
5515					<span class="tutor-fs-6 tutor-color-secondary">
5516						Intermediate					</span>
5517				</li>
5518															<li class="tutor-d-flex tutor-mt-12 ">
5519					<span class="tutor-icon-clock-line tutor-color-black tutor-mt-4 tutor-mr-12" aria-labelledby="Duration"></span>
5520					<span class="tutor-fs-6 tutor-color-secondary">
5521						<span class="tutor-meta-level">8</span><span class="tutor-meta-value tutor-color-secondary tutor-mr-4"> hours</span><span class="tutor-meta-level">15</span><span class="tutor-meta-value tutor-color-secondary tutor-mr-4"> minutes</span> Duration					</span>
5522				</li>
5523															<li class="tutor-d-flex tutor-mt-12 tutor-course-certificate-meta">
5524					<span class="tutor-icon-ribbon-o tutor-color-black tutor-mt-4 tutor-mr-12" aria-labelledby="Certificate"></span>
5525					<span class="tutor-fs-6 tutor-color-secondary">
5526						Certificate of completion					</span>
5527				</li>
5528					</ul>
5529	</div>
5530</div>
5531
5532<div class="tutor-modal tutor-login-modal" role="dialog" aria-modal="true" aria-labelledby="tutor-login-modal-title" aria-hidden="true">
5533	<div class="tutor-modal-overlay"></div>
5534	<div class="tutor-modal-window tutor-modal-window-sm">
5535		<div class="tutor-modal-content tutor-modal-content-white">
5536			<button class="tutor-iconic-btn tutor-modal-close-o" data-tutor-modal-close aria-label="Close login dialog">
5537				<span class="tutor-icon-times" aria-hidden="true"></span>
5538			</button>
5539
5540			<div class="tutor-modal-body">
5541				<div class="tutor-py-48">
5542										<div id="tutor-login-modal-title" class="tutor-fs-4 tutor-fw-medium tutor-color-black tutor-mb-32">
5543						Hi, Welcome back!					</div>
5544					<form id="tutor-login-form" method="post">
5545			<input type="hidden" name="tutor_course_enroll_attempt" value="75594">
5546		<input type="hidden" id="_tutor_nonce" name="_tutor_nonce" value="e50d0d8034" /><input type="hidden" name="_wp_http_referer" value="/courses/ultimate-aspnet-core-webapi/?source=tn" />	<input type="hidden" name="tutor_action" value="tutor_user_login" />
5547	<input type="hidden" name="redirect_to" value="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/?source=tn" />
5548
5549	<div class="tutor-mb-20">
5550		<input type="text" class="tutor-form-control" placeholder="Username or Email Address" name="log" value="" size="20" required/>
5551	</div>
5552
5553	<div class="tutor-mb-32">
5554		<input type="password" class="tutor-form-control" placeholder="Password" name="pwd" value="" size="20" required/>
5555	</div>
5556
5557	<div class="tutor-login-error"></div>
5558			<input type="hidden" name="timezone" value="Europe/Belgrade" />
5559		
5559<script>
5560			document.addEventListener('DOMContentLoaded', function() {
5561				const timezone = document.querySelector('input[name="timezone"]');
5562				if ( timezone) {
5563					const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
5564					timezone.value = tz
5565				}
5566			});
5567		</script>
5567
5568		<div class="cf-turnstile-wrap" style="padding:10px 0 10px 0"><div  class="cf-turnstile" data-sitekey="0x4AAAAAAEbjyVunDO1OOICn" data-theme="light"></div></div>	<div class="tutor-d-flex tutor-justify-between tutor-align-center tutor-mb-40">
5569		<div class="tutor-form-check">
5570			<input id="tutor-login-agmnt-1" type="checkbox" class="tutor-form-check-input tutor-bg-black-40" name="rememberme" value="forever" />
5571			<label for="tutor-login-agmnt-1" class="tutor-fs-7 tutor-color-muted">
5572				Keep me signed in			</label>
5573		</div>
5574		<a href="https://courses.code-maze.com/dashboard/retrieve-password" class="tutor-btn tutor-btn-ghost">
5575			Forgot Password?		</a>
5576	</div>
5577
5578		<button type="submit" class="tutor-btn tutor-btn-primary tutor-btn-block">
5579		Sign In	</button>
5580
5581					<div class="tutor-d-flex tutor-align-center tutor-justify-center tutor-fs-6 tutor-color-secondary tutor-mt-20">
5582			Don&#039;t have an account?&nbsp;
5583			<a href="https://courses.code-maze.com/student-registration/?redirect_to=https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/?source=tn&#038;enrol_course_id=75594" class="tutor-btn tutor-btn-link">
5584				Register Now			</a>
5585		</div>
5586		</form>
5587<script>
5588	document.addEventListener('DOMContentLoaded', function() {
5589		var { __ } = wp.i18n;
5590		var loginModal = document.querySelector('.tutor-modal.tutor-login-modal');
5591		var errors = [];
5592		if (loginModal && errors.length) {
5593			loginModal.classList.add('tutor-is-active');
5594		}
5595	});
5596</script>
5596
5597
5598									</div>
5599							</div>
5600		</div>
5601	</div>
5602</div>
5603					
5604					<div class="tutor-single-course-sidebar-more tutor-mt-24">
5605						<div class="tutor-course-details-instructors">
5606	<h3 class="tutor-fs-6 tutor-fw-medium tutor-color-black tutor-mb-16">
5607		A course by	</h3>
5608
5609			<div class="tutor-d-flex tutor-align-center tutor-mb-24">
5610			<div class="tutor-d-flex tutor-mr-16">
5611				<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><img src="https://courses.code-maze.com/wp-content/uploads/2026/01/marinko-profile-150x150.webp" alt="Marinko Spasojevic" /> </div></div>			</div>
5612
5613			<div>
5614				<a class="tutor-fs-6 tutor-fw-bold tutor-color-black" href="https://courses.code-maze.com/profile/marinko?view=instructor">
5615					Marinko Spasojevic				</a>
5616
5617									<div class="tutor-instructor-designation tutor-fs-7 tutor-color-muted">
5618						Instructor					</div>
5619							</div>
5620		</div>
5621			<div class="tutor-d-flex tutor-align-center">
5622			<div class="tutor-d-flex tutor-mr-16">
5623				<div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><img src="https://courses.code-maze.com/wp-content/uploads/2026/01/vladimir-pecanac-profile-150x150.webp" alt="Vladimir Pecanac" /> </div></div>			</div>
5624
5625			<div>
5626				<a class="tutor-fs-6 tutor-fw-bold tutor-color-black" href="https://courses.code-maze.com/profile/codemaze_blog?view=instructor">
5627					Vladimir Pecanac				</a>
5628
5629									<div class="tutor-instructor-designation tutor-fs-7 tutor-color-muted">
5630						Instructor					</div>
5631							</div>
5632		</div>
5633	</div>
5634								<div class="tutor-course-details-widget">
5635		<h3 class="tutor-course-details-widget-title tutor-fs-5 tutor-color-black tutor-fw-bold tutor-mb-16">
5636			Material Includes		</h3>
5637		<ul class="tutor-course-details-widget-list tutor-fs-6 tutor-color-black">
5638							<li class="tutor-d-flex tutor-mb-12">
5639					<span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span>
5640					<span>Online Text Courses Included: 3</span>
5641				</li>
5642							<li class="tutor-d-flex tutor-mb-12">
5643					<span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span>
5644					<span>Bonus Files</span>
5645				</li>
5646							<li class="tutor-d-flex tutor-mb-12">
5647					<span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span>
5648					<span>Full source code</span>
5649				</li>
5650							<li class="tutor-d-flex tutor-mb-12">
5651					<span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span>
5652					<span>30-day Money Back guarantee</span>
5653				</li>
5654							<li class="tutor-d-flex tutor-mb-12">
5655					<span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span>
5656					<span>Lifetime Access</span>
5657				</li>
5658							<li class="tutor-d-flex tutor-mb-12">
5659					<span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span>
5660					<span>Direct Support from the Instructor(s)</span>
5661				</li>
5662							<li class="tutor-d-flex tutor-mb-12">
5663					<span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span>
5664					<span>Course Updates for Free</span>
5665				</li>
5666							<li class="tutor-d-flex tutor-mb-12">
5667					<span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span>
5668					<span>Discord Community</span>
5669				</li>
5670							<li class="tutor-d-flex tutor-mb-12">
5671					<span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span>
5672					<span>Framework Version: .NET 10 (.NET 9 source also included)</span>
5673				</li>
5674					</ul>
5675	</div>
5676	
5677	<div class="tutor-course-details-widget">
5678		<h3 class="tutor-course-details-widget-title tutor-fs-5 tutor-color-black tutor-fw-bold tutor-mb-16">
5679			Requirements		</h3>
5680		<ul class="tutor-course-details-widget-list tutor-fs-6 tutor-color-black">
5681			<li class="tutor-d-flex tutor-mb-12"><span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span><span>
5681Intermediate knowledge of C# and .NET</span></li><li class="tutor-d-flex tutor-mb-12"><span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span><span>Basic web development knowledge</span></li><li class="tutor-d-flex tutor-mb-12"><span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span><span>Basic REST knowledge</span></li>		</ul>
5682	</div>
5683
5684
5685												
5686	<div class="tutor-course-details-widget">
5687		<h3 class="tutor-course-details-widget-title tutor-fs-5 tutor-color-black tutor-fw-bold tutor-mb-16">
5688			Audience		</h3>
5689		<ul class="tutor-course-details-widget-list tutor-fs-6 tutor-color-black">
5690							<li class="tutor-d-flex tutor-mb-12">
5691					<span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span>
5692					<span>Intermediate to Advanced .NET/C# Developers</span>
5693				</li>
5694							<li class="tutor-d-flex tutor-mb-12">
5695					<span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span>
5696					<span>Web Developers</span>
5697				</li>
5698					</ul>
5699	</div>
5700
5701					</div>
5702
5703									</div>
5704			</aside>
5705		</div>
5706	</div>
5707</div>
5708
5709
5710	
5711	<footer id="footer" class="footer_columns_3">
5712		<div class="container">
5713	<div class="et_pb_extra_row container-width-change-notify">
5714						<div class="et_pb_extra_column odd column-1">
5715					<div id="custom_html-7" class="widget_text et_pb_widget widget_custom_html"><h4 class="widgettitle">Administrative</h4><div class="textwidget custom-html-widget"><ul>
5716
5717<li class="page_item page-item-1113"><a href="https://courses.code-maze.com/disclosure-policy/">Disclosure Policy</a></li>
5718<li class="page_item page-item-1102"><a href="https://courses.code-maze.com/privacy-policy/">Privacy Policy</a></li>
5719<li class="page_item page-item-1118"><a href="https://courses.code-maze.com/terms-of-service/">Terms of Service</a></li>
5720<li class="page_item page-item-1118"><a href="https://courses.code-maze.com/refund-policy/">Refund Policy</a></li>
5721			</ul></div></div> <!-- end .et_pb_widget -->				</div>
5722					</div>
5723</div>
5724		<div id="footer-bottom">
5725			<div class="container">
5726
5727				<!-- Footer Info -->
5728				<p id="footer-info">&copy; Copyright code-maze.com 2016 - 2026</p>
5729
5730				<!-- Footer Navigation -->
5731				
5732			</div>
5733		</div>
5734	</footer>
5735	</div> <!-- #page-container -->
5736<script>
5737document.addEventListener("DOMContentLoaded", () => {
5738	const active = document.querySelector(".tutor-course-topic-item.is-active");
5739
5740    if (!active) return;
5741
5742    active.scrollIntoView({
5743        behavior: "auto",   // use "smooth" if you want animation
5744        block: "center"     // start | center | end | nearest
5745    });
5746});
5747</script>
5747
5748
5749
5750			<span title="Back To Top" id="back_to_top"></span>
5751	
5752	
5752<script>(function(){try{
5753	var dark=document.documentElement.getAttribute("data-theme")==="dark";
5754	if(!document.querySelector(".cmz-dm-toggle")){dark=dark||(function(){try{return localStorage.getItem("cmz-theme")==="dark"}catch(e){return false}})()}
5755	var t=dark?"dark":"light";
5756	document.querySelectorAll(".cf-turnstile").forEach(function(el){el.setAttribute("data-theme",t)});
5757	setInterval(function(){
5758	document.querySelectorAll(".cf-turnstile-wrap").forEach(function(w){
5759	var i=w.querySelector("input[name=cf-turnstile-response]");
5760	var ok=!!(i&&i.value);
5761	if(ok&&!w.cmzTimer&&!w.classList.contains("cmz-ts-done")){
5762	w.cmzTimer=setTimeout(function(){w.classList.add("cmz-ts-done");w.cmzTimer=null},3000);
5763	}
5764	if(!ok){if(w.cmzTimer){clearTimeout(w.cmzTimer);w.cmzTimer=null}w.classList.remove("cmz-ts-done")}
5765	});
5766	},400);
5767	}catch(e){}})();</script>
5767<script type="speculationrules">
5768{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/Extra/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
5769</script>
5769
5770	
5770<script type='text/javascript'>
5771		(function () {
5772			var c = document.body.className;
5773			c = c.replace(/woocommerce-no-js/, 'woocommerce-js');
5774			document.body.className = c;
5775		})();
5776	</script>
5776
5777	
5777<script id="cmz-buy-js-extra">
5778var cmzBuy = {"isLoggedIn":"","registerUrl":"https://courses.code-maze.com/my-account/","cookieName":"cmz_pending_buy","autobuyParam":"cmz_autobuy"};
5779//# sourceURL=cmz-buy-js-extra
5780</script>
vendor: 1 bytes, line 5780
5780
5781<script id="cmz-buy-js-after">
5782(function () {
5783	var cfg = window.cmzBuy || {};
5784	var SEL = '.lemon-squeezy-direct-checkout, .cmz-paddle-direct-checkout';
5785
5786	function setCookie(name, value) {
5787		document.cookie = name + '=' + encodeURIComponent(value) +
5788			'; path=/; max-age=3600; samesite=lax';
5789	}
5790	function readCookie(name) {
5791		var m = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)');
5792		return m ? decodeURIComponent(m.pop()) : '';
5793	}
5794	function clearCookie(name) {
5795		document.cookie = name + '=; path=/; max-age=0; samesite=lax';
5796	}
5797
5798	// ---- Job 1: intercept guest clicks in the CAPTURE phase (runs before the plugin's
5799	// delegated jQuery handler on document, so we can cleanly take over). ----
5800	document.addEventListener('click', function (e) {
5801		if (cfg.isLoggedIn) { return; }              // logged-in users use the normal path
5802		var btn = e.target && e.target.closest ? e.target.closest(SEL) : null;
5803		if (!btn) { return; }
5804
5805		var productId = btn.getAttribute('data-child-product-id') || btn.getAttribute('data-product-id');
5806		var variantId = btn.getAttribute('data-variant-id');
5807
5808		// Variable products: no variant chosen yet -> let the plugin show its own "please select" alert.
5809		if (!variantId && (btn.classList.contains('lemon-squeezy-variable-direct') ||
5810			btn.classList.contains('lemon-squeezy-variable-checkout'))) {
5811			return;
5812		}
5813		if (!productId) { return; }
5814
5815		e.preventDefault();
5816		e.stopImmediatePropagation();               // stop the plugin's handler from firing
5817
5818		setCookie(cfg.cookieName, JSON.stringify({
5819			product_id:   productId,
5820			variant_id:   variantId || '',
5821			variation_id: btn.getAttribute('data-variation-id') || ''
5822		}));
5823
5824		window.location.href = cfg.registerUrl;
5825	}, true);
5826
5827	// ---- Job 2: resume after registration/login. ----
5828	function resume() {
5829		var url = new URL(window.location.href);
5830		if (url.searchParams.get(cfg.autobuyParam) !== '1') { return; }
5831
5832		var raw = readCookie(cfg.cookieName);
5833		clearCookie(cfg.cookieName);                 // one-shot; JS owns clearing now
5834
5835		// Clean the flag out of the address bar regardless of what happens next.
5836		url.searchParams.delete(cfg.autobuyParam);
5837		window.history.replaceState({}, document.title, url.toString());
5838
5839		if (!raw) { return; }
5840		var intent;
5841		try { intent = JSON.parse(raw); } catch (err) { return; }
5842		if (!intent || !intent.product_id) { return; }
5843
5844		/*
5845		 * 1.5.1 — pick the button the USER can see, for THIS product. Two bugs lived here:
5846		 *  (a) `SEL + '[data-product-id=…]'` with a comma-list SEL binds the attribute to the
5847		 *      LAST selector only, so `.lemon-squeezy-direct-checkout` matched UNFILTERED — on
5848		 *      a Paddle-released course page (which still carries the LS button, hidden by
5849		 *      cmz-paddle-cart.php's :has() rule, and drawn first) the resume clicked the hidden
5850		 *      Lemon Squeezy button and the buyer got "Lemon Squeezy gateway not configured"
5851		 *      (founder, staging, 2026-08-17 — same on password AND Google login);
5852		 *  (b) the bare `querySelector(SEL)` fallback took whichever button came first in DOM
5853		 *      order, again the hidden LS one.
5854		 * Fix: build one selector per branch with the attribute attached to EACH, and prefer a
5855		 * visible match — offsetParent is null for display:none, which is exactly how the
5856		 * inactive gateway's button is hidden.
5857		 */
5858		function firstVisible(nodes) {
5859			var i, fallback = null;
5860			for (i = 0; i < nodes.length; i++) {
5861				if (nodes[i].offsetParent !== null) { return nodes[i]; }
5862				if (!fallback) { fallback = nodes[i]; }
5863			}
5864			return fallback;
5865		}
5866		function withAttr(attr, value) {
5867			return SEL.split(',').map(function (s) {
5868				return s.trim() + '[' + attr + '="' + value + '"]';
5869			}).join(', ');
5870		}
5871		var btn = firstVisible(document.querySelectorAll(withAttr('data-product-id', intent.product_id))) ||
5872			firstVisible(document.querySelectorAll(withAttr('data-child-product-id', intent.product_id))) ||
5873			firstVisible(document.querySelectorAll(SEL));
5874		if (!btn) { return; }
5875
5876		// Restore variant on variable buttons if it isn't already set.
5877		if (intent.variant_id && !btn.getAttribute('data-variant-id')) {
5878			btn.setAttribute('data-variant-id', intent.variant_id);
5879		}
5880		if (intent.variation_id && !btn.getAttribute('data-variation-id')) {
5881			btn.setAttribute('data-variation-id', intent.variation_id);
5882		}
5883
5884		// Native click -> bubbles to the plugin's delegated handler -> its logged-in AJAX -> LS.
5885		setTimeout(function () { btn.click(); }, 300);
5886	}
5887
5888	// Run whether the script loaded before or after the DOM was ready.
5889	if (document.readyState === 'loading') {
5890		document.addEventListener('DOMContentLoaded', resume);
5891	} else {
5892		resume();
5893	}
5894})();
5895//# sourceURL=cmz-buy-js-after
5896</script>
vendor: 1 bytes, line 5896
5896
5897<script id="cmz-paddle-cart-js-extra">
5898var cmzPaddleCart = {"ajaxUrl":"https://courses.code-maze.com/wp-admin/admin-ajax.php","nonce":"7728a02a2b","cartUrl":"https://courses.code-maze.com/paddle-cart/","pricesUrl":"https://courses.code-maze.com/wp-json/cmz-paddle/v1/prices","restNonce":"273543b543"};
5899//# sourceURL=cmz-paddle-cart-js-extra
5900</script>
vendor: 1 bytes, line 5900
5900
5901<script id="cmz-paddle-cart-js-after">
5902(function () {
5903	var cfg = window.cmzPaddleCart || {};
5904
5905	function post(action, data) {
5906		var body = new URLSearchParams(Object.assign({ action: action, nonce: cfg.nonce }, data));
5907		return fetch(cfg.ajaxUrl, {
5908			method: 'POST',
5909			credentials: 'same-origin',
5910			headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
5911			body: body.toString()
5912		}).then(function (r) { return r.json(); });
5913	}
5914
5915	// Every cart control exists TWICE — Extra renders the primary menu into both #et-menu and
5916	// #et-extra-mobile-menu. Nothing here may use getElementById or a bare querySelector, or it
5917	// silently drives the desktop copy while the user is tapping the mobile one. Helpers:
5918	function cartItems() { return document.querySelectorAll('.cmz-paddle-cart-item'); }
5919	function itemOf(el) { return el && el.closest ? el.closest('.cmz-paddle-cart-item') : null; }
5920	function partOf(item, cls) { return item ? item.querySelector('.' + cls) : null; }
5921
5922	/*
5923	 * Vertical alignment of the chip against the nav's own text — see the long note beside
5924	 * --cmz-nav-reserve in the stylesheet. Extra reserves empty space UNDER each nav link as
5925	 * padding-bottom on the anchor, so sibling ink sits in the top band of the row and naive
5926	 * centring lands exactly reserve/2 too low. The reserve differs per breakpoint, per header
5927	 * style and per scroll state, and two of its five values come from customizer output, so it
5928	 * is measured off a real sibling anchor here rather than trusted to a constant. The CSS
5929	 * default is the no-JS floor; this makes it exact in variants that do not exist yet.
5930	 */
5931	function syncNavReserve() {
5932		document.querySelectorAll('#et-navigation > #et-menu > .cmz-paddle-cart-item').forEach(function (item) {
5933			var sib = item.parentElement.querySelector('li.menu-item:not(.cmz-paddle-cart-item) > a');
5934			if (!sib) { return; }
5935			var reserve = parseFloat(window.getComputedStyle(sib).paddingBottom);
5936			if (!isFinite(reserve) || reserve < 0 || reserve > 200) { return; }
5937			var next = reserve + 'px';
5938			// Only touch the DOM when it actually changed — this runs on scroll.
5939			if (item.style.getPropertyValue('--cmz-nav-reserve') !== next) {
5940				item.style.setProperty('--cmz-nav-reserve', next);
5941			}
5942		});
5943	}
5944	var reserveQueued = false;
5945	function queueNavReserve() {
5946		if (reserveQueued) { return; }
5947		reserveQueued = true;
5948		window.requestAnimationFrame(function () { reserveQueued = false; syncNavReserve(); });
5949	}
5950	syncNavReserve();
5951	window.addEventListener('resize', queueNavReserve);
5952	// Extra's fixed-header mode swaps the reserve mid-scroll (36 → 44 here). Cheap to keep exact.
5953	window.addEventListener('scroll', queueNavReserve, { passive: true });
5954	/*
5955	 * ...and Extra TRANSITIONS that padding rather than snapping it, which a single sample on
5956	 * the scroll event catches mid-flight: simulating .et-fixed-header measured the sibling at
5957	 * 43.8px while this had already stored 36px, and nothing re-read it afterwards, leaving the
5958	 * inline value stale — worse than the CSS default it overrides. transitionend is the exact
5959	 * signal for "the theme has finished moving", so the last word always belongs to the
5960	 * settled value. Filtered to padding so unrelated nav transitions cost nothing.
5961	 * (This site runs et_non_fixed_nav, so the fixed variant is currently unreachable — it is
5962	 * handled because the header mode is a theme option the founder can flip, and the whole
5963	 * point of this round was to stop fixing one variant at a time.)
5964	 */
5965	var nav = document.getElementById('et-navigation');
5966	if (nav) {
5967		nav.addEventListener('transitionend', function (e) {
5968			if (e.propertyName && e.propertyName.indexOf('padding') === 0) { queueNavReserve(); }
5969		}, true);
5970	}
5971
5972	// Badge is server-rendered at 0/hidden for every visitor alike (cache-safe-theming
5973	// playbook) — this is the client-side fill-in, the only place the count is ever decided.
5974	// Updates BOTH copies; the previous single querySelector only ever found the desktop one.
5975	function updateBadge(count) {
5976		document.querySelectorAll('.cmz-paddle-cart-badge').forEach(function (badge) {
5977			if (count > 0) {
5978				badge.textContent = String(count);
5979				badge.hidden = false;
5980			} else {
5981				badge.hidden = true;
5982			}
5983		});
5984	}
5985
5986	/*
5987	 * The Add to Cart in-cart state (founder round 4) — the SAME rule as the badge: never
5988	 * server-rendered, derived here from whatever cmz_paddle_cart_state's fetch says is
5989	 * actually in the cart right now. Single source of truth for every button on the page, so
5990	 * an add from one button, a remove from the mini-cart dropdown, or landing on a course
5991	 * that's already in the cart all converge on the same code path instead of three separate
5992	 * ad-hoc DOM pokes drifting out of sync with each other.
5993	 */
5994	// The archive-card button is the same class and the same delegated handlers as the
5995	// course-page one — that is what makes the two agree in both directions — but it is an icon,
5996	// so its label must not be written over with text.
5997	function isIconButton(btn) { return btn.classList.contains('cmz-paddle-loop-add'); }
5998
5999	function syncAddToCartButtons(items) {
6000		var inCartIds = {};
6001		(items || []).forEach(function (id) { inCartIds[String(id)] = true; });
6002		document.querySelectorAll('.cmz-paddle-add-to-cart[data-course-id]').forEach(function (btn) {
6003			var courseId = btn.getAttribute('data-course-id');
6004			var inCart = !!inCartIds[courseId];
6005			btn.disabled = inCart;
6006			btn.setAttribute('data-in-cart', inCart ? '1' : '0');
6007			btn.removeAttribute('aria-busy');
6008			if (isIconButton(btn)) {
6009				// CSS swaps the glyph off data-in-cart; only the accessible name changes here,
6010				// so a screen reader is told the state the sighted user can see.
6011				var iconLabel = inCart ? 'In cart' : 'Add to cart';
6012				btn.setAttribute('aria-label', iconLabel);
6013				btn.setAttribute('title', iconLabel);
6014			} else {
6015				btn.textContent = inCart ? 'In Cart ✓' : 'Add to Cart';
6016			}
6017		});
6018	}
6019
6020	document.addEventListener('click', function (e) {
6021		var btn = e.target && e.target.closest ? e.target.closest('.cmz-paddle-add-to-cart') : null;
6022		if (!btn || btn.disabled) { return; }
6023		e.preventDefault();
6024
6025		var courseId = btn.getAttribute('data-course-id');
6026		var icon = isIconButton(btn);
6027		btn.disabled = true;
6028		// An icon button has no text to replace — writing '…' into it would delete its glyphs.
6029		var original = icon ? null : btn.textContent;
6030		if (icon) { btn.setAttribute('aria-busy', 'true'); } else { btn.textContent = '…'; }
6031		function restore() {
6032			btn.disabled = false;
6033			if (icon) { btn.removeAttribute('aria-busy'); } else { btn.textContent = original; }
6034		}
6035
6036		post('cmz_paddle_cart_add', { course_id: courseId }).then(function (res) {
6037			var ok = res && res.success;
6038			var payload = res && res.data ? res.data : {};
6039			if (ok) {
6040				// refreshCart() re-derives every button's state (including this one) from the
6041				// server's fresh item list — no manual textContent/attribute poke here, so
6042				// there is exactly one place that ever decides "in cart" or not. This is also
6043				// what keeps an archive card and the course page it links to in agreement.
6044				refreshCart();
6045			} else {
6046				restore();
6047				if (payload.message) { window.alert(payload.message); }
6048			}
6049		}).catch(restore);
6050	});
6051
6052	// The cart page (/paddle-cart/) is now an unlinked fallback, but it still works if someone
6053	// lands on it directly — its remove buttons still need this.
6054	document.addEventListener('click', function (e) {
6055		var btn = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-remove') : null;
6056		if (!btn) { return; }
6057		e.preventDefault();
6058		var courseId = btn.getAttribute('data-course-id');
6059		var row = btn.closest('.cmz-paddle-cart-row');
6060		btn.disabled = true;
6061		post('cmz_paddle_cart_remove', { course_id: courseId }).then(function (res) {
6062			var payload = res && res.data ? res.data : {};
6063			updateBadge(payload.count || 0);
6064			if (row && row.parentNode) { row.parentNode.removeChild(row); }
6065			window.location.reload(); // simplest correct way to refresh the subtotal + empty state
6066		});
6067	});
6068
6069	// The cart icon: one click, straight to checkout. The decision (login / empty / checkout)
6070	// is entirely the server's (cmz_paddle_ajax_cart_checkout) — this only navigates.
6071	function goToCheckout() {
6072		var icons = document.querySelectorAll('.cmz-paddle-cart-link');
6073		icons.forEach(function (i) { i.setAttribute('aria-busy', 'true'); });
6074		post('cmz_paddle_cart_checkout', {}).then(function (res) {
6075			var payload = res && res.data ? res.data : {};
6076			if (payload.url) { window.location.href = payload.url; return; }
6077			icons.forEach(function (i) { i.removeAttribute('aria-busy'); });
6078		}).catch(function () {
6079			icons.forEach(function (i) { i.removeAttribute('aria-busy'); });
6080		});
6081	}
6082
6083	document.addEventListener('click', function (e) {
6084		var icon = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-link') : null;
6085		if (!icon) { return; }
6086		e.preventDefault();
6087		var item = itemOf(icon);
6088		// Touch: the tap is the only way into the panel, so it opens it (see the constant).
6089		if (MOBILE_TAP_OPENS_PANEL && !canHover()) {
6090			e.stopPropagation();
6091			/*
6092			 * THE SAME TAP MUST NOT OPEN AND THEN CLOSE. On a real phone (not Playwright's
6093			 * emulation, which is how this survived the Phase 4 touch pass) the tap fires
6094			 * focus BEFORE click, the focusin handler below opens the panel, and this toggle
6095			 * then found it "already open" and shut it — the popup never visibly appeared
6096			 * (founder, release night 2026-08-07, inside the burger menu). A panel opened by
6097			 * any path within the last 600ms is this same gesture: leave it open.
6098			 */
6099			var openedAt = item ? Number(item.getAttribute('data-cmz-opened-at') || 0) : 0;
6100			if (isOpen(item) && (Date.now() - openedAt) > 600) {
6101				setDropdown(item, false);
6102			} else {
6103				openOnly(item);
6104			}
6105			return;
6106		}
6107		// Hover devices: a hover-opened panel must never swallow this - click still checks out.
6108		goToCheckout();
6109	}, true); // capture — see the CAPTURE, NOT BUBBLE note below; on touch this never bubbles.
6110
6111	/* -----------------------------------------------------------------------
6112	 * Mini-cart dropdown (decisions.md 2026-08-05, "Cart management lives in a mini-cart
6113	 * dropdown; overlay removal was a myth"). Contents are NEVER server-rendered — this
6114	 * function is the only place that ever builds the row markup, from a client-side fetch,
6115	 * same principle as the badge. Escaped by hand (textContent / createElement, no innerHTML
6116	 * with server strings) since course titles are user-adjacent content.
6117	 * -------------------------------------------------------------------- */
6118
6119	function escText(el, text) { el.textContent = text == null ? '' : String(text); return el; }
6120
6121	// Drawn glyph, not a text "×": a character inherits font-family, size and text-transform
6122	// from whatever wins the cascade — which is how the old one ended up mis-sized and
6123	// off-centre — while an SVG stroke is immune to font rules and centres exactly.
6124	var SVG_NS = 'http://www.w3.org/2000/svg';
6125
6126	/**
6127	 * One builder for both panel glyphs, so the × and the trash can cannot drift apart: same
6128	 * viewBox, same currentColor stroke, same round caps and joins. Inline SVG rather than an
6129	 * icon font — nothing to load, nothing to FOUT, and immune to the font-family rules that
6130	 * were mangling the old text "×" in the first place.
6131	 */
6132	function strokeGlyph(size, d, width) {
6133		var svg = document.createElementNS(SVG_NS, 'svg');
6134		svg.setAttribute('viewBox', '0 0 24 24');
6135		svg.setAttribute('width', String(size));
6136		svg.setAttribute('height', String(size));
6137		svg.setAttribute('aria-hidden', 'true');
6138		svg.setAttribute('focusable', 'false');
6139		var p = document.createElementNS(SVG_NS, 'path');
6140		p.setAttribute('fill', 'none');
6141		p.setAttribute('stroke', 'currentColor');
6142		p.setAttribute('stroke-width', String(width || 2));
6143		p.setAttribute('stroke-linecap', 'round');
6144		p.setAttribute('stroke-linejoin', 'round');
6145		p.setAttribute('d', d);
6146		svg.appendChild(p);
6147		return svg;
6148	}
6149
6150	function removeGlyph() {
6151		return strokeGlyph(15, 'M6 6l12 12M18 6L6 18', 2);
6152	}
6153
6154	// Trash can: lid line, handle, tapered body, two tines. Drawn at 1.8 rather than the ×'s 2
6155	// because it carries far more stroke in the same box — at 2 the shape closes up and reads as
6156	// a blob at 16px. Optically the two now match.
6157	function trashGlyph() {
6158		return strokeGlyph(16, 'M4 7h16M10 4h4M6.5 7l.8 12.1a1.4 1.4 0 0 0 1.4 1.3h6.6a1.4 1.4 0 0 0 1.4-1.3L17.5 7M10.2 10.7v6M13.8 10.7v6', 1.8);
6159	}
6160
6161	/*
6162	 * Builds the panel for ONE .cmz-paddle-cart-dropdown. Called for every copy in the document
6163	 * (desktop + mobile clone), which is the fix for the mini-cart being inert on touch.
6164	 *
6165	 * Still hand-escaped throughout (createElement + textContent, never innerHTML with a server
6166	 * string) — course titles are user-adjacent content and this markup is built client-side.
6167	 *
6168	 * No per-line PRICE, deliberately. decisions.md ("The cart is a store, not a page") settles
6169	 * that Paddle's checkout is where the buyer sees real money, because PPP and promo pricing
6170	 * are resolved server-side at transaction creation; the only number available client-side
6171	 * is the WooCommerce list price, which is NOT what most buyers are charged. The fallback
6172	 * cart page already had to label its subtotal "an estimate" for exactly this reason. A
6173	 * mini-cart quoting a price the buyer will not pay is the display-side version of the
6174	 * 215-wrong-orders mistake, so the panel shows what it can state truthfully — what is in
6175	 * the cart — and sends them to the checkout for the total.
6176	 */
6177
6178	/* =================================================================================
6179	 * VIEWER PRICES — GET /cmz-paddle/v1/prices (gateway 1.14.0)
6180	 *
6181	 * ONE cache feeds both surfaces: the archive cards and the mini-cart. Fetched per set of
6182	 * ids not yet known, so opening the popup after the archive has loaded costs nothing.
6183	 *
6184	 * WE RENDER `formatted`, NEVER THE MINOR UNITS. The gateway formats in the buyer's currency
6185	 * and that is the figure we show — the same no-arithmetic rule the switch confirm follows.
6186	 *
6187	 * THE ONE EXCEPTION, AND WHY IT IS SAFE: the subtotal. The contract carries no subtotal and
6188	 * the founder needs one ("so that the customers know they've reached their budget"), so the
6189	 * per-line `price` values — integers, already discounted by Paddle, all in one currency —
6190	 * are ADDED. Integer addition of same-currency minor units is exact: no rounding, no
6191	 * percentage, no conversion, nothing derived. Formatting uses the currency's own decimal
6192	 * places via Intl, so zero-decimal currencies stay right.
6193	 * ============================================================================== */
6194	var priceCache = {};      // course_id -> row from the endpoint
6195	var priceMeta  = null;    // { currency_code, estimate, discount }
6196
6197	function pricesFetch(ids) {
6198		var want = ids.filter(function (id) { return !(id in priceCache); });
6199		if (!want.length) { return Promise.resolve(); }
6200		if (!cfg.pricesUrl) { return Promise.resolve(); }
6201		return fetch(cfg.pricesUrl + '?courses=' + encodeURIComponent(want.join(',')), {
6202			credentials: 'same-origin',
6203			headers: { 'Accept': 'application/json', 'X-WP-Nonce': cfg.restNonce }
6204		})
6205		.then(function (r) { return r.ok ? r.json() : null; })
6206		.then(function (d) {
6207			if (!d || !d.courses) { return; }
6208			priceMeta = { currency_code: d.currency_code, estimate: !!d.estimate, discount: d.discount || null };
6209			d.courses.forEach(function (c) { priceCache[String(c.course_id)] = c; });
6210		})
6211		.catch(function () { /* no prices is a missing line, never a broken page */ });
6212	}
6213
6214	function money(minor, currency) {
6215		var n = Number(minor);
6216		if (!isFinite(n)) { return ''; }
6217		var cur = currency || 'USD', digits = 2;
6218		try { digits = new Intl.NumberFormat('en', { style: 'currency', currency: cur }).resolvedOptions().maximumFractionDigits; } catch (e) {}
6219		try { return new Intl.NumberFormat(undefined, { style: 'currency', currency: cur }).format(n / Math.pow(10, digits)); }
6220		catch (e) { return cur + ' ' + (n / Math.pow(10, digits)).toFixed(digits); }
6221	}
6222
6223	/* Archive cards. An unsellable course gets no price AND no add-to-cart, so the card never
6224	   offers something the checkout would refuse. */
6225	function paintLoopPrices() {
6226		var slots = document.querySelectorAll('.cmz-paddle-loop-price[data-course-id]');
6227		if (!slots.length) { return; }
6228		var ids = Array.prototype.map.call(slots, function (el) { return el.getAttribute('data-course-id'); });
6229		pricesFetch(ids).then(function () {
6230			slots.forEach(function (el) {
6231				var row = priceCache[el.getAttribute('data-course-id')];
6232				if (!row) { return; }
6233				if (!row.sellable) {
6234					el.hidden = true;
6235					var btn = document.querySelector('.cmz-paddle-loop-add[data-course-id="' + el.getAttribute('data-course-id') + '"]');
6236					if (btn) { btn.hidden = true; }
6237					return;
6238				}
6239				el.textContent = '';
6240				var f = row.formatted || {};
6241				if (row.discount && f.list) {
6242					var was = document.createElement('span');
6243					was.className = 'cmz-paddle-price-was';
6244					escText(was, f.list);
6245					el.appendChild(was);
6246				}
6247				var now = document.createElement('span');
6248				now.className = 'cmz-paddle-price-now';
6249				escText(now, f.price || f.list || '');
6250				el.appendChild(now);
6251				el.hidden = false;
6252			});
6253		});
6254	}
6255
6256	function renderOneDropdown(dd, lines) {
6257		dd.textContent = '';
6258
6259		if (!lines || !lines.length) {
6260			var empty = document.createElement('div');
6261			empty.className = 'cmz-paddle-cart-dropdown-empty';
6262			escText(empty, 'Your cart is empty.');
6263			dd.appendChild(empty);
6264			return;
6265		}
6266
6267		var head = document.createElement('div');
6268		head.className = 'cmz-paddle-mc-head';
6269		var headLabel = document.createElement('span');
6270		escText(headLabel, 'Your cart');
6271		head.appendChild(headLabel);
6272		var headCount = document.createElement('span');
6273		headCount.className = 'cmz-paddle-mc-count';
6274		escText(headCount, lines.length === 1 ? '1 course' : lines.length + ' courses');
6275		head.appendChild(headCount);
6276		dd.appendChild(head);
6277
6278		var list = document.createElement('div');
6279		list.className = 'cmz-paddle-mc-list';
6280
6281		lines.forEach(function (line) {
6282			var row = document.createElement('div');
6283			row.className = 'cmz-paddle-cart-dropdown-row';
6284			row.setAttribute('data-course-id', line.course_id);
6285
6286			// Course artwork (founder, Dometrain reference). Decorative — the title beside it
6287			// is the accessible name — so alt is empty rather than a duplicate announcement.
6288			if (line.thumb) {
6289				var img = document.createElement('img');
6290				img.className = 'cmz-paddle-mc-thumb';
6291				img.src = line.thumb;
6292				img.alt = '';
6293				img.loading = 'lazy';
6294				row.appendChild(img);
6295			}
6296
6297			var a = document.createElement('a');
6298			a.href = line.url || '#';
6299			escText(a, line.title || '');
6300			row.appendChild(a);
6301
6302			// Per-line price: the discounted figure, with list struck above it only when there
6303			// IS a discount. No discount label per row — one label by the subtotal instead,
6304			// because repeating it on every line is what turns a popup into a receipt.
6305			var prow = priceCache[String(line.course_id)];
6306			if (prow && prow.sellable && prow.formatted) {
6307				var pw = document.createElement('span');
6308				pw.className = 'cmz-paddle-mc-price';
6309				if (prow.discount && prow.formatted.list) {
6310					var wasEl = document.createElement('span');
6311					wasEl.className = 'cmz-paddle-mc-was';
6312					escText(wasEl, prow.formatted.list);
6313					pw.appendChild(wasEl);
6314				}
6315				var nowEl = document.createElement('span');
6316				nowEl.className = 'cmz-paddle-mc-now';
6317				escText(nowEl, prow.formatted.price || prow.formatted.list || '');
6318				pw.appendChild(nowEl);
6319				row.appendChild(pw);
6320			}
6321
6322			var remove = document.createElement('button');
6323			remove.type = 'button';
6324			remove.className = 'cmz-paddle-cart-row-remove';
6325			remove.setAttribute('data-course-id', line.course_id);
6326			remove.setAttribute('title', 'Remove from cart');
6327			remove.setAttribute('aria-label', 'Remove ' + (line.title || 'this course') + ' from cart');
6328			remove.appendChild(removeGlyph());
6329			row.appendChild(remove);
6330
6331			list.appendChild(row);
6332		});
6333		dd.appendChild(list);
6334
6335		/*
6336		 * Subtotal, one discount label, one caveat — in that order, and only when we actually
6337		 * have figures for every priced line. A partial subtotal is worse than none: it would
6338		 * understate the basket, which is the one direction a budget number must never err.
6339		 */
6340		var priced = lines.map(function (l) { return priceCache[String(l.course_id)]; })
6341			.filter(function (r) { return r && r.sellable && r.price; });
6342		if (priced.length && priced.length === lines.length && priceMeta) {
6343			var sum = 0;
6344			priced.forEach(function (r) { sum += Number(r.price); });   // integers, one currency
6345			var sub = document.createElement('div');
6346			sub.className = 'cmz-paddle-mc-sub';
6347			var sl = document.createElement('span');
6348			escText(sl, 'Subtotal');
6349			var sv = document.createElement('span');
6350			escText(sv, money(sum, priceMeta.currency_code));
6351			sub.appendChild(sl); sub.appendChild(sv);
6352			dd.appendChild(sub);
6353
6354			if (priceMeta.discount && priceMeta.discount.label) {
6355				var dl = document.createElement('span');
6356				dl.className = 'cmz-paddle-mc-disc';
6357				escText(dl, priceMeta.discount.label);
6358				dd.appendChild(dl);
6359			}
6360			if (priceMeta.estimate) {
6361				// `estimate` is about TAX only — the discount and the pre-tax figures are exact,
6362				// so the line says that and does not hedge the whole number.
6363				var nt = document.createElement('span');
6364				nt.className = 'cmz-paddle-mc-note';
6365				escText(nt, 'Taxes are finalised at checkout.');
6366				dd.appendChild(nt);
6367			}
6368		}
6369
6370		var actions = document.createElement('div');
6371		actions.className = 'cmz-paddle-cart-dropdown-actions';
6372
6373		// Trash can, not the word "Empty cart" (founder: "people will get that better"). The
6374		// glyph carries no text, so the accessible name has to be supplied explicitly — and
6375		// title as well, which is what gives mouse users the tooltip.
6376		var emptyLink = document.createElement('button');
6377		emptyLink.type = 'button';
6378		emptyLink.className = 'cmz-paddle-cart-empty-link';
6379		emptyLink.setAttribute('aria-label', 'Empty cart');
6380		emptyLink.setAttribute('title', 'Empty cart');
6381		emptyLink.appendChild(trashGlyph());
6382		actions.appendChild(emptyLink);
6383
6384		// Keeps the Tutor classes off entirely — this button is styled by the component, and
6385		// inheriting tutor-btn-primary was one more cascade fight for no benefit.
6386		var checkoutBtn = document.createElement('button');
6387		checkoutBtn.type = 'button';
6388		checkoutBtn.className = 'cmz-paddle-cart-dropdown-checkout';
6389		// Count in the label (founder, Dometrain reference): the button states what it is about
6390		// to buy, so the basket size is legible without reading back up the panel.
6391		var coLabel = document.createElement('span');
6392		escText(coLabel, 'Checkout (' + lines.length + ')');
6393		checkoutBtn.appendChild(coLabel);
6394		var arrow = document.createElement('span');
6395		arrow.className = 'cmz-paddle-mc-arrow';
6396		arrow.setAttribute('aria-hidden', 'true');
6397		escText(arrow, '→');
6398		checkoutBtn.appendChild(arrow);
6399		actions.appendChild(checkoutBtn);
6400
6401		dd.appendChild(actions);
6402	}
6403
6404	function renderDropdown(lines) {
6405		function paint() {
6406			document.querySelectorAll('.cmz-paddle-cart-dropdown').forEach(function (dd) {
6407				renderOneDropdown(dd, lines);
6408			});
6409		}
6410		// Render immediately so the popup never waits on the network, then again once prices
6411		// land. Cached ids resolve synchronously and the second pass is a no-op.
6412		paint();
6413		if (lines && lines.length) {
6414			pricesFetch(lines.map(function (l) { return String(l.course_id); })).then(paint);
6415		}
6416	}
6417
6418	function refreshCart() {
6419		return post('cmz_paddle_cart_state', {}).then(function (res) {
6420			var payload = res && res.data ? res.data : {};
6421			updateBadge(payload.count || 0);
6422			renderDropdown(payload.lines || []);
6423			syncAddToCartButtons(payload.items || []);
6424			return payload;
6425		});
6426	}
6427
6428	// Open/close act on ONE menu item's own panel (there are two in the document). Passing the
6429	// item in is what makes the mobile clone work.
6430	function setDropdown(item, open) {
6431		if (!item) { return; }
6432		var dd = partOf(item, 'cmz-paddle-cart-dropdown');
6433		var link = partOf(item, 'cmz-paddle-cart-link');
6434		if (!dd) { return; }
6435		dd.hidden = !open;
6436		// Timestamp every open, so the touch toggle can tell "this same tap already opened
6437		// it via focusin" from "a second, deliberate closing tap" (see the click handler).
6438		if (open) { item.setAttribute('data-cmz-opened-at', String(Date.now())); }
6439		// The link is the popup's control now that the caret is gone, so it carries the state.
6440		if (link) { link.setAttribute('aria-expanded', open ? 'true' : 'false'); }
6441	}
6442	function closeAllDropdowns() {
6443		cartItems().forEach(function (item) { setDropdown(item, false); });
6444	}
6445	function isOpen(item) {
6446		var dd = partOf(item, 'cmz-paddle-cart-dropdown');
6447		return !!(dd && !dd.hidden);
6448	}
6449	function openOnly(item) {
6450		closeAllDropdowns(); // only ever one panel open at a time
6451		setDropdown(item, true);
6452	}
6453
6454	/* -----------------------------------------------------------------------
6455	 * Opening the panel. The caret is gone (founder: "it opens on hover, so we don't need a
6456	 * dropdown arrow then"), so the chip itself is the whole control, and what a press means
6457	 * depends on whether the device can hover:
6458	 *
6459	 *   hover-capable ... hover peeks the panel; CLICK still goes straight to checkout, which
6460	 *                     is the standing one-less-step ruling and is untouched.
6461	 *   touch ........... TAP opens the panel, and checkout is one more tap on the panel's own
6462	 *                     Checkout (n) button. With no hover and no caret there would otherwise
6463	 *                     be no way to see the basket before a tap mints a transaction — the
6464	 *                     extra tap buys the contents view.
6465	 *
6466	 * The touch behaviour is the one deliberate departure from "icon click → checkout", so it
6467	 * is switchable HERE, in one constant, instead of being spread through the handlers.
6468	 * -------------------------------------------------------------------- */
6469	var MOBILE_TAP_OPENS_PANEL = true;
6470	var HOVER_CLOSE_DELAY = 260; // grace period so the pointer can cross into the panel
6471	var hoverCloseTimer = null;
6472
6473	// (hover: hover) and (pointer: fine) is the capability question, not a width guess: a
6474	// touch laptop reports a coarse pointer, and a narrow desktop window still has a mouse.
6475	function canHover() {
6476		return !!(window.matchMedia && window.matchMedia('(hover: hover) and (pointer: fine)').matches);
6477	}
6478
6479	function cancelHoverClose() {
6480		if (hoverCloseTimer) { window.clearTimeout(hoverCloseTimer); hoverCloseTimer = null; }
6481	}
6482	function scheduleHoverClose() {
6483		cancelHoverClose();
6484		hoverCloseTimer = window.setTimeout(function () { closeAllDropdowns(); }, HOVER_CLOSE_DELAY);
6485	}
6486
6487	/*
6488	 * DELEGATED, NEVER PER-ITEM (release night 2026-08-07, "nothing happens when I hover").
6489	 * The per-item mouseenter/focus bindings ran once at script init — but Extra builds the
6490	 * BURGER menu's cart item later, so the clone a narrow window actually shows had no hover
6491	 * handlers at all: hover did nothing and a click fell through to checkout. Every other
6492	 * cart listener in this file is already document-delegated for exactly this reason; now
6493	 * these are too. mouseover/mouseout + a relatedTarget-containment check reproduce
6494	 * mouseenter/mouseleave semantics (movement within the item, chip → panel, is ignored).
6495	 *
6496	 * The pointer flag lives on the item as data-cmz-pointer-in: focusout is not only "the
6497	 * user tabbed away" — removing a row disables the focused × button, which drops focus
6498	 * with no relatedTarget, and closing on that slammed the panel shut after every removal.
6499	 * While the pointer is physically inside, focus hiccups never close; hover-away does.
6500	 */
6501	document.addEventListener('mouseover', function (e) {
6502		var item = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-item') : null;
6503		if (!item || !canHover()) { return; }
6504		if (e.relatedTarget && item.contains(e.relatedTarget)) { return; } // moved within
6505		item.setAttribute('data-cmz-pointer-in', '1');
6506		cancelHoverClose();
6507		openOnly(item);
6508	}, true);
6509	document.addEventListener('mouseout', function (e) {
6510		var item = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-item') : null;
6511		if (!item || !canHover()) { return; }
6512		if (e.relatedTarget && item.contains(e.relatedTarget)) { return; } // still inside
6513		item.removeAttribute('data-cmz-pointer-in');
6514		scheduleHoverClose();
6515	}, true);
6516	// Keyboard: tabbing onto the chip or into the panel opens it and holds it open.
6517	document.addEventListener('focusin', function (e) {
6518		var item = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-item') : null;
6519		if (!item) { return; }
6520		cancelHoverClose();
6521		openOnly(item);
6522	});
6523	document.addEventListener('focusout', function (e) {
6524		var item = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-item') : null;
6525		if (!item) { return; }
6526		var to = e.relatedTarget;
6527		if (to && item.contains(to)) { return; }
6528		// Focus fell out because the control under the pointer was disabled or removed —
6529		// the pointer is still here, so the panel stays until it actually leaves.
6530		if (canHover() && item.hasAttribute('data-cmz-pointer-in')) { return; }
6531		setDropdown(item, false);
6532	});
6533
6534	/*
6535	 * ============================ CAPTURE, NOT BUBBLE ============================
6536	 * Every delegated listener whose target lives inside the NAV is registered on the capture
6537	 * phase, and this is load-bearing rather than stylistic.
6538	 *
6539	 * MEASURED on a real phone-emulating browser, 2026-08-06 — instrumented three listeners and
6540	 * tapped the cart chip:
6541	 *     CAPTURE on document  -> fired  (closest('.cmz-paddle-cart-link') === true)
6542	 *     BUBBLE  on the link  -> fired
6543	 *     BUBBLE  on document  -> NEVER FIRED
6544	 * Something between the link and document calls stopPropagation(): Extra's own mobile-menu
6545	 * handler, on the menu it renders as a SECOND copy of the nav (the same duplicate-menu trap
6546	 * that made the mini-cart inert on touch once before — different mechanism, same surface).
6547	 *
6548	 * The buyer-visible consequence was total: on touch, tapping the cart chip did nothing at
6549	 * all. Not open the panel, not go to the cart — the anchor's href is "#", so the default
6550	 * merely appended a hash. The cart was UNREACHABLE from the mobile nav, and every control
6551	 * inside the mini-cart (row ×, empty-cart trash, Checkout) was dead for the same reason.
6552	 *
6553	 * Capture runs document-downward, so it is reached before any descendant can stop
6554	 * propagation. Each handler still early-returns unless its own selector matches, so the cost
6555	 * is one closest() per document click. These all sit on `document`, so stopPropagation() in
6556	 * one of them does not prevent the others from running.
6557	 * ============================================================================= */
6558
6559	// Outside click and Escape both close it — standard dropdown manners.
6560	document.addEventListener('click', function (e) {
6561		var withinItem = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-item') : null;
6562		if (!withinItem) { closeAllDropdowns(); }
6563	}, true);
6564	document.addEventListener('keydown', function (e) {
6565		if (e.key === 'Escape' || e.key === 'Esc') { closeAllDropdowns(); }
6566	});
6567
6568	// Remove a line from inside the dropdown. refreshCart() re-derives badge, dropdown AND
6569	// every course-page "Add to Cart" button's state together — one call, one source of truth,
6570	// so a removal here can never drift out of sync with what a page's own button shows.
6571	document.addEventListener('click', function (e) {
6572		var btn = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-row-remove') : null;
6573		if (!btn) { return; }
6574		e.preventDefault();
6575		var courseId = btn.getAttribute('data-course-id');
6576		btn.disabled = true;
6577		post('cmz_paddle_cart_remove', { course_id: courseId }).then(function () {
6578			refreshCart();
6579		});
6580	}, true);
6581
6582	// Empty the whole cart from the dropdown — same convergence via refreshCart(). Closing
6583	// here is deliberate (founder: "close on clear all is okay") and now has to be explicit,
6584	// because the pointer-still-inside guard stopped the old accidental focusout close.
6585	document.addEventListener('click', function (e) {
6586		var btn = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-empty-link') : null;
6587		if (!btn) { return; }
6588		e.preventDefault();
6589		btn.disabled = true;
6590		post('cmz_paddle_cart_empty', {}).then(function () {
6591			refreshCart();
6592			closeAllDropdowns();
6593		}).catch(function () {
6594			btn.disabled = false;
6595		});
6596	}, true);
6597
6598	// Checkout button inside the dropdown behaves exactly like the icon click.
6599	document.addEventListener('click', function (e) {
6600		var btn = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-dropdown-checkout') : null;
6601		if (!btn) { return; }
6602		e.preventDefault();
6603		goToCheckout();
6604	}, true);
6605
6606	// Resume-after-login: a guest sent to log in from an icon click comes back to
6607	// /courses/?_cmz_cart_resume=1 (see cmz_paddle_cart_resume_url()). If they're gated and
6608	// logged in now (this script only runs at all if they are, per the enqueue gate), fire the
6609	// same checkout call again automatically rather than making them click twice — the "resume
6610	// into checkout" the founder asked for, built without touching cmz_pending_buy.
6611	(function maybeResume() {
6612		try {
6613			var params = new URLSearchParams(location.search);
6614			if (params.get('_cmz_cart_resume') !== '1') { return; }
6615			params.delete('_cmz_cart_resume');
6616			var clean = location.pathname + (params.toString() ? '?' + params.toString() : '') + location.hash;
6617			window.history.replaceState({}, document.title, clean);
6618			goToCheckout();
6619		} catch (e) { /* private-mode storage or URL API failure — never break the page */ }
6620	})();
6621
6622	// Initial badge + dropdown fill, once per page load — one fetch does both.
6623	refreshCart().catch(function () {});
6624	// Archive price lines: one batched call for every card on the page, independent of the
6625	// cart fetch above so a slow cart never delays the prices or vice versa.
6626	paintLoopPrices();
6627})();
6628//# sourceURL=cmz-paddle-cart-js-after
6629</script>
vendor: 1 bytes, line 6629
6629
6630<script id="wp-hooks-js" src="https://courses.code-maze.com/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script>
vendor: 1 bytes, line 6630
6630
6631<script id="wp-i18n-js" src="https://courses.code-maze.com/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script>
vendor: 1 bytes, line 6631
6631
6632<script id="wp-i18n-js-after">
6633wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
6634//# sourceURL=wp-i18n-js-after
6635</script>
vendor: 1 bytes, line 6635
6635
6636<script id="react-js" src="https://courses.code-maze.com/wp-includes/js/dist/vendor/react.min.js?ver=18.3.1.1"></script>
vendor: 1 bytes, line 6636
6636
6637<script id="react-dom-js" src="https://courses.code-maze.com/wp-includes/js/dist/vendor/react-dom.min.js?ver=18.3.1.1"></script>
vendor: 1 bytes, line 6637
6637
6638<script id="wp-escape-html-js" src="https://courses.code-maze.com/wp-includes/js/dist/escape-html.min.js?ver=87ebe53e97bba59805a5"></script>
vendor: 1 bytes, line 6638
6638
6639<script id="wp-element-js" src="https://courses.code-maze.com/wp-includes/js/dist/element.min.js?ver=4a4370b2b349066fd440"></script>
vendor: 1 bytes, line 6639
6639
6640<script id="tutor-script-js-extra">
6641var _tutorobject = {"ajaxurl":"https://courses.code-maze.com/wp-admin/admin-ajax.php","home_url":"https://courses.code-maze.com","site_url":"https://courses.code-maze.com","site_title":"Code Maze","base_path":"/","tutor_url":"https://courses.code-maze.com/wp-content/plugins/tutor/","tutor_pro_url":"https://courses.code-maze.com/wp-content/plugins/tutor-pro/","nonce_key":"_tutor_nonce","_tutor_nonce":"e50d0d8034","loading_icon_url":"https://courses.code-maze.com/wp-admin/images/wpspin_light.gif","placeholder_img_src":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/placeholder.svg","enable_lesson_classic_editor":"1","tutor_frontend_dashboard_url":"https://courses.code-maze.com/dashboard/","is_dashboard_page":"","wp_date_format":"MMMM d, yyyy","start_of_week":"1","is_admin":"","is_admin_bar_showing":"","addons_data":[{"name":"Course Bundle","description":"Group multiple courses to sell together.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/course-bundle/thumbnail.svg","base_name":"course-bundle","is_enabled":1},{"name":"Subscription","description":"Manage subscription","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/subscription/thumbnail.png","base_name":"subscription","is_enabled":0},{"name":"Content Bank","description":"Create content once and use it across multiple courses.","is_new":true,"url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/content-bank/thumbnail.png","base_name":"content-bank","is_enabled":0},{"name":"Social Login","description":"Let users register & login through social networks.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/social-login/thumbnail.svg","base_name":"social-login","is_enabled":0},{"name":"Content Drip","description":"Unlock lessons by schedule or when students meet a specific condition.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/content-drip/thumbnail.png","base_name":"content-drip","is_enabled":0},{"name":"Tutor Multi Instructors","description":"Collaborate and add multiple instructors to a course.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-multi-instructors/thumbnail.png","base_name":"tutor-multi-instructors","is_enabled":1},{"name":"Tutor Assignments","description":"Assess student learning with assignments.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-assignments/thumbnail.png","base_name":"tutor-assignments","is_enabled":1},{"name":"Tutor Course Preview","description":"Offer free previews of specific lessons before enrollment.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-course-preview/thumbnail.png","base_name":"tutor-course-preview","is_enabled":1},{"name":"Tutor Course Attachments","description":"Add unlimited attachments/ private files to any Tutor course","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-course-attachments/thumbnail.png","base_name":"tutor-course-attachments","is_enabled":1},{"name":"Tutor Google Meet Integration","description":"Host live classes with Google Meet, directly from your lesson page.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/google-meet/thumbnail.png","base_name":"google-meet","is_enabled":0},{"name":"Tutor Report","description":"Check your course performance through Tutor Report stats.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-report/thumbnail.png","base_name":"tutor-report","is_enabled":1},{"name":"Email","description":"Send automated and customized emails for various Tutor events.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-email/thumbnail.png","base_name":"tutor-email","is_enabled":1},{"name":"Calendar","description":"Enable to let students view all your course events in one place.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/calendar/thumbn
6641ail.png","base_name":"calendar","is_enabled":0},{"name":"Notifications","description":"Keep students and instructors notified of course events on their dashboard.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-notifications/thumbnail.png","base_name":"tutor-notifications","is_enabled":0},{"name":"Google Classroom Integration","description":"Enable to integrate Tutor LMS with Google Classroom.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/google-classroom/thumbnail.png","base_name":"google-classroom","is_enabled":0},{"name":"Tutor Zoom Integration","description":"Connect Tutor LMS with Zoom to host live online classes.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-zoom/thumbnail.png","base_name":"tutor-zoom","is_enabled":0},{"name":"Quiz Export/Import","description":"Save time by exporting/importing quiz data with easy options.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/quiz-import-export/thumbnail.png","base_name":"quiz-import-export","is_enabled":0},{"name":"Enrollment","description":"Enable to manually enroll students in your courses.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/enrollments/thumbnail.png","base_name":"enrollments","is_enabled":1},{"name":"Tutor Certificate","description":"Enable to award certificates upon course completion.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-certificate/thumbnail.png","base_name":"tutor-certificate","is_enabled":1},{"name":"Gradebook","description":"Track student progress with a centralized gradebook.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/gradebook/thumbnail.png","base_name":"gradebook","is_enabled":1}
6641,{"name":"Tutor Prerequisites","description":"Set course prerequisites to guide learning paths effectively.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-prerequisites/thumbnail.png","base_name":"tutor-prerequisites","is_enabled":0},{"name":"BuddyPress","description":"Boost engagement with social features through BuddyPress for Tutor LMS.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/buddypress/thumbnail.png","base_name":"buddypress","is_enabled":0},{"name":"WooCommerce Subscriptions","description":"Capture Residual Revenue with Recurring Payments.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/wc-subscriptions/thumbnail.png","base_name":"wc-subscriptions","is_enabled":0},{"name":"Paid Memberships Pro","description":"Boost revenue by selling course memberships.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/pmpro/thumbnail.png","base_name":"pmpro","is_enabled":0},{"name":"Restrict Content Pro","description":"Enable to manage content access through Restrict Content Pro. ","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/restrict-content-pro/thumbnail.png","base_name":"restrict-content-pro","is_enabled":0},{"name":"Weglot","description":"Translate & manage multilingual courses for global reach.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-weglot/thumbnail.png","base_name":"tutor-weglot","is_enabled":0},{"name":"WPML","description":"Create multilingual courses, lessons, dashboard and more.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-wpml/thumbnail.png","base_name":"tutor-wpml","is_enabled":0},{"name":"H5P","description":"Integrate H5P to add interactivity and engagement to your courses.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/h5p/thumbnail.png","base_name":"h5p","is_enabled":0}],"current_user":[],"content_change_event":"tutor_content_changed_event","is_tutor_course_edit":"","current_page":"","quiz_answer_display_time":"2000","is_ssl":"1","course_list_page_url":"https://courses.code-maze.com/wp-admin/admin.php?page=tutor","course_post_type":"courses","tutor_currency":{"symbol":"$","currency":false,"position":"left","thousand_separator":",","decimal_separator":".","no_of_decimal":"2"},"local":"en_US","settings":{"monetize_by":"wc"},"max_upload_size":"1572864000","monetize_by":"wc","kids_icons_registry":[],"is_kids_mode":"","user_preferences":[],"is_legacy_learning_mode":"1","course_slug":"courses","lesson_slug":"lesson","quiz_slug":"quizzes","is_tour_completed":"1","visibility_control":"","assignment_slug":"assignments","legal_consent_display_places":["student_registration","login","checkout","instructor_registration"]};
6642//# sourceURL=tutor-script-js-extra
6643</script>
vendor: 1 bytes, line 6643
6643
6644<script id="tutor-script-js" src="https://courses.code-maze.com/wp-content/plugins/tutor/assets/js/tutor.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6644
6644
6645<script id="jquery-ui-core-js-before">
6646jQuery.uiBackCompat = true;
6647//# sourceURL=jquery-ui-core-js-before
6648</script>
vendor: 1 bytes, line 6648
6648
6649<script id="jquery-ui-core-js" src="https://courses.code-maze.com/wp-includes/js/jquery/ui/core.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 6649
6649
6650<script id="jquery-ui-mouse-js" src="https://courses.code-maze.com/wp-includes/js/jquery/ui/mouse.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 6650
6650
6651<script id="jquery-ui-sortable-js" src="https://courses.code-maze.com/wp-includes/js/jquery/ui/sortable.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 6651
6651
6652<script id="jquery-touch-punch-js" src="https://courses.code-maze.com/wp-includes/js/jquery/jquery.ui.touch-punch.js?ver=0.2.2"></script>
vendor: 1 bytes, line 6652
6652
6653<script id="tutor-plyr-js" src="https://courses.code-maze.com/wp-content/plugins/tutor/assets/lib/plyr/plyr.polyfilled.min.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6653
6653
6654<script id="tutor-social-share-js" src="https://courses.code-maze.com/wp-content/plugins/tutor/assets/lib/SocialShare/SocialShare.min.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6654
6654
6655<script id="moment-js" src="https://courses.code-maze.com/wp-includes/js/dist/vendor/moment.min.js?ver=2.30.1"></script>
vendor: 1 bytes, line 6655
6655
6656<script id="moment-js-after">
6657moment.updateLocale( 'en_US', {"months":["January","February","March","April","May","June","July","August","September","October","November","December"],"monthsShort":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"weekdays":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"weekdaysShort":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"week":{"dow":1},"longDateFormat":{"LT":"g:i a","LTS":null,"L":null,"LL":"F j, Y","LLL":"F j, Y g:i a","LLLL":null}} );
6658//# sourceURL=moment-js-after
6659</script>
vendor: 1 bytes, line 6659
6659
6660<script id="wp-deprecated-js" src="https://courses.code-maze.com/wp-includes/js/dist/deprecated.min.js?ver=fe587bac92b7d0ef760e"></script>
vendor: 1 bytes, line 6660
6660
6661<script id="wp-date-js" src="https://courses.code-maze.com/wp-includes/js/dist/date.min.js?ver=8173fc0fc12b7bb7eaf0"></script>
vendor: 1 bytes, line 6661
6661
6662<script id="wp-date-js-after">
6663wp.date.setSettings( {"l10n":{"locale":"en_US","months":["January","February","March","April","May","June","July","August","September","October","November","December"],"monthsShort":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"weekdays":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"weekdaysShort":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"meridiem":{"am":"am","pm":"pm","AM":"AM","PM":"PM"},"relative":{"future":"%s from now","past":"%s ago","s":"a second","ss":"%d seconds","m":"a minute","mm":"%d minutes","h":"an hour","hh":"%d hours","d":"a day","dd":"%d days","M":"a month","MM":"%d months","y":"a year","yy":"%d years"},"startOfWeek":1},"formats":{"time":"g:i a","date":"F j, Y","datetime":"F j, Y g:i a","datetimeAbbreviated":"M j, Y g:i a"},"timezone":{"offset":2,"offsetFormatted":"2","string":"Europe/Belgrade","abbr":"CEST"}} );
6664//# sourceURL=wp-date-js-after
6665</script>
vendor: 1 bytes, line 6665
6665
6666<script id="tutor-frontend-js-extra">
6667var _tutorobject = {"ajaxurl":"https://courses.code-maze.com/wp-admin/admin-ajax.php","home_url":"https://courses.code-maze.com","site_url":"https://courses.code-maze.com","site_title":"Code Maze","base_path":"/","tutor_url":"https://courses.code-maze.com/wp-content/plugins/tutor/","tutor_pro_url":"https://courses.code-maze.com/wp-content/plugins/tutor-pro/","nonce_key":"_tutor_nonce","_tutor_nonce":"e50d0d8034","loading_icon_url":"https://courses.code-maze.com/wp-admin/images/wpspin_light.gif","placeholder_img_src":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/placeholder.svg","enable_lesson_classic_editor":"1","tutor_frontend_dashboard_url":"https://courses.code-maze.com/dashboard/","is_dashboard_page":"","wp_date_format":"MMMM d, yyyy","start_of_week":"1","is_admin":"","is_admin_bar_showing":"","addons_data":[{"name":"Course Bundle","description":"Group multiple courses to sell together.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/course-bundle/thumbnail.svg","base_name":"course-bundle","is_enabled":1},{"name":"Subscription","description":"Manage subscription","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/subscription/thumbnail.png","base_name":"subscription","is_enabled":0},{"name":"Content Bank","description":"Create content once and use it across multiple courses.","is_new":true,"url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/content-bank/thumbnail.png","base_name":"content-bank","is_enabled":0},{"name":"Social Login","description":"Let users register & login through social networks.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/social-login/thumbnail.svg","base_name":"social-login","is_enabled":0},{"name":"Content Drip","description":"Unlock lessons by schedule or when students meet a specific condition.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/content-drip/thumbnail.png","base_name":"content-drip","is_enabled":0},{"name":"Tutor Multi Instructors","description":"Collaborate and add multiple instructors to a course.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-multi-instructors/thumbnail.png","base_name":"tutor-multi-instructors","is_enabled":1},{"name":"Tutor Assignments","description":"Assess student learning with assignments.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-assignments/thumbnail.png","base_name":"tutor-assignments","is_enabled":1},{"name":"Tutor Course Preview","description":"Offer free previews of specific lessons before enrollment.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-course-preview/thumbnail.png","base_name":"tutor-course-preview","is_enabled":1},{"name":"Tutor Course Attachments","description":"Add unlimited attachments/ private files to any Tutor course","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-course-attachments/thumbnail.png","base_name":"tutor-course-attachments","is_enabled":1},{"name":"Tutor Google Meet Integration","description":"Host live classes with Google Meet, directly from your lesson page.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/google-meet/thumbnail.png","base_name":"google-meet","is_enabled":0},{"name":"Tutor Report","description":"Check your course performance through Tutor Report stats.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-report/thumbnail.png","base_name":"tutor-report","is_enabled":1},{"name":"Email","description":"Send automated and customized emails for various Tutor events.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-email/thumbnail.png","base_name":"tutor-email","is_enabled":1},{"name":"Calendar","description":"Enable to let students view all your course events in one place.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/calendar/thumbn
6667ail.png","base_name":"calendar","is_enabled":0},{"name":"Notifications","description":"Keep students and instructors notified of course events on their dashboard.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-notifications/thumbnail.png","base_name":"tutor-notifications","is_enabled":0},{"name":"Google Classroom Integration","description":"Enable to integrate Tutor LMS with Google Classroom.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/google-classroom/thumbnail.png","base_name":"google-classroom","is_enabled":0},{"name":"Tutor Zoom Integration","description":"Connect Tutor LMS with Zoom to host live online classes.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-zoom/thumbnail.png","base_name":"tutor-zoom","is_enabled":0},{"name":"Quiz Export/Import","description":"Save time by exporting/importing quiz data with easy options.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/quiz-import-export/thumbnail.png","base_name":"quiz-import-export","is_enabled":0},{"name":"Enrollment","description":"Enable to manually enroll students in your courses.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/enrollments/thumbnail.png","base_name":"enrollments","is_enabled":1},{"name":"Tutor Certificate","description":"Enable to award certificates upon course completion.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-certificate/thumbnail.png","base_name":"tutor-certificate","is_enabled":1},{"name":"Gradebook","description":"Track student progress with a centralized gradebook.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/gradebook/thumbnail.png","base_name":"gradebook","is_enabled":1}
6667,{"name":"Tutor Prerequisites","description":"Set course prerequisites to guide learning paths effectively.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-prerequisites/thumbnail.png","base_name":"tutor-prerequisites","is_enabled":0},{"name":"BuddyPress","description":"Boost engagement with social features through BuddyPress for Tutor LMS.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/buddypress/thumbnail.png","base_name":"buddypress","is_enabled":0},{"name":"WooCommerce Subscriptions","description":"Capture Residual Revenue with Recurring Payments.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/wc-subscriptions/thumbnail.png","base_name":"wc-subscriptions","is_enabled":0},{"name":"Paid Memberships Pro","description":"Boost revenue by selling course memberships.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/pmpro/thumbnail.png","base_name":"pmpro","is_enabled":0},{"name":"Restrict Content Pro","description":"Enable to manage content access through Restrict Content Pro. ","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/restrict-content-pro/thumbnail.png","base_name":"restrict-content-pro","is_enabled":0},{"name":"Weglot","description":"Translate & manage multilingual courses for global reach.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-weglot/thumbnail.png","base_name":"tutor-weglot","is_enabled":0},{"name":"WPML","description":"Create multilingual courses, lessons, dashboard and more.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-wpml/thumbnail.png","base_name":"tutor-wpml","is_enabled":0},{"name":"H5P","description":"Integrate H5P to add interactivity and engagement to your courses.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/h5p/thumbnail.png","base_name":"h5p","is_enabled":0}],"current_user":[],"content_change_event":"tutor_content_changed_event","is_tutor_course_edit":"","current_page":"","quiz_answer_display_time":"2000","is_ssl":"1","course_list_page_url":"https://courses.code-maze.com/wp-admin/admin.php?page=tutor","course_post_type":"courses","tutor_currency":{"symbol":"$","currency":false,"position":"left","thousand_separator":",","decimal_separator":".","no_of_decimal":"2"},"local":"en_US","settings":{"monetize_by":"wc"},"max_upload_size":"1572864000","monetize_by":"wc","kids_icons_registry":[],"is_kids_mode":"","user_preferences":[],"is_legacy_learning_mode":"1","course_slug":"courses","lesson_slug":"lesson","quiz_slug":"quizzes","is_tour_completed":"1","visibility_control":"","assignment_slug":"assignments","legal_consent_display_places":["student_registration","login","checkout","instructor_registration"]};
6668//# sourceURL=tutor-frontend-js-extra
6669</script>
vendor: 1 bytes, line 6669
6669
6670<script id="tutor-frontend-js" src="https://courses.code-maze.com/wp-content/plugins/tutor/assets/js/tutor-front.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6670
6670
6671<script id="tutor-tiny-js" src="https://courses.code-maze.com/wp-includes/js/tinymce/tinymce.min.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6671
6671
6672<script id="tutor-tinymce-codesample-js" src="https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/lib/codesample/prism.min.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6672
6672
6673<script id="tutor-tinymce-code-js" src="https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/lib/tinymce/code.plugin.min.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6673
6673
6674<script id="tutor-prism-js-js" src="https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/lib/prism/prism.min.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6674
6674
6675<script id="tutor-prism-script-js" src="https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/lib/prism/script.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6675
6675
6676<script id="tutor-pro-front-js" src="https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/js/front.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6676
6676
6677<script id="tutor-course-bundle-common-js-before">
6678var tutorProCourseBundle = {"is_course_bundle_editor":false,"course_bundle_list_page_url":"https:\/\/courses.code-maze.com\/wp-admin\/admin.php?page=tutor","course_bundle_post_type":"course-bundle"}
6679//# sourceURL=tutor-course-bundle-common-js-before
6680</script>
vendor: 1 bytes, line 6680
6680
6681<script id="tutor-course-bundle-common-js" src="https://courses.code-maze.com/wp-content/plugins/tutor-pro/addons/course-bundle/assets/js/common.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6681
6681
6682<script id="masonry-js" src="https://courses.code-maze.com/wp-includes/js/masonry.min.js?ver=4.2.2"></script>
vendor: 1 bytes, line 6682
6682
6683<script id="extra-scripts-js-extra">
6684var EXTRA = {"images_uri":"https://courses.code-maze.com/wp-content/themes/Extra/images/","ajaxurl":"https://courses.code-maze.com/wp-admin/admin-ajax.php","your_rating":"Your Rating:","item_in_cart_count":"%d Item in Cart","items_in_cart_count":"%d Items in Cart","item_count":"%d Item","items_count":"%d Items","rating_nonce":"c5f5229343","timeline_nonce":"568010e392","blog_feed_nonce":"0d6c653e03","error":"There was a problem, please try again.","contact_error_name_required":"Name field cannot be empty.","contact_error_email_required":"Email field cannot be empty.","contact_error_email_invalid":"Please enter a valid email address.","is_ab_testing_active":"","is_cache_plugin_active":"no"};
6685var et_shortcodes_strings = {"previous":"Previous","next":"Next"};
6686var et_pb_custom = {"ajaxurl":"https://courses.code-maze.com/wp-admin/admin-ajax.php","images_uri":"https://courses.code-maze.com/wp-content/themes/Extra/images","builder_images_uri":"https://courses.code-maze.com/wp-content/themes/Extra/includes/builder/images","et_frontend_nonce":"f3f62076a5","subscription_failed":"Please, check the fields below to make sure you entered the correct information.","et_ab_log_nonce":"f939c35cb5","fill_message":"Please, fill in the following fields:","contact_error_message":"Please, fix the following errors:","invalid":"Invalid email","captcha":"Captcha","prev":"Prev","previous":"Previous","next":"Next","wrong_captcha":"You entered the wrong number in captcha.","wrong_checkbox":"Checkbox","ignore_waypoints":"no","is_divi_theme_used":"","widget_search_selector":".widget_search","ab_tests":[],"is_ab_testing_active":"","page_id":"75594","unique_test_id":"","ab_bounce_rate":"5","is_cache_plugin_active":"no","is_shortcode_tracking":"","tinymce_uri":""}; var et_builder_utils_params = {"condition":{"diviTheme":false,"extraTheme":true},"scrollLocations":["app","top"],"builderScrollLocations":{"desktop":"app","tablet":"app","phone":"app"},"onloadScrollLocation":"app","builderType":"fe"}; var et_frontend_scripts = {"builderCssContainerPrefix":"#et-boc","builderCssLayoutPrefix":"#et-boc .et-l"};
6687var et_pb_box_shadow_elements = [];
6688var et_pb_motion_elements = {"desktop":[],"tablet":[],"phone":[]};
6689var et_pb_sticky_elements = [];
6690//# sourceURL=extra-scripts-js-extra
6691</script>
vendor: 1 bytes, line 6691
6691
6692<script id="extra-scripts-js" src="https://courses.code-maze.com/wp-content/themes/Extra/scripts/scripts.unified.js?ver=4.9.7"></script>
vendor: 1 bytes, line 6692
6692
6693<script id="lemon-squeezy-direct-checkout-js-extra">
6694var lemon_squeezy_direct = {"ajax_url":"https://courses.code-maze.com/wp-admin/admin-ajax.php","i18n":{"processing":"Processing...","error":"An error occurred. Please try again."}};
6695//# sourceURL=lemon-squeezy-direct-checkout-js-extra
6696</script>
vendor: 1 bytes, line 6696
6696
6697<script id="lemon-squeezy-direct-checkout-js" src="https://courses.code-maze.com/wp-content/plugins/lemon-squeezy-for-woocommerce/assets/js/direct-checkout.js?ver=1.0.0"></script>
vendor: 1 bytes, line 6697
6697
6698<script id="fancybox-purify-js" src="https://courses.code-maze.com/wp-content/plugins/easy-fancybox/vendor/purify.min.js?ver=1790926221"></script>
vendor: 1 bytes, line 6698
6698
6699<script id="jquery-fancybox-js-extra">
6700var efb_i18n = {"close":"Close","next":"Next","prev":"Previous","startSlideshow":"Start slideshow","toggleSize":"Toggle size"};
6701//# sourceURL=jquery-fancybox-js-extra
6702</script>
vendor: 1 bytes, line 6702
6702
6703<script id="jquery-fancybox-js" src="https://courses.code-maze.com/wp-content/plugins/easy-fancybox/fancybox/1.5.4/jquery.fancybox.js?ver=1790926221"></script>
vendor: 1 bytes, line 6703
6703
6704<script id="jquery-fancybox-js-after">
6705var fb_timeout, fb_opts={'autoScale':true,'showCloseButton':true,'margin':20,'pixelRatio':'false','centerOnScroll':false,'enableEscapeButton':true,'overlayShow':true,'hideOnOverlayClick':true,'minVpHeight':320,'disableCoreLightbox':'true','enableBlockControls':'true','fancybox_openBlockControls':'true' };
6706if(typeof easy_fancybox_handler==='undefined'){
6707var easy_fancybox_handler=function(){
6708jQuery([".nolightbox","a.wp-block-file__button","a.pin-it-button","a[href*='pinterest.com\/pin\/create']","a[href*='facebook.com\/share']","a[href*='twitter.com\/share']"].join(',')).addClass('nofancybox');
6709jQuery('a.fancybox-close').on('click',function(e){e.preventDefault();jQuery.fancybox.close()});
6710/* IMG */
6711						var unlinkedImageBlocks=jQuery(".wp-block-image > img:not(.nofancybox,figure.nofancybox>img)");
6712						unlinkedImageBlocks.wrap(function() {
6713							var href = jQuery( this ).attr( "src" );
6714							return "<a href='" + href + "'></a>";
6715						});
6716var fb_IMG_select=jQuery('a[href*=".jpg" i]:not(.nofancybox,li.nofancybox>a,figure.nofancybox>a),area[href*=".jpg" i]:not(.nofancybox),a[href*=".jpeg" i]:not(.nofancybox,li.nofancybox>a,figure.nofancybox>a),area[href*=".jpeg" i]:not(.nofancybox),a[href*=".png" i]:not(.nofancybox,li.nofancybox>a,figure.nofancybox>a),area[href*=".png" i]:not(.nofancybox),a[href*=".webp" i]:not(.nofancybox,li.nofancybox>a,figure.nofancybox>a),area[href*=".webp" i]:not(.nofancybox)');
6717fb_IMG_select.addClass('fancybox image');
6718var fb_IMG_sections=jQuery('.gallery,.wp-block-gallery,.tiled-gallery,.wp-block-jetpack-tiled-gallery,.ngg-galleryoverview,.ngg-imagebrowser,.nextgen_pro_blog_gallery,.nextgen_pro_film,.nextgen_pro_horizontal_filmstrip,.ngg-pro-masonry-wrapper,.ngg-pro-mosaic-container,.nextgen_pro_sidescroll,.nextgen_pro_slideshow,.nextgen_pro_thumbnail_grid,.tiled-gallery');
6719fb_IMG_sections.each(function(){jQuery(this).find(fb_IMG_select).attr('rel','gallery-'+fb_IMG_sections.index(this));});
6720jQuery('a.fancybox,area.fancybox,.fancybox>a').each(function(){jQuery(this).fancybox(jQuery.extend(true,{},fb_opts,{'transition':'elastic','transitionIn':'elastic','easingIn':'easeOutBack','transitionOut':'elastic','easingOut':'easeInBack','opacity':false,'hideOnContentClick':false,'titleShow':false,'titlePosition':'over','titleFromAlt':false,'showNavArrows':true,'enableKeyboardNav':true,'cyclic':false,'mouseWheel':'false'}))});
6721/* PDF */
6722jQuery('a.fancybox-pdf,area.fancybox-pdf,.fancybox-pdf>a').each(function(){jQuery(this).fancybox(jQuery.extend(true,{},fb_opts,{'type':'iframe','width':'90%','height':'90%','padding':10,'titleShow':false,'titlePosition':'float','titleFromAlt':true,'autoDimensions':false,'scrolling':'no'}))});
6723};};
6724jQuery(easy_fancybox_handler);jQuery(document).on('post-load',easy_fancybox_handler);
6725
6726//# sourceURL=jquery-fancybox-js-after
6727</script>
vendor: 1 bytes, line 6727
6727
6728<script id="jquery-easing-js" src="https://courses.code-maze.com/wp-content/plugins/easy-fancybox/vendor/jquery.easing.js?ver=1.4.1"></script>
vendor: 1 bytes, line 6728
6728
6729<script id="sourcebuster-js-js" src="https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/js/sourcebuster/sourcebuster.min.js?ver=9.3.6"></script>
vendor: 1 bytes, line 6729
6729
6730<script id="wc-order-attribution-js-extra">
6731var wc_order_attribution = {"params":{"lifetime":1.0e-5,"session":30,"base64":false,"ajaxurl":"https://courses.code-maze.com/wp-admin/admin-ajax.php","prefix":"wc_order_attribution_","allowTracking":true},"fields":{"source_type":"current.typ","referrer":"current_add.rf","utm_campaign":"current.cmp","utm_source":"current.src","utm_medium":"current.mdm","utm_content":"current.cnt","utm_id":"current.id","utm_term":"current.trm","utm_source_platform":"current.plt","utm_creative_format":"current.fmt","utm_marketing_tactic":"current.tct","session_entry":"current_add.ep","session_start_time":"current_add.fd","session_pages":"session.pgs","session_count":"udata.vst","user_agent":"udata.uag"}};
6732//# sourceURL=wc-order-attribution-js-extra
6733</script>
vendor: 1 bytes, line 6733
6733
6734<script id="wc-order-attribution-js" src="https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.min.js?ver=9.3.6"></script>
vendor: 1 bytes, line 6734
6734
6735<script id="et-builder-cpt-modules-wrapper-js-extra">
6736var et_modules_wrapper = {"builderCssContainerPrefix":"#et-boc","builderCssLayoutPrefix":"#et-boc .et-l"};
6737//# sourceURL=et-builder-cpt-modules-wrapper-js-extra
6738</script>
vendor: 1 bytes, line 6738
6738
6739<script id="et-builder-cpt-modules-wrapper-js" src="https://courses.code-maze.com/wp-content/themes/Extra/includes/builder/scripts/cpt-modules-wrapper.js?ver=4.9.7"></script>
vendor: 1 bytes, line 6739
6739
6740<script id="et-core-common-js" src="https://courses.code-maze.com/wp-content/themes/Extra/core/admin/js/common.js?ver=4.9.7"></script>
vendor: 1 bytes, line 6740
6740
6741<script id="cmz-dark-mode-js" src="https://courses.code-maze.com/wp-content/mu-plugins/cmz-dark-mode/dark-mode.js?ver=1786298694"></script>
vendor: 1 bytes, line 6741
6741
6742<script id="enlighterjs-js" src="https://courses.code-maze.com/wp-content/plugins/enlighter/cache/enlighterjs.min.js?ver=QIGroSBnr%2BtDXuU"></script>
vendor: 1 bytes, line 6742
6742
6743<script id="enlighterjs-js-after">
6744!function(e,n){if("undefined"!=typeof EnlighterJS){var o={"selectors":{"block":"pre.EnlighterJSRAW","inline":"code.EnlighterJSRAW"},"options":{"indent":4,"ampersandCleanup":true,"linehover":true,"rawcodeDbclick":false,"textOverflow":"scroll","linenumbers":false,"theme":"monokai","language":"csharp","retainCssClasses":false,"collapse":false,"toolbarOuter":"","toolbarTop":"{BTN_RAW}{BTN_COPY}{BTN_WINDOW}{BTN_WEBSITE}","toolbarBottom":""}};(e.EnlighterJSINIT=function(){EnlighterJS.init(o.selectors.block,o.selectors.inline,o.options)})()}else{(n&&(n.error||n.log)||function(){})("Error: EnlighterJS resources not loaded yet!")}}(window,console);
6745//# sourceURL=enlighterjs-js-after
6746</script>
6746
6747	<style id="cmz-course-price-style">
6748		/*
6749		 * COLOURS ARE MEASURED, NOT PICKED. Card surfaces are #fff light and #1f1f22 dark
6750		 * (the same two cmz-paddle-cart.php measured its card prices against). Computed
6751		 * contrast, all AA or better: now 17.99 / 12.51, was 4.83 / 5.35, label 5.05 / 8.61.
6752		 * The greys differ per theme because no single grey clears AA on both surfaces.
6753		 */
6754		.cmz-ppp-price[hidden] { display: none; }
6755		.cmz-ppp-price {
6756			display: flex;
6757			flex-direction: column;
6758			align-items: flex-start;
6759			line-height: 1.2;
6760		}
6761		.cmz-ppp-row {
6762			display: flex;
6763			align-items: baseline;
6764			gap: 10px;
6765			flex-wrap: wrap;
6766		}
6767		/* 35px matches the customizer's own
6768		   `.tutor-course-sidebar-card-pricing .woocommerce-Price-amount { font-size:35px }`.
6769		   The slot sits OUTSIDE that container, so it cannot inherit the rule and has to
6770		   restate it — otherwise swapping in the real price would visibly shrink it. */
6771		.cmz-ppp-now { font-size: 35px; font-weight: 700; color: #14171a; }
6772		/*
6773		 * THE STRIKE IS A DRAWN RULE, not text-decoration — same finding as the card prices:
6774		 * `line-through` is positioned from font metrics and this face puts its strike below
6775		 * the middle of the digits. A centred pseudo-element crosses them at any size.
6776		 */
6777		.cmz-ppp-was {
6778			position: relative;
6779			font-size: 1.05rem;
6780			text-decoration: none;
6781			color: #6b7280;
6782		}
6783		.cmz-ppp-was::after {
6784			content: '';
6785			position: absolute;
6786			left: 0;
6787			right: 0;
6788			top: 47%;   /* digits have no descender: their ink centre sits above the box centre */
6789			height: 1px;
6790			background: currentColor;
6791			pointer-events: none;
6792		}
6793		.cmz-ppp-label { margin-top: 6px; font-size: .82rem; font-weight: 600; color: #1e7d60; }
6794		.cmz-ppp-note  { margin-top: 2px; font-size: .78rem; color: #6b7280; }
6795		/*
6796		 * HIDING TUTOR'S PRICE NEEDS ITS OWN WEAPON. Measured on staging, 2026-08-16: the
6797		 * price block carries Tutor's `tutor-d-flex` utility, and tutor.min.css declares
6798		 * `.tutor-d-flex { display: flex !important }`. That beats BOTH the `hidden`
6799		 * attribute and an inline `style="display:none"` — the first attempt set both and the
6800		 * list price stayed on screen next to the discounted one, which is the exact
6801		 * two-disagreeing-prices state this file must never produce.
6802		 *
6803		 * The class is doubled deliberately: `.cmz-ppp-replaced.cmz-ppp-replaced` scores
6804		 * (0,2,0) against `.tutor-d-flex`'s (0,1,0), so it wins on SPECIFICITY and not on
6805		 * source order. A single class would tie at (0,1,0) and depend on this footer block
6806		 * still being parsed after tutor.min.css — true today, and not something to stake the
6807		 * price display on.
6808		 */
6809		.cmz-ppp-replaced.cmz-ppp-replaced { display: none !important; }
6810		:root[data-theme="dark"] .cmz-ppp-now   { color: #e4e0da; }
6811		:root[data-theme="dark"] .cmz-ppp-was,
6812		:root[data-theme="dark"] .cmz-ppp-note  { color: #8b949e; }
6813		:root[data-theme="dark"] .cmz-ppp-label { color: #4fd1a5; }
6814	</style>
6815	
6815<script id="cmz-course-price-js">
6816	(function () {
6817		var CFG = {"pricesUrl":"https:\/\/courses.code-maze.com\/wp-json\/cmz-paddle\/v1\/prices","restNonce":"273543b543"};
6818
6819		var slots = document.querySelectorAll('.cmz-ppp-price[data-course-id]');
6820		if (!slots.length) { return; }
6821
6822		/* textContent throughout, never innerHTML with a server string — the labels come from
6823		   our own gateway, but this is money markup built client-side and it follows the same
6824		   rule the mini-cart follows for course titles. */
6825		function put(el, text) { el.textContent = String(text == null ? '' : text); return el; }
6826		function span(cls, text) { var e = document.createElement('span'); e.className = cls; return put(e, text); }
6827
6828		/*
6829		 * Tutor's own price block, scoped to the card this slot lives in — never a
6830		 * document-wide lookup, because the entry box can render twice (the sidebar copy and
6831		 * the mobile top copy) and each must swap its own.
6832		 */
6833		function originalPriceBlock(slot) {
6834			var card = slot.closest('.tutor-card-body') || slot.parentElement;
6835			return card ? card.querySelector('.tutor-course-sidebar-card-pricing') : null;
6836		}
6837
6838		var ids = [];
6839		Array.prototype.forEach.call(slots, function (s) {
6840			var id = s.getAttribute('data-course-id');
6841			if (id && ids.indexOf(id) === -1) { ids.push(id); }
6842		});
6843
6844		fetch(CFG.pricesUrl + '?courses=' + encodeURIComponent(ids.join(',')), {
6845			credentials: 'same-origin',
6846			headers: { 'Accept': 'application/json', 'X-WP-Nonce': CFG.restNonce }
6847		})
6848		.then(function (r) { return r.ok ? r.json() : null; })
6849		.then(function (d) {
6850			if (!d || !d.courses) { return; }
6851
6852			/* No discount for this visitor is the COMMON case, not a failure: most countries
6853			   have no PPP tier, and Tutor's list price is already the right answer for them.
6854			   Touching the page here would only add a redundant second copy of the same
6855			   number. */
6856			if (!d.discount) { return; }
6857
6858			var byId = {};
6859			d.courses.forEach(function (c) { byId[String(c.course_id)] = c; });
6860
6861			Array.prototype.forEach.call(slots, function (slot) {
6862				var row = byId[slot.getAttribute('data-course-id')];
6863				if (!row || !row.sellable) { return; }
6864
6865				var f = row.formatted || {};
6866				if (!f.list || !f.price || f.list === f.price) { return; }
6867
6868				var original = originalPriceBlock(slot);
6869				if (!original) {
6870					/*
6871					 * We can render the real price but cannot hide the list price beside it.
6872					 * Showing both would put two disagreeing numbers on the same card — the
6873					 * display-side version of the mistake that produced 215 wrong-priced
6874					 * orders. So: change nothing, and leave a machine-readable breadcrumb for
6875					 * ppp-price-check.py, which reports it the next morning.
6876					 */
6877					slot.setAttribute('data-cmz-ppp', 'unresolved');
6878					return;
6879				}
6880
6881				slot.textContent = '';
6882				var line = document.createElement('div');
6883				line.className = 'cmz-ppp-row';
6884				line.appendChild(span('cmz-ppp-was', f.list));
6885				line.appendChild(span('cmz-ppp-now', f.price));
6886				slot.appendChild(line);
6887
6888				if (d.discount.label) {
6889					slot.appendChild(span('cmz-ppp-label', d.discount.label));
6890				}
6891				if (d.estimate) {
6892					/* `estimate` is about TAX ONLY — the discount and the pre-tax figures are
6893					   exact — so the note says that and does not hedge the whole number.
6894					   Same wording as the mini-cart's caveat. */
6895					slot.appendChild(span('cmz-ppp-note', 'Taxes are finalised at checkout.'));
6896				}
6897
6898				/* Swap LAST, and only now that a complete replacement is on the page: at no
6899				   point does the card show nothing. The class does the hiding — see the
6900				   `.cmz-ppp-replaced` note in the stylesheet for why `hidden` and an inline
6901				   display cannot. `hidden` is set as well, purely so assistive tech and the
6902				   external check agree with what is on screen. */
6903				original.classList.add('cmz-ppp-replaced');
6904				original.setAttribute('hidden', 'hidden');
6905				slot.setAttribute('data-cmz-ppp', 'applied');
6906				slot.removeAttribute('hidden');
6907			});
6908		})
6909		.catch(function () { /* no price is Tutor's price, never a broken page */ });
6910	})();
6911	</script>
6911
6912	
6912<script id="cmz-course-intro-video">
6913document.addEventListener('ended', function (e) {
6914	var v = e.target;
6915	if (v && v.tagName === 'VIDEO' && v.closest('.tutor-video-player')) {
6916		v.currentTime = 0;
6917	}
6918}, true);
6919</script>
6919
6920		    
6920<script>
6921    (function () {
6922        function tag(el) {
6923            el.setAttribute('translate', 'no');
6924            el.classList.add('notranslate');
6925        }
6926        // Narrow to whatever wraps your post body; falls back to <body>
6927        var root = document.querySelector('.tutor-course-topic-single-body') || document.body;
6928
6929        document.querySelectorAll('.enlighter-default').forEach(tag);
6930
6931        var obs = new MutationObserver(function (mutations) {
6932            for (var m of mutations) {
6933                for (var node of m.addedNodes) {
6934                    if (node.nodeType !== 1) continue;
6935                    if (node.classList.contains('enlighter-default')) tag(node);
6936                    node.querySelectorAll('.enlighter-default').forEach(tag);
6937                }
6938            }
6939        });
6940        obs.observe(root, { childList: true, subtree: true });
6941
6942        // Enlighter is done shortly after load; stop watching afterward.
6943        window.addEventListener('load', function () {
6944            setTimeout(function () { obs.disconnect(); }, 3000);
6945        });
6946    })();
6947    </script>
6947
6948    
6948<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"15d44baa35234e0b9b1793aaf2be1974","r":1,"spa":2}' crossorigin="anonymous"></script>
6948
6949</body>
6950</html>
6951
6952<!-- Performance optimized by Redis Object Cache. Learn more: https://wprediscache.com -->

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