<!DOCTYPE html><html data-capo=""><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mastering Nuxt | The official courses for learning Nuxt</title>
<script src="https://tag.getdrip.com/3977486.js" async></script>
<script src="https://tinder.thrivecart.com/embed/v1/thrivecart.js" async></script>
<style>@import url("https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap");
/*! tailwindcss v3.4.6 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1440px){.container{max-width:1440px}}@media (min-width:1536px){.container{max-width:1536px}}@media (min-width:1920px){.container{max-width:1920px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-inline-start-color:var(--tw-prose-quote-borders);border-inline-start-width:.25rem;color:var(--tw-prose-quotes);font-style:italic;font-weight:500;margin-bottom:1.6em;margin-top:1.6em;padding-inline-start:1em;quotes:"\201C""\201D""\2018""\2019"}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.25em;font-weight:600;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-bottom:2em;margin-top:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);color:var(--tw-prose-kbd);font-family:inherit;font-size:.875em;font-weight:500;padding-inline-end:.375em;padding-bottom:.1875em;padding-top:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-prose-pre-bg);border-radius:.375rem;color:var(--tw-prose-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-top:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;text-align:start;width:100%}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-th-borders);border-bottom-width:1px}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em;vertical-align:bottom}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-td-borders);border-bottom-width:1px}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-color:var(--tw-prose-th-borders);border-top-width:1px}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:17 24 39;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-top:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-slate{--tw-prose-body:#334155;--tw-prose-headings:#0f172a;--tw-prose-lead:#475569;--tw-prose-links:#0f172a;--tw-prose-bold:#0f172a;--tw-prose-counters:#64748b;--tw-prose-bullets:#cbd5e1;--tw-prose-hr:#e2e8f0;--tw-prose-quotes:#0f172a;--tw-prose-quote-borders:#e2e8f0;--tw-prose-captions:#64748b;--tw-prose-kbd:#0f172a;--tw-prose-kbd-shadows:15 23 42;--tw-prose-code:#0f172a;--tw-prose-pre-code:#e2e8f0;--tw-prose-pre-bg:#1e293b;--tw-prose-th-borders:#cbd5e1;--tw-prose-td-borders:#e2e8f0;--tw-prose-invert-body:#cbd5e1;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#94a3b8;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#94a3b8;--tw-prose-invert-bullets:#475569;--tw-prose-invert-hr:#334155;--tw-prose-invert-quotes:#f1f5f9;--tw-prose-invert-quote-borders:#334155;--tw-prose-invert-captions:#94a3b8;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#cbd5e1;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#475569;--tw-prose-invert-td-borders:#334155}.sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}.pointer-events-none{pointer-events:none}.\!invisible{visibility:hidden!important}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{bottom:0;top:0}.-top-22{top:-5.5rem}.bottom-0{bottom:0}.left-0{left:0}.left-1{left:.25rem}.left-1\/2{left:50%}.right-0{right:0}.right-2{right:.5rem}.right-5{right:1.25rem}.right-6{right:1.5rem}.right-\[120\%\]{right:120%}.top-0{top:0}.top-1\/2{top:50%}.top-1\/4{top:25%}.top-2{top:.5rem}.top-5{top:1.25rem}.top-\[20\%\]{top:20%}.top-\[28\%\]{top:28%}.top-\[35\%\]{top:35%}.top-\[40\%\]{top:40%}.top-\[48\%\]{top:48%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-\[1000\]{z-index:1000}.order-1{order:1}.order-2{order:2}.order-3{order:3}.m-4{margin:1rem}.m-auto{margin:auto}.-my-10{margin-bottom:-2.5rem;margin-top:-2.5rem}.-my-20{margin-bottom:-5rem;margin-top:-5rem}.-my-4{margin-bottom:-1rem;margin-top:-1rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-10{margin-bottom:2.5rem;margin-top:2.5rem}.my-15{margin-bottom:3.75rem;margin-top:3.75rem}.my-3{margin-bottom:.75rem;margin-top:.75rem}.my-4{margin-bottom:1rem;margin-top:1rem}.my-6{margin-bottom:1.5rem;margin-top:1.5rem}.my-8{margin-bottom:2rem;margin-top:2rem}.my-auto{margin-bottom:auto;margin-top:auto}.-mb-20{margin-bottom:-5rem}.-mb-28{margin-bottom:-7rem}.-mb-40{margin-bottom:-10rem}.-mb-52{margin-bottom:-13rem}.-ml-10{margin-left:-2.5rem}.-ml-22{margin-left:-5.5rem}.-ml-24{margin-left:-6rem}.-mr-12{margin-right:-3rem}.-mr-2{margin-right:-.5rem}.-mr-40{margin-right:-10rem}.-mr-8{margin-right:-2rem}.-mt-10{margin-top:-2.5rem}.-mt-16{margin-top:-4rem}.-mt-17{margin-top:-4.25rem}.-mt-2{margin-top:-.5rem}.-mt-20{margin-top:-5rem}.-mt-24{margin-top:-6rem}.-mt-30{margin-top:-7.5rem}.-mt-4{margin-top:-1rem}.-mt-40{margin-top:-10rem}.-mt-8{margin-top:-2rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-14{margin-bottom:3.5rem}.mb-15{margin-bottom:3.75rem}.mb-18{margin-bottom:4.5rem}.mb-2{margin-bottom:.5rem}.mb-20{margin-bottom:5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-7{margin-bottom:1.75rem}.mb-8{margin-bottom:2rem}.mb-\[70px\]{margin-bottom:70px}.ml-100{margin-left:25rem}.ml-2{margin-left:.5rem}.ml-20{margin-left:5rem}.ml-22{margin-left:5.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-5{margin-left:1.25rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-5{margin-right:1.25rem}.mr-8{margin-right:2rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-14{margin-top:3.5rem}.mt-15{margin-top:3.75rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-20{margin-top:5rem}.mt-24{margin-top:6rem}.mt-3{margin-top:.75rem}.mt-32{margin-top:8rem}.mt-4{margin-top:1rem}.mt-40{margin-top:10rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-7{margin-top:1.75rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.box-content{box-sizing:content-box}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-video{aspect-ratio:16/9}.size-10{height:2.5rem;width:2.5rem}.size-12{height:3rem;width:3rem}.size-15{height:3.75rem;width:3.75rem}.size-16{height:4rem;width:4rem}.size-20{height:5rem;width:5rem}.size-24{height:6rem;width:6rem}.size-28{height:7rem;width:7rem}.size-30{height:7.5rem;width:7.5rem}.size-32{height:8rem;width:8rem}.size-4{height:1rem;width:1rem}.size-5{height:1.25rem;width:1.25rem}.size-6{height:1.5rem;width:1.5rem}.size-8{height:2rem;width:2rem}.size-\[42px\]{height:42px;width:42px}.size-full{height:100%;width:100%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-112{height:28rem}.h-12{height:3rem}.h-136{height:34rem}.h-152{height:38rem}.h-20{height:5rem}.h-200{height:50rem}.h-256{height:64rem}.h-34{height:8.5rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-68{height:17rem}.h-72{height:18rem}.h-76{height:19rem}.h-8{height:2rem}.h-84{height:21rem}.h-9{height:2.25rem}.h-\[182px\]{height:182px}.h-\[34px\]{height:34px}.h-\[36px\]{height:36px}.h-\[470px\]{height:470px}.h-\[54px\]{height:54px}.h-\[60px\]{height:60px}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-max{height:-moz-max-content;height:max-content}.h-px{height:1px}.h-screen{height:100vh}.max-h-screen{max-height:100vh}.min-h-10{min-height:2.5rem}.min-h-14{min-height:3.5rem}.min-h-\[52px\]{min-height:52px}.min-h-screen{min-height:100vh}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-156{width:39rem}.w-20{width:5rem}.w-30{width:7.5rem}.w-32{width:8rem}.w-34{width:8.5rem}.w-36{width:9rem}.w-4{width:1rem}.w-4\/5{width:80%}.w-40{width:10rem}.w-44{width:11rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-64{width:16rem}.w-68{width:17rem}.w-72{width:18rem}.w-76{width:19rem}.w-8{width:2rem}.w-\[160px\]{width:160px}.w-\[214px\]{width:214px}.w-\[42\%\]{width:42%}.w-\[672px\]{width:672px}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.min-w-10{min-width:2.5rem}.min-w-84{min-width:21rem}.\!max-w-4xl{max-width:56rem!important}.\!max-w-screen-2xl{max-width:1536px!important}.max-w-100{max-width:25rem}.max-w-120{max-width:30rem}.max-w-128{max-width:32rem}.max-w-152{max-width:38rem}.max-w-176{max-width:44rem}.max-w-200{max-width:50rem}.max-w-280{max-width:70rem}.max-w-2xl{max-width:42rem}.max-w-340{max-width:85rem}.max-w-3xl{max-width:48rem}.max-w-400{max-width:100rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-64{max-width:16rem}.max-w-80{max-width:20rem}.max-w-\[320px\]{max-width:320px}.max-w-\[448px\]{max-width:448px}.max-w-\[600px\]{max-width:600px}.max-w-\[70\%\]{max-width:70%}.max-w-full{max-width:100%}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-screen-2xl{max-width:1536px}.max-w-screen-md{max-width:768px}.max-w-screen-sm{max-width:640px}.max-w-screen-xl{max-width:1280px}.max-w-screen-xxl{max-width:1440px}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.origin-top-left{transform-origin:top left}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x:-100%}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.-translate-y-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-full{--tw-translate-y:-100%}.translate-x-0{--tw-translate-x:0}.translate-x-0,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x:100%}.translate-y-0{--tw-translate-y:0}.translate-y-0,.translate-y-20{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-20{--tw-translate-y:5rem}.translate-y-28{--tw-translate-y:7rem}.-rotate-180,.translate-y-28{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-180{--tw-rotate:-180deg}.scale-\[2\]{--tw-scale-x:2;--tw-scale-y:2}.scale-\[2\],.scale-\[3\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[3\]{--tw-scale-x:3;--tw-scale-y:3}.-scale-x-100{--tw-scale-x:-1}.-scale-x-100,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.resize{resize:both}.snap-start{scroll-snap-align:start}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-rows-\[40px_1fr\]{grid-template-rows:40px 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-10{gap:2.5rem}.gap-11{gap:2.75rem}.gap-12{gap:3rem}.gap-15{gap:3.75rem}.gap-18{gap:4.5rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-40{gap:10rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-7{gap:1.75rem}.gap-7\.5{gap:1.875rem}.gap-8{gap:2rem}.gap-\[30px\]{gap:30px}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.gap-y-10{row-gap:2.5rem}.gap-y-3{row-gap:.75rem}.gap-y-6{row-gap:1.5rem}.gap-y-8{row-gap:2rem}.gap-y-\[50px\]{row-gap:50px}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.space-x-5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.25rem*var(--tw-space-x-reverse))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(2rem*var(--tw-space-x-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.25rem*var(--tw-space-y-reverse));margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-lynch>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(98 121 145/var(--tw-divide-opacity))}.self-stretch{align-self:stretch}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.\!rounded-3xl{border-radius:1.5rem!important}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[50\%\]{border-radius:50%}.rounded-\[8px\]{border-radius:8px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.\!border{border-width:1px!important}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-y-2{border-bottom-width:2px;border-top-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-dashed{border-style:dashed}.\!border-none{border-style:none!important}.border-none{border-style:none}.\!border-\[\#29354A\]{--tw-border-opacity:1!important;border-color:rgb(41 53 74/var(--tw-border-opacity))!important}.border-\[\#00DC82\]{--tw-border-opacity:1;border-color:rgb(0 220 130/var(--tw-border-opacity))}.border-\[\#29354A\]{--tw-border-opacity:1;border-color:rgb(41 53 74/var(--tw-border-opacity))}.border-\[\#414141\]{--tw-border-opacity:1;border-color:rgb(65 65 65/var(--tw-border-opacity))}.border-\[\#42B883\]{--tw-border-opacity:1;border-color:rgb(66 184 131/var(--tw-border-opacity))}.border-\[\#979797\]{--tw-border-opacity:1;border-color:rgb(151 151 151/var(--tw-border-opacity))}.border-\[\#E2E8F04C\]{border-color:#e2e8f04c}.border-\[\#F91DAE\]{--tw-border-opacity:1;border-color:rgb(249 29 174/var(--tw-border-opacity))}.border-\[\#bebebe\]{--tw-border-opacity:1;border-color:rgb(190 190 190/var(--tw-border-opacity))}.border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity))}.border-azure-radiance{--tw-border-opacity:1;border-color:rgb(0 162 255/var(--tw-border-opacity))}.border-black\/20{border-color:rgba(0,0,0,.2)}.border-body{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-bunker\/20{border-color:rgba(17,22,27,.2)}.border-caribbean-green{--tw-border-opacity:1;border-color:rgb(0 196 141/var(--tw-border-opacity))}.border-deep-cerulean{--tw-border-opacity:1;border-color:rgb(0 119 181/var(--tw-border-opacity))}.border-ebony-clay{--tw-border-opacity:1;border-color:rgb(36 46 56/var(--tw-border-opacity))}.border-geyser{--tw-border-opacity:1;border-color:rgb(209 220 228/var(--tw-border-opacity))}.border-granny-apple{--tw-border-opacity:1;border-color:rgb(204 243 232/var(--tw-border-opacity))}.border-lightning-yellow{--tw-border-opacity:1;border-color:rgb(255 204 36/var(--tw-border-opacity))}.border-lochmara{--tw-border-opacity:1;border-color:rgb(5 141 202/var(--tw-border-opacity))}.border-niagara{--tw-border-opacity:1;border-color:rgb(13 163 146/var(--tw-border-opacity))}.border-paradise{--tw-border-opacity:1;border-color:rgb(0 220 130/var(--tw-border-opacity))}.border-paradise\/20{border-color:rgba(0,220,130,.2)}.border-paradise\/30{border-color:rgba(0,220,130,.3)}.border-paradise\/50{border-color:rgba(0,220,130,.5)}.border-spindle{--tw-border-opacity:1;border-color:rgb(179 196 209/var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.\!bg-paradise{--tw-bg-opacity:1!important;background-color:rgb(0 220 130/var(--tw-bg-opacity))!important}.bg-\[\#001e26\]{--tw-bg-opacity:1;background-color:rgb(0 30 38/var(--tw-bg-opacity))}.bg-\[\#003543\]{--tw-bg-opacity:1;background-color:rgb(0 53 67/var(--tw-bg-opacity))}.bg-\[\#00DC82\]{--tw-bg-opacity:1;background-color:rgb(0 220 130/var(--tw-bg-opacity))}.bg-\[\#012A35\]{--tw-bg-opacity:1;background-color:rgb(1 42 53/var(--tw-bg-opacity))}.bg-\[\#032E38\]{--tw-bg-opacity:1;background-color:rgb(3 46 56/var(--tw-bg-opacity))}.bg-\[\#192233\]{--tw-bg-opacity:1;background-color:rgb(25 34 51/var(--tw-bg-opacity))}.bg-\[\#22272f\]{--tw-bg-opacity:1;background-color:rgb(34 39 47/var(--tw-bg-opacity))}.bg-\[\#252529\]{--tw-bg-opacity:1;background-color:rgb(37 37 41/var(--tw-bg-opacity))}.bg-\[\#29354A\]{--tw-bg-opacity:1;background-color:rgb(41 53 74/var(--tw-bg-opacity))}.bg-\[\#eafbf6\]{--tw-bg-opacity:1;background-color:rgb(234 251 246/var(--tw-bg-opacity))}.bg-\[\#f62b74\]{--tw-bg-opacity:1;background-color:rgb(246 43 116/var(--tw-bg-opacity))}.bg-amber-500\/20{background-color:rgba(245,158,11,.2)}.bg-azure{--tw-bg-opacity:1;background-color:rgb(0 158 255/var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.bg-black\/10{background-color:rgba(0,0,0,.1)}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.bg-blue-bayoux{--tw-bg-opacity:1;background-color:rgb(88 108 129/var(--tw-bg-opacity))}.bg-bluewood{--tw-bg-opacity:1;background-color:rgb(47 73 94/var(--tw-bg-opacity))}.bg-body-text{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.bg-box\/60{background-color:rgba(30,41,59,.6)}.bg-bunker{--tw-bg-opacity:1;background-color:rgb(17 22 27/var(--tw-bg-opacity))}.bg-caribbean-green{--tw-bg-opacity:1;background-color:rgb(0 196 141/var(--tw-bg-opacity))}.bg-casablanca{--tw-bg-opacity:1;background-color:rgb(245 169 62/var(--tw-bg-opacity))}.bg-dark-blue{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.bg-dark-blue\/40{background-color:rgba(15,23,42,.4)}.bg-dark-blue\/50{background-color:rgba(15,23,42,.5)}.bg-dodger-blue{--tw-bg-opacity:1;background-color:rgb(54 124 255/var(--tw-bg-opacity))}.bg-ebony-clay{--tw-bg-opacity:1;background-color:rgb(36 46 56/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.bg-heather{--tw-bg-opacity:1;background-color:rgb(192 205 218/var(--tw-bg-opacity))}.bg-mirage{--tw-bg-opacity:1;background-color:rgb(24 31 38/var(--tw-bg-opacity))}.bg-paradise{--tw-bg-opacity:1;background-color:rgb(0 220 130/var(--tw-bg-opacity))}.bg-paradise\/10{background-color:rgba(0,220,130,.1)}.bg-paradise\/20{background-color:rgba(0,220,130,.2)}.bg-picton{--tw-bg-opacity:1;background-color:rgb(45 170 225/var(--tw-bg-opacity))}.bg-shark{--tw-bg-opacity:1;background-color:rgb(27 33 39/var(--tw-bg-opacity))}.bg-solitude{--tw-bg-opacity:1;background-color:rgb(239 248 255/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-tuna{--tw-bg-opacity:1;background-color:rgb(45 52 62/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-white\/10{background-color:hsla(0,0%,100%,.1)}.bg-white\/30{background-color:hsla(0,0%,100%,.3)}.bg-gradient-180{background-image:linear-gradient(180deg,var(--tw-gradient-stops))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-\[\#0062e0\]{--tw-gradient-from:#0062e0 var(--tw-gradient-from-position);--tw-gradient-to:rgba(0,98,224,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-\[\#00dc82\]{--tw-gradient-from:#00dc82 var(--tw-gradient-from-position);--tw-gradient-to:rgba(0,220,130,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-\[\#1475b0\]{--tw-gradient-from:#1475b0 var(--tw-gradient-from-position);--tw-gradient-to:rgba(20,117,176,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-\[\#182234\]{--tw-gradient-from:#182234 var(--tw-gradient-from-position);--tw-gradient-to:rgba(24,34,52,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-\[\#192233\]{--tw-gradient-from:#192233 var(--tw-gradient-from-position);--tw-gradient-to:rgba(25,34,51,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-\[\#2aa5f1\]{--tw-gradient-from:#2aa5f1 var(--tw-gradient-from-position);--tw-gradient-to:rgba(42,165,241,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-\[\#42B883\]{--tw-gradient-from:#42b883 var(--tw-gradient-from-position);--tw-gradient-to:rgba(66,184,131,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-\[\#F91DAE\]\/50{--tw-gradient-from:rgba(249,29,174,.5) var(--tw-gradient-from-position);--tw-gradient-to:rgba(249,29,174,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-\[\#FF4E6E\]{--tw-gradient-from:#ff4e6e var(--tw-gradient-from-position);--tw-gradient-to:rgba(255,78,110,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-\[\#f40d3f\]{--tw-gradient-from:#f40d3f var(--tw-gradient-from-position);--tw-gradient-to:rgba(244,13,63,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-paradise{--tw-gradient-from:#00dc82 var(--tw-gradient-from-position);--tw-gradient-to:rgba(0,220,130,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-spring-green{--tw-gradient-from:#3affaf var(--tw-gradient-from-position);--tw-gradient-to:rgba(58,255,175,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-\[\#0C1220\]{--tw-gradient-to:#0c1220 var(--tw-gradient-to-position)}.to-\[\#0EBBD2\]{--tw-gradient-to:#0ebbd2 var(--tw-gradient-to-position)}.to-\[\#101728\]{--tw-gradient-to:#101728 var(--tw-gradient-to-position)}.to-\[\#15a7fc\]{--tw-gradient-to:#15a7fc var(--tw-gradient-to-position)}.to-\[\#1da1f2\]{--tw-gradient-to:#1da1f2 var(--tw-gradient-to-position)}.to-\[\#1f82bf\]{--tw-gradient-to:#1f82bf var(--tw-gradient-to-position)}.to-\[\#3affae\]{--tw-gradient-to:#3affae var(--tw-gradient-to-position)}.to-\[\#7E1DF9\]\/50{--tw-gradient-to:rgba(126,29,249,.5) var(--tw-gradient-to-position)}.to-\[\#E43EFF\]{--tw-gradient-to:#e43eff var(--tw-gradient-to-position)}.to-\[\#a009eb\]{--tw-gradient-to:#a009eb var(--tw-gradient-to-position)}.to-paradise{--tw-gradient-to:#00dc82 var(--tw-gradient-to-position)}.to-spring-green{--tw-gradient-to:#3affaf var(--tw-gradient-to-position)}.bg-contain{background-size:contain}.bg-cover{background-size:cover}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-bottom{background-position:bottom}.bg-center{background-position:50%}.bg-top{background-position:top}.bg-no-repeat{background-repeat:no-repeat}.bg-repeat-x{background-repeat:repeat-x}.fill-current{fill:currentColor}.stroke-current{stroke:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[30px\]{padding:30px}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-24{padding-left:6rem;padding-right:6rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.px-8{padding-left:2rem;padding-right:2rem}.px-9{padding-left:2.25rem;padding-right:2.25rem}.px-\[50px\]{padding-left:50px;padding-right:50px}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-10{padding-bottom:2.5rem;padding-top:2.5rem}.py-14{padding-bottom:3.5rem;padding-top:3.5rem}.py-16{padding-bottom:4rem;padding-top:4rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-20{padding-bottom:5rem;padding-top:5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-\[20px\]{padding-bottom:20px;padding-top:20px}.py-\[50px\]{padding-bottom:50px;padding-top:50px}.pb-1{padding-bottom:.25rem}.pb-10{padding-bottom:2.5rem}.pb-11{padding-bottom:2.75rem}.pb-12{padding-bottom:3rem}.pb-14{padding-bottom:3.5rem}.pb-15{padding-bottom:3.75rem}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pb-28{padding-bottom:7rem}.pb-30{padding-bottom:7.5rem}.pb-4{padding-bottom:1rem}.pb-44{padding-bottom:11rem}.pb-7{padding-bottom:1.75rem}.pb-8{padding-bottom:2rem}.pl-10{padding-left:2.5rem}.pl-3{padding-left:.75rem}.pl-34{padding-left:8.5rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-11{padding-top:2.75rem}.pt-12{padding-top:3rem}.pt-15{padding-top:3.75rem}.pt-16{padding-top:4rem}.pt-24{padding-top:6rem}.pt-32{padding-top:8rem}.pt-4{padding-top:1rem}.pt-44{padding-top:11rem}.pt-48{padding-top:12rem}.pt-7{padding-top:1.75rem}.pt-8{padding-top:2rem}.pt-9{padding-top:2.25rem}.\!text-left{text-align:left!important}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-\[\'Rubik\'\]{font-family:Rubik}.font-circular{font-family:CircularStd,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.font-inter{font-family:Inter,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.font-roboto{font-family:Roboto,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.\!text-base{font-size:1rem!important}.\!text-sm{font-size:.875rem!important}.text-2xl{font-size:1.5rem}.text-2xs{font-size:.75rem}.text-3xl{font-size:2rem}.text-4xl{font-size:2.5rem}.text-5xl{font-size:3rem}.text-\[10px\]{font-size:10px}.text-\[24px\]{font-size:24px}.text-\[26px\]{font-size:26px}.text-\[28px\]{font-size:28px}.text-\[29px\]{font-size:29px}.text-\[30px\]{font-size:30px}.text-\[32px\]{font-size:32px}.text-\[34px\]{font-size:34px}.text-\[40px\]{font-size:40px}.text-\[50px\]{font-size:50px}.text-\[58px\]{font-size:58px}.text-base{font-size:1rem}.text-lg{font-size:1.125rem}.text-sm{font-size:.875rem}.text-xl{font-size:1.25rem}.text-xs{font-size:.8125rem}.\!font-\[900\]{font-weight:900!important}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.not-italic{font-style:normal}.\!leading-none{line-height:1!important}.leading-5{line-height:1.25rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-\[100\%\]{line-height:100%}.leading-\[110\%\]{line-height:110%}.leading-loose{line-height:2}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-\[1px\]{letter-spacing:1px}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.\!text-\[\#2BF6A3\]{--tw-text-opacity:1!important;color:rgb(43 246 163/var(--tw-text-opacity))!important}.\!text-dark-blue{--tw-text-opacity:1!important;color:rgb(15 23 42/var(--tw-text-opacity))!important}.\!text-gray-400{--tw-text-opacity:1!important;color:rgb(156 163 175/var(--tw-text-opacity))!important}.\!text-paradise{--tw-text-opacity:1!important;color:rgb(0 220 130/var(--tw-text-opacity))!important}.\!text-white{--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}.text-\[\#001E26\]{--tw-text-opacity:1;color:rgb(0 30 38/var(--tw-text-opacity))}.text-\[\#00DC82\]{--tw-text-opacity:1;color:rgb(0 220 130/var(--tw-text-opacity))}.text-\[\#01c58e\]{--tw-text-opacity:1;color:rgb(1 197 142/var(--tw-text-opacity))}.text-\[\#6c7b93\]{--tw-text-opacity:1;color:rgb(108 123 147/var(--tw-text-opacity))}.text-\[\#c2daee\]{--tw-text-opacity:1;color:rgb(194 218 238/var(--tw-text-opacity))}.text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity))}.text-azure{--tw-text-opacity:1;color:rgb(0 158 255/var(--tw-text-opacity))}.text-azure-radiance{--tw-text-opacity:1;color:rgb(0 162 255/var(--tw-text-opacity))}.text-bali-hai{--tw-text-opacity:1;color:rgb(140 155 171/var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.text-bluewood{--tw-text-opacity:1;color:rgb(47 73 94/var(--tw-text-opacity))}.text-body{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.text-body-text{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-bunker{--tw-text-opacity:1;color:rgb(17 22 27/var(--tw-text-opacity))}.text-caribbean-green{--tw-text-opacity:1;color:rgb(0 196 141/var(--tw-text-opacity))}.text-casablanca{--tw-text-opacity:1;color:rgb(245 169 62/var(--tw-text-opacity))}.text-dark-blue{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.text-deep-cerulean{--tw-text-opacity:1;color:rgb(0 119 181/var(--tw-text-opacity))}.text-dodger-blue{--tw-text-opacity:1;color:rgb(54 124 255/var(--tw-text-opacity))}.text-flush-orange{--tw-text-opacity:1;color:rgb(255 130 0/var(--tw-text-opacity))}.text-geyser{--tw-text-opacity:1;color:rgb(209 220 228/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.text-heather{--tw-text-opacity:1;color:rgb(192 205 218/var(--tw-text-opacity))}.text-hit-gray{--tw-text-opacity:1;color:rgb(163 172 183/var(--tw-text-opacity))}.text-lightning-yellow{--tw-text-opacity:1;color:rgb(255 204 36/var(--tw-text-opacity))}.text-oxford-blue{--tw-text-opacity:1;color:rgb(61 75 90/var(--tw-text-opacity))}.text-paradise{--tw-text-opacity:1;color:rgb(0 220 130/var(--tw-text-opacity))}.text-radical-red{--tw-text-opacity:1;color:rgb(255 41 72/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-rhino{--tw-text-opacity:1;color:rgb(42 52 101/var(--tw-text-opacity))}.text-shark{--tw-text-opacity:1;color:rgb(27 33 39/var(--tw-text-opacity))}.text-shuttle-gray{--tw-text-opacity:1;color:rgb(94 102 111/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-slate-gray{--tw-text-opacity:1;color:rgb(109 123 139/var(--tw-text-opacity))}.text-spindle{--tw-text-opacity:1;color:rgb(179 196 209/var(--tw-text-opacity))}.text-transparent{color:transparent}.text-tuna{--tw-text-opacity:1;color:rgb(45 52 62/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-white\/40{color:hsla(0,0%,100%,.4)}.text-white\/50{color:hsla(0,0%,100%,.5)}.text-white\/70{color:hsla(0,0%,100%,.7)}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.shadow-big{--tw-shadow:0 14px 48px 0 rgba(27,33,39,.2);--tw-shadow-colored:0 14px 48px 0 var(--tw-shadow-color)}.shadow-big,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-paradise\/60{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-paradise\/60{--tw-shadow:0 0 60px 0 paradise/60;--tw-shadow-colored:0 0 60px 0 var(--tw-shadow-color)}.shadow-subtle{--tw-shadow:0 14px 48px 0 rgba(27,33,39,.08);--tw-shadow-colored:0 14px 48px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-paradise\/60{--tw-shadow-color:rgba(0,220,130,.6);--tw-shadow:var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.outline-paradise{outline-color:#00dc82}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-\[15\%\]{--tw-backdrop-blur:blur(15%)}.backdrop-blur-\[15\%\],.backdrop-blur-md{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.backdrop-blur-xl{--tw-backdrop-blur:blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}body{font-family:Roboto,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}body,html{scroll-behavior:smooth}.coupon-text{font-family:Inter,sans-serif}.mn-learning-point:hover{cursor:cell}.mn-learning-point:hover svg{color:var(--box-color)}.mn-bg-bluewood-gradient{background:linear-gradient(90deg,#2f495e,#2f495e calc(50% + 630px),#21394c calc(50% + 630px),#21394c)}.mn-bg-shark-gradient{background:linear-gradient(90deg,#283039,#283039 calc(50% + 630px),#20272f calc(50% + 630px),#20272f)}.mn-bg-grid{background-image:url(/images/bg-grid-mobile.png);background-size:auto 657px}@media (min-width:768px){.mn-bg-grid{background-image:url(/images/bg-grid-tablet.png);background-position:calc(50% + 180px) -20px;background-size:auto 768px}}@media (min-width:1024px){.mn-bg-grid{background-image:url(/images/bg-grid.png);background-position:calc(50% + 520px) 0;background-size:auto 900px}}@media (min-width:768px){.mn-bg-dark-grid{background-image:url(/images/bg-dark-grid-tablet.png);background-position:calc(50% + 210px) 0;background-size:auto 611px}}@media (min-width:1024px){.mn-bg-dark-grid{background-image:url(/images/bg-dark-grid.png);background-position:calc(50% + 420px) 0;background-size:auto 613px}}input[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-color:rgb(179 196 209/var(--tw-border-opacity));border-radius:.25rem;border-width:2px;outline:2px solid transparent;outline-offset:2px;position:relative}input[type=checkbox],input[type=checkbox]:checked{--tw-border-opacity:1}input[type=checkbox]:checked{background-image:url(/images/check-green.svg);background-position:50%;background-repeat:no-repeat;background-size:cover;border-color:rgb(0 196 141/var(--tw-border-opacity))}.mn-content>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.mn-content ul{list-style-type:disc;margin-left:1rem}.mn-content ol{list-style-type:decimal;margin-left:1rem}.mn-content h1{font-size:2rem}.mn-content h2{font-size:1.5rem}.mn-content h3{font-size:1.25rem}.mn-content a{--tw-text-opacity:1;color:rgb(0 196 141/var(--tw-text-opacity))}.mn-content.mn-strong-bunker strong{--tw-text-opacity:1;color:rgb(17 22 27/var(--tw-text-opacity))}.mn-button{background-image:linear-gradient(to top,var(--tw-gradient-stops));border-radius:.25rem;--tw-gradient-from:#00dc82 var(--tw-gradient-from-position);--tw-gradient-to:rgba(0,220,130,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to);--tw-gradient-to:#3affae var(--tw-gradient-to-position);font-size:1.125rem;font-weight:500;line-height:1;padding:1.25rem 2rem}.mn-button:hover{--tw-bg-opacity:1;background-color:rgb(58 255 175/var(--tw-bg-opacity));background-image:none}.mn-plans>div{border-radius:10px}@media (min-width:1280px){.mn-plans>div:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.mn-plans>div:last-child{border-bottom-left-radius:0;border-top-left-radius:0}}#outline h2{color:#11161b;font-weight:700}#outline em{background:rgba(56,150,233,.2);border-radius:4px;color:#3896e9;font-weight:700;padding:3px 6px}.mn-blog-content{font-family:Roboto,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:2;--tw-text-opacity:1;color:rgb(17 22 27/var(--tw-text-opacity))}@media (min-width:768px){.mn-blog-content{font-size:1.125rem}}.mn-blog-content h1,.mn-blog-content h2,.mn-blog-content h3,.mn-blog-content h4,.mn-blog-content h5,.mn-blog-content h6{font-weight:500;margin-bottom:1.25rem}.mn-blog-content h1 a,.mn-blog-content h2 a,.mn-blog-content h3 a,.mn-blog-content h4 a,.mn-blog-content h5 a,.mn-blog-content h6 a{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.mn-blog-content h1,.mn-blog-content h2{font-size:1.625rem}.mn-blog-content h3{font-size:1.375rem}.mn-blog-content ul{list-style-type:disc}.mn-blog-content ol{list-style-type:decimal}.mn-blog-content ol,.mn-blog-content ul{padding-left:1rem}.mn-blog-content blockquote,.mn-blog-content ol,.mn-blog-content p,.mn-blog-content ul{margin-bottom:2rem}.mn-blog-content li code,.mn-blog-content p>code{--tw-text-opacity:1;color:rgb(255 41 72/var(--tw-text-opacity))}.mn-blog-content img{border-radius:.5rem}.mn-blog-content a{--tw-text-opacity:1;color:rgb(0 196 141/var(--tw-text-opacity))}.mn-blog-content blockquote{border-left-width:2px;--tw-border-opacity:1;border-color:rgb(209 220 228/var(--tw-border-opacity));padding-left:1rem}.mn-blog-content blockquote>p{margin-bottom:0}.nuxt-content-highlight{border-radius:.5rem;margin-bottom:2rem;position:relative}.nuxt-content-highlight .filename{font-size:.875rem;font-weight:300;margin-right:.5rem;margin-top:.25rem;position:absolute;right:0;z-index:10;--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.v-popper__popper.v-popper--theme-tooltip{display:block!important;z-index:10000}.v-popper__popper.v-popper--theme-tooltip .v-popper__inner{border-radius:.5rem;max-width:23.75rem;--tw-bg-opacity:1;background-color:rgb(27 33 39/var(--tw-bg-opacity));font-family:Roboto,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:500;padding:1rem;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.v-popper__popper.v-popper--theme-tooltip .v-popper__arrow-outer{border-style:solid;height:0;margin:0;position:absolute;width:0;z-index:1}.v-popper__popper.v-popper--theme-tooltip[popper-placement^=top]{margin-bottom:5px}.v-popper__popper.v-popper--theme-tooltip[popper-placement^=top] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-left-color:transparent!important;border-right-color:transparent!important;border-width:5px 5px 0;bottom:-5px;left:calc(50% - 5px);margin-bottom:0;margin-top:0}.v-popper__popper.v-popper--theme-tooltip[popper-placement^=bottom]{margin-top:5px}.v-popper__popper.v-popper--theme-tooltip[popper-placement^=bottom] .v-popper__arrow-outer{border-left-color:transparent!important;border-right-color:transparent!important;border-top-color:transparent!important;border-width:0 5px 5px;left:calc(50% - 5px);margin-bottom:0;margin-top:0;top:-5px}.v-popper__popper.v-popper--theme-tooltip[popper-placement^=right]{margin-left:5px}.v-popper__popper.v-popper--theme-tooltip[popper-placement^=right] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-left-color:transparent!important;border-top-color:transparent!important;border-width:5px 5px 5px 0;left:-5px;margin-left:0;margin-right:0;top:calc(50% - 5px)}.v-popper__popper.v-popper--theme-tooltip[popper-placement^=left]{margin-right:5px}.v-popper__popper.v-popper--theme-tooltip[popper-placement^=left] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-right-color:transparent!important;border-top-color:transparent!important;border-width:5px 0 5px 5px;margin-left:0;margin-right:0;right:-5px;top:calc(50% - 5px)}.v-popper__popper.v-popper--theme-tooltip[aria-hidden=true]{opacity:0;transition:opacity .15s,visibility .15s;visibility:hidden}.v-popper__popper.v-popper--theme-tooltip[aria-hidden=false]{opacity:1;transition:opacity .15s;visibility:visible}.liga-off{font-feature-settings:"liga" off}.clig-off{font-feature-settings:"clig" off}.prose em{font-style:normal}.prose code:not(pre code){background-color:rgba(0,220,130,.1);border-radius:.375rem;font-style:normal;font-weight:400;padding:1px .25rem;--tw-text-opacity:1;color:rgb(0 220 130/var(--tw-text-opacity))}.prose p{margin:0;--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.prose ul{margin:0}input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}@media (min-width:1280px){.xl\:prose-xl{font-size:1.25rem;line-height:1.8}.xl\:prose-xl :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.2em;margin-top:1.2em}.xl\:prose-xl :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2em;line-height:1.5;margin-bottom:1em;margin-top:1em}.xl\:prose-xl :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.6em;margin-top:1.6em;padding-inline-start:1.0666667em}.xl\:prose-xl :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.8em;line-height:1;margin-bottom:.8571429em;margin-top:0}.xl\:prose-xl :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.8em;line-height:1.1111111;margin-bottom:.8888889em;margin-top:1.5555556em}.xl\:prose-xl :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.5em;line-height:1.3333333;margin-bottom:.6666667em;margin-top:1.6em}.xl\:prose-xl :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:1.6;margin-bottom:.6em;margin-top:1.8em}.xl\:prose-xl :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.xl\:prose-xl :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.xl\:prose-xl :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.xl\:prose-xl :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.xl\:prose-xl :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;font-size:.9em;padding-inline-end:.4em;padding-bottom:.25em;padding-top:.25em;padding-inline-start:.4em}.xl\:prose-xl :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.xl\:prose-xl :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8611111em}.xl\:prose-xl :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.xl\:prose-xl :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.5rem;font-size:.9em;line-height:1.7777778;margin-bottom:2em;margin-top:2em;padding-inline-end:1.3333333em;padding-bottom:1.1111111em;padding-top:1.1111111em;padding-inline-start:1.3333333em}.xl\:prose-xl :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.2em;margin-top:1.2em;padding-inline-start:1.6em}.xl\:prose-xl :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.2em;margin-top:1.2em;padding-inline-start:1.6em}.xl\:prose-xl :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.6em;margin-top:.6em}.xl\:prose-xl :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4em}.xl\:prose-xl :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4em}.xl\:prose-xl :where(.xl\:prose-xl>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8em;margin-top:.8em}.xl\:prose-xl :where(.xl\:prose-xl>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.2em}.xl\:prose-xl :where(.xl\:prose-xl>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.2em}.xl\:prose-xl :where(.xl\:prose-xl>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.2em}.xl\:prose-xl :where(.xl\:prose-xl>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.2em}.xl\:prose-xl :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.8em;margin-top:.8em}.xl\:prose-xl :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.2em;margin-top:1.2em}.xl\:prose-xl :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.2em}.xl\:prose-xl :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6em;padding-inline-start:1.6em}.xl\:prose-xl :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2.8em;margin-top:2.8em}.xl\:prose-xl :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.xl\:prose-xl :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.xl\:prose-xl :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.xl\:prose-xl :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.xl\:prose-xl :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em;line-height:1.5555556}.xl\:prose-xl :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.6666667em;padding-bottom:.8888889em;padding-inline-start:.6666667em}.xl\:prose-xl :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.xl\:prose-xl :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.xl\:prose-xl :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.6666667em;padding-bottom:.8888889em;padding-top:.8888889em;padding-inline-start:.6666667em}.xl\:prose-xl :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.xl\:prose-xl :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.xl\:prose-xl :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.xl\:prose-xl :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.xl\:prose-xl :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em;line-height:1.5555556;margin-top:1em}.xl\:prose-xl :where(.xl\:prose-xl>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.xl\:prose-xl :where(.xl\:prose-xl>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}}.placeholder\:opacity-100::-moz-placeholder{opacity:1}.placeholder\:opacity-100::placeholder{opacity:1}.hover\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05}.hover\:scale-105:hover,.hover\:scale-110:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1}.hover\:border-lochmara:hover{--tw-border-opacity:1;border-color:rgb(5 141 202/var(--tw-border-opacity))}.hover\:border-paradise:hover{--tw-border-opacity:1;border-color:rgb(0 220 130/var(--tw-border-opacity))}.hover\:border-transparent:hover{border-color:transparent}.hover\:border-white:hover{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.hover\:\!bg-white:hover{--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.hover\:bg-\[\#279f77\]:hover{--tw-bg-opacity:1;background-color:rgb(39 159 119/var(--tw-bg-opacity))}.hover\:bg-\[\#D4EBFF\]:hover{--tw-bg-opacity:1;background-color:rgb(212 235 255/var(--tw-bg-opacity))}.hover\:bg-caribbean-green:hover{--tw-bg-opacity:1;background-color:rgb(0 196 141/var(--tw-bg-opacity))}.hover\:bg-deep-cerulean:hover{--tw-bg-opacity:1;background-color:rgb(0 119 181/var(--tw-bg-opacity))}.hover\:bg-dodger-blue:hover{--tw-bg-opacity:1;background-color:rgb(54 124 255/var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-lochmara:hover{--tw-bg-opacity:1;background-color:rgb(5 141 202/var(--tw-bg-opacity))}.hover\:bg-niagara:hover{--tw-bg-opacity:1;background-color:rgb(13 163 146/var(--tw-bg-opacity))}.hover\:bg-paradise\/10:hover{background-color:rgba(0,220,130,.1)}.hover\:bg-picton:hover{--tw-bg-opacity:1;background-color:rgb(45 170 225/var(--tw-bg-opacity))}.hover\:bg-slate-gray:hover{--tw-bg-opacity:1;background-color:rgb(109 123 139/var(--tw-bg-opacity))}.hover\:bg-spring-green:hover{--tw-bg-opacity:1;background-color:rgb(58 255 175/var(--tw-bg-opacity))}.hover\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.hover\:bg-white\/10:hover{background-color:hsla(0,0%,100%,.1)}.hover\:bg-gradient-to-r:hover{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.hover\:bg-none:hover{background-image:none}.hover\:from-\[\#42B883\]:hover{--tw-gradient-from:#42b883 var(--tw-gradient-from-position);--tw-gradient-to:rgba(66,184,131,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.hover\:to-\[\#0EBBD2\]:hover{--tw-gradient-to:#0ebbd2 var(--tw-gradient-to-position)}.hover\:to-paradise\/20:hover{--tw-gradient-to:rgba(0,220,130,.2) var(--tw-gradient-to-position)}.hover\:text-\[\#252529\]:hover{--tw-text-opacity:1;color:rgb(37 37 41/var(--tw-text-opacity))}.hover\:text-\[\#42B883\]:hover{--tw-text-opacity:1;color:rgb(66 184 131/var(--tw-text-opacity))}.hover\:text-\[\#F91DAE\]:hover{--tw-text-opacity:1;color:rgb(249 29 174/var(--tw-text-opacity))}.hover\:text-black:hover{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.hover\:text-caribbean-green:hover{--tw-text-opacity:1;color:rgb(0 196 141/var(--tw-text-opacity))}.hover\:text-dark-blue:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.hover\:text-lochmara:hover{--tw-text-opacity:1;color:rgb(5 141 202/var(--tw-text-opacity))}.hover\:text-niagara:hover{--tw-text-opacity:1;color:rgb(13 163 146/var(--tw-text-opacity))}.hover\:text-paradise:hover{--tw-text-opacity:1;color:rgb(0 220 130/var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-75:hover{opacity:.75}.hover\:shadow-gentle:hover{--tw-shadow:0 0 46px 0 rgba(192,205,218,.76);--tw-shadow-colored:0 0 46px 0 var(--tw-shadow-color)}.hover\:shadow-gentle:hover,.hover\:shadow-paradise:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:shadow-paradise:hover{--tw-shadow:0 10px 60px 0 paradise;--tw-shadow-colored:0 10px 60px 0 var(--tw-shadow-color);--tw-shadow-color:#00dc82;--tw-shadow:var(--tw-shadow-colored)}.focus\:border-caribbean-green:focus{--tw-border-opacity:1;border-color:rgb(0 196 141/var(--tw-border-opacity))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-caribbean-green:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(0 196 141/var(--tw-ring-opacity))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.group:hover .group-hover\:block{display:block}.group:hover .group-hover\:inline-block{display:inline-block}.group:hover .group-hover\:hidden{display:none}.group:hover .group-hover\:-rotate-3{--tw-rotate:-3deg}.group:hover .group-hover\:-rotate-3,.group:hover .group-hover\:rotate-3{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:rotate-3{--tw-rotate:3deg}.group:hover .group-hover\:scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:bg-niagara{--tw-bg-opacity:1;background-color:rgb(13 163 146/var(--tw-bg-opacity))}.group:hover .group-hover\:text-caribbean-green{--tw-text-opacity:1;color:rgb(0 196 141/var(--tw-text-opacity))}.group:hover .group-hover\:text-paradise{--tw-text-opacity:1;color:rgb(0 220 130/var(--tw-text-opacity))}.prose-p\:\!text-dark-blue :is(:where(p):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity:1!important;color:rgb(15 23 42/var(--tw-text-opacity))!important}.prose-a\:text-paradise :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity:1;color:rgb(0 220 130/var(--tw-text-opacity))}.prose-a\:text-sky-500 :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.prose-a\:no-underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){text-decoration-line:none}.prose-code\:rounded :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){border-radius:.25rem}.prose-code\:bg-paradise\/20 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){background-color:rgba(0,220,130,.2)}.prose-code\:p-0\.5 :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){padding:.125rem}.prose-code\:text-paradise :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity:1;color:rgb(0 220 130/var(--tw-text-opacity))}.prose-pre\:overflow-auto :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){overflow:auto}@media (min-width:640px){.sm\:right-4{right:1rem}.sm\:top-1\/2{top:50%}.sm\:mb-30{margin-bottom:7.5rem}.sm\:ml-7{margin-left:1.75rem}.sm\:mt-0{margin-top:0}.sm\:mt-10{margin-top:2.5rem}.sm\:block{display:block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:size-10{height:2.5rem;width:2.5rem}.sm\:w-88{width:22rem}.sm\:w-\[350px\]{width:350px}.sm\:w-auto{width:auto}.sm\:max-w-128{max-width:32rem}.sm\:max-w-2xl{max-width:42rem}.sm\:flex-none{flex:none}.sm\:-translate-y-1\/2{--tw-translate-y:-50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-center{justify-content:center}.sm\:gap-10{gap:2.5rem}.sm\:gap-15{gap:3.75rem}.sm\:gap-18{gap:4.5rem}.sm\:gap-3{gap:.75rem}.sm\:gap-4{gap:1rem}.sm\:gap-5{gap:1.25rem}.sm\:gap-7\.5{gap:1.875rem}.sm\:gap-\[20px\]{gap:20px}.sm\:gap-\[30px\]{gap:30px}.sm\:gap-\[40px\]{gap:40px}.sm\:gap-\[60px\]{gap:60px}.sm\:rounded-full{border-radius:9999px}.sm\:bg-paradise\/10{background-color:rgba(0,220,130,.1)}.sm\:p-10{padding:2.5rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-4{padding-bottom:1rem;padding-top:1rem}.sm\:pr-12{padding-right:3rem}.sm\:text-left{text-align:left}.sm\:text-center{text-align:center}.sm\:\!text-base{font-size:1rem!important}.sm\:text-2xl{font-size:1.5rem}.sm\:text-3xl{font-size:2rem}.sm\:text-4xl{font-size:2.5rem}.sm\:text-5xl{font-size:3rem}.sm\:text-6xl{font-size:3.75rem}.sm\:text-\[70px\]{font-size:70px}.sm\:text-base{font-size:1rem}.sm\:text-lg{font-size:1.125rem}.sm\:text-sm{font-size:.875rem}.sm\:leading-6{line-height:1.5rem}.sm\:tracking-widest{letter-spacing:.1em}}@media (min-width:768px){.md\:-left-40{left:-10rem}.md\:-right-40{right:-10rem}.md\:-top-10{top:-2.5rem}.md\:-top-5{top:-1.25rem}.md\:right-6{right:1.5rem}.md\:order-2{order:2}.md\:order-3{order:3}.md\:m-0{margin:0}.md\:m-10{margin:2.5rem}.md\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.md\:mx-24{margin-left:6rem;margin-right:6rem}.md\:mx-4{margin-left:1rem;margin-right:1rem}.md\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.md\:mx-auto{margin-left:auto;margin-right:auto}.md\:my-15{margin-bottom:3.75rem;margin-top:3.75rem}.md\:-mb-36{margin-bottom:-9rem}.md\:-ml-10{margin-left:-2.5rem}.md\:-mt-16{margin-top:-4rem}.md\:-mt-8{margin-top:-2rem}.md\:mb-0{margin-bottom:0}.md\:mb-12{margin-bottom:3rem}.md\:mb-6{margin-bottom:1.5rem}.md\:mb-8{margin-bottom:2rem}.md\:ml-8{margin-left:2rem}.md\:mr-10{margin-right:2.5rem}.md\:mt-0{margin-top:0}.md\:mt-1{margin-top:.25rem}.md\:mt-10{margin-top:2.5rem}.md\:mt-14{margin-top:3.5rem}.md\:mt-15{margin-top:3.75rem}.md\:mt-16{margin-top:4rem}.md\:mt-20{margin-top:5rem}.md\:mt-24{margin-top:6rem}.md\:mt-30{margin-top:7.5rem}.md\:mt-32{margin-top:8rem}.md\:mt-4{margin-top:1rem}.md\:mt-40{margin-top:10rem}.md\:mt-44{margin-top:11rem}.md\:mt-6{margin-top:1.5rem}.md\:mt-68{margin-top:17rem}.md\:mt-8{margin-top:2rem}.md\:mt-\[128px\]{margin-top:128px}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:size-20{height:5rem;width:5rem}.md\:size-8{height:2rem;width:2rem}.md\:h-10{height:2.5rem}.md\:h-112{height:28rem}.md\:h-115{height:28.75rem}.md\:h-136{height:34rem}.md\:h-152{height:38rem}.md\:h-20{height:5rem}.md\:h-224{height:56rem}.md\:h-256{height:64rem}.md\:h-30{height:7.5rem}.md\:w-1\/2{width:50%}.md\:w-100{width:25rem}.md\:w-11\/12{width:91.666667%}.md\:w-136{width:34rem}.md\:w-2\/3{width:66.666667%}.md\:w-28{width:7rem}.md\:w-3\/4{width:75%}.md\:w-3\/5{width:60%}.md\:w-40{width:10rem}.md\:w-44{width:11rem}.md\:w-48{width:12rem}.md\:w-68{width:17rem}.md\:w-84{width:21rem}.md\:w-88{width:22rem}.md\:w-94{width:23.5rem}.md\:w-auto{width:auto}.md\:w-fit{width:-moz-fit-content;width:fit-content}.md\:w-full{width:100%}.md\:max-w-120{max-width:30rem}.md\:max-w-152{max-width:38rem}.md\:max-w-156{max-width:39rem}.md\:max-w-249{max-width:62.25rem}.md\:max-w-280{max-width:70rem}.md\:max-w-40{max-width:10rem}.md\:max-w-84{max-width:21rem}.md\:flex-1{flex:1 1 0%}.md\:shrink-0{flex-shrink:0}.md\:grow{flex-grow:1}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-\[max-content_1fr\]{grid-template-columns:max-content 1fr}.md\:flex-row{flex-direction:row}.md\:flex-col{flex-direction:column}.md\:flex-nowrap{flex-wrap:nowrap}.md\:items-center{align-items:center}.md\:justify-start{justify-content:flex-start}.md\:justify-end{justify-content:flex-end}.md\:justify-center{justify-content:center}.md\:justify-between{justify-content:space-between}.md\:gap-10{gap:2.5rem}.md\:gap-2{gap:.5rem}.md\:gap-5{gap:1.25rem}.md\:space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.md\:space-x-7>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.75rem*var(--tw-space-x-reverse))}.md\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(0px*var(--tw-space-y-reverse));margin-top:calc(0px*(1 - var(--tw-space-y-reverse)))}.md\:bg-cover{background-size:cover}.md\:p-10{padding:2.5rem}.md\:p-20{padding:5rem}.md\:px-0{padding-left:0;padding-right:0}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:px-12{padding-left:3rem;padding-right:3rem}.md\:px-20{padding-left:5rem;padding-right:5rem}.md\:px-5{padding-left:1.25rem;padding-right:1.25rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-0{padding-bottom:0;padding-top:0}.md\:py-10{padding-bottom:2.5rem;padding-top:2.5rem}.md\:py-20{padding-bottom:5rem;padding-top:5rem}.md\:py-4{padding-bottom:1rem;padding-top:1rem}.md\:pb-0{padding-bottom:0}.md\:pb-15{padding-bottom:3.75rem}.md\:pb-16{padding-bottom:4rem}.md\:pb-20{padding-bottom:5rem}.md\:pb-22{padding-bottom:5.5rem}.md\:pb-40{padding-bottom:10rem}.md\:pl-10{padding-left:2.5rem}.md\:pt-0{padding-top:0}.md\:pt-10{padding-top:2.5rem}.md\:pt-15{padding-top:3.75rem}.md\:pt-18{padding-top:4.5rem}.md\:pt-20{padding-top:5rem}.md\:pt-24{padding-top:6rem}.md\:pt-32{padding-top:8rem}.md\:text-left{text-align:left}.md\:text-center{text-align:center}.md\:text-2xl{font-size:1.5rem}.md\:text-2xs{font-size:.75rem}.md\:text-3xl{font-size:2rem}.md\:text-4xl{font-size:2.5rem}.md\:text-5xl{font-size:3rem}.md\:text-6xl{font-size:3.75rem}.md\:text-\[30px\]{font-size:30px}.md\:text-\[46px\]{font-size:46px}.md\:text-\[58px\]{font-size:58px}.md\:text-base{font-size:1rem}.md\:text-lg{font-size:1.125rem}.md\:text-sm{font-size:.875rem}.md\:text-xl{font-size:1.25rem}}@media (min-width:1024px){.lg\:-top-20{top:-5rem}.lg\:right-20{right:5rem}.lg\:order-none{order:0}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:mx-auto{margin-left:auto;margin-right:auto}.lg\:-mt-22{margin-top:-5.5rem}.lg\:mb-0{margin-bottom:0}.lg\:mb-24{margin-bottom:6rem}.lg\:ml-0{margin-left:0}.lg\:mr-0{margin-right:0}.lg\:mt-0{margin-top:0}.lg\:mt-10{margin-top:2.5rem}.lg\:mt-18{margin-top:4.5rem}.lg\:mt-20{margin-top:5rem}.lg\:mt-24{margin-top:6rem}.lg\:block{display:block}.lg\:inline-block{display:inline-block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:h-156{height:39rem}.lg\:h-224{height:56rem}.lg\:h-auto{height:auto}.lg\:w-1\/2{width:50%}.lg\:w-10\/12{width:83.333333%}.lg\:w-115{width:28.75rem}.lg\:w-152{width:38rem}.lg\:w-2\/3{width:66.666667%}.lg\:w-52{width:13rem}.lg\:w-6\/12{width:50%}.lg\:w-7\/12{width:58.333333%}.lg\:w-96{width:24rem}.lg\:w-auto{width:auto}.lg\:w-fit{width:-moz-fit-content;width:fit-content}.lg\:w-full{width:100%}.lg\:max-w-115{max-width:28.75rem}.lg\:max-w-136{max-width:34rem}.lg\:max-w-152{max-width:38rem}.lg\:max-w-200{max-width:50rem}.lg\:max-w-224{max-width:56rem}.lg\:max-w-256{max-width:64rem}.lg\:max-w-340{max-width:85rem}.lg\:max-w-3xl{max-width:48rem}.lg\:max-w-5xl{max-width:64rem}.lg\:flex-1{flex:1 1 0%}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-\[1fr_265px\]{grid-template-columns:1fr 265px}.lg\:grid-cols-\[265px_1fr\]{grid-template-columns:265px 1fr}.lg\:grid-cols-\[max-content_1fr\]{grid-template-columns:max-content 1fr}.lg\:flex-row{flex-direction:row}.lg\:flex-col{flex-direction:column}.lg\:items-center{align-items:center}.lg\:justify-between{justify-content:space-between}.lg\:justify-around{justify-content:space-around}.lg\:gap-0{gap:0}.lg\:gap-3{gap:.75rem}.lg\:space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(2rem*var(--tw-space-x-reverse))}.lg\:overflow-auto{overflow:auto}.lg\:object-contain{-o-object-fit:contain;object-fit:contain}.lg\:px-0{padding-left:0;padding-right:0}.lg\:px-28{padding-left:7rem;padding-right:7rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-28{padding-bottom:7rem;padding-top:7rem}.lg\:py-32{padding-bottom:8rem;padding-top:8rem}.lg\:pb-0{padding-bottom:0}.lg\:pb-8{padding-bottom:2rem}.lg\:pl-0{padding-left:0}.lg\:pl-21{padding-left:5.25rem}.lg\:pt-28{padding-top:7rem}.lg\:pt-30{padding-top:7.5rem}.lg\:pt-56{padding-top:14rem}.lg\:text-left{text-align:left}.lg\:hover\:border-paradise:hover{--tw-border-opacity:1;border-color:rgb(0 220 130/var(--tw-border-opacity))}.lg\:hover\:bg-gradient-paradise:hover{background-image:linear-gradient(180deg,rgba(0,220,130,0),rgba(0,220,130,.2)),linear-gradient(180deg,#192233,#101728)}}@media (min-width:1280px){.xl\:absolute{position:absolute}.xl\:relative{position:relative}.xl\:inset-x-0{left:0;right:0}.xl\:-left-10{left:-2.5rem}.xl\:-right-10{right:-2.5rem}.xl\:-top-32{top:-8rem}.xl\:top-0{top:0}.xl\:mx-0{margin-left:0;margin-right:0}.xl\:mx-auto{margin-left:auto;margin-right:auto}.xl\:-mb-12{margin-bottom:-3rem}.xl\:-ml-18{margin-left:-4.5rem}.xl\:-ml-20{margin-left:-5rem}.xl\:-mt-15{margin-top:-3.75rem}.xl\:mb-52{margin-bottom:13rem}.xl\:ml-28{margin-left:7rem}.xl\:ml-52{margin-left:13rem}.xl\:ml-60{margin-left:15rem}.xl\:mt-16{margin-top:4rem}.xl\:mt-20{margin-top:5rem}.xl\:mt-22{margin-top:5.5rem}.xl\:mt-40{margin-top:10rem}.xl\:mt-60{margin-top:15rem}.xl\:block{display:block}.xl\:inline-block{display:inline-block}.xl\:flex{display:flex}.xl\:hidden{display:none}.xl\:h-112{height:28rem}.xl\:h-152{height:38rem}.xl\:h-72{height:18rem}.xl\:h-94{height:23.5rem}.xl\:h-fit{height:-moz-fit-content;height:fit-content}.xl\:h-full{height:100%}.xl\:w-1\/2{width:50%}.xl\:w-1\/4{width:25%}.xl\:w-112{width:28rem}.xl\:w-60{width:15rem}.xl\:w-68{width:17rem}.xl\:w-\[1000px\]{width:1000px}.xl\:w-\[1200px\]{width:1200px}.xl\:w-\[18\%\]{width:18%}.xl\:w-\[30\%\]{width:30%}.xl\:w-\[35\%\]{width:35%}.xl\:w-\[45\%\]{width:45%}.xl\:w-\[calc\(33\%-20px\)\]{width:calc(33% - 20px)}.xl\:w-auto{width:auto}.xl\:w-full{width:100%}.xl\:\!max-w-\[1050px\]{max-width:1050px!important}.xl\:\!max-w-screen-2xl{max-width:1536px!important}.xl\:max-w-156{max-width:39rem}.xl\:max-w-224{max-width:56rem}.xl\:max-w-300{max-width:75rem}.xl\:max-w-340{max-width:85rem}.xl\:max-w-44{max-width:11rem}.xl\:max-w-\[calc\(32\%-25px\)\]{max-width:calc(32% - 25px)}.xl\:max-w-full{max-width:100%}.xl\:max-w-none{max-width:none}.xl\:max-w-screen-lg{max-width:1024px}.xl\:shrink-0{flex-shrink:0}.xl\:-translate-x-100{--tw-translate-x:-25rem}.xl\:-translate-x-100,.xl\:translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.xl\:translate-x-0{--tw-translate-x:0}.xl\:-rotate-12{--tw-rotate:-12deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:flex-row{flex-direction:row}.xl\:flex-row-reverse{flex-direction:row-reverse}.xl\:flex-col{flex-direction:column}.xl\:flex-nowrap{flex-wrap:nowrap}.xl\:items-start{align-items:flex-start}.xl\:items-center{align-items:center}.xl\:justify-start{justify-content:flex-start}.xl\:justify-end{justify-content:flex-end}.xl\:justify-between{justify-content:space-between}.xl\:gap-0{gap:0}.xl\:gap-14{gap:3.5rem}.xl\:gap-18{gap:4.5rem}.xl\:gap-20{gap:5rem}.xl\:gap-24{gap:6rem}.xl\:gap-8{gap:2rem}.xl\:gap-y-3{row-gap:.75rem}.xl\:gap-y-30{row-gap:7.5rem}.xl\:whitespace-nowrap{white-space:nowrap}.xl\:bg-transparent{background-color:transparent}.xl\:bg-contain{background-size:contain}.xl\:p-0{padding:0}.xl\:p-20{padding:5rem}.xl\:px-10{padding-left:2.5rem;padding-right:2.5rem}.xl\:px-20{padding-left:5rem;padding-right:5rem}.xl\:px-36{padding-left:9rem;padding-right:9rem}.xl\:px-48{padding-left:12rem;padding-right:12rem}.xl\:px-60{padding-left:15rem;padding-right:15rem}.xl\:px-8{padding-left:2rem;padding-right:2rem}.xl\:py-0{padding-bottom:0;padding-top:0}.xl\:py-5{padding-bottom:1.25rem;padding-top:1.25rem}.xl\:pb-20{padding-bottom:5rem}.xl\:pb-28{padding-bottom:7rem}.xl\:pb-48{padding-bottom:12rem}.xl\:pl-21{padding-left:5.25rem}.xl\:pl-44{padding-left:11rem}.xl\:pr-0{padding-right:0}.xl\:pr-8{padding-right:2rem}.xl\:pt-0{padding-top:0}.xl\:pt-32{padding-top:8rem}.xl\:pt-34{padding-top:8.5rem}.xl\:text-left{text-align:left}.xl\:text-\[32px\]{font-size:32px}.xl\:text-\[80px\]{font-size:80px}.xl\:text-lg{font-size:1.125rem}.xl\:hover\:text-\[\#00DC82\]:hover{--tw-text-opacity:1;color:rgb(0 220 130/var(--tw-text-opacity))}}@media (min-width:1440px){.xxl\:mt-48{margin-top:12rem}.xxl\:block{display:block}.xxl\:max-w-340{max-width:85rem}.xxl\:text-right{text-align:right}}@media (min-width:1920px){.xxxl\:-mr-30{margin-right:-7.5rem}.xxxl\:ml-120{margin-left:30rem}.xxxl\:mt-0{margin-top:0}.xxxl\:mt-10{margin-top:2.5rem}.xxxl\:mt-72{margin-top:18rem}.xxxl\:flex{display:flex}.xxxl\:w-84{width:21rem}.xxxl\:items-center{align-items:center}.xxxl\:justify-between{justify-content:space-between}}.\[\&\:\:-webkit-scrollbar-thumb\]\:rounded-full::-webkit-scrollbar-thumb{border-radius:9999px}.\[\&\:\:-webkit-scrollbar-thumb\]\:bg-gray-500::-webkit-scrollbar-thumb{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.\[\&\:\:-webkit-scrollbar-track\]\:bg-bunker::-webkit-scrollbar-track{--tw-bg-opacity:1;background-color:rgb(17 22 27/var(--tw-bg-opacity))}.\[\&\:\:-webkit-scrollbar\]\:w-2::-webkit-scrollbar{width:.5rem}.\[\&\>\*\]\:justify-start>*{justify-content:flex-start}.\[\&\>\*\]\:text-left>*{text-align:left}.\[\&\>a\]\:font-bold>a{font-weight:700}.\[\&\>a\]\:text-caribbean-green>a{--tw-text-opacity:1;color:rgb(0 196 141/var(--tw-text-opacity))}.\[\&\>a\]\:underline>a{text-decoration-line:underline}.\[\&\>em\]\:px-1\.5>em{padding-left:.375rem;padding-right:.375rem}.\[\&\>em\]\:py-0\.5>em{padding-bottom:.125rem;padding-top:.125rem}.\[\&\>em\]\:text-paradise>em{--tw-text-opacity:1;color:rgb(0 220 130/var(--tw-text-opacity))}.\[\&\>pre\]\:\!bg-dark-blue>pre{--tw-bg-opacity:1!important;background-color:rgb(15 23 42/var(--tw-bg-opacity))!important}.\[\&\>span\]\:text-paradise>span{--tw-text-opacity:1;color:rgb(0 220 130/var(--tw-text-opacity))}.\[\&_input\]\:\!rounded-full input{border-radius:9999px!important}</style>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700;900&display=swap">
<style>.resize-observer[data-v-b329ee4c]{background-color:transparent;border:none;opacity:0}.resize-observer[data-v-b329ee4c],.resize-observer[data-v-b329ee4c] object{display:block;height:100%;left:0;overflow:hidden;pointer-events:none;position:absolute;top:0;width:100%;z-index:-1}.v-popper__popper{left:0;outline:none;top:0;z-index:10000}.v-popper__popper.v-popper__popper--hidden{opacity:0;pointer-events:none;transition:opacity .15s,visibility .15s;visibility:hidden}.v-popper__popper.v-popper__popper--shown{opacity:1;transition:opacity .15s;visibility:visible}.v-popper__popper.v-popper__popper--skip-transition,.v-popper__popper.v-popper__popper--skip-transition>.v-popper__wrapper{transition:none!important}.v-popper__backdrop{display:none;height:100%;left:0;position:absolute;top:0;width:100%}.v-popper__inner{box-sizing:border-box;overflow-y:auto;position:relative}.v-popper__inner>div{max-height:inherit;max-width:inherit;position:relative;z-index:1}.v-popper__arrow-container{height:10px;position:absolute;width:10px}.v-popper__popper--arrow-overflow .v-popper__arrow-container,.v-popper__popper--no-positioning .v-popper__arrow-container{display:none}.v-popper__arrow-inner,.v-popper__arrow-outer{border-style:solid;height:0;left:0;position:absolute;top:0;width:0}.v-popper__arrow-inner{border-width:7px;visibility:hidden}.v-popper__arrow-outer{border-width:6px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner{left:-2px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-outer{left:-1px}.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-bottom-width:0;border-left-color:transparent!important;border-right-color:transparent!important}.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-container{top:0}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer{border-left-color:transparent!important;border-right-color:transparent!important;border-top-color:transparent!important;border-top-width:0}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-inner{top:-4px}.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-outer{top:-6px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner{top:-2px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-outer,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{top:-1px}.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-left-color:transparent!important;border-left-width:0;border-top-color:transparent!important}.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-inner{left:-4px}.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-outer{left:-6px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-container{right:-10px}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner,.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-outer{border-bottom-color:transparent!important;border-right-color:transparent!important;border-right-width:0;border-top-color:transparent!important}.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-inner{left:-2px}.v-popper--theme-tooltip .v-popper__inner{background:rgba(0,0,0,.8);border-radius:6px;color:#fff;padding:7px 12px 6px}.v-popper--theme-tooltip .v-popper__arrow-outer{border-color:#000c}.v-popper--theme-dropdown .v-popper__inner{background:#fff;border:1px solid #ddd;border-radius:6px;box-shadow:0 6px 30px #0000001a;color:#000}.v-popper--theme-dropdown .v-popper__arrow-inner{border-color:#fff;visibility:visible}.v-popper--theme-dropdown .v-popper__arrow-outer{border-color:#ddd}</style>
<style>.loading-spinner[data-v-147039eb]{animation:loading-spinner-147039eb 1s linear infinite;border-radius:9999px;line-height:1;transform:translateZ(0)}@keyframes loading-spinner-147039eb{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}</style>
<style>.mn-bg-error{background-image:url(/images/bg-error-mobile.png);background-repeat:no-repeat;background-size:cover}@media (min-width:768px){.mn-bg-error{background-image:url(/images/bg-error-tablet.png);background-position:100% 0}}@media (min-width:1280px){.mn-bg-error{background-image:url(/images/bg-error.png)}}</style>
<style>.circle[data-v-32d792e5]{aspect-ratio:1;backface-visibility:hidden;background:radial-gradient(circle closest-side,#0f172a 0,#0f172a 60%,rgba(15,23,42,0) 100%);border-radius:50%;display:inline-block;inset:0;margin-left:auto;margin-right:auto;pointer-events:none;position:absolute;transform:translateZ(0);width:100%;width:min(70rem,90vw)}</style>
<style>[data-v-c642d04b] input[type=checkbox].mn-ppp-checkbox{--tw-border-opacity:1;border-color:rgb(0 220 130/var(--tw-border-opacity))}[data-v-c642d04b] input[type=checkbox].mn-ppp-checkbox:checked{background-image:url(/images/check.svg);--tw-bg-opacity:1;background-color:rgb(0 220 130/var(--tw-bg-opacity))}</style>
<style>input[type=checkbox].mn-ppp-checkbox{--tw-border-opacity:1;border-color:rgb(0 158 255/var(--tw-border-opacity))}input[type=checkbox].mn-ppp-checkbox:checked{background-image:url(/images/check.svg);--tw-bg-opacity:1;background-color:rgb(0 158 255/var(--tw-bg-opacity))}</style>
<link rel="icon" type="image/x-icon" href="/favicon.png">
<meta property="og:title" content="Mastering Nuxt | The official courses for learning Nuxt">
<meta name="description" content="The complete guide to developing and deploying fast, production-ready Nuxt apps. MasteringNuxt is the most in-depth, fun, and realistic course made on Nuxt.">
<meta property="og:description" content="The complete guide to developing and deploying fast, production-ready Nuxt apps. MasteringNuxt is the most in-depth, fun, and realistic course made on Nuxt.">
<meta property="og:url" content="https://masteringnuxt.com/">
<meta property="og:type" content="website">
<meta property="og:image" content="https://api.masteringnuxt.com/storage/iJwf9CughotQ1AC6jHuNxLiB3Wku8qGNwvHRSqrA.png">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://api.masteringnuxt.com/storage/iJwf9CughotQ1AC6jHuNxLiB3Wku8qGNwvHRSqrA.png">
<meta name="twitter:title" content="Mastering Nuxt | The official courses for learning Nuxt">
<meta name="twitter:description" content="The complete guide to developing and deploying fast, production-ready Nuxt apps. MasteringNuxt is the most in-depth, fun, and realistic course made on Nuxt.">
<link rel="canonical" href="https://masteringnuxt.com/">
<script type="module" src="/_nuxt/_FDo2sEY.js" crossorigin></script></head><body class="bg-dark-blue"><div id="__nuxt"><div><!----><!--[--><div class="relative bg-dark-blue font-inter text-body" data-v-32d792e5><div class="absolute inset-0 hidden h-screen lg:block" data-v-32d792e5><img onerror="this.setAttribute('data-error', 1)" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Fnext%2Fbackground-lines-1.webp 1x, /.netlify/images?url=%2Fimages%2Fnext%2Fbackground-lines-1.webp 2x" src="/.netlify/images?url=%2Fimages%2Fnext%2Fbackground-lines-1.webp" class="absolute top-[40%] z-0 w-full -translate-y-1/2" data-v-32d792e5><img onerror="this.setAttribute('data-error', 1)" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Fnext%2Fbackground-lines-1.webp 1x, /.netlify/images?url=%2Fimages%2Fnext%2Fbackground-lines-1.webp 2x" src="/.netlify/images?url=%2Fimages%2Fnext%2Fbackground-lines-1.webp" class="absolute top-[48%] z-0 w-full -translate-y-1/2 -scale-x-100" data-v-32d792e5><img onerror="this.setAttribute('data-error', 1)" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Fnext%2Fbackground-lines-2.webp 1x, /.netlify/images?url=%2Fimages%2Fnext%2Fbackground-lines-2.webp 2x" src="/.netlify/images?url=%2Fimages%2Fnext%2Fbackground-lines-2.webp" class="absolute top-[35%] z-0 w-full -translate-y-1/2" data-v-32d792e5><div class="circle" data-v-32d792e5></div></div><img onerror="this.setAttribute('data-error', 1)" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Fnext%2Fellipse-green.svg 1x, /.netlify/images?url=%2Fimages%2Fnext%2Fellipse-green.svg 2x" src="/.netlify/images?url=%2Fimages%2Fnext%2Fellipse-green.svg" class="pointer-events-none absolute inset-0 z-0 hidden h-112 w-full lg:inline-block" data-v-32d792e5><div class="relative mx-auto flex h-full min-h-screen max-w-screen-xxl flex-col" data-v-32d792e5><header class="relative z-10 flex items-center justify-between bg-dark-blue/40 p-5 backdrop-blur-xl sm:px-12 md:px-20" data-v-32d792e5><div class="flex items-center justify-between"><button><!----></button><a href="/public" class=""><img onerror="this.setAttribute('data-error', 1)" width="192" height="26" loading="lazy" data-nuxt-img class="inline-block w-48" src="/.netlify/images?w=10&h=10&q=50&blur=3&url=%2Fimages%2Fnext%2Flogo-masteringnuxt.svg"></a></div><nav class="-translate-x-full xl:translate-x-0 fixed left-0 top-0 z-[1000] flex h-screen w-60 flex-col gap-10 bg-[#29354A] p-6 transition-transform duration-300 ease-in-out lg:w-auto xl:relative xl:h-fit xl:flex-row xl:items-center xl:justify-start xl:gap-y-3 xl:bg-transparent xl:px-8 xl:py-0"><button class="mt-10 px-2"><!----></button><a aria-current="page" href="/" class="router-link-active router-link-exact-active flex items-center gap-1 font-circular font-medium leading-none text-white hover:text-caribbean-green"> 2025 Edition <span class="rounded bg-dodger-blue p-1 text-xs text-white">NEW </span></a><a href="/blog" class="flex items-center gap-1 whitespace-nowrap p-2 font-circular font-medium leading-none text-white hover:text-caribbean-green"> Blog </a><!----><div class="sm:hidden"><div><a href="/login" class="text-medium flex items-center font-circular font-medium text-white transition-colors duration-500 hover:text-caribbean-green lg:ml-0"><div class="mr-4 w-5"><!----></div><div class="whitespace-nowrap"> Sign In </div></a></div></div></nav><div class="hidden sm:block"><div><a href="/login" class="text-medium ml-4 flex items-center font-circular font-medium text-white transition-colors duration-500 hover:text-caribbean-green lg:ml-0"><div class="mr-4 w-5"><!----></div><div class="whitespace-nowrap"> Sign In </div></a></div></div></header><div class="relative z-0 mx-auto mb-[70px] box-content flex max-w-full flex-col gap-7.5 px-5 sm:mb-30 sm:max-w-2xl sm:gap-15 lg:max-w-3xl lg:px-0" data-v-32d792e5><div class="mt-10 flex flex-col md:mt-15" data-v-32d792e5><p class="mb-10 hidden flex-col items-center justify-center gap-2 text-center text-lg font-bold leading-5 lg:flex-row"><span class="text-paradise">Get 35% OFF the Complete Course</span> <span><span class="mr-2 hidden lg:inline-block">-</span>24 HOURS ONLY</span></p><!----><h1 class="mb-6 text-center text-[34px] font-bold leading-none sm:text-6xl lg:flex lg:flex-col"><span> Mastering <span class="text-paradise">Nuxt</span></span> Fullstack Unleashed </h1><div class="mx-auto flex w-fit items-center gap-3 rounded-full border border-paradise/50 bg-paradise/10 py-2 pl-3 pr-4 text-paradise shadow-paradise/60 backdrop-blur-[15%] transition-all hover:border-white hover:text-white hover:shadow-paradise mb-10"><div class="w-4"><img onerror="this.setAttribute('data-error', 1)" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Fnext%2Flogo-masteringnuxt-short.svg 1x, /.netlify/images?url=%2Fimages%2Fnext%2Flogo-masteringnuxt-short.svg 2x" src="/.netlify/images?url=%2Fimages%2Fnext%2Flogo-masteringnuxt-short.svg" class="inline-block h-4 w-auto"></div><span class="text-xs font-semibold">2025 Edition - COURSE COMPLETE</span></div><p class="text-center text-base font-normal"> The latest <span class="text-paradise">official</span> hands-on course for Nuxt, covering the newest techniques and technologies to take you from zero to production - featuring <span class="text-paradise">Nuxt 4</span> and an <span class="text-paradise">AI-powered project</span>. <br><b>All 100+ lessons now available!</b></p><!----></div><!----><div class="relative z-10" data-v-32d792e5><p class="text-center text-lg font-semibold leading-normal"> Send me a course <span class="text-paradise">preview</span></p><form class="mt-0 flex flex-col justify-center gap-3 py-3 sm:flex-row"><div class="group flex min-h-[52px] flex-1 items-center gap-3 rounded-lg border-2 border-body bg-dark-blue py-3 pl-4 text-body opacity-50 outline-none transition-all duration-100 hover:border-paradise hover:bg-paradise/10 hover:opacity-100"><div class="w-4"><!----></div><input type="email" name="email" required placeholder="Enter your email" class="flex-1 border-none bg-transparent outline-none transition-colors group-hover:text-paradise"></div><button type="submit" class="flex items-center justify-center gap-3 rounded-xl bg-paradise px-8 py-3 font-semibold text-dark-blue transition-colors hover:bg-white disabled:opacity-50"> Get Preview <div class="w-4"><!----></div></button></form><!----><div class="items-center justify-center gap-2 rounded-3xl border border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-5 text-center text-base font-normal text-body"> Or <a href="/#plans" class="font-semibold text-paradise underline"> Get the complete course</a><span> and access<span class="font-bold"> all premium lessons.</span></span></div></div><div class="mt-0 flex flex-col flex-wrap items-center justify-center gap-2 text-sm font-normal sm:flex-row" data-v-32d792e5><div class="flex items-center gap-2"><span class="opacity-50"> Powered by </span><img onerror="this.setAttribute('data-error', 1)" width="120" height="20" loading="lazy" data-nuxt-img class="mx-2 h-6" src="/.netlify/images?w=10&h=10&q=50&blur=3&url=%2Fimages%2Fnext%2Flogo-bitterbrains.svg"></div><div class="flex items-center gap-2"><span class="opacity-50"> in collaboration with </span><img onerror="this.setAttribute('data-error', 1)" width="64" height="18" loading="lazy" data-nuxt-img class="mx-2 h-6" src="/.netlify/images?w=10&h=10&q=50&blur=3&url=%2Fimages%2Flogo-nuxt.svg"></div></div></div><div class="mx-4 md:mx-10 xl:mx-auto xl:max-w-340 mb-[70px] sm:mb-30" data-v-32d792e5><!--[--><p class="mb-10 text-center text-[26px] font-bold leading-normal sm:text-5xl"><span class="text-paradise">Nuxt</span> is trusted by the best front-end teams </p><div class="mx-auto flex flex-wrap items-center justify-center gap-10 lg:justify-around lg:gap-0"><!--[--><div class="w-44"><!----></div><div class="w-44"><!----></div><div class="w-44"><!----></div><div class="w-44"><!----></div><div class="w-44"><!----></div><div class="w-44"><!----></div><div class="w-44"><!----></div><!--]--></div><!--]--></div><div class="mx-4 md:mx-10 xl:mx-auto xl:max-w-340 mb-[70px] sm:mb-30 xl:max-w-screen-lg" data-v-32d792e5><!--[--><div class="mb-5 aspect-video w-full bg-dark-blue" style="position:relative;aspect-ratio:16/9;" data-v-32d792e5><iframe loading="lazy" title="Gumlet video player" src="https://play.gumlet.io/embed/67e28068d03bc5330d299f0e?preload=false&autoplay=false&loop=false&background=false&disable_player_controls=false" style="border:none;position:absolute;top:0;left:0;height:100%;width:100%;" allow="accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture; fullscreen;" data-v-32d792e5></iframe></div><div class="flex flex-col gap-7" data-v-32d792e5><p class="text-center text-[26px] font-bold leading-normal sm:text-4xl" data-v-32d792e5> An Introduction to <span class="text-paradise" data-v-32d792e5>Mastering Nuxt Full Stack Unleashed</span></p><p class="text-center text-base font-normal" data-v-32d792e5> The team behind <span class="text-paradise" data-v-32d792e5>Nuxt 4</span> and the <span class="text-paradise" data-v-32d792e5>Mastering Nuxt Full Stack Unleashed - 2025 Edition course</span> share their insights into the journey of creating Nuxt and the ultimate guide to learning the platform. The video includes the team from NuxtLabs, BitterBrains and Mastering Nuxt. Discover the epic path that has lead the launch of the course. </p><button class="mx-auto flex w-fit items-center justify-center gap-3 rounded-xl bg-paradise px-8 py-3 font-semibold text-dark-blue transition-colors hover:bg-white" data-v-32d792e5> Get Access <div class="w-4" data-v-32d792e5><!----></div></button></div><!--]--></div><div class="mx-4 md:mx-10 xl:mx-auto xl:max-w-340 grid-col-1 group mb-[70px] grid gap-18 sm:mb-30 lg:grid-cols-[max-content_1fr]" data-v-32d792e5><!--[--><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Fnext%2Fbuild-better-hero.png 1x, /.netlify/images?url=%2Fimages%2Fnext%2Fbuild-better-hero.png 2x" src="/.netlify/images?url=%2Fimages%2Fnext%2Fbuild-better-hero.png" class="mx-auto w-60 transition-transform duration-200 ease-in-out group-hover:-rotate-3 group-hover:scale-110 sm:w-88 lg:inline-block" data-v-32d792e5><div class="text-center lg:text-left" data-v-32d792e5><p class="mb-8 px-8 text-[26px] font-bold sm:text-4xl lg:px-0" data-v-32d792e5> Build <span class="text-paradise" data-v-32d792e5>Better, Faster, and Smarter</span> with Nuxt </p><p class="mb-7 text-base font-normal" data-v-32d792e5><span class="font-bold text-paradise" data-v-32d792e5>Struggling with slow performance, messy code, or poor SEO?</span> Nuxt fixes that. File-based routing and auto-imports streamline development, while SSR and hybrid rendering boost speed and SEO. Built-in data fetching keeps things efficient across server and client. Whether you're shipping dynamic apps or lightning-fast static sites, Nuxt helps you build better, faster. </p><p class="mb-7 text-base font-normal" data-v-32d792e5> This hands-on course takes you beyond the basics, teaching real-world best practices, architecture, and performance optimization. Whether you're a junior developer looking to break into full-stack development or a senior dev refining your Nuxt expertise, this course will help you ship better apps, faster. </p><p class="text-base font-bold text-paradise" data-v-32d792e5> Prior experience with Nuxt is beneficial but not required. </p></div><!--]--></div><div class="mx-4 md:mx-10 xl:mx-auto xl:max-w-340 flex flex-col gap-10 text-center mb-[70px] sm:mb-30" data-v-32d792e5><!--[--><p class="text-[26px] font-bold sm:text-4xl"><span class="text-paradise">Who</span> should take this course? </p><p class="text-base"> This course is for <span class="font-bold">anyone who wants to build professional web applications with Nuxt.</span> Whether you're new to the framework or refining your skills, you’ll <span class="font-bold">learn at your own pace</span> through hands-on projects and real-world best practices. By the end, you’ll have the <span class="font-bold">confidence to build and deploy fast, production-ready Nuxt applications.</span></p><div class="gird-cols-1 grid gap-5 text-left md:grid-cols-2 lg:grid-cols-4"><!--[--><div class="group rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-10 hover:border-paradise"><!----><p class="mb-5 min-h-14 max-w-[70%] text-2xl font-bold leading-8 group-hover:text-paradise">Senior Developers</p><p class="text-base font-normal"><span class="font-bold">Refine your Nuxt and Vue.js expertise </span> and master full-stack development with advanced techniques. Build and deploy performant, production-ready apps with confidence.</p></div><div class="group rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-10 hover:border-paradise"><!----><p class="mb-5 min-h-14 max-w-[70%] text-2xl font-bold leading-8 group-hover:text-paradise">Junior Developers</p><p class="text-base font-normal"><span class="font-bold">Go beyond the basics </span> and build real-world projects with Nuxt. Learn best practices, avoid common pitfalls, and develop a portfolio-ready AI-powered chat app from start to finish.</p></div><div class="group rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-10 hover:border-paradise"><!----><p class="mb-5 min-h-14 max-w-[70%] text-2xl font-bold leading-8 group-hover:text-paradise">Students</p><p class="text-base font-normal"><span class="font-bold">Kickstart your career with hands-on Nuxt experience. </span> Build and deploy a modern, full-stack AI-powered app while learning key web development concepts used by top companies.</p></div><div class="group rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-10 hover:border-paradise"><!----><p class="mb-5 min-h-14 max-w-[70%] text-2xl font-bold leading-8 group-hover:text-paradise">Business & Agencies</p><p class="text-base font-normal"><span class="font-bold">Deliver high-performance, scalable Nuxt applications faster. </span> Learn the latest techniques for full-stack development to streamline your workflow and build better products.</p></div><!--]--></div><!--]--></div><div class="mx-4 md:mx-10 xl:mx-auto xl:max-w-340 mb-[70px] sm:mb-30" data-v-32d792e5><!--[--><div class="grid-col-1 mx-auto grid max-w-5xl gap-10 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-10 md:grid-cols-[max-content_1fr]"><div class="mx-auto w-max"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F07.jpg 1x, /.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F07.jpg 2x" src="/.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F07.jpg" class="mx-auto mb-10 size-30 rounded-[50%]"><p class="text-center text-2xl font-bold"><span class="text-paradise">Michael</span> Thiessen </p><p class="text-center text-base font-normal"> Mastering Nuxt Instructor </p></div><div class="text-center md:text-left"><p class="mb-8 text-[26px] font-bold leading-normal sm:text-4xl"> Meet your <span class="text-paradise">Instructor</span></p><p class="text-base font-normal"> As the co-host of the Déjà Vue podcast and creator of the course, he’s interviewed Vue and Nuxt legends like Evan You, Daniel Roe, and Sébastien Chopin. With years of teaching through courses, books, and global talks, Michael has helped thousands of developers write cleaner, more maintainable Nuxt apps. He’s made all the mistakes so you don’t have to—and now he’s here to help you build like a pro. </p></div></div><!--]--></div><div class="mx-4 md:mx-10 xl:mx-auto xl:max-w-340 flex flex-col gap-y-6 text-center sm:gap-10 mb-[70px] sm:mb-30" data-v-32d792e5><!--[--><p class="text-[26px] font-bold sm:text-4xl"> What you will <span class="text-paradise">build</span></p><p class="text-lg font-bold leading-normal sm:text-2xl"> Learn the best practices, common pitfalls to avoid, and tons of tips and tricks </p><p class="mx-auto max-w-3xl text-base font-normal"> Get to grips with building your own AI chat app, a ChatGPT clone, and then build a blazing-fast landing page to promote it. </p><div class="lg:grid lg:grid-cols-3 lg:gap-3"><video muted loop autoplay playsinline class="mb-3 w-full rounded-xl shadow-big"><source src="/images/next/ai-chat-1.mp4" type="video/mp4"></video><video muted loop autoplay playsinline class="mb-3 w-full rounded-xl shadow-big"><source src="/images/next/ai-chat-2.mp4" type="video/mp4"></video><video muted loop autoplay playsinline class="w-full rounded-xl shadow-big"><source src="/images/next/ai-chat-3.mp4" type="video/mp4"></video></div><!--]--></div><div class="mx-4 md:mx-10 xl:mx-auto xl:max-w-340 flex flex-col gap-6 text-center sm:gap-10 xl:!max-w-[1050px] mb-[70px] sm:mb-30" data-v-32d792e5><!--[--><p class="text-[26px] font-bold sm:text-4xl"> Course <span class="text-paradise">outline</span></p><p class="mx-auto max-w-screen-md text-lg font-bold leading-normal sm:text-2xl"> We cover everything you need in order to build real-world applications and performant landing pages. </p><div class="gird-cols-1 grid gap-5 text-left"><!--[--><div class="lg:grid-cols-[1fr_265px] grid-col-1 lg:hover: group grid gap-10 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-10 sm:gap-18 lg:hover:border-paradise lg:hover:bg-gradient-paradise"><!----><div class="order-2 flex h-full flex-col justify-center lg:order-none"><div class="flex min-h-14 items-center gap-5"><!----><p class="mb-5 max-w-[70%] text-2xl font-bold leading-8">Building the MVP</p></div><div class="mn-content mt-5 max-w-5xl text-base font-normal text-body"><p><!--[-->You'll kick things off by creating and deploying a working <strong><!--[-->MVP<!--]--></strong>, giving you immediate hands-on experience. This foundation sets the stage for everything you'll build throughout the course.<!--]--></p><p><!--[-->To start, you'll configure your app with Nuxt modules like <strong><!--[-->Nuxt UI<!--]--></strong>, set up must-have build processes like <strong><!--[-->linting<!--]--></strong> and <strong><!--[-->precommit<!--]--></strong> checks, and install some essential <strong><!--[-->VS Code<!--]--></strong> extension.<!--]--></p><p><!--[-->Once your environment and project is set up, you'll build a basic server route that will connect to <strong><!--[-->OpenAI<!--]--></strong>'s API. Then, you'll use <strong><!--[-->$fetch<!--]--></strong> to connect to your backend API to your UI. You'll implement markdown rendering using the <strong><!--[-->Nuxt MDC<!--]--></strong> module, giving you clean and structured messages in your AI-powered chat app. To keep everything structured and scalable, you'll also organize conversations into projects, making it easy to manage multiple chat sessions efficiently.<!--]--></p></div></div><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Fnext%2Foutline%2Fbuilding-mvp-hero.png 1x, /.netlify/images?url=%2Fimages%2Fnext%2Foutline%2Fbuilding-mvp-hero.png 2x" src="/.netlify/images?url=%2Fimages%2Fnext%2Foutline%2Fbuilding-mvp-hero.png" class="order-1 m-auto w-[160px] max-w-[320px] transition-transform duration-100 group-hover:rotate-3 group-hover:scale-110 lg:order-none lg:inline-block lg:w-full"></div><div class="lg:grid-cols-[265px_1fr] grid-col-1 lg:hover: group grid gap-10 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-10 sm:gap-18 lg:hover:border-paradise lg:hover:bg-gradient-paradise"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Fnext%2Foutline%2Fenhancing-performance-hero.png 1x, /.netlify/images?url=%2Fimages%2Fnext%2Foutline%2Fenhancing-performance-hero.png 2x" src="/.netlify/images?url=%2Fimages%2Fnext%2Foutline%2Fenhancing-performance-hero.png" class="m-auto w-[160px] max-w-[320px] transition-transform duration-200 ease-in-out group-hover:-rotate-3 group-hover:scale-110 lg:inline-block lg:w-full"><div class="order-2 flex h-full flex-col justify-center lg:order-none"><div class="flex min-h-14 items-center gap-5"><!----><p class="mb-5 max-w-[70%] text-2xl font-bold leading-8">Enhancing Performance & Scalability</p></div><div class="mn-content mt-5 max-w-5xl text-base font-normal text-body"><p><!--[-->Once the core functionality is in place, you'll focus on making your app <strong><!--[-->blazing fast and highly responsive<!--]--></strong>. You'll explore <strong><!--[-->advanced data fetching techniques<!--]--></strong> such as <strong><!--[-->lazy loading<!--]--></strong>, <strong><!--[-->prefetching<!--]--></strong>, and <strong><!--[-->optimistic UI updates<!--]--></strong> using the <strong><!--[-->useNuxtData<!--]--></strong>, <strong><!--[-->useAsyncData<!--]--></strong>, and <strong><!--[-->useFetch<!--]--></strong> composables. You'll also integrate streaming responses with Nitro, Nuxt's backend engine, so that messages appear instantly, just like in <strong><!--[-->ChatGPT<!--]--></strong>.<!--]--></p><p><!--[-->These techniques will ensure your app remains smooth and snappy, even under heavy usage. Managing state effectively is another key aspect, and you'll leverage useState to handle reactive data efficiently across your application.<!--]--></p><p><!--[-->As your app grows, maintaining a clean and modular structure becomes crucial, so you'll learn how to properly <strong><!--[-->organize your code with Nuxt Layers<!--]--></strong>, <strong><!--[-->composables<!--]--></strong>, and <strong><!--[-->smart component architecture<!--]--></strong>, so that your app stays maintainable and scalable in the long run.<!--]--></p></div></div><!----></div><div class="lg:grid-cols-[1fr_265px] grid-col-1 lg:hover: group grid gap-10 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-10 sm:gap-18 lg:hover:border-paradise lg:hover:bg-gradient-paradise"><!----><div class="order-2 flex h-full flex-col justify-center lg:order-none"><div class="flex min-h-14 items-center gap-5"><!----><p class="mb-5 max-w-[70%] text-2xl font-bold leading-8">Full-Stack Development</p></div><div class="mn-content mt-5 max-w-5xl text-base font-normal text-body"><p><!--[-->Moving beyond the frontend, you'll dive further into backend development. Initially, you'll store data using <strong><!--[-->unstorage<!--]--></strong>, a flexible abstraction for handling storage, before refactoring to Supabase for a full Postgres database solution.<!--]--></p><p><!--[-->You'll be working with <strong><!--[-->Prisma<!--]--></strong>, using it as your <strong><!--[-->ORM<!--]--></strong> to interact with your database in a <strong><!--[-->type-safe and scalable way<!--]--></strong>.<!--]--></p><p><!--[-->Backend validation is essential for security and data integrity, so you'll implement <strong><!--[-->Zod<!--]--></strong> to enforce strict validation rules. This transition will give you a deeper understanding of how to manage data efficiently and scale your app's backend as needed.<!--]--></p></div></div><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Fnext%2Foutline%2Ffull-stack-dev-hero.png 1x, /.netlify/images?url=%2Fimages%2Fnext%2Foutline%2Ffull-stack-dev-hero.png 2x" src="/.netlify/images?url=%2Fimages%2Fnext%2Foutline%2Ffull-stack-dev-hero.png" class="order-1 m-auto w-[160px] max-w-[320px] transition-transform duration-100 group-hover:rotate-3 group-hover:scale-110 lg:order-none lg:inline-block lg:w-full"></div><div class="lg:grid-cols-[265px_1fr] grid-col-1 lg:hover: group grid gap-10 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-10 sm:gap-18 lg:hover:border-paradise lg:hover:bg-gradient-paradise"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Fnext%2Foutline%2Fauthentication-caching-hero.png 1x, /.netlify/images?url=%2Fimages%2Fnext%2Foutline%2Fauthentication-caching-hero.png 2x" src="/.netlify/images?url=%2Fimages%2Fnext%2Foutline%2Fauthentication-caching-hero.png" class="m-auto w-[160px] max-w-[320px] transition-transform duration-200 ease-in-out group-hover:-rotate-3 group-hover:scale-110 lg:inline-block lg:w-full"><div class="order-2 flex h-full flex-col justify-center lg:order-none"><div class="flex min-h-14 items-center gap-5"><!----><p class="mb-5 max-w-[70%] text-2xl font-bold leading-8">Authentication & Caching</p></div><div class="mn-content mt-5 max-w-5xl text-base font-normal text-body"><p><!--[-->Authentication is a critical aspect of any application, and you'll implement it in a way that allows flexibility, enabling the use of different providers based on your needs.<!--]--></p><p><!--[-->Beyond authentication, performance optimization is key, so you'll master <strong><!--[-->client and server-side caching<!--]--></strong> strategies to keep your app lightning-fast. Leveraging <strong><!--[-->Nitro<!--]--></strong> routes, you'll implement caching mechanisms that reduce server load and improve response times.<!--]--></p></div></div><!----></div><div class="lg:grid-cols-[1fr_265px] grid-col-1 lg:hover: group grid gap-10 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-10 sm:gap-18 lg:hover:border-paradise lg:hover:bg-gradient-paradise"><!----><div class="order-2 flex h-full flex-col justify-center lg:order-none"><div class="flex min-h-14 items-center gap-5"><!----><p class="mb-5 max-w-[70%] text-2xl font-bold leading-8">Deployment & Production Readiness</p></div><div class="mn-content mt-5 max-w-5xl text-base font-normal text-body"><p><!--[-->By the end of the course, you'll have a fully functional, production-ready <strong><!--[-->AI-powered chat app<!--]--></strong>, built using the latest features and best practices in Nuxt. More importantly, you'll walk away with <strong><!--[-->real-world<!--]--></strong>, <strong><!--[-->hands-on experience<!--]--></strong> that prepares you to build, optimize, and deploy Nuxt applications with confidence.<!--]--></p><p><!--[--><strong><!--[-->Whether you're working on a personal project, a startup, or a large-scale application, <span class="text-paradise">this course will equip you with the skills needed to take your Nuxt development to the next level.</span><!--]--></strong><!--]--></p></div></div><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Fnext%2Foutline%2Fdeployment-production-hero.png 1x, /.netlify/images?url=%2Fimages%2Fnext%2Foutline%2Fdeployment-production-hero.png 2x" src="/.netlify/images?url=%2Fimages%2Fnext%2Foutline%2Fdeployment-production-hero.png" class="order-1 m-auto w-[160px] max-w-[320px] transition-transform duration-100 group-hover:rotate-3 group-hover:scale-110 lg:order-none lg:inline-block lg:w-full"></div><!--]--></div><!--]--></div><div class="mx-4 md:mx-10 xl:mx-auto xl:max-w-340 flex flex-col gap-6 text-center md:gap-10 mb-[70px] sm:mb-30" data-v-32d792e5><!--[--><p class="text-[26px] font-bold sm:text-4xl"> What you will <span class="text-paradise">learn</span></p><p class="mx-auto max-w-screen-md text-base"> Mastering Nuxt Full Stack Unleashed is designed to give you a deep, hands-on understanding of how to build and deploy full-stack applications with Nuxt. By the end of the course, you’ll have the skills to create a production-ready Nuxt app from scratch, integrating both frontend and backend technologies. </p><div class="mx-auto flex flex-wrap items-center justify-center gap-5"><!--[--><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">File-based routing</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Universal and Hybrid Rendering</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Architecture for Large Projects</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Async and Isomorphic Data</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">TypeScript</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Error handling</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Type safe APIs</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">User Authentication</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Postgres Database</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">SEO Optimization</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Performance Optimization</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Route and server middleware</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Nuxt internals: Nitro and h3</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">3rd Party Modules</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Composition API and Composables</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Reusable Components</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Nested Routes</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">State Management</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Deploying and Hosting</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Managing Static Assets</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Static Site Generation (SSG)</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Server Side Rendering (SSR)</p></div><div class="group grid h-40 w-56 grid-rows-[40px_1fr] gap-5 rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-8 hover:border-paradise"><!----><p class="text-base group-hover:text-paradise">Single Page App (SPA)</p></div><!--]--></div><!--]--></div><div class="mx-4 md:mx-10 xl:mx-auto xl:max-w-340 flex flex-col gap-6 md:gap-10 xl:w-full mb-[70px] sm:mb-30" data-v-32d792e5><!--[--><p class="text-center text-[26px] font-bold sm:text-4xl"><span class="text-paradise">Learning</span> Outcomes </p><div class="prose mx-auto w-full font-normal text-body lg:max-w-5xl"><p><!--[--><span class="block font-bold text-2xl text-white text-left mb-10">Nuxt Specific Learning</span><!--]--></p><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Directory‑based Project Layout</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Using layers to organize <em><!--[-->base<!--]--></em>, <em><!--[-->auth<!--]--></em>, and <em><!--[-->chat<!--]--></em> layer modules<!--]--></li><li><!--[-->Understanding <em><!--[-->app/<!--]--></em> as the root directory for main app content<!--]--></li><li><!--[-->Placing components in <em><!--[-->components/<!--]--></em>, pages in <em><!--[-->pages/<!--]--></em>, layouts in <em><!--[-->layouts/<!--]--></em>, server routes in <em><!--[-->server/api/<!--]--></em>, etc.<!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>File‑based Routing</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Automatically mapping <em><!--[-->pages/*.vue<!--]--></em> files into routes<!--]--></li><li><!--[-->Demonstrating nested directories, dynamic parameters (<em><!--[--><span>id</span>.vue<!--]--></em>) and nested routes<!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Dynamic Pages</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Using brackets for route params (<em><!--[--><span>param</span>.vue<!--]--></em>)<!--]--></li><li><!--[-->Catch‑all routes (<em><!--[-->...slug].vue<!--]--></em>)<!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Error Page & Handling</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Customizing the Nuxt error page in <em><!--[-->error.vue<!--]--></em><!--]--></li><li><!--[-->Using <em><!--[-->showError<!--]--></em> , <em><!--[-->clearError<!--]--></em> , <em><!--[-->useError<!--]--></em> to manage global error states<!--]--></li><li><!--[-->Server or route-level errors via <em><!--[-->throw createError(...)<!--]--></em><!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Nuxt Config Files</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Multiple <em><!--[-->nuxt.config.ts<!--]--></em> files in different layers, merging and extending config<!--]--></li><li><!--[-->Setting up modules (e.g. <em><!--[-->@nuxtjs/supabase<!--]--></em> , <em><!--[-->@nuxt/ui<!--]--></em> , <em><!--[-->@pinia/nuxt<!--]--></em> )<!--]--></li><li><!--[-->Placing Overriding or extending base config in components in <em><!--[-->nuxt.config<!--]--></em> using <em><!--[-->extends<!--]--></em> property<!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Route and Server Middleware</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Defining route guards in <em><!--[-->/middleware/*.ts<!--]--></em><!--]--></li><li><!--[-->Defining server middleware in <em><!--[-->/server/middleware/*.ts<!--]--></em><!--]--></li><li><!--[-->Named vs. anonymous route middleware<!--]--></li><li><!--[-->Using <em><!--[-->navigateTo<!--]--></em> for redirection<!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>File-based Routing</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Automatically mapping <em><!--[-->pages/*.vue<!--]--></em> files into routes<!--]--></li><li><!--[-->Demonstrating nested directories, dynamic parameters (<em><!--[--><span>id</span>.vue<!--]--></em>) and nested routes<!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-10"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Layouts</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Creating custom layouts in <em><!--[-->~/layouts/*.vue<!--]--></em><!--]--></li><li><!--[-->Handling default vs. named layout usage<!--]--></li><!--]--></ul><!--]--></div></div><p><!--[--><span class="block font-bold text-2xl text-white text-left mb-10">Data Fetching & State</span><!--]--></p><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span><em>useAsyncData</em> & <em>useFetch</em></span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Blocking vs. non-blocking fetch (<em><!--[-->lazy<!--]--></em> mode)<!--]--></li><li><!--[-->Transforming responses, picking fields, or deeply watching reactive params<!--]--></li><li><!--[-->Auto-caching & hydration from server to client<!--]--></li><li><!--[-->How to decide which data fetching method to use<!--]--></li><li><!--[-->Pre-fetching chats for instant loading<!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span><em>useLazyAsyncData</em> & <em>useLazyFetch</em></span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Triggering data fetch only after the page is loaded (client side)<!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-10"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Global State with <em>useState</em></span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Creating reactive state (persisted across SSR & client)<!--]--></li><li><!--[-->Managing state effectively and co-locating business logic<!--]--></li><!--]--></ul><!--]--></div></div><p><!--[--><span class="block font-bold text-2xl text-white text-left mb-10">Server & Backend Integration</span><!--]--></p><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Server Directory</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[--><em><!--[-->~/server/api/<!--]--></em> for server route endpoints<!--]--></li><li><!--[-->Creating GET, POST, etc. endpoints with <em><!--[--><span>method</span><!--]--></em> suffix (e.g. <em><!--[-->index.get.ts<!--]--></em>, <em><!--[-->index.post.ts<!--]--></em>)<!--]--></li><li><!--[-->Param handling in file names (<em><!--[--><span>id</span>.get.ts<!--]--></em>, <em><!--[--><span>...slug</span>.ts<!--]--></em>)<!--]--></li><li><!--[-->Repository pattern and services for organizing backend logic<!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-10"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Automatic Request Handling</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Making <em><!--[-->$fetch<!--]--></em> calls directly to server routes in SSR<!--]--></li><li><!--[-->Transforming responses, picking fields, or deeply watching reactive params<!--]--></li><li><!--[-->Auto-caching & hydration from server to client<!--]--></li><!--]--></ul><!--]--></div></div><p><!--[--><span class="block font-bold text-2xl text-white text-left mb-10">Rendering & Navigation</span><!--]--></p><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Universal Rendering</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Understanding SSR (server side) plus hydration on the client<!--]--></li><li><!--[-->Combining client-only components using <em><!--[-->ClientOnly<!--]--></em><!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-10"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Nuxt Linking & Navigation</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[--><em><!--[-->NuxtLink<!--]--></em> vs. direct <em><!--[-->a<!--]--></em> for external resources<!--]--></li><li><!--[-->Programmatic navigation using <em><!--[-->navigateTo<!--]--></em>, <em><!--[-->replace<!--]--></em>, <em><!--[-->redirectCode<!--]--></em><!--]--></li><li><!--[-->Prefetching route data & components (<em><!--[-->prefetchComponents<!--]--></em>, <em><!--[-->preloadRouteComponents<!--]--></em>)<!--]--></li><!--]--></ul><!--]--></div></div><p><!--[--><span class="block font-bold text-2xl text-white text-left mb-10">Meta & Head Management</span><!--]--></p><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span><em>useHead</em> & <em>useSeoMeta</em></span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Setting page <em><!--[-->title<!--]--></em> and <em><!--[-->meta<!--]--></em> tags<!--]--></li><li><!--[-->Reactive vs. non-reactive head definitions<!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-10"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span><em>definePageMeta</em></span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Embedding route config like <em><!--[-->alias<!--]--></em>, <em><!--[-->redirect<!--]--></em>, or <em><!--[-->path<!--]--></em> in a page script<!--]--></li><li><!--[-->Setting <em><!--[-->name<!--]--></em>, <em><!--[-->props<!--]--></em>, <em><!--[-->validate<!--]--></em>, <em><!--[-->middleware<!--]--></em>, <em><!--[-->layout<!--]--></em>, <em><!--[-->pageTransition<!--]--></em>, etc.<!--]--></li><!--]--></ul><!--]--></div></div><p><!--[--><span class="block font-bold text-2xl text-white text-left mb-10">Configuration</span><!--]--></p><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Extending <em>nuxt.config.ts</em></span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Merging multiple layers, each with its own config<!--]--></li><li><!--[-->Setting up modules: e.g. <em><!--[-->'@nuxtjs/supabase'<!--]--></em>, <em><!--[-->'@pinia/nuxt'<!--]--></em>, <em><!--[-->'@nuxt/ui'<!--]--></em><!--]--></li><li><!--[--><em><!--[-->runtimeConfig<!--]--></em> usage for secrets & environment variables (<em><!--[-->useRuntimeConfig<!--]--></em>)<!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-10"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Runtime Config</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[--><em><!--[-->public<!--]--></em> vs. private keys<!--]--></li><li><!--[-->Overwriting via environment variables (<em><!--[-->NUXT_PUBLIC<!--]--></em>..._ / <em><!--[-->NUXT<!--]--></em>..._)<!--]--></li><!--]--></ul><!--]--></div></div><p><!--[--><span class="block font-bold text-2xl text-white text-left mb-10">Other Nuxt Goodies</span><!--]--></p><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Layering & Theming</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Overriding or extending from base layers (like <em><!--[-->layers/base<!--]--></em>, <em><!--[-->layers/auth<!--]--></em>, etc.)<!--]--></li><li><!--[-->Understanding how layering merges content from multiple sources<!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Error Page</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Creating a custom <em><!--[-->~/app/error.vue<!--]--></em>, reading the error from <em><!--[-->useError()<!--]--></em><!--]--></li><li><!--[-->Distinguishing 404 vs. other errors<!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Composables Auto-Imports</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Relying on <em><!--[-->~/composables/<!--]--></em> or <em><!--[-->#imports<!--]--></em> for easy usage of <em><!--[-->ref<!--]--></em>, <em><!--[-->useRoute<!--]--></em>, etc.<!--]--></li><li><!--[-->Using the <em><!--[-->~/server/utils<!--]--></em> for server-only utilities in an auto-import manner<!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Nuxt Dev Tools</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Learn to use it to simplify web development and debugging<!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>CLI Commands</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[-->Understanding <em><!--[-->npx nuxi dev<!--]--></em>, <em><!--[-->nuxi build<!--]--></em><!--]--></li><!--]--></ul><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Deployment & Prerender</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><ul><!--[--><li><!--[--><em><!--[-->routeRules<!--]--></em> usage to prerender certain paths<!--]--></li><!--]--></ul><!--]--></div></div></div><!--]--></div><div class="mx-4 md:mx-10 xl:mx-auto xl:max-w-340 flex flex-col gap-6 md:gap-10 xl:w-full mb-[70px] sm:mb-30" data-v-32d792e5><!--[--><p class="text-center text-[26px] font-bold sm:text-4xl"> Simplified <span class="text-paradise">Tech Stack</span> Overview </p><p class="text-center text-base"> Some of the exciting technologies that you will be able to explore in the course. </p><div><div class="flex flex-wrap justify-center gap-4"><!--[--><a href="https://nuxt.com/" rel="noopener noreferrer" target="_blank" class="grid size-24 rounded-2xl border border-[#29354A] bg-[#192233] p-5"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fnuxt-logo.svg 1x, /.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fnuxt-logo.svg 2x" src="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fnuxt-logo.svg" class="m-auto h-11 w-auto"></a><a href="https://vuejs.org/" rel="noopener noreferrer" target="_blank" class="grid size-24 rounded-2xl border border-[#29354A] bg-[#192233] p-5"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fvue.svg 1x, /.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fvue.svg 2x" src="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fvue.svg" class="m-auto h-11 w-auto"></a><a href="https://www.typescriptlang.org/" rel="noopener noreferrer" target="_blank" class="grid size-24 rounded-2xl border border-[#29354A] bg-[#192233] p-5"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Ftypescript.svg 1x, /.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Ftypescript.svg 2x" src="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Ftypescript.svg" class="m-auto h-11 w-auto"></a><a href="https://supabase.com/" rel="noopener noreferrer" target="_blank" class="grid size-24 rounded-2xl border border-[#29354A] bg-[#192233] p-5"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fsupabase.svg 1x, /.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fsupabase.svg 2x" src="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fsupabase.svg" class="m-auto h-11 w-auto"></a><a href="https://www.prisma.io/" rel="noopener noreferrer" target="_blank" class="grid size-24 rounded-2xl border border-[#29354A] bg-[#192233] p-5"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fprisma.svg 1x, /.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fprisma.svg 2x" src="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fprisma.svg" class="m-auto h-11 w-auto"></a><a href="https://chat.openai.com/" rel="noopener noreferrer" target="_blank" class="grid size-24 rounded-2xl border border-[#29354A] bg-[#192233] p-5"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fchat-gpt.svg 1x, /.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fchat-gpt.svg 2x" src="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fchat-gpt.svg" class="m-auto h-11 w-auto"></a><a href="https://tailwindcss.com/" rel="noopener noreferrer" target="_blank" class="grid size-24 rounded-2xl border border-[#29354A] bg-[#192233] p-5"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Ftailwindcss.svg 1x, /.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Ftailwindcss.svg 2x" src="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Ftailwindcss.svg" class="m-auto h-11 w-auto"></a><a href="https://www.netlify.com/" rel="noopener noreferrer" target="_blank" class="grid size-24 rounded-2xl border border-[#29354A] bg-[#192233] p-5"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fnetlify.svg 1x, /.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fnetlify.svg 2x" src="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fnetlify.svg" class="m-auto h-11 w-auto"></a><a href="https://www.postgresql.org/" rel="noopener noreferrer" target="_blank" class="grid size-24 rounded-2xl border border-[#29354A] bg-[#192233] p-5"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fpostgresql.svg 1x, /.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fpostgresql.svg 2x" src="/.netlify/images?url=%2Fimages%2Flanding%2Ftechs%2Fpostgresql.svg" class="m-auto h-11 w-auto"></a><!--]--></div></div><div class="prose mx-auto hidden w-full font-normal text-body lg:max-w-5xl"><p><!--[--><span class="block font-bold text-2xl text-white text-left mb-5">Frontend</span><!--]--></p><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-3"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Nuxt 3 (Vue 3 + Composition API + TypeScript)</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><p><!--[--><span class="block mb-3">What It Is: A framework that makes building server-rendered or static Vue apps straightforward.</span><span class="block mb-3">Why It Matters (Marketing): Students can produce fast, SEO-friendly sites with modern Vue features (Composition API) and industry-standard TypeScript, making their projects stand out.</span><span class="block mb-3">Why It Matters (Technical): Offers SSR out of the box for better performance/SEO, has a clean approach to structuring pages, and provides built-in TypeScript support that catches errors early.</span><!--]--></p><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mb-10"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Vue Single File Components (SFC)</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><p><!--[--><span class="block mb-3">What It Is: A way to keep template, script, and styles all in one <em><!--[-->base<!--]--></em> file</span><span class="block mb-3">Why It Matters (Marketing): Easier for beginners to keep everything about a component together, speeding up learning and reducing confusion.</span><span class="block mb-3">Why It Matters (Technical): Encourages maintainable code and prevents style collisions (with scoped styles). Tooling also understands <em><!--[-->.vue<!--]--></em> files, for hot reloading and quick updates.</span><!--]--></p><!--]--></div></div></div><!--]--></div><div class="mx-4 md:mx-10 xl:mx-auto xl:max-w-340 xl:!max-w-screen-2xl flex flex-col gap-6 text-center sm:gap-10 mb-[70px] sm:mb-30" id="plans" data-v-32d792e5 data-v-c642d04b><!--[--><div class="relative mb-3 w-full text-center" data-v-c642d04b><img onerror="this.setAttribute('data-error', 1)" alt="14 days money back" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Fnext%2F14-day-money-back.svg 1x, /.netlify/images?url=%2Fimages%2Fnext%2F14-day-money-back.svg 2x" src="/.netlify/images?url=%2Fimages%2Fnext%2F14-day-money-back.svg" class="absolute right-[120%] size-32" data-v-c642d04b><p class="mx-auto max-w-screen-sm text-[26px] font-bold sm:text-4xl" data-v-c642d04b> Mastering Nuxt <span class="text-paradise" data-v-c642d04b>Full Stack Unleashed</span> Course Packages </p></div><!----><!----><div class="flex flex-wrap justify-center gap-5" data-v-c642d04b><!--[--><div class="h-fit w-full max-w-max shrink-0 overflow-hidden rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] transition-colors duration-150 ease-linear hover:to-paradise/20 xl:max-w-[calc(32%-25px)] mt-10" data-v-c642d04b><!----><!----><div class="flex flex-col items-start p-[30px]"><div class="mb-10 flex w-full items-center justify-between"><h2 class="text-left text-[26px] font-bold text-white">Essentials</h2><!----></div><!----><div class="mb-6 flex w-full items-baseline justify-center"><span class="text-[50px] font-semibold text-white">$99</span><span class="ml-2 text-[30px] text-gray-400 line-through">$110</span><span class="ml-2 rounded-full bg-paradise/20 px-3 py-1 text-sm font-bold text-paradise">10% OFF </span></div><!----><div class="mb-8 relative mb-5 flex w-full items-center justify-center gap-2"><div class="text-base font-medium text-white"> Individuals </div><div class="relative inline-block h-8 w-14 cursor-pointer rounded-full bg-black transition duration-200 ease-in-out"><div class="pointer-events-none absolute inset-y-0 left-1 my-auto size-6 shrink-0 rounded-full bg-white transition duration-100 ease-in-out"></div><input id="toggle-mn2025-personal-essentials" type="checkbox" class="hidden"></div><div class="text-base font-medium text-gray-400"> Teams </div></div><!----><div class="mb-6 space-y-4"><!--[--><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text">Instant access to the <strong>private course</strong> area</span><!--]--></p></div><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text">Stream or download the first <strong>39 lessons</strong> totalling <strong>2 hours</strong> of content</span><!--]--></p></div><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text">Invitation for the <strong>exclusive</strong> MasteringNuxt <strong>Discord server</strong></span><!--]--></p></div><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text">Access to the source code for available lessons</span><!--]--></p></div><!--]--></div><a href="#" class="flex w-full items-center justify-center gap-2 rounded-[8px] border-2 border-white bg-transparent px-8 py-3 font-semibold text-white transition-colors hover:bg-white hover:text-dark-blue"><!--[--><span>Get Access</span><span class="w-4"><!----></span><!--]--></a></div></div><div class="h-fit w-full max-w-max shrink-0 overflow-hidden rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] transition-colors duration-150 ease-linear hover:to-paradise/20 xl:max-w-[calc(32%-25px)]" data-v-c642d04b><div class="flex w-full justify-center bg-white p-2.5"><p class="text-center text-xs font-semibold text-dark-blue">SPECIAL OFFER - 27% OFF </p></div><!----><div class="flex flex-col items-start p-[30px]"><div class="mb-10 flex w-full items-center justify-between"><h2 class="text-left text-[26px] font-bold text-white">Complete</h2><p class="h-fit rounded-md bg-paradise p-1 px-2 text-xs font-bold uppercase leading-none text-dark-blue"> popular </p></div><!----><div class="mb-6 flex w-full items-baseline justify-center"><span class="text-[50px] font-semibold text-white">$219</span><span class="ml-2 text-[30px] text-gray-400 line-through">$299</span><span class="ml-2 rounded-full bg-paradise/20 px-3 py-1 text-sm font-bold text-paradise">27% OFF </span></div><!----><div class="mb-8 relative mb-5 flex w-full items-center justify-center gap-2"><div class="text-base font-medium text-white"> Individuals </div><div class="relative inline-block h-8 w-14 cursor-pointer rounded-full bg-black transition duration-200 ease-in-out"><div class="pointer-events-none absolute inset-y-0 left-1 my-auto size-6 shrink-0 rounded-full bg-white transition duration-100 ease-in-out"></div><input id="toggle-mn2025-personal-complete" type="checkbox" class="hidden"></div><div class="text-base font-medium text-gray-400"> Teams </div></div><!----><div class="mb-6 space-y-4"><!--[--><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text">Instant access to the <strong>private course</strong> area</span><!--]--></p></div><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text">Stream or download initial launch chapters.</span><!--]--></p></div><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text">Access all <strong>12 chapters</strong> and <strong>95 lessons</strong> on course completion.</span><!--]--></p></div><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text">Invitation for the exclusive Mastering Nuxt Discord server</span><!--]--></p></div><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text">Access to the source code for all lessons</span><!--]--></p></div><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text"><strong>Certificate</strong> of completion</span><!--]--></p></div><!--]--></div><a href="#" class="flex w-full items-center justify-center gap-2 rounded-[8px] border-2 border-white bg-transparent px-8 py-3 font-semibold text-white transition-colors hover:bg-white hover:text-dark-blue !border-none !bg-paradise !text-dark-blue hover:!bg-white"><!--[--><span>Get Access</span><span class="w-4"><!----></span><!--]--></a></div></div><div class="h-fit w-full max-w-max shrink-0 overflow-hidden rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] transition-colors duration-150 ease-linear hover:to-paradise/20 xl:max-w-[calc(32%-25px)]" data-v-c642d04b><!----><div class="flex w-full justify-center bg-paradise/10 p-2.5"><p class="text-center text-xs font-semibold text-paradise"> Mastering Nuxt Master Classes + Vue.js Master Class </p></div><div class="flex flex-col items-start p-[30px]"><div class="mb-10 flex w-full items-center justify-between"><h2 class="text-left text-[26px] font-bold text-white">Super Bundle</h2><!----></div><!----><div class="mb-6 flex w-full items-baseline justify-center"><span class="text-[50px] font-semibold text-white">$499</span><span class="ml-2 text-[30px] text-gray-400 line-through">$917</span><span class="ml-2 rounded-full bg-paradise/20 px-3 py-1 text-sm font-bold text-paradise">46% OFF </span></div><!----><div class="mb-8 relative mb-5 flex w-full items-center justify-center gap-2"><div class="text-base font-medium text-white"> Individuals </div><div class="relative inline-block h-8 w-14 cursor-pointer rounded-full bg-black transition duration-200 ease-in-out"><div class="pointer-events-none absolute inset-y-0 left-1 my-auto size-6 shrink-0 rounded-full bg-white transition duration-100 ease-in-out"></div><input id="toggle-mn2025-super-bundle" type="checkbox" class="hidden"></div><div class="text-base font-medium text-gray-400"> Teams </div></div><!----><div class="mb-6 space-y-4"><!--[--><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text">Everything in <a href='/nuxt3#plans' target='_blank'>Mastering Nuxt 3 Complete</a></span><!--]--></p></div><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text">Everything in <a href="#plans">Mastering Nuxt Full Stack Unleashed - 2025 Edition</a></span><!--]--></p></div><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text">Everything in <a href="https://vueschool.io/the-vuejs-3-master-class">Vue.js Masterclass 2024</a></span><!--]--></p></div><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text">Invitation for the <strong>Mastering Nuxt Discord server</strong></span><!--]--></p></div><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text">Certificates of completion for the Mastering Nuxt 3 & 2025 courses</span><!--]--></p></div><div class="flex items-start gap-3 text-left"><div class="mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full bg-dark-blue"><svg width="21" height="21" viewBox="0 0 21 21" class="shrink-0" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.1 12.3L6.95 10.15C6.76667 9.96667 6.53333 9.875 6.25 9.875C5.96667 9.875 5.73333 9.96667 5.55 10.15C5.36667 10.3333 5.275 10.5667 5.275 10.85C5.275 11.1333 5.36667 11.3667 5.55 11.55L8.4 14.4C8.6 14.6 8.83333 14.7 9.1 14.7C9.36667 14.7 9.6 14.6 9.8 14.4L15.45 8.75C15.6333 8.56667 15.725 8.33333 15.725 8.05C15.725 7.76667 15.6333 7.53333 15.45 7.35C15.2667 7.16667 15.0333 7.075 14.75 7.075C14.4667 7.075 14.2333 7.16667 14.05 7.35L9.1 12.3ZM10.5 20.5C9.11667 20.5 7.81667 20.2373 6.6 19.712C5.38333 19.1867 4.325 18.4743 3.425 17.575C2.525 16.675 1.81267 15.6167 1.288 14.4C0.763333 13.1833 0.500667 11.8833 0.5 10.5C0.5 9.11667 0.762667 7.81667 1.288 6.6C1.81333 5.38333 2.52567 4.325 3.425 3.425C4.325 2.525 5.38333 1.81267 6.6 1.288C7.81667 0.763333 9.11667 0.500667 10.5 0.5C11.8833 0.5 13.1833 0.762667 14.4 1.288C15.6167 1.81333 16.675 2.52567 17.575 3.425C18.475 4.325 19.1877 5.38333 19.713 6.6C20.2383 7.81667 20.5007 9.11667 20.5 10.5C20.5 11.8833 20.2373 13.1833 19.712 14.4C19.1867 15.6167 18.4743 16.675 17.575 17.575C16.675 18.475 15.6167 19.1877 14.4 19.713C13.1833 20.2383 11.8833 20.5007 10.5 20.5Z" fill="#03DC82"></path></svg></div><p><!--[--><span class="!text-left text-base text-body-text">Certificates of completion for the Vue.js Master Class 2024 Edition</span><!--]--></p></div><!--]--></div><a href="#" class="flex w-full items-center justify-center gap-2 rounded-[8px] border-2 border-white bg-transparent px-8 py-3 font-semibold text-white transition-colors hover:bg-white hover:text-dark-blue"><!--[--><span>Get Access</span><span class="w-4"><!----></span><!--]--></a></div></div><!--]--></div><!--]--></div><!----><div class="mx-4 md:mx-10 xl:mx-auto xl:max-w-340 xl:!max-w-screen-2xl flex flex-col gap-6 px-4 text-center sm:gap-10 mb-[70px] sm:mb-30" data-v-32d792e5><!--[--><p class="text-[26px] font-bold sm:text-4xl"> Mastering <span class="text-paradise">Nuxt</span> Courses </p><div class="gird-cols-1 grid gap-5 text-left lg:grid-cols-3"><div class="flex flex-col rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-10"><p class="mb-7 text-[26px] font-bold leading-none sm:text-4xl"> Mastering <br><span class="text-paradise">Nuxt 2</span></p><div class="mb-14 text-base"><p> Build NuxtBnB—a production-ready Airbnb clone—while mastering <span class="font-bold">Nuxt 2</span> best practices. </p><br><p> Learn file-based routing, authentication, payments, galleries, and more to create real-world, feature-rich applications. </p></div><a href="/nuxt2" class="mt-auto hidden w-full items-center justify-center gap-3 rounded-xl bg-paradise px-8 py-3 font-semibold text-dark-blue transition-colors hover:bg-white"> Master Nuxt 2 <span class="w-4"><!----></span></a></div><div class="flex flex-col rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-10"><p class="mb-7 text-[26px] font-bold leading-none sm:text-4xl"> Mastering <br><span class="text-paradise">Nuxt 3</span></p><div class="mb-14 text-base"><p> Master best practices, avoid pitfalls, and build a real-world full-stack Nuxt 3 app. </p><br><p> Learn file-based routing, authentication, database integration, and performance optimization to deploy production-ready projects with confidence. </p></div><a href="/nuxt3" class="mt-auto flex w-full items-center justify-center gap-3 rounded-xl bg-paradise px-8 py-3 font-semibold text-dark-blue transition-colors hover:bg-white"> Master Nuxt 3 <span class="w-4"><!----></span></a></div><div class="flex flex-col rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] p-10"><p class="mb-7 text-[26px] font-bold leading-none sm:text-4xl"> Mastering Nuxt <span class="text-paradise">Full Stack Unleashed</span></p><div class="mb-14 text-base"><p> Master Nuxt best practices by building a real-world AI-powered chat app. </p><br><p> Learn authentication, database integration, streaming AI responses, and performance optimization—from development to deployment with <span class="font-bold">Nuxt 4.</span></p></div><button class="mt-auto flex w-full items-center justify-center gap-3 rounded-xl bg-paradise px-8 py-3 font-semibold text-dark-blue transition-colors hover:bg-white"> Master Nuxt Full Stack Unleashed <span class="w-4"><!----></span></button></div></div><!--]--></div><div class="mx-4 md:mx-10 xl:mx-auto xl:max-w-340 flex flex-col gap-6 text-center sm:gap-10 mb-[70px] sm:mb-30" data-v-32d792e5><!--[--><p class="mb-10 text-[26px] font-bold sm:text-4xl"><span class="text-paradise">Meet</span> the team </p><div class="mx-auto flex flex-wrap items-start justify-center gap-12 md:gap-5 lg:justify-around"><!--[--><div class="w-64"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F07.jpg 1x, /.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F07.jpg 2x" src="/.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F07.jpg" class="mb-8 inline-block size-24 rounded-full"><div class="mb-3 font-bold"><p class="text-paradise">Michael</p><p>Thiessen</p></div><div class="text-base">Mastering Nuxt: Full Stack Unleashed Instructor</div></div><div class="w-64"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F02.jpg 1x, /.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F02.jpg 2x" src="/.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F02.jpg" class="mb-8 inline-block size-24 rounded-full"><div class="mb-3 font-bold"><p class="text-paradise">Alex</p><p>Kyriakidis</p></div><div class="text-base">Co-Founder, CEO & Head of Training at Vue School</div></div><div class="w-64"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F06.jpg 1x, /.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F06.jpg 2x" src="/.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F06.jpg" class="mb-8 inline-block size-24 rounded-full"><div class="mb-3 font-bold"><p class="text-paradise">Daniel</p><p>Kelly</p></div><div class="text-base">Vue.js Expert & Lead Instructor</div></div><div class="w-64"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F04.jpg 1x, /.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F04.jpg 2x" src="/.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F04.jpg" class="mb-8 inline-block size-24 rounded-full"><div class="mb-3 font-bold"><p class="text-paradise">Maria</p><p>Panagiotidou</p></div><div class="text-base">Product Director</div></div><div class="w-64"><img onerror="this.setAttribute('data-error', 1)" loading="lazy" data-nuxt-img srcset="/.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F12.jpg 1x, /.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F12.jpg 2x" src="/.netlify/images?url=%2Fimages%2Flanding%2Fteachers%2F12.jpg" class="mb-8 inline-block size-24 rounded-full"><div class="mb-3 font-bold"><p class="text-paradise">Mostafa</p><p>Said</p></div><div class="text-base">Director of Education</div></div><!--]--></div><!--]--></div><div class="mx-4 md:mx-10 xl:mx-auto xl:max-w-340 flex flex-col gap-6 sm:gap-10 xl:w-full mb-20" data-v-32d792e5><!--[--><p class="text-center text-[26px] font-bold sm:text-4xl"> Do you have any <span class="text-paradise">questions</span>? </p><!--[--><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Do I qualify for a free copy of Mastering Nuxt Full Stack Unleashed?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>If you have purchased Mastering Nuxt 3 Complete, prior to the launch of Mastering Nuxt Full Stack Unleashed, you qualify for a free copy of the course. To get your free copy, make sure you <a href="/2025/redeem">redeem your free course</a>.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>What will be the main differences between Mastering Nuxt 3 and Mastering Nuxt Full Stack Unleashed?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>The main difference is that we're building an entirely new app with more advanced functionality. In Mastering Nuxt 4, you'll build an AI-powered chat app—a completely different project from the one in Nuxt 3. Also, the course is updated to incorporate the latest features available in Nuxt 3 (and soon in Nuxt 4), with a very simple upgrade process (about five minutes) when Nuxt 4 is released. While the core fundamentals of Nuxt remain the same from MN3, we're also integrating modern full-stack elements like database access and authentication, so that you will master the essential features of Nuxt 4.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Do I need to take Mastering Nuxt 3 first, or is Mastering Nuxt 4 a standalone course?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>Mastering Nuxt Full Stack Unleashed is a complete rewrite of Mastering Nuxt 3 and is a standalone course. You do not need to have taken Mastering Nuxt 3 first. However, if you have already taken the previous course, you'll find Mastering Nuxt 4 to be a valuable refresher with many new topics covered.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>What will the project be in this course?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>You will be building an AI-powered chat app - a clone of ChatGPT but developed entirely with Nuxt. The project includes features such as streaming AI responses, dynamically generated chat names using AI, and the organization of chats into projects. Advanced data fetching techniques will also be implemented to ensure a fast, responsive user experience.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Who is the trainer?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>Michael Thiessen, the creator of this course and co-host of the Déjà Vue podcast, brings a wealth of Nuxt and Vue expertise to your screen. He's interviewed leading figures in the ecosystem, including Evan You, Daniel Roe, and Alex Lichter. With a long track record of teaching through articles, books, and talks around the world, Michael has helped thousands of developers improve their Nuxt codebases - making them cleaner, more scalable, and easier to maintain. He's already made all the common mistakes so you don't have to - and now he's here to guide you in building like a seasoned pro.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>What does a real-world app mean?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>A "real-world app" means you're not just learning concepts in isolation - you're building something practical, complex, and actually usable. In this course, that means developing a full-stack AI-powered chat application with features you'd expect in a real product: streaming responses, project-based chat organization, dynamic routing, authentication, database integration, caching, error handling, and performance optimization. You'll deploy it, scale it, and structure it like a serious, production-grade app - exactly the kind of project that prepares you for real jobs and client work.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>What is the state of the Mastering Nuxt Full Stack Unleashed course today?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>The Mastering Nuxt Full Stack Unleashed - 2025 Edition is now fully complete. You can now access all 12 chapters to master Nuxt 4.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>What backend technology will you be using?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>The backend of the course is powered by a modern, developer-friendly stack designed for real-world applications. You'll use Nuxt's built-in server engine (Nitro) to create powerful API routes with minimal configuration. Data handling is managed first with unstorage, then refactored to use Prisma, a type-safe ORM that integrates seamlessly with Supabase, which serves as your hosted Postgres database and authentication provider. You'll validate and structure server data using Zod, implement secure authentication flows with GitHub OAuth, and enforce access control with Nuxt middleware and server composables. The result is a clean, scalable backend architecture that brings full-stack power to your Nuxt apps—without needing to set up an external server framework.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>How long do I get access to the course?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>Buy the course once and it's yours forever! As we update the course, you'll continue to have access to the full course, including any progressive updates.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Do you support student discounts?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>Yes, we do offer students discounts. We want to encourage and support the future generation of developers.Send us an email to <a href="mailto:team@masteringnuxt.com">team@masteringnuxt.com</a> with your student id/email or any proof that you are studying and we will help you out.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Can I get a refund if I don't like it?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>Absolutely! We are offering a 14 days 100% money back guarantee if you do not like what MasteringNuxt has to offer. If you aren't satisfied, please send an email to <a href="mailto:team@masteringnuxt.com">team@masteringnuxt.com</a>.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Can I put the AI Chat App in my CV or portfolio?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>Absolutely. You are more than welcome to take the source code and add it to your portfolio and in GitHub.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Will I get a certificate of completion?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>Yes! We will be offering a certificate of completion once you've completed the course. We would recommend you adding this to your CV as it could help you get that dream job you've always wanted.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>What is the course format?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>The course consists of HD video lessons. After you purchase, you will join our training platform, and you will be able to watch all the lessons online. If you buy the Complete package, you can also download the videos for offline use to watch them on the train or on top of the mountain.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Do you provide Purchase Power Parity discount?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>Yes! We believe education must be available to everyone no matter the country they live in. We take pride in offering adjusted prices to people from countries where the conversion rate to US dollars is prohibiting high or the course might be too expensive.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Course Prerequisites</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>The course prerequisites assume that you are somewhat familiar with web development. You should have a basic understanding of JavaScript, HTML, and CSS, and know how to use Git (including having a GitHub account). Familiarity with Nuxt is helpful but not required, as the course is designed for those who have done some web development in the past but may be new to Nuxt.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Topics Covered</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>This course takes you through the complete journey of building a production-ready, AI-powered Nuxt application. You'll start with essential project setup and tooling, then move into core Nuxt concepts like file-based routing, layouts, components, and universal rendering. From there, you'll integrate with OpenAI, deploy with Netlify, and explore powerful features like dynamic routes, state management, server APIs, and advanced data fetching strategies. The course also covers caching, SEO, performance optimization, and robust error handling. On the backend, you'll work with Supabase and Prisma to create a real database layer, implement full authentication with GitHub OAuth, and secure your app with middleware and composables. It's a deep dive into modern full-stack Nuxt development—hands-on, practical, and built for real-world success.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Is this course for you?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>This course is for developers who want to skip the fluff and actually build. We've stripped out the filler and focused entirely on what matters—teaching you how to build fast, scalable, production-ready apps with the latest version of Nuxt. Every lesson is purposeful. If you're serious about leveling up your Nuxt skills and want to learn by building something real, this course is built for you.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>What's the best way to learn State Management for Vue.js?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>If you want to learn the officially recommended state management solution for Vue.js and even directly from its creator, then we suggest you sign up for Mastering Pinia. The course has been developed by Eduardo San Martin Morote, the creator of both Pinia and Vue Router. For more information, visit <a href="https://masteringpinia.com/">masteringpinia.com</a></p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>How do I improve my Vue.js skills?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>Vue School offers the most comprehensive video and tutorial training library. For an overview of what is available, please visit their <a href="https://vueschool.io/courses">courses</a> page.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Will I need to pay to access the OpenAI API?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>In the course, we connect our AI chat app to OpenAI's API, which will cost a few cents. However, this is optional, as we also provide a way to get mocked responses back from the server, so you can skip this entirely. This will not affect your ability to complete the course; the only difference is that your chats will be a little less interesting.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Will the Mastering Nuxt course focus on Nuxt 4, Nuxt 3, or both?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>The focus is on Nuxt 4, but almost all of the skills and concepts you'll learn are backwards compatible to Nuxt 3.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Is Nuxt 4 backward-compatible with Nuxt 3, or does it introduce breaking changes?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>While there are some breaking changes, the Nuxt team has made the upgrade path very simple. You can find more in the Nuxt <a href="https://nuxt.com/docs/getting-started/upgrade">documentation</a>.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Should I learn Nuxt 3 first or wait for Nuxt 4?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>Just start learning Nuxt! Nuxt 3 already has most of the features that will be in Nuxt 4 (you just have to opt-in). As well, the most fundamental and important parts of Nuxt will not change at all, so there's no reason to wait.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>What are the main new features in Nuxt 4?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>Here are some highlights:</p><ul><li>A new folder structure to better separate frontend and backend code</li><li>Data fetching composables use <code>shallowRef</code> by default to improve performance</li><li>Fetched data will be shared across all prerendered pages</li><li>Many other minor DX improvements that require breaking changesRead more about the changes in <a href="https://masteringnuxt.com/blog/complete-guide-how-to-upgrade-to-nuxt-4">this blog post</a>.</li></ul></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>How risky or challenging is it to upgrade a Nuxt 3 project to Nuxt 4?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>The upgrade path from 3 to 4 will not be as painful as it was from 2 to 3. The Nuxt team has been working very hard to make sure of that! The upgrade process is straightforward, and there is even a whole set of CLI tools (Codemods) to automate most of this process for you.</p></div><!--]--></div></div><div tabindex="0" role="button" class="accordion group w-full rounded-3xl border-2 border-[#29354A] bg-gradient-to-b from-[#192233] to-[#101728] text-left shadow-md outline-paradise hover:border-paradise mx-auto lg:max-w-5xl"><div class="pb-7 flex h-max w-full items-center justify-between rounded-3xl px-7 pt-7 text-xl font-semibold [&>em]:px-1.5 [&>em]:py-0.5 [&>em]:text-paradise"><!--[--><span>Is the new course completely from scratch, or just an update of the original with 4's differences?</span><!--]--><!----></div><div style="display:none;" class="mt-7 h-auto overflow-hidden px-7 pb-7"><!--[--><div class="prose mx-auto w-full font-normal text-body prose-a:text-paradise prose-code:rounded prose-code:bg-paradise/20 prose-code:p-0.5 prose-code:text-paradise lg:max-w-5xl"><p>This course is completely re-done from the ground up, with a new app and newly recorded videos. You'll learn the latest features of Nuxt, and the most up-to-date best practices!</p>
</div><!--]--></div></div><!--]--><!--]--></div><div class="mx-4 md:mx-10 xl:mx-auto xl:max-w-340 flex flex-col gap-6 sm:gap-10 xl:w-full mb-[70px] sm:mb-30" data-v-32d792e5><!--[--><p class="text-center text-[26px] font-bold sm:text-4xl"> Follow Mastering <span class="text-paradise">Nuxt</span> on </p><div class="mx-auto mt-10 flex flex-wrap items-center justify-center gap-5 md:mt-14 lg:mt-18 lg:w-fit"><!--[--><a href="https://www.facebook.com/MasteringNuxt/" target="_blank" class="flex min-w-84 items-center justify-center gap-3 rounded-xl bg-paradise px-8 py-3 font-semibold text-dark-blue transition-colors hover:bg-white lg:w-fit"><!----><span> Follow us on <span class="capitalize">facebook</span></span></a><a href="https://www.instagram.com/masteringnuxt/" target="_blank" class="flex min-w-84 items-center justify-center gap-3 rounded-xl bg-paradise px-8 py-3 font-semibold text-dark-blue transition-colors hover:bg-white lg:w-fit"><!----><span> Follow us on <span class="capitalize">instagram</span></span></a><a href="https://twitter.com/MasteringNuxt" target="_blank" class="flex min-w-84 items-center justify-center gap-3 rounded-xl bg-paradise px-8 py-3 font-semibold text-dark-blue transition-colors hover:bg-white lg:w-fit"><!----><span> Follow us on <span class="capitalize">x</span></span></a><!--]--></div><!--]--></div></div><div class="relative z-10 w-full bg-box/60 mt-auto" data-v-32d792e5><footer class="mx-auto flex w-full max-w-screen-xxl flex-col items-center gap-8 whitespace-nowrap px-5 py-10 text-center text-sm font-normal leading-normal md:h-20 md:flex-row md:justify-between md:px-20 md:py-0"><div class="m-auto flex flex-col sm:flex-row md:m-0"><p>© All rights reserved.</p><p> Made with <svg class="inline-block h-auto w-4 fill-current text-paradise" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M0 190.9V185.1C0 115.2 50.52 55.58 119.4 44.1C164.1 36.51 211.4 51.37 244 84.02L256 96L267.1 84.02C300.6 51.37 347 36.51 392.6 44.1C461.5 55.58 512 115.2 512 185.1V190.9C512 232.4 494.8 272.1 464.4 300.4L283.7 469.1C276.2 476.1 266.3 480 256 480C245.7 480 235.8 476.1 228.3 469.1L47.59 300.4C17.23 272.1 .0003 232.4 .0003 190.9L0 190.9z"></path></svg> by <a href="https://bitterbrains.com" target="_blank" class="hover:opacity-75">BitterBrains, Inc.</a></p></div><nav class="flex flex-col items-center justify-center gap-1 sm:flex-row sm:gap-5"><a href="/nuxt3" class="hidden text-white transition-colors duration-500 hover:text-paradise"> Nuxt 3 </a><a href="/legal/privacy" class="inline-block text-white transition-colors duration-500 hover:text-paradise"> Privacy Policy </a><a href="/legal/terms" class="inline-block text-white transition-colors duration-500 hover:text-paradise"> Terms & Conditions </a></nav></footer></div><!----><!----></div><!--]--><!----></div></div><div id="teleports"></div><script type="application/json" id="__NUXT_DATA__" data-ssr="true">[["ShallowReactive",1],{"data":2,"state":1776,"once":1783,"_errors":1784,"serverRendered":1573,"path":9,"pinia":1786},["ShallowReactive",3],{"cONxdr46Fb":4,"course-2025":10,"x2kSiv9m37":1558},[5],{"title":6,"description":7,"image":8,"path":9},"Mastering Nuxt | The official courses for learning Nuxt","The complete guide to developing and deploying fast, production-ready Nuxt apps. MasteringNuxt is the most in-depth, fun, and realistic course made on Nuxt.","https://api.masteringnuxt.com/storage/iJwf9CughotQ1AC6jHuNxLiB3Wku8qGNwvHRSqrA.png","/",{"metaTags":11,"courseOutline":44,"learningOutcomes":408,"techStack":1474},{"title":6,"meta":12,"link":40,"script":43},[13,15,17,19,22,25,27,30,32,34,36,38],{"hid":14,"property":14,"content":6},"og:title",{"hid":16,"name":16,"content":7},"description",{"hid":18,"property":18,"content":7},"og:description",{"hid":20,"property":20,"content":21},"og:url","https://masteringnuxt.com/",{"hid":23,"property":23,"content":24},"og:type","website",{"hid":26,"property":26,"content":8},"og:image",{"hid":28,"name":28,"content":29},"twitter:card","summary_large_image",{"hid":31,"name":31,"content":8},"twitter:image",{"hid":33,"name":33,"content":-1},"twitter:site",{"hid":35,"name":35,"content":-1},"twitter:creator",{"hid":37,"name":37,"content":6},"twitter:title",{"hid":39,"name":39,"content":7},"twitter:description",[41],{"rel":42,"href":21},"canonical",[],{"building-the-mvp":45,"enhancing-performance-scalability":143,"full-stack-development":253,"authentication-caching":316,"deployment-production-readiness":353},{"_path":46,"_dir":47,"_draft":48,"_partial":48,"_locale":49,"title":50,"description":51,"slug":52,"icon":53,"img":54,"img-position":55,"body":56,"_type":137,"_id":138,"_source":139,"_file":140,"_stem":141,"_extension":142},"/courses/nuxt4/courseoutline/a","courseoutline",false,"","Building the MVP","You'll kick things off by creating and deploying a working MVP, giving you immediate hands-on experience. This foundation sets the stage for everything you'll build throughout the course.","building-the-mvp","code-window","building-mvp-hero","right",{"type":57,"children":58,"toc":134},"root",[59,75,108],{"type":60,"tag":61,"props":62,"children":63},"element","p",{},[64,67,73],{"type":65,"value":66},"text","You'll kick things off by creating and deploying a working ",{"type":60,"tag":68,"props":69,"children":70},"strong",{},[71],{"type":65,"value":72},"MVP",{"type":65,"value":74},", giving you immediate hands-on experience. This foundation sets the stage for everything you'll build throughout the course.",{"type":60,"tag":61,"props":76,"children":77},{},[78,80,85,87,92,94,99,101,106],{"type":65,"value":79},"To start, you'll configure your app with Nuxt modules like ",{"type":60,"tag":68,"props":81,"children":82},{},[83],{"type":65,"value":84},"Nuxt UI",{"type":65,"value":86},", set up must-have build processes like ",{"type":60,"tag":68,"props":88,"children":89},{},[90],{"type":65,"value":91},"linting",{"type":65,"value":93}," and ",{"type":60,"tag":68,"props":95,"children":96},{},[97],{"type":65,"value":98},"precommit",{"type":65,"value":100}," checks, and install some essential ",{"type":60,"tag":68,"props":102,"children":103},{},[104],{"type":65,"value":105},"VS Code",{"type":65,"value":107}," extension.",{"type":60,"tag":61,"props":109,"children":110},{},[111,113,118,120,125,127,132],{"type":65,"value":112},"Once your environment and project is set up, you'll build a basic server route that will connect to ",{"type":60,"tag":68,"props":114,"children":115},{},[116],{"type":65,"value":117},"OpenAI",{"type":65,"value":119},"'s API. Then, you'll use ",{"type":60,"tag":68,"props":121,"children":122},{},[123],{"type":65,"value":124},"$fetch",{"type":65,"value":126}," to connect to your backend API to your UI. You'll implement markdown rendering using the ",{"type":60,"tag":68,"props":128,"children":129},{},[130],{"type":65,"value":131},"Nuxt MDC",{"type":65,"value":133}," module, giving you clean and structured messages in your AI-powered chat app. To keep everything structured and scalable, you'll also organize conversations into projects, making it easy to manage multiple chat sessions efficiently.",{"title":49,"searchDepth":135,"depth":135,"links":136},2,[],"markdown","content:courses:nuxt4:courseOutline:A.md","content","courses/nuxt4/courseOutline/A.md","courses/nuxt4/courseOutline/A","md",{"_path":144,"_dir":47,"_draft":48,"_partial":48,"_locale":49,"title":145,"description":146,"slug":147,"icon":148,"img":149,"img-position":150,"body":151,"_type":137,"_id":250,"_source":139,"_file":251,"_stem":252,"_extension":142},"/courses/nuxt4/courseoutline/b","Enhancing Performance & Scalability","Once the core functionality is in place, you'll focus on making your app blazing fast and highly responsive. You'll explore advanced data fetching techniques such as lazy loading, prefetching, and optimistic UI updates using the useNuxtData, useAsyncData, and useFetch composables. You'll also integrate streaming responses with Nitro, Nuxt's backend engine, so that messages appear instantly, just like in ChatGPT.","enhancing-performance-scalability","code-document","enhancing-performance-hero","left",{"type":57,"children":152,"toc":248},[153,219,224],{"type":60,"tag":61,"props":154,"children":155},{},[156,158,163,165,170,172,177,179,184,186,191,193,198,199,204,205,210,212,217],{"type":65,"value":157},"Once the core functionality is in place, you'll focus on making your app ",{"type":60,"tag":68,"props":159,"children":160},{},[161],{"type":65,"value":162},"blazing fast and highly responsive",{"type":65,"value":164},". You'll explore ",{"type":60,"tag":68,"props":166,"children":167},{},[168],{"type":65,"value":169},"advanced data fetching techniques",{"type":65,"value":171}," such as ",{"type":60,"tag":68,"props":173,"children":174},{},[175],{"type":65,"value":176},"lazy loading",{"type":65,"value":178},", ",{"type":60,"tag":68,"props":180,"children":181},{},[182],{"type":65,"value":183},"prefetching",{"type":65,"value":185},", and ",{"type":60,"tag":68,"props":187,"children":188},{},[189],{"type":65,"value":190},"optimistic UI updates",{"type":65,"value":192}," using the ",{"type":60,"tag":68,"props":194,"children":195},{},[196],{"type":65,"value":197},"useNuxtData",{"type":65,"value":178},{"type":60,"tag":68,"props":200,"children":201},{},[202],{"type":65,"value":203},"useAsyncData",{"type":65,"value":185},{"type":60,"tag":68,"props":206,"children":207},{},[208],{"type":65,"value":209},"useFetch",{"type":65,"value":211}," composables. You'll also integrate streaming responses with Nitro, Nuxt's backend engine, so that messages appear instantly, just like in ",{"type":60,"tag":68,"props":213,"children":214},{},[215],{"type":65,"value":216},"ChatGPT",{"type":65,"value":218},".",{"type":60,"tag":61,"props":220,"children":221},{},[222],{"type":65,"value":223},"These techniques will ensure your app remains smooth and snappy, even under heavy usage. Managing state effectively is another key aspect, and you'll leverage useState to handle reactive data efficiently across your application.",{"type":60,"tag":61,"props":225,"children":226},{},[227,229,234,235,240,241,246],{"type":65,"value":228},"As your app grows, maintaining a clean and modular structure becomes crucial, so you'll learn how to properly ",{"type":60,"tag":68,"props":230,"children":231},{},[232],{"type":65,"value":233},"organize your code with Nuxt Layers",{"type":65,"value":178},{"type":60,"tag":68,"props":236,"children":237},{},[238],{"type":65,"value":239},"composables",{"type":65,"value":185},{"type":60,"tag":68,"props":242,"children":243},{},[244],{"type":65,"value":245},"smart component architecture",{"type":65,"value":247},", so that your app stays maintainable and scalable in the long run.",{"title":49,"searchDepth":135,"depth":135,"links":249},[],"content:courses:nuxt4:courseOutline:B.md","courses/nuxt4/courseOutline/B.md","courses/nuxt4/courseOutline/B",{"_path":254,"_dir":47,"_draft":48,"_partial":48,"_locale":49,"title":255,"description":256,"slug":257,"icon":258,"img":259,"img-position":55,"body":260,"_type":137,"_id":313,"_source":139,"_file":314,"_stem":315,"_extension":142},"/courses/nuxt4/courseoutline/c","Full-Stack Development","Moving beyond the frontend, you'll dive further into backend development. Initially, you'll store data using unstorage, a flexible abstraction for handling storage, before refactoring to Supabase for a full Postgres database solution.","full-stack-development","window","full-stack-dev-hero",{"type":57,"children":261,"toc":311},[262,274,299],{"type":60,"tag":61,"props":263,"children":264},{},[265,267,272],{"type":65,"value":266},"Moving beyond the frontend, you'll dive further into backend development. Initially, you'll store data using ",{"type":60,"tag":68,"props":268,"children":269},{},[270],{"type":65,"value":271},"unstorage",{"type":65,"value":273},", a flexible abstraction for handling storage, before refactoring to Supabase for a full Postgres database solution.",{"type":60,"tag":61,"props":275,"children":276},{},[277,279,284,286,291,293,298],{"type":65,"value":278},"You'll be working with ",{"type":60,"tag":68,"props":280,"children":281},{},[282],{"type":65,"value":283},"Prisma",{"type":65,"value":285},", using it as your ",{"type":60,"tag":68,"props":287,"children":288},{},[289],{"type":65,"value":290},"ORM",{"type":65,"value":292}," to interact with your database in a ",{"type":60,"tag":68,"props":294,"children":295},{},[296],{"type":65,"value":297},"type-safe and scalable way",{"type":65,"value":218},{"type":60,"tag":61,"props":300,"children":301},{},[302,304,309],{"type":65,"value":303},"Backend validation is essential for security and data integrity, so you'll implement ",{"type":60,"tag":68,"props":305,"children":306},{},[307],{"type":65,"value":308},"Zod",{"type":65,"value":310}," to enforce strict validation rules. This transition will give you a deeper understanding of how to manage data efficiently and scale your app's backend as needed.",{"title":49,"searchDepth":135,"depth":135,"links":312},[],"content:courses:nuxt4:courseOutline:C.md","courses/nuxt4/courseOutline/C.md","courses/nuxt4/courseOutline/C",{"_path":317,"_dir":47,"_draft":48,"_partial":48,"_locale":49,"title":318,"description":319,"slug":320,"icon":321,"img":322,"img-position":150,"body":323,"_type":137,"_id":350,"_source":139,"_file":351,"_stem":352,"_extension":142},"/courses/nuxt4/courseoutline/d","Authentication & Caching","Authentication is a critical aspect of any application, and you'll implement it in a way that allows flexibility, enabling the use of different providers based on your needs.","authentication-caching","code-window-minimize","authentication-caching-hero",{"type":57,"children":324,"toc":348},[325,329],{"type":60,"tag":61,"props":326,"children":327},{},[328],{"type":65,"value":319},{"type":60,"tag":61,"props":330,"children":331},{},[332,334,339,341,346],{"type":65,"value":333},"Beyond authentication, performance optimization is key, so you'll master ",{"type":60,"tag":68,"props":335,"children":336},{},[337],{"type":65,"value":338},"client and server-side caching",{"type":65,"value":340}," strategies to keep your app lightning-fast. Leveraging ",{"type":60,"tag":68,"props":342,"children":343},{},[344],{"type":65,"value":345},"Nitro",{"type":65,"value":347}," routes, you'll implement caching mechanisms that reduce server load and improve response times.",{"title":49,"searchDepth":135,"depth":135,"links":349},[],"content:courses:nuxt4:courseOutline:D.md","courses/nuxt4/courseOutline/D.md","courses/nuxt4/courseOutline/D",{"_path":354,"_dir":47,"_draft":48,"_partial":48,"_locale":49,"title":355,"description":356,"slug":357,"icon":358,"img":359,"img-position":55,"body":360,"_type":137,"_id":405,"_source":139,"_file":406,"_stem":407,"_extension":142},"/courses/nuxt4/courseoutline/e","Deployment & Production Readiness","By the end of the course, you'll have a fully functional, production-ready AI-powered chat app, built using the latest features and best practices in Nuxt. More importantly, you'll walk away with real-world, hands-on experience that prepares you to build, optimize, and deploy Nuxt applications with confidence.","deployment-production-readiness","flow-diagram","deployment-production-hero",{"type":57,"children":361,"toc":403},[362,387],{"type":60,"tag":61,"props":363,"children":364},{},[365,367,372,374,379,380,385],{"type":65,"value":366},"By the end of the course, you'll have a fully functional, production-ready ",{"type":60,"tag":68,"props":368,"children":369},{},[370],{"type":65,"value":371},"AI-powered chat app",{"type":65,"value":373},", built using the latest features and best practices in Nuxt. More importantly, you'll walk away with ",{"type":60,"tag":68,"props":375,"children":376},{},[377],{"type":65,"value":378},"real-world",{"type":65,"value":178},{"type":60,"tag":68,"props":381,"children":382},{},[383],{"type":65,"value":384},"hands-on experience",{"type":65,"value":386}," that prepares you to build, optimize, and deploy Nuxt applications with confidence.",{"type":60,"tag":61,"props":388,"children":389},{},[390],{"type":60,"tag":68,"props":391,"children":392},{},[393,395],{"type":65,"value":394},"Whether you're working on a personal project, a startup, or a large-scale application, ",{"type":60,"tag":396,"props":397,"children":400},"span",{"className":398},[399],"text-paradise",[401],{"type":65,"value":402},"this course will equip you with the skills needed to take your Nuxt development to the next level.",{"title":49,"searchDepth":135,"depth":135,"links":404},[],"content:courses:nuxt4:courseOutline:E.md","courses/nuxt4/courseOutline/E.md","courses/nuxt4/courseOutline/E",{"_path":409,"_dir":410,"_draft":48,"_partial":48,"_locale":49,"title":411,"description":412,"body":413,"_type":137,"_id":1471,"_source":139,"_file":1472,"_stem":1473,"_extension":142},"/courses/nuxt4/learningoutcomes","nuxt4","LearningOutcomes","Nuxt Specific Learning",{"type":57,"children":414,"toc":1469},[415,429,511,548,583,636,699,743,773,796,805,845,858,876,885,961,988,997,1020,1083,1092,1123,1197,1206,1257,1294,1303,1334,1364,1415,1428,1451],{"type":60,"tag":61,"props":416,"children":417},{},[418],{"type":60,"tag":396,"props":419,"children":427},{"className":420},[421,422,423,424,425,426],"block","font-bold","text-2xl","text-white","text-left","mb-10",[428],{"type":65,"value":412},{"type":60,"tag":430,"props":431,"children":435},"accordion",{"className":432,"title":434},[433],"mb-3","Directory‑based Project Layout",[436],{"type":60,"tag":437,"props":438,"children":439},"ul",{},[440,466,478],{"type":60,"tag":441,"props":442,"children":443},"li",{},[444,446,452,453,458,459,464],{"type":65,"value":445},"Using layers to organize ",{"type":60,"tag":447,"props":448,"children":449},"em",{},[450],{"type":65,"value":451},"base",{"type":65,"value":178},{"type":60,"tag":447,"props":454,"children":455},{},[456],{"type":65,"value":457},"auth",{"type":65,"value":185},{"type":60,"tag":447,"props":460,"children":461},{},[462],{"type":65,"value":463},"chat",{"type":65,"value":465}," layer modules",{"type":60,"tag":441,"props":467,"children":468},{},[469,471,476],{"type":65,"value":470},"Understanding ",{"type":60,"tag":447,"props":472,"children":473},{},[474],{"type":65,"value":475},"app/",{"type":65,"value":477}," as the root directory for main app content",{"type":60,"tag":441,"props":479,"children":480},{},[481,483,488,490,495,497,502,504,509],{"type":65,"value":482},"Placing components in ",{"type":60,"tag":447,"props":484,"children":485},{},[486],{"type":65,"value":487},"components/",{"type":65,"value":489},", pages in ",{"type":60,"tag":447,"props":491,"children":492},{},[493],{"type":65,"value":494},"pages/",{"type":65,"value":496},", layouts in ",{"type":60,"tag":447,"props":498,"children":499},{},[500],{"type":65,"value":501},"layouts/",{"type":65,"value":503},", server routes in ",{"type":60,"tag":447,"props":505,"children":506},{},[507],{"type":65,"value":508},"server/api/",{"type":65,"value":510},", etc.",{"type":60,"tag":430,"props":512,"children":515},{"className":513,"title":514},[433],"File‑based Routing",[516],{"type":60,"tag":437,"props":517,"children":518},{},[519,531],{"type":60,"tag":441,"props":520,"children":521},{},[522,524,529],{"type":65,"value":523},"Automatically mapping ",{"type":60,"tag":447,"props":525,"children":526},{},[527],{"type":65,"value":528},"pages/*.vue",{"type":65,"value":530}," files into routes",{"type":60,"tag":441,"props":532,"children":533},{},[534,536,546],{"type":65,"value":535},"Demonstrating nested directories, dynamic parameters (",{"type":60,"tag":447,"props":537,"children":538},{},[539,544],{"type":60,"tag":396,"props":540,"children":541},{},[542],{"type":65,"value":543},"id",{"type":65,"value":545},".vue",{"type":65,"value":547},") and nested routes",{"type":60,"tag":430,"props":549,"children":552},{"className":550,"title":551},[433],"Dynamic Pages",[553],{"type":60,"tag":437,"props":554,"children":555},{},[556,572],{"type":60,"tag":441,"props":557,"children":558},{},[559,561,570],{"type":65,"value":560},"Using brackets for route params (",{"type":60,"tag":447,"props":562,"children":563},{},[564,569],{"type":60,"tag":396,"props":565,"children":566},{},[567],{"type":65,"value":568},"param",{"type":65,"value":545},{"type":65,"value":571},")",{"type":60,"tag":441,"props":573,"children":574},{},[575,577,582],{"type":65,"value":576},"Catch‑all routes (",{"type":60,"tag":447,"props":578,"children":579},{},[580],{"type":65,"value":581},"...slug].vue",{"type":65,"value":571},{"type":60,"tag":430,"props":584,"children":587},{"className":585,"title":586},[433],"Error Page & Handling",[588],{"type":60,"tag":437,"props":589,"children":590},{},[591,601,626],{"type":60,"tag":441,"props":592,"children":593},{},[594,596],{"type":65,"value":595},"Customizing the Nuxt error page in ",{"type":60,"tag":447,"props":597,"children":598},{},[599],{"type":65,"value":600},"error.vue",{"type":60,"tag":441,"props":602,"children":603},{},[604,606,611,613,618,619,624],{"type":65,"value":605},"Using ",{"type":60,"tag":447,"props":607,"children":608},{},[609],{"type":65,"value":610},"showError",{"type":65,"value":612}," , ",{"type":60,"tag":447,"props":614,"children":615},{},[616],{"type":65,"value":617},"clearError",{"type":65,"value":612},{"type":60,"tag":447,"props":620,"children":621},{},[622],{"type":65,"value":623},"useError",{"type":65,"value":625}," to manage global error states",{"type":60,"tag":441,"props":627,"children":628},{},[629,631],{"type":65,"value":630},"Server or route-level errors via ",{"type":60,"tag":447,"props":632,"children":633},{},[634],{"type":65,"value":635},"throw createError(...)",{"type":60,"tag":430,"props":637,"children":640},{"className":638,"title":639},[433],"Nuxt Config Files",[641],{"type":60,"tag":437,"props":642,"children":643},{},[644,656,680],{"type":60,"tag":441,"props":645,"children":646},{},[647,649,654],{"type":65,"value":648},"Multiple ",{"type":60,"tag":447,"props":650,"children":651},{},[652],{"type":65,"value":653},"nuxt.config.ts",{"type":65,"value":655}," files in different layers, merging and extending config",{"type":60,"tag":441,"props":657,"children":658},{},[659,661,666,667,672,673,678],{"type":65,"value":660},"Setting up modules (e.g. ",{"type":60,"tag":447,"props":662,"children":663},{},[664],{"type":65,"value":665},"@nuxtjs/supabase",{"type":65,"value":612},{"type":60,"tag":447,"props":668,"children":669},{},[670],{"type":65,"value":671},"@nuxt/ui",{"type":65,"value":612},{"type":60,"tag":447,"props":674,"children":675},{},[676],{"type":65,"value":677},"@pinia/nuxt",{"type":65,"value":679}," )",{"type":60,"tag":441,"props":681,"children":682},{},[683,685,690,692,697],{"type":65,"value":684},"Placing Overriding or extending base config in components in ",{"type":60,"tag":447,"props":686,"children":687},{},[688],{"type":65,"value":689},"nuxt.config",{"type":65,"value":691}," using ",{"type":60,"tag":447,"props":693,"children":694},{},[695],{"type":65,"value":696},"extends",{"type":65,"value":698}," property",{"type":60,"tag":430,"props":700,"children":703},{"className":701,"title":702},[433],"Route and Server Middleware",[704],{"type":60,"tag":437,"props":705,"children":706},{},[707,717,727,732],{"type":60,"tag":441,"props":708,"children":709},{},[710,712],{"type":65,"value":711},"Defining route guards in ",{"type":60,"tag":447,"props":713,"children":714},{},[715],{"type":65,"value":716},"/middleware/*.ts",{"type":60,"tag":441,"props":718,"children":719},{},[720,722],{"type":65,"value":721},"Defining server middleware in ",{"type":60,"tag":447,"props":723,"children":724},{},[725],{"type":65,"value":726},"/server/middleware/*.ts",{"type":60,"tag":441,"props":728,"children":729},{},[730],{"type":65,"value":731},"Named vs. anonymous route middleware",{"type":60,"tag":441,"props":733,"children":734},{},[735,736,741],{"type":65,"value":605},{"type":60,"tag":447,"props":737,"children":738},{},[739],{"type":65,"value":740},"navigateTo",{"type":65,"value":742}," for redirection",{"type":60,"tag":430,"props":744,"children":747},{"className":745,"title":746},[433],"File-based Routing",[748],{"type":60,"tag":437,"props":749,"children":750},{},[751,760],{"type":60,"tag":441,"props":752,"children":753},{},[754,755,759],{"type":65,"value":523},{"type":60,"tag":447,"props":756,"children":757},{},[758],{"type":65,"value":528},{"type":65,"value":530},{"type":60,"tag":441,"props":761,"children":762},{},[763,764,772],{"type":65,"value":535},{"type":60,"tag":447,"props":765,"children":766},{},[767,771],{"type":60,"tag":396,"props":768,"children":769},{},[770],{"type":65,"value":543},{"type":65,"value":545},{"type":65,"value":547},{"type":60,"tag":430,"props":774,"children":777},{"className":775,"title":776},[426],"Layouts",[778],{"type":60,"tag":437,"props":779,"children":780},{},[781,791],{"type":60,"tag":441,"props":782,"children":783},{},[784,786],{"type":65,"value":785},"Creating custom layouts in ",{"type":60,"tag":447,"props":787,"children":788},{},[789],{"type":65,"value":790},"~/layouts/*.vue",{"type":60,"tag":441,"props":792,"children":793},{},[794],{"type":65,"value":795},"Handling default vs. named layout usage",{"type":60,"tag":61,"props":797,"children":798},{},[799],{"type":60,"tag":396,"props":800,"children":802},{"className":801},[421,422,423,424,425,426],[803],{"type":65,"value":804},"Data Fetching & State",{"type":60,"tag":430,"props":806,"children":809},{"className":807,"title":808},[433],"\u003Cem>useAsyncData\u003C/em> & \u003Cem>useFetch\u003C/em>",[810],{"type":60,"tag":437,"props":811,"children":812},{},[813,825,830,835,840],{"type":60,"tag":441,"props":814,"children":815},{},[816,818,823],{"type":65,"value":817},"Blocking vs. non-blocking fetch (",{"type":60,"tag":447,"props":819,"children":820},{},[821],{"type":65,"value":822},"lazy",{"type":65,"value":824}," mode)",{"type":60,"tag":441,"props":826,"children":827},{},[828],{"type":65,"value":829},"Transforming responses, picking fields, or deeply watching reactive params",{"type":60,"tag":441,"props":831,"children":832},{},[833],{"type":65,"value":834},"Auto-caching & hydration from server to client",{"type":60,"tag":441,"props":836,"children":837},{},[838],{"type":65,"value":839},"How to decide which data fetching method to use",{"type":60,"tag":441,"props":841,"children":842},{},[843],{"type":65,"value":844},"Pre-fetching chats for instant loading",{"type":60,"tag":430,"props":846,"children":849},{"className":847,"title":848},[433],"\u003Cem>useLazyAsyncData\u003C/em> & \u003Cem>useLazyFetch\u003C/em>",[850],{"type":60,"tag":437,"props":851,"children":852},{},[853],{"type":60,"tag":441,"props":854,"children":855},{},[856],{"type":65,"value":857},"Triggering data fetch only after the page is loaded (client side)",{"type":60,"tag":430,"props":859,"children":862},{"className":860,"title":861},[426],"Global State with \u003Cem>useState\u003C/em>",[863],{"type":60,"tag":437,"props":864,"children":865},{},[866,871],{"type":60,"tag":441,"props":867,"children":868},{},[869],{"type":65,"value":870},"Creating reactive state (persisted across SSR & client)",{"type":60,"tag":441,"props":872,"children":873},{},[874],{"type":65,"value":875},"Managing state effectively and co-locating business logic",{"type":60,"tag":61,"props":877,"children":878},{},[879],{"type":60,"tag":396,"props":880,"children":882},{"className":881},[421,422,423,424,425,426],[883],{"type":65,"value":884},"Server & Backend Integration",{"type":60,"tag":430,"props":886,"children":889},{"className":887,"title":888},[433],"Server Directory",[890],{"type":60,"tag":437,"props":891,"children":892},{},[893,903,930,956],{"type":60,"tag":441,"props":894,"children":895},{},[896,901],{"type":60,"tag":447,"props":897,"children":898},{},[899],{"type":65,"value":900},"~/server/api/",{"type":65,"value":902}," for server route endpoints",{"type":60,"tag":441,"props":904,"children":905},{},[906,908,916,918,923,924,929],{"type":65,"value":907},"Creating GET, POST, etc. endpoints with ",{"type":60,"tag":447,"props":909,"children":910},{},[911],{"type":60,"tag":396,"props":912,"children":913},{},[914],{"type":65,"value":915},"method",{"type":65,"value":917}," suffix (e.g. ",{"type":60,"tag":447,"props":919,"children":920},{},[921],{"type":65,"value":922},"index.get.ts",{"type":65,"value":178},{"type":60,"tag":447,"props":925,"children":926},{},[927],{"type":65,"value":928},"index.post.ts",{"type":65,"value":571},{"type":60,"tag":441,"props":931,"children":932},{},[933,935,944,945,955],{"type":65,"value":934},"Param handling in file names (",{"type":60,"tag":447,"props":936,"children":937},{},[938,942],{"type":60,"tag":396,"props":939,"children":940},{},[941],{"type":65,"value":543},{"type":65,"value":943},".get.ts",{"type":65,"value":178},{"type":60,"tag":447,"props":946,"children":947},{},[948,953],{"type":60,"tag":396,"props":949,"children":950},{},[951],{"type":65,"value":952},"...slug",{"type":65,"value":954},".ts",{"type":65,"value":571},{"type":60,"tag":441,"props":957,"children":958},{},[959],{"type":65,"value":960},"Repository pattern and services for organizing backend logic",{"type":60,"tag":430,"props":962,"children":965},{"className":963,"title":964},[426],"Automatic Request Handling",[966],{"type":60,"tag":437,"props":967,"children":968},{},[969,980,984],{"type":60,"tag":441,"props":970,"children":971},{},[972,974,978],{"type":65,"value":973},"Making ",{"type":60,"tag":447,"props":975,"children":976},{},[977],{"type":65,"value":124},{"type":65,"value":979}," calls directly to server routes in SSR",{"type":60,"tag":441,"props":981,"children":982},{},[983],{"type":65,"value":829},{"type":60,"tag":441,"props":985,"children":986},{},[987],{"type":65,"value":834},{"type":60,"tag":61,"props":989,"children":990},{},[991],{"type":60,"tag":396,"props":992,"children":994},{"className":993},[421,422,423,424,425,426],[995],{"type":65,"value":996},"Rendering & Navigation",{"type":60,"tag":430,"props":998,"children":1001},{"className":999,"title":1000},[433],"Universal Rendering",[1002],{"type":60,"tag":437,"props":1003,"children":1004},{},[1005,1010],{"type":60,"tag":441,"props":1006,"children":1007},{},[1008],{"type":65,"value":1009},"Understanding SSR (server side) plus hydration on the client",{"type":60,"tag":441,"props":1011,"children":1012},{},[1013,1015],{"type":65,"value":1014},"Combining client-only components using ",{"type":60,"tag":447,"props":1016,"children":1017},{},[1018],{"type":65,"value":1019},"ClientOnly",{"type":60,"tag":430,"props":1021,"children":1024},{"className":1022,"title":1023},[426],"Nuxt Linking & Navigation",[1025],{"type":60,"tag":437,"props":1026,"children":1027},{},[1028,1045,1066],{"type":60,"tag":441,"props":1029,"children":1030},{},[1031,1036,1038,1043],{"type":60,"tag":447,"props":1032,"children":1033},{},[1034],{"type":65,"value":1035},"NuxtLink",{"type":65,"value":1037}," vs. direct ",{"type":60,"tag":447,"props":1039,"children":1040},{},[1041],{"type":65,"value":1042},"a",{"type":65,"value":1044}," for external resources",{"type":60,"tag":441,"props":1046,"children":1047},{},[1048,1050,1054,1055,1060,1061],{"type":65,"value":1049},"Programmatic navigation using ",{"type":60,"tag":447,"props":1051,"children":1052},{},[1053],{"type":65,"value":740},{"type":65,"value":178},{"type":60,"tag":447,"props":1056,"children":1057},{},[1058],{"type":65,"value":1059},"replace",{"type":65,"value":178},{"type":60,"tag":447,"props":1062,"children":1063},{},[1064],{"type":65,"value":1065},"redirectCode",{"type":60,"tag":441,"props":1067,"children":1068},{},[1069,1071,1076,1077,1082],{"type":65,"value":1070},"Prefetching route data & components (",{"type":60,"tag":447,"props":1072,"children":1073},{},[1074],{"type":65,"value":1075},"prefetchComponents",{"type":65,"value":178},{"type":60,"tag":447,"props":1078,"children":1079},{},[1080],{"type":65,"value":1081},"preloadRouteComponents",{"type":65,"value":571},{"type":60,"tag":61,"props":1084,"children":1085},{},[1086],{"type":60,"tag":396,"props":1087,"children":1089},{"className":1088},[421,422,423,424,425,426],[1090],{"type":65,"value":1091},"Meta & Head Management",{"type":60,"tag":430,"props":1093,"children":1096},{"className":1094,"title":1095},[433],"\u003Cem>useHead\u003C/em> & \u003Cem>useSeoMeta\u003C/em>",[1097],{"type":60,"tag":437,"props":1098,"children":1099},{},[1100,1118],{"type":60,"tag":441,"props":1101,"children":1102},{},[1103,1105,1110,1111,1116],{"type":65,"value":1104},"Setting page ",{"type":60,"tag":447,"props":1106,"children":1107},{},[1108],{"type":65,"value":1109},"title",{"type":65,"value":93},{"type":60,"tag":447,"props":1112,"children":1113},{},[1114],{"type":65,"value":1115},"meta",{"type":65,"value":1117}," tags",{"type":60,"tag":441,"props":1119,"children":1120},{},[1121],{"type":65,"value":1122},"Reactive vs. non-reactive head definitions",{"type":60,"tag":430,"props":1124,"children":1127},{"className":1125,"title":1126},[426],"\u003Cem>definePageMeta\u003C/em>",[1128],{"type":60,"tag":437,"props":1129,"children":1130},{},[1131,1156],{"type":60,"tag":441,"props":1132,"children":1133},{},[1134,1136,1141,1142,1147,1149,1154],{"type":65,"value":1135},"Embedding route config like ",{"type":60,"tag":447,"props":1137,"children":1138},{},[1139],{"type":65,"value":1140},"alias",{"type":65,"value":178},{"type":60,"tag":447,"props":1143,"children":1144},{},[1145],{"type":65,"value":1146},"redirect",{"type":65,"value":1148},", or ",{"type":60,"tag":447,"props":1150,"children":1151},{},[1152],{"type":65,"value":1153},"path",{"type":65,"value":1155}," in a page script",{"type":60,"tag":441,"props":1157,"children":1158},{},[1159,1161,1166,1167,1172,1173,1178,1179,1184,1185,1190,1191,1196],{"type":65,"value":1160},"Setting ",{"type":60,"tag":447,"props":1162,"children":1163},{},[1164],{"type":65,"value":1165},"name",{"type":65,"value":178},{"type":60,"tag":447,"props":1168,"children":1169},{},[1170],{"type":65,"value":1171},"props",{"type":65,"value":178},{"type":60,"tag":447,"props":1174,"children":1175},{},[1176],{"type":65,"value":1177},"validate",{"type":65,"value":178},{"type":60,"tag":447,"props":1180,"children":1181},{},[1182],{"type":65,"value":1183},"middleware",{"type":65,"value":178},{"type":60,"tag":447,"props":1186,"children":1187},{},[1188],{"type":65,"value":1189},"layout",{"type":65,"value":178},{"type":60,"tag":447,"props":1192,"children":1193},{},[1194],{"type":65,"value":1195},"pageTransition",{"type":65,"value":510},{"type":60,"tag":61,"props":1198,"children":1199},{},[1200],{"type":60,"tag":396,"props":1201,"children":1203},{"className":1202},[421,422,423,424,425,426],[1204],{"type":65,"value":1205},"Configuration",{"type":60,"tag":430,"props":1207,"children":1210},{"className":1208,"title":1209},[433],"Extending \u003Cem>nuxt.config.ts\u003C/em>",[1211],{"type":60,"tag":437,"props":1212,"children":1213},{},[1214,1219,1241],{"type":60,"tag":441,"props":1215,"children":1216},{},[1217],{"type":65,"value":1218},"Merging multiple layers, each with its own config",{"type":60,"tag":441,"props":1220,"children":1221},{},[1222,1224,1229,1230,1235,1236],{"type":65,"value":1223},"Setting up modules: e.g. ",{"type":60,"tag":447,"props":1225,"children":1226},{},[1227],{"type":65,"value":1228},"'@nuxtjs/supabase'",{"type":65,"value":178},{"type":60,"tag":447,"props":1231,"children":1232},{},[1233],{"type":65,"value":1234},"'@pinia/nuxt'",{"type":65,"value":178},{"type":60,"tag":447,"props":1237,"children":1238},{},[1239],{"type":65,"value":1240},"'@nuxt/ui'",{"type":60,"tag":441,"props":1242,"children":1243},{},[1244,1249,1251,1256],{"type":60,"tag":447,"props":1245,"children":1246},{},[1247],{"type":65,"value":1248},"runtimeConfig",{"type":65,"value":1250}," usage for secrets & environment variables (",{"type":60,"tag":447,"props":1252,"children":1253},{},[1254],{"type":65,"value":1255},"useRuntimeConfig",{"type":65,"value":571},{"type":60,"tag":430,"props":1258,"children":1261},{"className":1259,"title":1260},[426],"Runtime Config",[1262],{"type":60,"tag":437,"props":1263,"children":1264},{},[1265,1275],{"type":60,"tag":441,"props":1266,"children":1267},{},[1268,1273],{"type":60,"tag":447,"props":1269,"children":1270},{},[1271],{"type":65,"value":1272},"public",{"type":65,"value":1274}," vs. private keys",{"type":60,"tag":441,"props":1276,"children":1277},{},[1278,1280,1285,1287,1292],{"type":65,"value":1279},"Overwriting via environment variables (",{"type":60,"tag":447,"props":1281,"children":1282},{},[1283],{"type":65,"value":1284},"NUXT_PUBLIC",{"type":65,"value":1286},"..._ / ",{"type":60,"tag":447,"props":1288,"children":1289},{},[1290],{"type":65,"value":1291},"NUXT",{"type":65,"value":1293},"..._)",{"type":60,"tag":61,"props":1295,"children":1296},{},[1297],{"type":60,"tag":396,"props":1298,"children":1300},{"className":1299},[421,422,423,424,425,426],[1301],{"type":65,"value":1302},"Other Nuxt Goodies",{"type":60,"tag":430,"props":1304,"children":1307},{"className":1305,"title":1306},[433],"Layering & Theming",[1308],{"type":60,"tag":437,"props":1309,"children":1310},{},[1311,1329],{"type":60,"tag":441,"props":1312,"children":1313},{},[1314,1316,1321,1322,1327],{"type":65,"value":1315},"Overriding or extending from base layers (like ",{"type":60,"tag":447,"props":1317,"children":1318},{},[1319],{"type":65,"value":1320},"layers/base",{"type":65,"value":178},{"type":60,"tag":447,"props":1323,"children":1324},{},[1325],{"type":65,"value":1326},"layers/auth",{"type":65,"value":1328},", etc.)",{"type":60,"tag":441,"props":1330,"children":1331},{},[1332],{"type":65,"value":1333},"Understanding how layering merges content from multiple sources",{"type":60,"tag":430,"props":1335,"children":1338},{"className":1336,"title":1337},[433],"Error Page",[1339],{"type":60,"tag":437,"props":1340,"children":1341},{},[1342,1359],{"type":60,"tag":441,"props":1343,"children":1344},{},[1345,1347,1352,1354],{"type":65,"value":1346},"Creating a custom ",{"type":60,"tag":447,"props":1348,"children":1349},{},[1350],{"type":65,"value":1351},"~/app/error.vue",{"type":65,"value":1353},", reading the error from ",{"type":60,"tag":447,"props":1355,"children":1356},{},[1357],{"type":65,"value":1358},"useError()",{"type":60,"tag":441,"props":1360,"children":1361},{},[1362],{"type":65,"value":1363},"Distinguishing 404 vs. other errors",{"type":60,"tag":430,"props":1365,"children":1368},{"className":1366,"title":1367},[433],"Composables Auto-Imports",[1369],{"type":60,"tag":437,"props":1370,"children":1371},{},[1372,1403],{"type":60,"tag":441,"props":1373,"children":1374},{},[1375,1377,1382,1384,1389,1391,1396,1397,1402],{"type":65,"value":1376},"Relying on ",{"type":60,"tag":447,"props":1378,"children":1379},{},[1380],{"type":65,"value":1381},"~/composables/",{"type":65,"value":1383}," or ",{"type":60,"tag":447,"props":1385,"children":1386},{},[1387],{"type":65,"value":1388},"#imports",{"type":65,"value":1390}," for easy usage of ",{"type":60,"tag":447,"props":1392,"children":1393},{},[1394],{"type":65,"value":1395},"ref",{"type":65,"value":178},{"type":60,"tag":447,"props":1398,"children":1399},{},[1400],{"type":65,"value":1401},"useRoute",{"type":65,"value":510},{"type":60,"tag":441,"props":1404,"children":1405},{},[1406,1408,1413],{"type":65,"value":1407},"Using the ",{"type":60,"tag":447,"props":1409,"children":1410},{},[1411],{"type":65,"value":1412},"~/server/utils",{"type":65,"value":1414}," for server-only utilities in an auto-import manner",{"type":60,"tag":430,"props":1416,"children":1419},{"className":1417,"title":1418},[433],"Nuxt Dev Tools",[1420],{"type":60,"tag":437,"props":1421,"children":1422},{},[1423],{"type":60,"tag":441,"props":1424,"children":1425},{},[1426],{"type":65,"value":1427},"Learn to use it to simplify web development and debugging",{"type":60,"tag":430,"props":1429,"children":1432},{"className":1430,"title":1431},[433],"CLI Commands",[1433],{"type":60,"tag":437,"props":1434,"children":1435},{},[1436],{"type":60,"tag":441,"props":1437,"children":1438},{},[1439,1440,1445,1446],{"type":65,"value":470},{"type":60,"tag":447,"props":1441,"children":1442},{},[1443],{"type":65,"value":1444},"npx nuxi dev",{"type":65,"value":178},{"type":60,"tag":447,"props":1447,"children":1448},{},[1449],{"type":65,"value":1450},"nuxi build",{"type":60,"tag":430,"props":1452,"children":1455},{"className":1453,"title":1454},[433],"Deployment & Prerender",[1456],{"type":60,"tag":437,"props":1457,"children":1458},{},[1459],{"type":60,"tag":441,"props":1460,"children":1461},{},[1462,1467],{"type":60,"tag":447,"props":1463,"children":1464},{},[1465],{"type":65,"value":1466},"routeRules",{"type":65,"value":1468}," usage to prerender certain paths",{"title":49,"searchDepth":135,"depth":135,"links":1470},[],"content:courses:nuxt4:learningOutcomes.md","courses/nuxt4/learningOutcomes.md","courses/nuxt4/learningOutcomes",{"_path":1475,"_dir":410,"_draft":48,"_partial":48,"_locale":49,"title":1476,"description":1477,"body":1478,"_type":137,"_id":1555,"_source":139,"_file":1556,"_stem":1557,"_extension":142},"/courses/nuxt4/techstack","TechStack","Frontend",{"type":57,"children":1479,"toc":1553},[1480,1489,1515],{"type":60,"tag":61,"props":1481,"children":1482},{},[1483],{"type":60,"tag":396,"props":1484,"children":1487},{"className":1485},[421,422,423,424,425,1486],"mb-5",[1488],{"type":65,"value":1477},{"type":60,"tag":430,"props":1490,"children":1493},{"className":1491,"title":1492},[433],"Nuxt 3 (Vue 3 + Composition API + TypeScript)",[1494],{"type":60,"tag":61,"props":1495,"children":1496},{},[1497,1503,1509],{"type":60,"tag":396,"props":1498,"children":1500},{"className":1499},[421,433],[1501],{"type":65,"value":1502},"What It Is: A framework that makes building server-rendered or static Vue apps straightforward.",{"type":60,"tag":396,"props":1504,"children":1506},{"className":1505},[421,433],[1507],{"type":65,"value":1508},"Why It Matters (Marketing): Students can produce fast, SEO-friendly sites with modern Vue features (Composition API) and industry-standard TypeScript, making their projects stand out.",{"type":60,"tag":396,"props":1510,"children":1512},{"className":1511},[421,433],[1513],{"type":65,"value":1514},"Why It Matters (Technical): Offers SSR out of the box for better performance/SEO, has a clean approach to structuring pages, and provides built-in TypeScript support that catches errors early.",{"type":60,"tag":430,"props":1516,"children":1519},{"className":1517,"title":1518},[426],"Vue Single File Components (SFC)",[1520],{"type":60,"tag":61,"props":1521,"children":1522},{},[1523,1535,1541],{"type":60,"tag":396,"props":1524,"children":1526},{"className":1525},[421,433],[1527,1529,1533],{"type":65,"value":1528},"What It Is: A way to keep template, script, and styles all in one ",{"type":60,"tag":447,"props":1530,"children":1531},{},[1532],{"type":65,"value":451},{"type":65,"value":1534}," file",{"type":60,"tag":396,"props":1536,"children":1538},{"className":1537},[421,433],[1539],{"type":65,"value":1540},"Why It Matters (Marketing): Easier for beginners to keep everything about a component together, speeding up learning and reducing confusion.",{"type":60,"tag":396,"props":1542,"children":1544},{"className":1543},[421,433],[1545,1547,1551],{"type":65,"value":1546},"Why It Matters (Technical): Encourages maintainable code and prevents style collisions (with scoped styles). Tooling also understands ",{"type":60,"tag":447,"props":1548,"children":1549},{},[1550],{"type":65,"value":545},{"type":65,"value":1552}," files, for hot reloading and quick updates.",{"title":49,"searchDepth":135,"depth":135,"links":1554},[],"content:courses:nuxt4:techStack.md","courses/nuxt4/techStack.md","courses/nuxt4/techStack",[1559],[1560,1576,1582,1590,1597,1604,1610,1616,1622,1630,1636,1642,1648,1654,1660,1669,1675,1681,1687,1693,1699,1705,1711,1719,1725,1731,1737,1743,1749,1755,1761,1768],{"id":1561,"ends":1562,"affiliates":1563,"cta":1565,"link":1566,"title":1567,"assets":1568,"static":1568,"classes":1569,"prelude":1571,"addendum":1572,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":48,"countdownFooter":1575,"showDaysAsHours":1573,"affiliatesWithCountdown":1568},"MN_BF_LIVE","2025-11-24T20:59:59.000000Z",[1564],"masteringnuxt","Claim Offer","/#plans","\u003Cspan>50% off\u003Cspan> the Complete Course to upgrade your Nuxt skills",null,[1570],"bb-campaign-masteringnuxt","BLACK FRIDAY SUPER EARLY BIRD","ENDS SOON",true," ","ends in",{"id":1577,"ends":1578,"affiliates":1579,"cta":1565,"link":1566,"title":1567,"assets":1568,"static":1568,"classes":1580,"prelude":1571,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1575,"showDaysAsHours":1573,"affiliatesWithCountdown":1581},"MN_BF_LIVE_URGENT","2025-11-26T20:59:59.000000Z",[1564],[1570],[1564],{"id":1583,"ends":1584,"affiliates":1585,"cta":1565,"link":1566,"title":1586,"assets":1568,"static":1568,"classes":1587,"prelude":1588,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1575,"showDaysAsHours":48,"affiliatesWithCountdown":1589},"MN_BF_LIVE_LIVE","2025-11-29T04:59:59.000000Z",[1564],"\u003Cspan>40% off\u003Cspan> the Complete Course to upgrade your Nuxt skills",[1570],"BLACK FRIDAY",[1564],{"id":1591,"ends":1592,"affiliates":1593,"cta":1565,"link":1566,"title":1586,"assets":1568,"static":1568,"classes":1594,"prelude":1588,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1595,"showDaysAsHours":48,"affiliatesWithCountdown":1596},"MN_BF_LIVE_EXT1","2025-11-29T16:59:59.000000Z",[1564],[1570],"Extended for",[1564],{"id":1598,"ends":1599,"affiliates":1600,"cta":1565,"link":1566,"title":1586,"assets":1568,"static":1568,"classes":1601,"prelude":1588,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1603},"MN_BF_LIVE_EXT2","2025-11-30T04:59:59.000000Z",[1564],[1570],"extended for",[1564],{"id":1605,"ends":1606,"affiliates":1607,"cta":1565,"link":1566,"title":1586,"assets":1568,"static":1568,"classes":1608,"prelude":1588,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1609},"MN_BF_LIVE_EXT3","2025-11-30T16:59:59.000000Z",[1564],[1570],[1564],{"id":1611,"ends":1612,"affiliates":1613,"cta":1565,"link":1566,"title":1586,"assets":1568,"static":1568,"classes":1614,"prelude":1588,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1615},"MN_BF_LIVE_EXT4","2025-12-01T04:59:59.000000Z",[1564],[1570],[1564],{"id":1617,"ends":1618,"affiliates":1619,"cta":1565,"link":1566,"title":1586,"assets":1568,"static":1568,"classes":1620,"prelude":1588,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1621},"MN_BF_LIVE_EXT5","2025-12-01T10:59:59.000000Z",[1564],[1570],[1564],{"id":1623,"ends":1624,"affiliates":1625,"cta":1565,"link":1566,"title":1586,"assets":1568,"static":1568,"classes":1626,"prelude":1628,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1575,"showDaysAsHours":48,"affiliatesWithCountdown":1629},"MN_CM25_LIVE","2025-12-02T04:59:59.000000Z",[1564],[1627],"bb-campaign-masteringnuxt-cm","CYBER MONDAY",[1564],{"id":1631,"ends":1632,"affiliates":1633,"cta":1565,"link":1566,"title":1586,"assets":1568,"static":1568,"classes":1634,"prelude":1628,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1595,"showDaysAsHours":48,"affiliatesWithCountdown":1635},"MN_CM25_EXT1","2025-12-02T16:59:59.000000Z",[1564],[1627],[1564],{"id":1637,"ends":1638,"affiliates":1639,"cta":1565,"link":1566,"title":1586,"assets":1568,"static":1568,"classes":1640,"prelude":1628,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1595,"showDaysAsHours":48,"affiliatesWithCountdown":1641},"MN_CM25_EXT2","2025-12-03T04:59:59.000000Z",[1564],[1627],[1564],{"id":1643,"ends":1644,"affiliates":1645,"cta":1565,"link":1566,"title":1586,"assets":1568,"static":1568,"classes":1646,"prelude":1628,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1595,"showDaysAsHours":48,"affiliatesWithCountdown":1647},"MN_CM25_EXT3","2025-12-03T16:59:59.000000Z",[1564],[1627],[1564],{"id":1649,"ends":1650,"affiliates":1651,"cta":1565,"link":1566,"title":1586,"assets":1568,"static":1568,"classes":1652,"prelude":1628,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1595,"showDaysAsHours":48,"affiliatesWithCountdown":1653},"MN_CM25_EXT4","2025-12-04T04:59:59.000000Z",[1564],[1627],[1564],{"id":1655,"ends":1656,"affiliates":1657,"cta":1565,"link":1566,"title":1586,"assets":1568,"static":1568,"classes":1658,"prelude":1628,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1595,"showDaysAsHours":48,"affiliatesWithCountdown":1659},"MN_CM25_EXT5","2025-12-04T20:59:59.000000Z",[1564],[1627],[1564],{"id":1661,"ends":1662,"affiliates":1663,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1665,"prelude":1667,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1575,"showDaysAsHours":48,"affiliatesWithCountdown":1668},"MN_CM25_LC","2025-12-09T20:59:59.000000Z",[1564],"\u003Cspan>33% off\u003Cspan> the Complete Course to upgrade your Nuxt skills",[1666],"bb-campaign-masteringnuxt-cm-latecomer","\u003Cspan>CYBER MONDAY\u003C/span> LATECOMERS",[1564],{"id":1670,"ends":1671,"affiliates":1672,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1673,"prelude":1667,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1674},"MN_CM25_LC_EXT1","2025-12-10T20:59:59.000000Z",[1564],[1666],[1564],{"id":1676,"ends":1677,"affiliates":1678,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1679,"prelude":1667,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1680},"MN_CM25_LC_EXT2","2025-12-11T20:59:59.000000Z",[1564],[1666],[1564],{"id":1682,"ends":1683,"affiliates":1684,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1685,"prelude":1667,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1686},"MN_CM25_LC_EXT3","2025-12-12T20:59:59.000000Z",[1564],[1666],[1564],{"id":1688,"ends":1689,"affiliates":1690,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1691,"prelude":1667,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1692},"MN_CM25_LC_EXT4","2025-12-13T20:59:59.000000Z",[1564],[1666],[1564],{"id":1694,"ends":1695,"affiliates":1696,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1697,"prelude":1667,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1698},"MN_CM25_LC_EXT5","2025-12-14T20:59:59.000000Z",[1564],[1666],[1564],{"id":1700,"ends":1701,"affiliates":1702,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1703,"prelude":1667,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1704},"MN_CM25_LC_EXT6","2025-12-15T20:59:59.000000Z",[1564],[1666],[1564],{"id":1706,"ends":1707,"affiliates":1708,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1709,"prelude":1667,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1710},"MN_CM25_LC_EXT7","2025-12-16T20:59:59.000000Z",[1564],[1666],[1564],{"id":1712,"ends":1713,"affiliates":1714,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1715,"prelude":1716,"addendum":1717,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":48,"countdownFooter":1575,"showDaysAsHours":48,"affiliatesWithCountdown":1718},"MN_CM25_EOY","2025-12-29T22:59:59.000000Z",[1564],[1666],"\u003Cspan>END OF YEAR SALE\u003C/span>","TIME LIMITED OFFER",[1564],{"id":1720,"ends":1721,"affiliates":1722,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1723,"prelude":1716,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1575,"showDaysAsHours":48,"affiliatesWithCountdown":1724},"MN_CM25_EOY_URGENT","2025-12-31T22:59:59.000000Z",[1564],[1666],[1564],{"id":1726,"ends":1727,"affiliates":1728,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1729,"prelude":1716,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1730},"MN_CM25_EOY_EXT1","2026-01-01T22:59:59.000000Z",[1564],[1666],[1564],{"id":1732,"ends":1733,"affiliates":1734,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1735,"prelude":1716,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1736},"MN_CM25_EOY_EXT2","2026-01-02T22:59:59.000000Z",[1564],[1666],[1564],{"id":1738,"ends":1739,"affiliates":1740,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1741,"prelude":1716,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1742},"MN_CM25_EOY_EXT3","2026-01-03T22:59:59.000000Z",[1564],[1666],[1564],{"id":1744,"ends":1745,"affiliates":1746,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1747,"prelude":1716,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1748},"MN_CM25_EOY_EXT4","2026-01-04T22:59:59.000000Z",[1564],[1666],[1564],{"id":1750,"ends":1751,"affiliates":1752,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1753,"prelude":1716,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1754},"MN_CM25_EOY_EXT5","2026-01-05T22:59:59.000000Z",[1564],[1666],[1564],{"id":1756,"ends":1757,"affiliates":1758,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1759,"prelude":1716,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":1573,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1760},"MN_CM25_EOY_EXT6","2026-01-06T22:59:59.000000Z",[1564],[1666],[1564],{"id":1762,"ends":1763,"affiliates":1764,"cta":1565,"link":1566,"title":1664,"assets":1568,"static":1568,"classes":1765,"prelude":1716,"addendum":1766,"internal":1573,"subtitle":1568,"interlude":1574,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":48,"countdownFooter":1602,"showDaysAsHours":48,"affiliatesWithCountdown":1767},"MN_CM25_EOY_EXT7","2026-01-13T14:59:59.000000Z",[1564],[1666],"EXTENDED",[1564],{"id":1769,"ends":1770,"affiliates":1771,"cta":1565,"link":1566,"title":1772,"assets":1568,"static":1568,"classes":1773,"prelude":1568,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1568,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":48,"countdownFooter":1575,"showDaysAsHours":48,"affiliatesWithCountdown":1775},"MN_GREEN","2026-12-31T22:59:59.000000Z",[1564],"\u003Cspan>Save 27%\u003Cspan> on the Complete Mastering Nuxt course",[1774],"bb-campaign-masteringnuxt-affiliates",[1564],["Reactive",1777],{"$sredemptionTime":1568,"$smodalDismissed":48,"$stimeRemaining":1778,"$sisExpired":48,"$ssite-config":1779},0,{"env":1780,"name":1781,"url":1782},"production","Masteringnuxt","https://masteringnuxt.com",["Set"],["ShallowReactive",1785],{"$VbeGLRT2Wl":1568,"course-2025":1568,"cONxdr46Fb":1568,"x2kSiv9m37":1568,"7v0dexB4rI":1568},["Reactive",1787],{"index":1788,"user":1802,"plans":1809,"banner":1811},{"country":1789,"countryCode":1791,"ppp":1792,"showTopBanner":1794,"course":1795,"isLoading":1797,"remaining":1798,"isLaunched":1800},["EmptyRef",1790],"null",["EmptyRef",1790],["EmptyRef",1793],"false",["Ref",1573],["Ref",1796],"2025",["EmptyRef",1793],["EmptyRef",1799],"_",["Ref",1801],"1",{"data":1803,"token":1806,"started":1807,"impersonating":1808},["Ref",1804],["Reactive",1805],{},["EmptyRef",1790],["Ref",1573],["EmptyRef",1793],{"upgradeLink":1810},["EmptyRef",1790],{"activePhase":1812,"loading":1819,"error":1820},["Ref",1813],["Reactive",1814],{"id":1769,"ends":1770,"affiliates":1815,"cta":1565,"link":1566,"title":1772,"assets":1568,"static":1568,"classes":1816,"prelude":1568,"addendum":1568,"internal":1573,"subtitle":1568,"interlude":1568,"logoMobile":1568,"logoTablet":1568,"logoDesktop":1568,"showCountdown":48,"countdownFooter":1575,"showDaysAsHours":48,"affiliatesWithCountdown":1817,"remaining":1818},["Reactive",1771],["Reactive",1773],["Reactive",1775],29830586493,["EmptyRef",1793],["EmptyRef",1790]]</script>
<script>window.__NUXT__={};window.__NUXT__.config={public:{API_URL:"https://api.masteringnuxt.com",APP_ROOT:"https://masteringnuxt.com",VS_APP_ROOT:"",CHARGEBEE_PORTAL_LINK:"https://masteringnuxt.chargebeeportal.com/portal/login",LAUNCHED_MN2025:"1",BANNER_JSON_URL:"https://banner.bitterbrains.com/json",ULTIMATE_VUE_BUNDLE_PRODUCT_URL:"https://api.vuebundle.com/products/the-ultimate-vue-bundle",SEO_APP_ROOT:"https://masteringnuxt.com",ENVIRONMENT_NAME:"production",GTM_ID:"GTM-N94GGSW",CROWDFUNDING_URL:"",BANNER_URL:"https://media.bitterbrains.com",DRIP_ACCOUNT_ID:"3977486",MIXPANEL_TOKEN:"22656e5c6bf143e6d172f82cefec997c",GITHUB_CLIENT_ID:"7cdc91fc1dbd1cf6c34a",THRIVECART_USER_PROFILE_LINK:"https://vueschool.thrivecart.com/updateinfo/",SENTRY_DSN:"https://d05a555fda5d4563811e877a13221d75@o43108.ingest.sentry.io/5461870",isBfRealeased:0,mdc:{useNuxtImage:true,components:{prose:true,map:{p:"prose-p",a:"prose-a",blockquote:"prose-blockquote","code-inline":"prose-code-inline",code:"ProseCodeInline",em:"prose-em",h1:"prose-h1",h2:"prose-h2",h3:"prose-h3",h4:"prose-h4",h5:"prose-h5",h6:"prose-h6",hr:"prose-hr",img:"prose-img",ul:"prose-ul",ol:"prose-ol",li:"prose-li",strong:"prose-strong",table:"prose-table",thead:"prose-thead",tbody:"prose-tbody",td:"prose-td",th:"prose-th",tr:"prose-tr"}},headings:{anchorLinks:{h1:false,h2:true,h3:true,h4:true,h5:false,h6:false}}},content:{locales:[],defaultLocale:"",integrity:1768315076188,experimental:{stripQueryParameters:false,advanceQuery:false,clientDB:false},respectPathCase:false,api:{baseURL:"/api/_content"},navigation:{fields:[]},tags:{p:"prose-p",a:"prose-a",blockquote:"prose-blockquote","code-inline":"prose-code-inline",code:"ProseCodeInline",em:"prose-em",h1:"prose-h1",h2:"prose-h2",h3:"prose-h3",h4:"prose-h4",h5:"prose-h5",h6:"prose-h6",hr:"prose-hr",img:"prose-img",ul:"prose-ul",ol:"prose-ol",li:"prose-li",strong:"prose-strong",table:"prose-table",thead:"prose-thead",tbody:"prose-tbody",td:"prose-td",th:"prose-th",tr:"prose-tr"},highlight:{theme:"github-dark",highlighter:"shiki",langs:["js","jsx","json","ts","tsx","vue","css","html","bash","md","mdc","yaml"]},wsUrl:"",documentDriven:false,host:"",trailingSlash:false,search:"",contentHead:true,anchorLinks:{depth:4,exclude:[1]}},gtm:{devtools:true,id:"GTM-N94GGSW",pageTracking:true}},app:{baseURL:"/",buildId:"9c1a69ce-e604-48ed-a589-192550efd217",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script></body></html>