PageSourceSearch

https://brainy.run/_next/static/chunks/2jnlqnsyqume-.js

js brainy.run collected 2026-10-08 16:57:05 UTC 92,862 bytes, 1 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,41472,e=>{"use strict";var t=e.i(43476),r=e.i(71645),s=e.i(22016),l=e.i(95924);function i({info:e,currency:r}){return(0,t.jsx)("div",{id:"program",className:"mt-4 rounded-2xl card-border bg-white/[0.03] p-4 sm:p-5",children:(0,t.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-xs uppercase tracking-wide opacity-70",children:"Программа обучения"}),(0,t.jsxs)("div",{className:"mt-1 text-lg sm:text-xl font-semibold",children:[e.product.title," (",e.includedCourses.length," ",function(e){let t=e%100;if(t>=11&&t<=14)return"курсов";let r=e%10;return 1===r?"курс":r>=2&&r<=4?"курса":"курсов"}(e.includedCourses.length),")"]}),(0,t.jsxs)("div",{className:"mt-1 text-sm opacity-80",children:["Вместо отдельных курсов — одним пакетом. ",e.savings>0?`Экономия ${e.savingsPct}%`:"Включает все нужные курсы"]})]}),(0,t.jsxs)("div",{className:"flex items-end gap-4",children:[(0,t.jsxs)("div",{className:"text-right",children:[(0,t.jsx)("div",{className:"text-xs opacity-70",children:"Цена программы"}),(0,t.jsx)("div",{className:"text-base font-medium",children:(0,l.formatPrice)(e.programPrice,r)}),e.sumSingles>0&&(0,t.jsxs)("div",{className:"text-xs opacity-60 line-through",children:[(0,l.formatPrice)(e.sumSingles,r)," за отдельные курсы"]})]}),(0,t.jsx)(s.default,{href:"/program/qa-engineer",className:"inline-flex items-center justify-center rounded-lg bg-foreground text-background px-3 py-2 text-sm font-medium hover:opacity-90 transition-opacity",children:"Смотреть программу"})]})]})})}var o=e.i(96097),a=e.i(57688),n=e.i(46040),d=e.i(66226);function c(){return(0,t.jsx)("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{d:"M8 5V19L19 12L8 5Z",fill:"white"})})}function u({open:e,onClose:s,data:l,children:i}){let[o,x]=(0,r.useState)(!1),m=(0,r.useRef)(null);(0,r.useEffect)(()=>{!e&&(x(!1),m.current&&m.current.pause())},[e]);let p=(0,r.useCallback)(e=>{e.stopPropagation(),x(!0),setTimeout(()=>{m.current?.play()},50)},[]),g=(0,r.useCallback)(()=>{m.current?.seeking||x(!1)},[]),h=(0,r.useCallback)(()=>{x(!1),m.current&&(m.current.currentTime=0)},[]);return(0,t.jsx)(n.Modal,{open:e,onClose:s,ariaLabel:l.title,children:(0,t.jsxs)("div",{className:"relative",children:[l.coverUrl?(0,t.jsxs)("div",{style:{position:"relative",width:"100%",paddingTop:"56.25%"},className:"overflow-hidden rounded-t-2xl pr-0.5",children:[l.trailerUrl&&(0,t.jsx)(d.HlsVideo,{ref:m,src:l.trailerUrl,controls:!0,className:`absolute inset-0 w-full h-full object-cover transition-opacity duration-200 ${o?"opacity-100 z-10":"opacity-0 z-0"}`,onPause:g,onEnded:h,preload:"none",playsInline:!0}),(0,t.jsxs)("div",{className:`absolute inset-0 transition-opacity duration-200 ${o?"opacity-0 pointer-events-none":"opacity-100"}`,children:[(0,t.jsx)(a.default,{src:l.coverUrl,alt:l.title,fill:!0,className:"object-cover"}),l.trailerUrl&&(0,t.jsx)("button",{onClick:p,className:"absolute inset-0 flex items-center justify-center bg-black/20 hover:bg-black/40 transition-all duration-300 z-10","aria-label":"Посмотреть трейлер",children:(0,t.jsx)("div",{className:"bg-black/80 hover:bg-black rounded-full p-4 shadow-2xl transition-all duration-200 hover:scale-110 border-2 border-white/30 hover:border-white/60",children:(0,t.jsx)(c,{})})})]})]}):null,(0,t.jsxs)("div",{className:"p-5 sm:p-6",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-xl sm:text-2xl font-bold",children:l.title}),l.subtitle?(0,t.jsx)("div",{className:"mt-1 text-sm opacity-80",children:l.subtitle}):null]}),(0,t.jsx)("button",{"aria-label":"Закрыть",onPointerDown:e=>e.stopPropagation(),onClick:e=>{e.stopPropagation(),s()},className:"inline-flex h-11 w-11 items-center justify-center rounded-full card-inner-border hover:bg-white/5 active:bg-white/10",children:(0,t.jsx)("span",{className:"text-lg",children:"×"})})]}),l.short?(0,t.jsx)("p",{className:"mt-3 text-sm sm:text-base opacity-90 whitespace-pre-line",children:l.short}):null,i?(0,t.jsx)("div",{className:"mt-5",children:i}):null]})]})})}async function x(e){let t=await fetch(`/api/courses/${e}/structure`);if(!t.ok)throw Error(`Failed to fetch course structure: ${t.status}`);return t.json()}e.i(58683);var m=e.i(46064),p=e.i(24188),g=e.i(84648),h=e.i(29511);e.i(76304);var f=e.i(13972),b=e.i(48973),j=e.i(24079),v=e.i(77228),w=e.i(54561),y=e.i(98463),N=e.i(16239);function C({onAuthSuccess:e,courseSlug:s}){let[l,i]=(0,r.useState)("email"),[o,a]=(0,r.useState)(""),[n,d]=(0,r.useState)(""),[c,u]=(0,r.useState)(""),[x,m]=(0,r.useState)(""),[p,g]=(0,r.useState)(""),[h,f]=(0,r.useState)(!1),[b,j]=(0,r.useState)({text:"",type:"error",details:""}),[v,w]=(0,r.useState)(!1),k=(0,r.useRef)(null);(0,r.useEffect)(()=>{w(!1)},[b.text,b.details,b.type]);let S=async e=>{e.preventDefault(),f(!0),w(!1),j({text:"",type:"error",details:""});try{let e=await fetch("/api/auth/check-email",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o})}
1),t=await e.json();if(e.ok)if(t.exists)i("password");else{let e=await fetch("/api/auth/register",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o})}),t=await e.json();if(e.ok){let e=t.details&&t.details!==t.message?t.details:void 0;j({text:t.message,type:"success",details:e}),i("verification")}else j({text:t.error||"Ошибка отправки кода",type:"error",details:t.details||t.error})}else j({text:t.error||"Сервис недоступен. Попробуйте позже.",type:"error",details:t.details||t.error})}catch(e){j({text:"Сетевая ошибка. Попробуйте позже.",type:"error",details:e instanceof Error?e.message:void 0})}finally{f(!1)}},P=async t=>{t.preventDefault(),f(!0),w(!1),j({text:"",type:"error",details:""});try{let t=await fetch("/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o,password:n})}),r=await t.json();if(t.ok&&r.token){(0,y.setToken)(r.token);let t={login:r.user?.login||r.user?.firstName||o.split("@")[0],avatar:r.user?.avatar};e(t),window.location.href="https://platform.brainy.run/dashboard";return}j({text:r.error||r.message||"Не удалось войти",type:"error",details:r.details})}catch(t){let e="Не удалось войти";t instanceof Error?j({text:t.message||e,type:"error",details:t.message}):j({text:e,type:"error",details:String(t)})}finally{f(!1)}},L=async t=>{t.preventDefault(),f(!0),j({text:"",type:"error"});try{let t=await fetch("/api/auth/verify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o,code:c})}),r=await t.json();if(t.ok)if(r.emailVerified){let e=r.details&&r.details!==r.message?r.details:void 0;j({text:r.message,type:"success",details:e}),i("create-password")}else{(0,y.setToken)(r.token);let t={login:r.user.login,avatar:void 0};e(t),window.location.href="https://platform.brainy.run/dashboard"}else j({text:r.error||"Ошибка подтверждения кода",type:"error",details:r.details||r.error})}catch(e){j({text:"Сетевая ошибка. Попробуйте позже.",type:"error",details:e instanceof Error?e.message:void 0})}finally{f(!1)}},U=async t=>{if(t.preventDefault(),f(!0),w(!1),j({text:"",type:"error",details:""}),x!==p){j({text:"Пароли не совпадают",type:"error",details:""}),f(!1);return}if(x.length<10){j({text:"Пароль должен содержать минимум 10 символов",type:"error",details:""}),f(!1);return}let r=/[a-z]/.test(x),s=/[A-Z]/.test(x),l=/[0-9]/.test(x),a=/[!@#$%^&*()\-,.?":{}|<>]/.test(x);if(!r||!s||!l||!a){j({text:"Пароль должен содержать строчные и заглавные буквы, цифры и спецсимволы",type:"error",details:""}),f(!1);return}try{let t=await fetch("/api/auth/create-user",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o,password:x})}),r=await t.json();if(t.ok)if(r.token){(0,y.setToken)(r.token);let t={login:r.user.login,avatar:void 0};e(t),window.location.href="https://platform.brainy.run/dashboard"}else{let e=r.details&&r.details!==r.message?r.details:void 0;j({text:r.message,type:"success",details:e}),setTimeout(()=>{i("password"),d(x)},1500)}else j({text:r.error||"Ошибка создания пользователя",type:"error",details:r.details||r.error})}catch(e){j({text:"Сетевая ошибка. Попробуйте позже.",type:"error",details:e instanceof Error?e.message:void 0})}finally{f(!1)}},M=()=>{i("email"),d(""),u(""),w(!1),j({text:"",type:"error",details:""})};return(0,t.jsxs)("div",{className:"bg-gradient-to-br from-gray-800 to-gray-900 rounded-xl p-6 border border-gray-700 max-w-md mx-auto",children:[(0,t.jsxs)("div",{className:"text-center mb-6",children:[(0,t.jsx)("h3",{className:"text-xl font-bold text-white mb-2",children:"🚀 Нужно войти или создать аккаунт на сайте"}),(0,t.jsx)("p",{className:"text-sm text-gray-400",children:"Это нужно для сохранения прогресса и доступа к курсу"})]}),"email"===l&&(0,t.jsxs)("form",{ref:k,onSubmit:S,className:"space-y-4",children:[(0,t.jsx)("div",{children:(0,t.jsx)("input",{type:"email",placeholder:"Ваш email адрес",className:"w-full rounded-lg border border-gray-600 px-4 py-3 text-sm bg-gray-800 text-white placeholder-gray-400 focus:ring-2 focus:ring-indigo-500 focus:border-transparent",value:o,onChange:e=>a(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),k.current?.requestSubmit())},required:!0})}),(0,t.jsx)("button",{type:"submit",disabled:h,className:"w-full inline-flex items-center justify-center rounded-lg bg-indigo-600 px-4 py-3 text-sm font-semibold text-white hover:bg-indigo-700 focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:h?"Проверка...":"Продолжить"})]}),"password"===l&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex items-center mb-4",children:[(0,t.jsx)("button",{onClick:M,className:"text-gray-400 hover:text-gray-200 mr-3",children:(0,t.jsx)("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"})})}),(0,t.jsx)("h4",{className:"text-lg font-semibold text-white",children:"Вход в аккаунт"})]}),(0,t.jsxs)("p",{className:"text-sm text-gray-400 mb-4",children:["Введи пароль для ",(0,t.jsx)("strong",{children:o})]}),(0,t.jsxs)("form",{onSubmit:P,className:"space-y-4",children:[(0,t.jsx)("input",{type:"password",placeholder:"Ваш пароль",className:"w-full rounded-lg border border-gray-600 px-4 py-3 text-sm bg-gray-800 text-white placeholder-gray-400 focus:ring-2 focus:ring-indigo-500 focus:border-transparent",value:n,onChange:e=>d(e.target.value),required:!0}),(0,t.jsx)("button",{type:"submit",disabled:h,className:"w-full inline-flex items-center justify-center rounded-lg bg-indigo-600 px-4 py-3 text-sm font-semibold text-white hover:bg-indigo-700 focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:h?"Вход...":"Войти и перейти Ð
1º курсу"})]})]}),"verification"===l&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex items-center mb-4",children:[(0,t.jsx)("button",{onClick:M,className:"text-gray-400 hover:text-gray-200 mr-3",children:(0,t.jsx)("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"})})}),(0,t.jsx)("h4",{className:"text-lg font-semibold text-white",children:"Подтверждение email"})]}),(0,t.jsxs)("p",{className:"text-sm text-gray-400 mb-4",children:["Мы отправили код подтверждения на ",(0,t.jsx)("strong",{children:o})]}),(0,t.jsxs)("form",{onSubmit:L,className:"space-y-4",children:[(0,t.jsx)("input",{type:"text",placeholder:"Введи 6-значный код",className:"w-full rounded-lg border border-gray-600 px-4 py-3 text-sm bg-gray-800 text-white placeholder-gray-400 focus:ring-2 focus:ring-indigo-500 focus:border-transparent text-center text-lg font-mono tracking-widest",value:c,onChange:e=>u(e.target.value.replace(/\D/g,"").slice(0,6)),maxLength:6,required:!0}),(0,t.jsx)("button",{type:"submit",disabled:h||6!==c.length,className:"w-full inline-flex items-center justify-center rounded-lg bg-indigo-600 px-4 py-3 text-sm font-semibold text-white hover:bg-indigo-700 focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:h?"Подтверждение...":"Подтвердить и продолжить"})]})]}),"create-password"===l&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex items-center mb-4",children:[(0,t.jsx)("button",{onClick:()=>i("verification"),className:"text-gray-400 hover:text-gray-200 mr-3",children:(0,t.jsx)("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"})})}),(0,t.jsx)("h4",{className:"text-lg font-semibold text-white",children:"Создание пароля"})]}),(0,t.jsx)("p",{className:"text-sm text-gray-400 mb-4",children:"Email подтвержден! Остается создать пароль."}),(0,t.jsxs)("form",{onSubmit:U,className:"space-y-4",children:[(0,t.jsx)(N.PasswordFields,{newPassword:x,confirmPassword:p,setNewPassword:m,setConfirmPassword:g,inputClassName:"w-full rounded-lg border border-gray-600 px-4 py-3 text-sm bg-gray-800 text-white placeholder-gray-400 focus:ring-2 focus:ring-indigo-500 focus:border-transparent"}),(0,t.jsx)("button",{type:"submit",disabled:h||!(0,N.isPasswordValid)(x)||x!==p,className:"w-full inline-flex items-center justify-center rounded-lg bg-indigo-600 px-4 py-3 text-sm font-semibold text-white hover:bg-indigo-700 focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:h?"Создание аккаунта...":"Создать аккаунт и перейти к курсу"})]})]}),b.text&&(0,t.jsx)("div",{className:`mt-4 text-sm text-center p-3 rounded-lg ${"success"===b.type?"text-green-400 bg-green-900/20":"text-red-400 bg-red-900/20"}`,children:(0,t.jsxs)("div",{className:"flex flex-col items-center gap-2",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 justify-center",children:[(0,t.jsx)("span",{children:b.text}),"error"===b.type&&b.details&&(0,t.jsx)("button",{type:"button",className:"text-xs text-gray-400 hover:text-gray-200 underline",onClick:()=>w(e=>!e),children:v?"Скрыть":"Подробнее"})]}),"error"===b.type&&v&&b.details&&(0,t.jsx)("pre",{className:"whitespace-pre-wrap break-words rounded bg-[#1f1b2e] px-4 py-3 text-left text-xs text-gray-200 w-full",children:b.details})]})})]})}e.i(74962);var k=e.i(26962);function S({open:e,onClose:s,coverUrl:l,slug:i,title:o,subtitle:a,short:n,price:d,courseId:c,productId:g,rawPrice:h,trailerUrl:y}){let N=(0,r.useMemo)(()=>({coverUrl:l,title:o||"Основы тестирования: краш‑курс",subtitle:a,short:n,ctaUrl:`/courses/${i||"qa-basics"}`,ctaText:"Изучить курс",trailerUrl:y}),[l,o,a,n,i,y]),[P,L]=(0,r.useState)(null),[U,M]=(0,r.useState)(!1),[I,T]=(0,r.useState)(null),{isAuthenticated:F,refetch:R}=(0,k.useUserCourses)(),[B,_]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{R()},[]),(0,r.useEffect)(()=>
1{if(!e)return;let t=!1;return M(!0),T(null),L(null),(async()=>{try{let{structure:e}=await x(i||"qa-basics");t||L(e)}catch{t||T("Не удалось загрузить программу курса")}finally{t||M(!1)}})(),()=>{t=!0}},[e,i]),(0,t.jsx)(u,{open:e,onClose:s,data:N,children:(0,t.jsxs)("div",{className:"space-y-8 sm:space-y-10",children:[(0,t.jsx)(b.IntroSection,{}),(0,t.jsx)(f.CourseFocusSection,{}),(0,t.jsx)(j.SkillsSection,{}),(0,t.jsx)(v.ResultsSection,{}),(0,t.jsx)("section",{children:(0,t.jsx)(m.CourseLearningOutcomesSection,{title:"Что включено в курс",outcomes:[{number:1,title:"Теоретические основы тестирования",gradientFrom:"from-emerald-950/30 to-green-950/30",borderColor:"border-emerald-700",textColor:"text-emerald-100"},{number:2,title:"Знакомство с основными инструментами",gradientFrom:"from-blue-950/30 to-indigo-950/30",borderColor:"border-blue-700",textColor:"text-blue-100"},{number:3,title:"Практические тесты для закрепления",gradientFrom:"from-purple-950/30 to-pink-950/30",borderColor:"border-purple-700",textColor:"text-purple-100"},{number:4,title:"Готовность к следующему этапу обучения",gradientFrom:"from-orange-950/30 to-red-950/30",borderColor:"border-orange-700",textColor:"text-orange-100"}]})}),(0,t.jsx)(w.RequirementsSection,{}),(0,t.jsx)(p.CourseContentsSection,{structure:P,loadingStructure:U,errorStructure:I}),(0,t.jsxs)("section",{children:[(0,t.jsxs)("div",{className:"text-center mb-6",children:[(0,t.jsx)("h2",{className:"text-2xl font-bold text-white mb-2",children:"Начни свой путь в тестировании уже сегодня"}),(0,t.jsx)("p",{className:"text-gray-400",children:"Изучай курс прямо сейчас, без общения с менеджерами, подписок на телеграм ботов и прочей ерунды"})]}),!F&&!B&&(0,t.jsxs)("div",{className:"bg-gradient-to-br from-purple-600 via-indigo-600 to-blue-600 rounded-2xl p-8 text-center text-white shadow-2xl",children:[(0,t.jsxs)("div",{className:"mb-6",children:[(0,t.jsx)("div",{className:"text-4xl font-bold mb-2",children:"бесплатно"}),(0,t.jsxs)("div",{className:"flex justify-center items-center space-x-8 text-sm opacity-90",children:[(0,t.jsxs)("div",{className:"flex flex-col items-center",children:[(0,t.jsx)("div",{className:"text-2xl font-bold",children:"140 000₽"}),(0,t.jsx)("div",{children:"столько я заработал после года опыта"})]}),(0,t.jsxs)("div",{className:"flex flex-col items-center",children:[(0,t.jsx)("div",{className:"text-2xl font-bold",children:"4.9⭐"}),(0,t.jsx)("div",{children:"средний рейтинг курсов школы"})]}),(0,t.jsxs)("div",{className:"flex flex-col items-center",children:[(0,t.jsx)("div",{className:"text-2xl font-bold",children:"∞"}),(0,t.jsx)("div",{children:"поддержка преподавателя и доступ к чату"})]})]})]}),(0,t.jsxs)("button",{onClick:()=>_(!0),className:"inline-flex items-center justify-center rounded-xl bg-white text-purple-600 px-8 py-4 text-lg font-semibold hover:bg-gray-50 focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-purple-600 transition-all duration-200 shadow-lg hover:shadow-xl",children:[(0,t.jsx)("svg",{className:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 10V3L4 14h7v7l9-11h-7z"})}),"Изучить курс"]})]}),!F&&B&&(0,t.jsx)(C,{onAuthSuccess:()=>{_(!1)},courseSlug:i}),F&&(0,t.jsxs)("div",{className:"bg-gradient-to-br from-green-900/20 to-emerald-900/20 rounded-xl p-6 border border-green-800 text-center",children:[(0,t.jsxs)("div",{className:"flex items-center justify-center mb-4",children:[(0,t.jsx)("svg",{className:"w-8 h-8 text-green-400 mr-2",fill:"currentColor",viewBox:"0 0 20 20",children:(0,t.jsx)("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",clipRule:"evenodd"})}),(0,t.jsx)("h3",{className:"text-xl font-bold text-green-200",children:"Добро пожаловать!"})]}
1),(0,t.jsx)("p",{className:"text-green-300 mb-4",children:"Авторизация прошла, теперь можно перейти к изучению курса на платформе."}),(0,t.jsxs)("button",{onClick:()=>window.location.href="https://platform.brainy.run/dashboard",className:"inline-flex items-center justify-center rounded-lg bg-green-600 px-6 py-3 text-sm font-semibold text-white hover:bg-green-700 focus:ring-2 focus:ring-green-500 focus:ring-offset-2 transition-colors",children:[(0,t.jsx)("svg",{className:"w-5 h-5 mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M14 5l7 7m0 0l-7 7m7-7H3"})}),"Перейти к курсу"]})]})]})]})})}e.i(21142);var P=e.i(91997),L=e.i(91155),U=e.i(94401),M=e.i(46094),I=e.i(90331),T=e.i(35922),F=e.i(93406),R=e.i(34762);function B({open:e,onClose:s,coverUrl:l,slug:i,title:o,subtitle:a,short:n,price:d,courseId:c,productId:f,rawPrice:b,trailerUrl:j,enrolledCount:v}){let w=(0,r.useMemo)(()=>({coverUrl:l,title:o||"Веб‑тестирование для абсолютных новичков",subtitle:a,short:n,ctaUrl:i?`/courses/${i}`:void 0,ctaText:"Приобрести курс",trailerUrl:j}),[l,o,a,n,i,j]),[y,N]=(0,r.useState)(null),[C,k]=(0,r.useState)(!1),[S,_]=(0,r.useState)(null);return(0,r.useEffect)(()=>{if(!e)return;let t=!1;return k(!0),_(null),N(null),(async()=>{try{let{structure:e}=await x(i||"web-testing");t||N(e)}catch{t||_("Не удалось загрузить программу курса")}finally{t||k(!1)}})(),()=>{t=!0}},[e,i]),(0,t.jsx)(u,{open:e,onClose:s,data:w,children:(0,t.jsxs)("div",{className:"space-y-8 sm:space-y-10",children:[(0,t.jsx)(P.IntroSection,{}),(0,t.jsx)(L.ProjectsSection,{}),(0,t.jsx)(U.SkillsSection,{}),(0,t.jsx)(M.ResultsSection,{}),(0,t.jsx)("section",{children:(0,t.jsx)(m.CourseLearningOutcomesSection,{title:"Что ты получаешь",outcomes:[{number:1,title:"Полноценный курс по всем темам и инструментам веб‑тестирования",gradientFrom:"from-blue-950/30 to-indigo-950/30",borderColor:"border-blue-700",textColor:"text-blue-100"},{number:2,title:"Проектные задания с проверкой преподавателя",gradientFrom:"from-purple-950/30 to-pink-950/30",borderColor:"border-purple-700",textColor:"text-purple-100"},(0,R.brainyAssistantBenefit)(3),{number:4,title:"Три полноценных учебных проекта, созданных для этого курса",gradientFrom:"from-green-950/30 to-emerald-950/30",borderColor:"border-green-700",textColor:"text-green-100"},{number:5,title:"Сертификат для тех, кто успешно закончит курс",gradientFrom:"from-orange-950/30 to-red-950/30",borderColor:"border-orange-700",textColor:"text-orange-100"}]})}),(0,t.jsx)(I.RequirementsSection,{}),(0,t.jsx)(p.CourseContentsSection,{structure:y,loadingStructure:C,errorStructure:S}),(0,t.jsx)(F.CourseTargetAudienceSection,{}),(0,t.jsx)(T.CourseInstructorSection,{}),(0,t.jsx)(h.CourseSocialProof,{enrolledCount:v}),(0,t.jsx)(g.CourseCTASection,{data:w,price:d,courseId:c,productId:f,rawPrice:b})]})})}e.i(66930);var _=e.i(31712),z=e.i(32008),E=e.i(64329),A=e.i(70126),D=e.i(93685);function $({open:e,onClose:s,coverUrl:l,slug:i,title:o,subtitle:a,short:n,price:d,courseId:c,productId:f,rawPrice:b,trailerUrl:j,enrolledCount:v}){let w=(0,r.useMemo)(()=>({coverUrl:l,title:o||"Тестирование API для абсолютных новичков",subtitle:a,short:n,ctaUrl:i?`/courses/${i}`:void 0,ctaText:"Приобрести курс",trailerUrl:j}),[l,o,a,n,i,j]),[y,N]=(0,r.useState)(null),[C,k]=(0,r.useState)(!1),[S,P]=(0,r.useState)(null);return(0,r.useEffect)(()=>{if(!e)return;let t=!1;return k(!0),P(null),N(null),(async()=>{try{let{structure:e}=await x(i||"api-testing");t||N(e)}catch{t||P("Не удалось загрузить программу курса")}finally{t||k(!1)}})(),()=>{t=!0}},[e,i]),(0,t.jsx)(u,{open:e,onClose:s,data:w,children:(0,t.jsxs)("div",{className:"space-y-8 sm:space-y-10",children:[(0,t.jsx)(_.IntroSection,{}),(0,t.jsx)(E.SkillsSection,{}),(0,t.jsx)(z.ProjectsSection,{}),(0,t.jsx)(A.ResultsSection,{}),(0,t.jsx)("section",{children:(0,t.jsx)(m.CourseLearningOutcomesSection,{title:"Что вы получаете",outcomes:[{number:1,title:"Полноценный курс по тестированию API",gradientFrom:"from-blue-950/30 to-indigo-950/30",borderColor:"border-blue-700",textColor:"text-blue-100"},{number:2,title:"Проектные задания с проверкой преподавателя",gradientFrom:"from-purple-950/30 to-pink-950/30",borderColor:"border-purple-700",textColor:"text-purple-100"},(0,R.brainyAssistantBenefit)(3),{number:4,title:"Доступ в закрытый Telegram чат с другими учениками и преподавателем",gradientFrom:"from-green-950/30 to-emerald-950/30",borderColor:"border-green-700",textColor:"text-green-100"},{number:5,title:"Доступ к учебному проекту Брейни GO",gradientFrom:"from-orange-950/30 to-red-950/30",borderColor:"border-orange-700",textColor:"text-orange-100"},{number:6,title:"Сертификат для тех, кто успешно закончит курс",gradientFrom:"from-yellow-950/30 to-amber-950/30",borderColor:"border-yellow-700",textColor:"text-yellow-100"}]})}),(0,t.jsx)(D.RequirementsSection,{}),(0,t.jsx)(p.CourseContentsSection,{structure:y,loadingStructure:C,errorStructure:S}),(0,t.jsx)(F.CourseTargetAudienceSection,{}),(0,t.jsx)(T.CourseInstructorSection,{}),(0,t.jsx)(h.CourseSocialProof,{enrolledCount:v}),(0,t.jsx)(g.CourseCTASection,{data:w,price:d,courseId:c,productId:f,rawPrice:b})]})})}e.i(25703);var q=e.i(69607),O=e.i(28924),G=e.i(41001),W=e.i(43863),H=e.i(56230);function V({open:e,onClose:s,coverUrl:l,slug:i,title:o,subtitle:a,short:n,price:d,courseId:c,productId:f,rawPrice:b,trailerUrl:j,enrolledCount:v}){let w=(0,r.useMemo)(()=>({coverUrl:l,title:o||"SQL для абсолютных новичков",subtitle:a,short:n,ctaUrl:i?`/courses/${i}`:void 0,ctaText:"Приобрести курс",trailerUrl:j}),[l,o,a,n,i,j]),[y,N]=(0,r.useState)(null),[C,k]=(0,r.useState)(!1),[S,P]=(0,r.useState)(null);return(0,r.useEffect)(()=>
1{if(!e)return;let t=!1;return k(!0),P(null),N(null),(async()=>{try{let{structure:e}=await x(i||"sql-testing");t||N(e)}catch{t||P("Не удалось загрузить программу курса")}finally{t||k(!1)}})(),()=>{t=!0}},[e,i]),(0,t.jsx)(u,{open:e,onClose:s,data:w,children:(0,t.jsxs)("div",{className:"space-y-8 sm:space-y-10",children:[(0,t.jsx)(q.IntroSection,{}),(0,t.jsx)(G.SkillsSection,{}),(0,t.jsx)(O.ProjectsSection,{}),(0,t.jsx)(W.ResultsSection,{}),(0,t.jsx)("section",{children:(0,t.jsx)(m.CourseLearningOutcomesSection,{title:"Что вы получаете",outcomes:[{number:1,title:"Полноценный курс по тестированию баз данных",gradientFrom:"from-green-950/30 to-emerald-950/30",borderColor:"border-green-700",textColor:"text-green-100"},(0,R.brainyAssistantBenefit)(2),{number:3,title:"Доступ в закрытый Telegram чат с другими учениками и преподавателем",gradientFrom:"from-blue-950/30 to-indigo-950/30",borderColor:"border-blue-700",textColor:"text-blue-100"},{number:4,title:"Доступ к тренажеру с интерактивным расследованием",gradientFrom:"from-purple-950/30 to-pink-950/30",borderColor:"border-purple-700",textColor:"text-purple-100"},{number:5,title:"Сертификат для тех, кто успешно закончит курс",gradientFrom:"from-orange-950/30 to-red-950/30",borderColor:"border-orange-700",textColor:"text-orange-100"}]})}),(0,t.jsx)(H.RequirementsSection,{}),(0,t.jsx)(p.CourseContentsSection,{structure:y,loadingStructure:C,errorStructure:S}),(0,t.jsx)(F.CourseTargetAudienceSection,{}),(0,t.jsx)(T.CourseInstructorSection,{}),(0,t.jsx)(h.CourseSocialProof,{enrolledCount:v}),(0,t.jsx)(g.CourseCTASection,{data:w,price:d,courseId:c,productId:f,rawPrice:b})]})})}e.i(78963);var J=e.i(38666),K=e.i(62207),Y=e.i(5410),Z=e.i(1180);function Q({open:e,onClose:s,coverUrl:l,slug:i,title:o,subtitle:a,short:n,price:d,courseId:c,productId:f,rawPrice:b,trailerUrl:j,enrolledCount:v}){let w=(0,r.useMemo)(()=>({coverUrl:l,title:o||"Автоматизация веб‑тестирования с Robot Framework",subtitle:a,short:n,ctaUrl:i?`/courses/${i}`:void 0,ctaText:"Приобрести курс",trailerUrl:j}),[l,o,a,n,i,j]),[y,N]=(0,r.useState)(null),[C,k]=(0,r.useState)(!1),[S,P]=(0,r.useState)(null);return(0,r.useEffect)(()=>{if(!e)return;let t=!1;return k(!0),P(null),N(null),(async()=>{try{let{structure:e}=await x(i||"web-automation-robotframework");t||N(e)}catch{t||P("Не удалось загрузить программу курса")}finally{t||k(!1)}})(),()=>{t=!0}},[e,i]),(0,t.jsx)(u,{open:e,onClose:s,data:w,children:(0,t.jsxs)("div",{className:"space-y-8 sm:space-y-10",children:[(0,t.jsx)(J.IntroSection,{}),(0,t.jsx)(Z.ProjectsSection,{}),(0,t.jsx)(Y.BenefitsSection,{}),(0,t.jsx)(K.SkillsSection,{}),(0,t.jsx)("section",{children:(0,t.jsx)(m.CourseLearningOutcomesSection,{title:"Курс включает в себя",outcomes:[{number:1,title:"Десятки уроков с видео и текстовыми материалами",gradientFrom:"from-purple-950/30 to-indigo-950/30",borderColor:"border-purple-700",textColor:"text-purple-100"},{number:2,title:"Доступ к проекту на GitHub, где хранится весь написанный код",gradientFrom:"from-blue-950/30 to-cyan-950/30",borderColor:"border-blue-700",textColor:"text-blue-100"},{number:3,title:"Возможность задать вопрос преподавателю",gradientFrom:"from-green-950/30 to-emerald-950/30",borderColor:"border-green-700",textColor:"text-green-100"},(0,R.brainyAssistantBenefit)(4),{number:5,title:"Множество различных тестов",gradientFrom:"from-orange-950/30 to-red-950/30",borderColor:"border-orange-700",textColor:"text-orange-100"},{number:6,title:"Материалы по основам программирования",gradientFrom:"from-pink-950/30 to-rose-950/30",borderColor:"border-pink-700",textColor:"text-pink-100"},{number:7,title:"Проектные задания, проверяемые преподавателем",gradientFrom:"from-teal-950/30 to-cyan-950/30",borderColor:"border-teal-700",textColor:"text-teal-100"},{number:8,title:"Пожизненный доступ к материалам",gradientFrom:"from-yellow-950/30 to-amber-950/30",borderColor:"border-yellow-700",textColor:"text-yellow-100"}]})}),(0,t.jsx)(p.CourseContentsSection,{structure:y,loadingStructure:C,errorStructure:S}),(0,t.jsx)(F.CourseTargetAudienceSection,{}),(0,t.jsx)(T.CourseInstructorSection,{}),(0,t.jsx)(h.CourseSocialProof,{enrolledCount:v}),(0,t.jsx)(g.CourseCTASection,{data:w,price:d,courseId:c,productId:f,rawPrice:b})]})})}e.i(2120);var X=e.i(81956),ee=e.i(46783),et=e.i(99203),er=e.i(90021);function es({open:e,onClose:s,coverUrl:l,slug:i,title:o,subtitle:a,short:n,price:d,courseId:c,productId:f,rawPrice:b,trailerUrl:j,enrolledCount:v}){let w=(0,r.useMemo)(()=>({coverUrl:l,title:o||"Автотесты на мобилках",subtitle:a,short:n,ctaUrl:i?`/courses/${i}`:void 0,ctaText:"Приобрести курс",trailerUrl:j}),[l,o,a,n,i,j]),[y,N]=(0,r.useState)(null),[C,k]=(0,r.useState)(!1),[S,P]=(0,r.useState)(null);return(0,r.useEffect)(()=>
1{if(!e)return;let t=!1;return k(!0),P(null),N(null),(async()=>{try{let{structure:e}=await x(i||"mobile-automation-robotframework");t||N(e)}catch{t||P("Не удалось загрузить программу курса")}finally{t||k(!1)}})(),()=>{t=!0}},[e,i]),(0,t.jsx)(u,{open:e,onClose:s,data:w,children:(0,t.jsxs)("div",{className:"space-y-8 sm:space-y-10",children:[(0,t.jsx)(X.IntroSection,{}),(0,t.jsx)(er.ProjectsSection,{}),(0,t.jsx)(et.BenefitsSection,{}),(0,t.jsx)(ee.SkillsSection,{}),(0,t.jsx)("section",{children:(0,t.jsx)(m.CourseLearningOutcomesSection,{title:"Курс включает в себя",outcomes:[{number:1,title:"Десятки уроков с видео и текстовыми материалами",gradientFrom:"from-emerald-950/30 to-teal-950/30",borderColor:"border-emerald-700",textColor:"text-emerald-100"},{number:2,title:"Доступ к проекту на GitHub, где хранится весь написанный код",gradientFrom:"from-blue-950/30 to-cyan-950/30",borderColor:"border-blue-700",textColor:"text-blue-100"},{number:3,title:"Возможность задать вопрос преподавателю",gradientFrom:"from-green-950/30 to-lime-950/30",borderColor:"border-green-700",textColor:"text-green-100"},(0,R.brainyAssistantBenefit)(4),{number:5,title:"Множество различных тестов",gradientFrom:"from-orange-950/30 to-red-950/30",borderColor:"border-orange-700",textColor:"text-orange-100"},{number:6,title:"Материалы по основам программирования",gradientFrom:"from-purple-950/30 to-pink-950/30",borderColor:"border-purple-700",textColor:"text-purple-100"},{number:7,title:"Проектные задания, проверяемые преподавателем",gradientFrom:"from-indigo-950/30 to-blue-950/30",borderColor:"border-indigo-700",textColor:"text-indigo-100"},{number:8,title:"Пожизненный доступ к материалам",gradientFrom:"from-yellow-950/30 to-amber-950/30",borderColor:"border-yellow-700",textColor:"text-yellow-100"}]})}),(0,t.jsx)(p.CourseContentsSection,{structure:y,loadingStructure:C,errorStructure:S}),(0,t.jsx)(F.CourseTargetAudienceSection,{}),(0,t.jsx)(T.CourseInstructorSection,{}),(0,t.jsx)(h.CourseSocialProof,{enrolledCount:v}),(0,t.jsx)(g.CourseCTASection,{data:w,price:d,courseId:c,productId:f,rawPrice:b})]})})}e.i(49689);var el=e.i(65175),ei=e.i(91297),eo=e.i(41850),ea=e.i(79319),en=e.i(55549),ed=e.i(65144),ec=e.i(89337),eu=e.i(74875),ex=e.i(58249);function em({open:e,onClose:s,coverUrl:l,title:i,subtitle:o,short:a,currency:n="RUB"}){let d=(0,r.useMemo)(()=>({coverUrl:l,title:i||"Программа «Инженер по тестированию»",subtitle:o,short:a,ctaText:"Выбрать программу"}),[l,i,o,a]),c=(0,r.useRef)(!1);return(0,r.useEffect)(()=>{e&&!c.current&&(0,ex.trackProgramModalOpen)(),c.current=e},[e]),(0,t.jsx)(u,{open:e,onClose:s,data:d,children:(0,t.jsxs)("div",{className:"space-y-8 sm:space-y-10",children:[(0,t.jsx)(el.RealityCheckSection,{}),(0,t.jsx)(ei.IntroSection,{}),(0,t.jsx)(eo.CoursesSection,{}),(0,t.jsx)(ea.ProjectsSection,{}),(0,t.jsx)(en.SkillsSection,{}),(0,t.jsx)(ed.BenefitsSection,{}),(0,t.jsx)(ec.RequirementsSection,{}),(0,t.jsx)(h.CourseSocialProof,{}),(0,t.jsx)(eu.DualCTASection,{currency:n})]})})}function ep(e,t){try{let r=new URL(window.location.href);r.searchParams.set(e,t),window.history.pushState(null,"",r.toString())}catch(e){console.warn("Ошибка при добавлении URL параметра:",e)}}function eg(e){try{let t=new URL(window.location.href);t.searchParams.has(e)&&(t.searchParams.delete(e),window.history.replaceState(null,"",t.toString()))}catch(e){console.warn("Ошибка при удалении URL параметра:",e)}}function eh(e,t){try{let r=new URL(window.location.href).searchParams.get(e);if(t)return r===t;return null!==r}catch(e){return console.warn("Ошибка парсинга URL:",e),!1}}var ef=e.i(24876);let eb={"qa-basics":{id:6,preview:"crash",legacySlugs:["qa-crash-course"],legacyPaths:["/qa-crash-course","/courses/qa-crash"],titleMatch:/краш/i},"web-testing":{id:1,preview:"web-testing",legacySlugs:["web-testing-basics"],legacyPaths:["/web-qa","/web-testing","/courses/web-testing"],titleMatch:null},"api-testing":{id:5,preview:"api-testing",legacySlugs:["api-testing-basics"],legacyPaths:["/api-qa"],titleMatch:/api/i},"sql-testing":{id:7,preview:"sql-testing",legacySlugs:["sql-basics"],legacyPaths:["/sql-testing"],titleMatch:/sql/i},"web-automation-robotframework":{id:2,preview:"web-automation",legacySlugs:["web-automation-robot","robot-framework"],legacyPaths:["/qa-automation-robotframework","/robot-framework"],titleMatch:/автоматизация.+веб/i},"mobile-automation-robotframework":{id:3,preview:"mobile-automation",legacySlugs:["mobile-automation-robot"],legacyPaths:["/robot-web","/robot-mobile"],titleMatch:/автоматизация.+мобил/i},"godot-basics":{id:4,preview:"godot",legacySlugs:["godot-game-development"],legacyPaths:[],titleMatch:/godot/i},"brand-design":{id:8,preview:"brand-design",legacySlugs:[],legacyPaths:[],titleMatch:/бренд.?дизайн/i}};function ej({course:e,meta:s,productId:l,rawPrice:i}){let o,[n,d]=(0,r.useState)(!1),[c,x]=(0,r.useState)(!1),m=(0,r.useCallback)(()=>{d(!0),e.slug&&ep("course",e.slug),x(!1),(0,ex.trackCourseCardClick)(e.slug,e.title)},[e.slug,e.title]),p=(0,r.useCallback)(()=>{x(!0),d(!1),eg("course"),setTimeout(()=>x(!1),100)},[]),{hasCourse:g,isAuthenticated:h,isLoading:f}=(0,k.useUserCourses)(),b=(0,r.useMemo)(()=>(function(e){if(e.slug&&e.slug in eb)return{slug:e.slug,entry:eb[e.slug]};for(let[t,r]of Object.entries(eb))if(e.slug&&r.legacySlugs.includes(e.slug)||null!=e.id&&r.id===e.id||e.title&&r.titleMatch?.test(e.title))return{slug:t,entry:r};return null})(e),[e.slug,e.id,e.title]),j=b?.entry.preview??"generic",v=s?.isProgram||e.title&&e.title.toLowerCase().includes("программа"),w=h&&g(e.id),y=s?.price?.toLowerCase().includes("бесплатн")||s?.badge?.toLowerCase().includes("бесплатн");return(0,r.useEffect)(()=>
1{if(!e.slug||f)return;!n&&eh("course",e.slug)&&d(!0);let t=()=>{!c&&(eh("course",e.slug)?n||d(!0):n&&d(!1))};return window.addEventListener("popstate",t),()=>window.removeEventListener("popstate",t)},[n,e.slug,c,f]),(0,t.jsxs)("article",{"data-testid":"course-card","data-product-id":l??void 0,"data-course-slug":e.slug??void 0,"data-course-id":e.id,"data-owned":w?"true":"false","data-free":y?"true":"false",className:"group h-full flex flex-col cosmic-card overflow-hidden cursor-pointer relative",onClick:m,role:"button",tabIndex:0,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),m())},children:[(s?.badge||s?.promoBadge)&&(0,t.jsxs)("div",{className:"absolute top-5 left-5 z-10 flex gap-2",children:[s?.badge&&(0,t.jsx)("span",{className:`${function(e){if(!e)return"bg-slate-900/90 backdrop-blur-sm";let t=e.toLowerCase();return t.includes("бесплатн")||t.includes("free")||t.includes("вводн")?"badge-free":t.includes("старт")||t.includes("start")||t.includes("хороший")?"badge-start":t.includes("выходн")||t.includes("weekend")||t.includes("бэкенд")?"badge-weekend":t.includes("про")||t.includes("автотест")||t.includes("автоматиз")||t.includes("куда уж")?"badge-pro":"bg-slate-900/90 backdrop-blur-sm"}(s.badge)} px-4 py-1.5 rounded-full text-xs font-semibold uppercase tracking-wide text-white shadow-lg`,style:{textShadow:"0 1px 2px rgba(0,0,0,0.3)"},children:s.badge}),s?.promoBadge&&(0,t.jsx)("span",{className:"bg-red-500 px-3 py-1.5 rounded-full text-xs font-bold text-white",children:s.promoBadge})]}),e.logo_url?(0,t.jsx)("div",{className:"relative w-full aspect-video overflow-hidden",children:(0,t.jsx)(a.default,{src:e.logo_url,alt:`Обложка курса ${e.title}`,fill:!0,loading:"lazy",draggable:!1,onDragStart:e=>e.preventDefault(),className:"object-cover transition-transform duration-500 group-hover:scale-105 select-none pointer-events-none"})}):(0,t.jsx)("div",{className:"w-full aspect-video bg-gradient-to-br from-purple-500/20 to-pink-500/20"}),(0,t.jsxs)("div",{className:"flex flex-col flex-1 p-4 sm:p-6",children:[s?.badge&&(0,t.jsx)("div",{className:"text-xs uppercase tracking-wider text-slate-400 font-semibold mb-3",children:s.badge}),(0,t.jsx)("h3",{"data-testid":"course-card-title",className:"text-xl font-bold mb-3 leading-tight text-white group-hover:shimmer-hover transition-all",children:e.title}),e.description&&(0,t.jsx)("p",{className:"text-sm text-slate-300 leading-relaxed mb-5 line-clamp-3",children:e.description}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-5 mb-6 mt-auto",children:[s?.modules?(0,t.jsxs)("div",{className:"flex items-center gap-2 text-slate-400 text-sm",children:[(0,t.jsxs)("svg",{className:"w-4 h-4 opacity-70",fill:"currentColor",viewBox:"0 0 20 20",children:[(0,t.jsx)("path",{d:"M9 2a1 1 0 000 2h2a1 1 0 100-2H9z"}),(0,t.jsx)("path",{fillRule:"evenodd",d:"M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm3 4a1 1 0 000 2h.01a1 1 0 100-2H7zm3 0a1 1 0 000 2h3a1 1 0 100-2h-3zm-3 4a1 1 0 100 2h.01a1 1 0 100-2H7zm3 0a1 1 0 100 2h3a1 1 0 100-2h-3z",clipRule:"evenodd"})]}),(0,t.jsx)("span",{children:s.modules})]}):(0,t.jsx)(ef.SkeletonLine,{width:"w-20",height:"h-4"}),s?.lessons?(0,t.jsxs)("div",{className:"flex items-center gap-2 text-slate-400 text-sm",children:[(0,t.jsx)("svg",{className:"w-4 h-4 opacity-70",fill:"currentColor",viewBox:"0 0 20 20",children:(0,t.jsx)("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z",clipRule:"evenodd"})}),(0,t.jsx)("span",{children:s.lessons})]}):(0,t.jsx)(ef.SkeletonLine,{width:"w-20",height:"h-4"})]}),(0,t.jsxs)("div",{className:"pt-5 border-t border-slate-700/50 flex items-center justify-between gap-3",children:[f?(0,t.jsx)("div",{className:"animate-pulse bg-gray-600 h-7 w-20 rounded"}):w?(0,t.jsx)("span",{"data-testid":"course-card-price","data-price-state":"owned",className:"text-lg font-bold text-green-400",children:"Уже имеется"}):y?(0,t.jsx)("span",{"data-testid":"course-card-price","data-price-state":"free",className:"text-2xl font-bold price-free",children:"Бесплатно"}):s?.price?(0,t.jsxs)("div",{"data-testid":"course-card-price","data-price-state":"paid",className:"flex flex-col",children:[s.originalPrice&&(0,t.jsx)("span",{className:"text-xs line-through opacity-50",children:s.originalPrice}),(0,t.jsx)("span",{className:"text-2xl font-bold cosmic-price",children:s.price})]}):null,(0,t.jsx)("button",{"data-testid":"course-card-cta",onClick:e=>{e.stopPropagation(),m()},className:"cosmic-btn text-sm whitespace-nowrap",children:w?"Открыть":y?"Начать":"Подробнее"})]})]}),n?v?(0,t.jsx)(em,{open:n,onClose:p,coverUrl:e.logo_url??void 0,title:e.title,subtitle:s?.badge??void 0,short:e.description??void 0}):"crash"===j?(0,t.jsx)(S,{open:n,onClose:p,coverUrl:e.logo_url??void 0,slug:e.slug,title:e.title,subtitle:s?.badge??void 0,short:e.description??void 0,modules:s?.modules,lessons:s?.lessons,price:s?.price,courseId:e.id,productId:l,rawPrice:i,trailerUrl:s?.trailerUrl}):"web-testing"===j?(0,t.jsx)(B,{open:n,onClose:p,coverUrl:e.logo_url??void 0,slug:e.slug,title:e.title,subtitle:s?.badge??void 0,short:e.description??void 0,price:s?.price,courseId:e.id,productId:l,rawPrice:i,trailerUrl:s?.trailerUrl,enrolledCount:e.enrolledCount}):"api-testing"===j?(0,t.jsx)($,{open:n,onClose:p,coverUrl:e.logo_url??void 0,slug:e.slug,title:e.title,subtitle:s?.badge??void 0,short:e.description??void 0,price:s?.price,courseId:e.id,productId:l,rawPrice:i,trailerUrl:s?.trailerUrl,enrolledCount:e.enrolledCount}):"sql-testing"===j?(0,t.jsx)(V,{open:n,onClose:p,coverUrl:e.logo_url??void 0,slug:e.slug,title:e.title,subtitle:s?.badge??void 0,short:e.description??void 0,price:s?.price,courseId:e.id,productId:l,rawPrice:i,trailerUrl:s?.trailerUrl,enrolledCount:e.enrolledCount}):"web-automation"===j?(0,t.jsx)(Q,{open:n,onClose:p,coverUrl:e.logo_url??void 0,slug:e.slug,title:e.title,subtitle:s?.badge??void 0,short:e.description??void 0,price:s?.price,courseId:e.id,productId:l,rawPrice:i,trailerUrl:s?.trailerUrl,enrolledCount:e.enrolledCount}):"mobile-automation"===j?(0,t.jsx)(es,{open:n,onClose:p,coverUrl:e.logo_url??void 0,slug:e.slug,title:e.title,subtitle:s?.badge??void 0,short:e.description??void 0,price:s?.price,courseId:e.id,productId:l,rawPrice:i,trailerUrl:s?.trailerUrl,enrolledCount:e.enrolledCount}):(o={coverUrl:e.logo_url??void 0,title:e.title,subtitle:s?.badge??s?.modules??void 0,short:e.description??void 0,trailerUrl:s?.trailerUrl,blocks:[{type:"text",title:"Модули",content:s?.modules??""},{type:"text",title:"Уроки",content:s?.lessons??""},...s?.price?[{type:"text",title:"Цена",content:s.price}]:[]],ctaUrl:e.slug?`/courses/${e.slug}`:void 0,ctaText:"К странице курса"},(0,t.jsx)(u,{open:n,onClose:p,data:o})):null]})}var ev=e.i(75367),ew=e.i(47380),ey=e.i(57199),eN=e.i(30253);function eC(){return(0,t.jsxs)("section",{className:"space-y-4",children:[(0,t.jsx)("h2",{className:"text-2xl font-bold text-white",children:"Что такое этот Godot?"}),(0,t.jsx)("p",{className:"text-gray-300 leading-relaxed",children:"Godot - самый популярный и быстрорастущий open-source движок для создания игр. Всё больше людей выбирают именно его - и не просто так. Всё больше на нём появл
1яется крутых проектов - и, опять таки, не просто так."}),(0,t.jsx)("p",{className:"text-gray-300 leading-relaxed",children:"Он быстрый, удобный, понятный и очень функциональный. Как и наш курс."})]})}function ek(){return(0,t.jsxs)("section",{className:"space-y-4",children:[(0,t.jsx)("h2",{className:"text-2xl font-bold text-white",children:"Чему вы научитесь"}),(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("div",{className:"mt-1.5 h-2 w-2 rounded-full bg-blue-500 flex-shrink-0"}),(0,t.jsx)("p",{className:"text-gray-300",children:"Создавать полноценные игры - например, 2D платформер, который лежит в основе этого курса"})]}),(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("div",{className:"mt-1.5 h-2 w-2 rounded-full bg-purple-500 flex-shrink-0"}),(0,t.jsx)("p",{className:"text-gray-300",children:"Программировать с нуля на языке GDScript (очень похожим на Python и Javascript)"})]}),(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("div",{className:"mt-1.5 h-2 w-2 rounded-full bg-pink-500 flex-shrink-0"}),(0,t.jsx)("p",{className:"text-gray-300",children:"Получать задачи и решать их самостоятельно - в курсе даётся вся необходимая информация, чтобы решать поставленные задачи"})]})]})]})}function eS(){return(0,t.jsxs)("section",{children:[(0,t.jsxs)("div",{className:"mb-8 text-center",children:[(0,t.jsx)("h2",{className:"mb-4 text-3xl font-bold text-white sm:text-4xl",children:"Ваш учебный проект"}),(0,t.jsx)("p",{className:"text-lg text-gray-300",children:"Создайте полноценную 2D игру на движке Godot"})]}),(0,t.jsx)("div",{className:"overflow-hidden rounded-3xl bg-gradient-to-br from-blue-950/20 to-purple-950/20",children:(0,t.jsx)("div",{className:"p-8 sm:p-12",children:(0,t.jsxs)("div",{className:"grid items-center gap-8 lg:grid-cols-2",children:[(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"inline-flex items-center rounded-full bg-blue-900/30 px-4 py-2 text-sm font-medium text-blue-300",children:[(0,t.jsx)("span",{className:"mr-2",children:"🎮"}),"2D Платформер"]}),(0,t.jsx)("h3",{className:"text-2xl font-bold text-white sm:text-3xl",children:"Игра с персонажем и уровнями"}),(0,t.jsxs)("div",{className:"space-y-4 text-gray-300",children:[(0,t.jsx)("p",{className:"leading-relaxed",children:"В ходе курса вы создадите полноценную 2D игру-платформер с персонажем, уровнями, препятствиями и игровой механикой."}),(0,t.jsx)("p",{className:"leading-relaxed",children:"Все необходимые ассеты предоставляются в курсе. Вы изучите основы программирования на GDScript и создания игр в Godot."})]}),(0,t.jsxs)("div",{className:"flex items-center space-x-2 rounded-lg bg-card card-border p-4",children:[(0,t.jsx)("svg",{className:"h-5 w-5 text-green-400",fill:"currentColor",viewBox:"0 0 20 20",children:(0,t.jsx)("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",clipRule:"evenodd"})}),(0,t.jsx)("span",{className:"font-medium text-primary",children:"Все ассеты включены в курс"})]})]}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("div",{className:"overflow-hidden rounded-2xl shadow-2xl",children:(0,t.jsx)(a.default,{src:"https://s3.ru1.storage.beget.cloud/bb4e0f3f0f81-brainy-platform/Landings/pages_images/2d-project.png",alt:"Скриншот 2D платформера из курса Godot",className:"h-full w-full object-cover",width:569,height:771})}),(0,t.jsx)("div",{className:"absolute -bottom-4 -right-4 rounded-lg bg-gray-800 px-4 py-2 shadow-lg",children:(0,t.jsx)("p",{className:"text-sm text-gray-400",children:"Скриншот из проекта курса"})})]})]})})})]})}function eP({open:e,onClose:s,price:l,courseId:i,productId:o,rawPrice:a,trailerUrl:n,logoUrl:d}){let c=(0,r.useMemo)(()=>({coverUrl:d,title:"Разработка игр на Godot",subtitle:"Создай свою первую игру",short:"Изучи самый популярный open-source движок для создания игр и создай полноценный 2D платформер",ctaUrl:i?"/courses/godot-basics":void 0,ctaText:"Приобрести курс",trailerUrl:n}),[i,n,d]),[h,f]=(0,r.useState)(null),[b,j]=(0,r.useState)(!1),[v,w]=(0,r.useState)(null);return(0,r.useEffect)(()=>
1{if(!e)return;let t=!1;return j(!0),w(null),f(null),(async()=>{try{let{structure:e}=await x("godot-basics");t||f(e)}catch{t||w("Не удалось загрузить программу курса")}finally{t||j(!1)}})(),()=>{t=!0}},[e]),(0,t.jsx)(u,{open:e,onClose:s,data:c,children:(0,t.jsxs)("div",{className:"space-y-8 sm:space-y-10",children:[(0,t.jsx)(eC,{}),(0,t.jsx)(ek,{}),(0,t.jsx)(eS,{}),(0,t.jsx)("section",{children:(0,t.jsx)(m.CourseLearningOutcomesSection,{title:"Курс включает в себя",outcomes:[{number:1,title:"36 видеоуроков общей длительностью ~ 4 часа",gradientFrom:"from-blue-950/30 to-indigo-950/30",borderColor:"border-blue-700",textColor:"text-blue-100"},{number:2,title:"Все необходимые ассеты для игры",gradientFrom:"from-purple-950/30 to-pink-950/30",borderColor:"border-purple-700",textColor:"text-purple-100"},{number:3,title:"Возможность задать вопрос преподавателю",gradientFrom:"from-green-950/30 to-emerald-950/30",borderColor:"border-green-700",textColor:"text-green-100"},{number:4,title:"Проверка домашних заданий",gradientFrom:"from-orange-950/30 to-red-950/30",borderColor:"border-orange-700",textColor:"text-orange-100"},{number:5,title:"Тестовые материалы по теории программирования и функционалу Godot",gradientFrom:"from-yellow-950/30 to-amber-950/30",borderColor:"border-yellow-700",textColor:"text-yellow-100"},{number:6,title:"Немного теории и много практики",gradientFrom:"from-cyan-950/30 to-blue-950/30",borderColor:"border-cyan-700",textColor:"text-cyan-100"},{number:7,title:"Пожизненный доступ к материалам",gradientFrom:"from-rose-950/30 to-pink-950/30",borderColor:"border-rose-700",textColor:"text-rose-100"}]})}),(0,t.jsx)(p.CourseContentsSection,{structure:h,loadingStructure:b,errorStructure:v}),(0,t.jsx)(g.CourseCTASection,{data:c,price:l,courseId:i,productId:o,rawPrice:a,title:"Создай свою первую игру на Godot",subtitle:"Все модули, практика на реальном проекте, поддержка преподавателя и навыки для создания игр",stats:{salary:"🎮",rating:"4.9★",support:"∞",salaryLabel:"твоя первая игра в портфолио"}})]})})}function eL({isOwned:e,price:r,originalPrice:s,showGoToLearning:l=!1,onGoToLearning:i,className:o="",isLoading:a=!1}){return a?(0,t.jsx)("div",{className:`${o}`,children:(0,t.jsx)("div",{className:"animate-pulse bg-gray-600 h-4 w-16 rounded"})}):e?(0,t.jsxs)("div",{className:`flex flex-col gap-2 ${o}`,children:[(0,t.jsx)("div",{className:"text-sm font-medium text-green-400",children:"Уже имеется"}),l&&i&&(0,t.jsx)("button",{onClick:i,className:"text-sm font-medium text-blue-400 hover:text-blue-300 underline underline-offset-4 transition-colors",children:"Перейти к обучению"})]}):r?(0,t.jsxs)("div",{className:`text-sm ${o}`,children:[s&&(0,t.jsx)("div",{className:"text-xs line-through opacity-60",children:s}),(0,t.jsx)("div",{className:s?"font-medium text-red-400":"opacity-80",children:r})]}):null}function eU({price:e,rawPrice:s,originalPrice:l,productId:i,courseId:o,logoUrl:n}){let[d,c]=(0,r.useState)(!1),[u,x]=(0,r.useState)(!1),m="godot-basics",p=(0,r.useCallback)(()=>{c(!0),ep("course",m),x(!1)},[]),g=(0,r.useCallback)(()=>{x(!0),c(!1),eg("course"),setTimeout(()=>x(!1),100)},[]),{hasCourse:h,isAuthenticated:f,isLoading:b}=(0,k.useUserCourses)(),j=!!f&&!!o&&h(o),v=(0,ew.getCourseMeta)({id:o||4,title:"Разработка игр на Godot",slug:"godot-game-development",active:!0,logo_url:n});return(0,r.useEffect)(()=>{if(b)return;!d&&eh("course",m)&&c(!0);let e=()=>{!u&&(eh("course",m)?d||c(!0):d&&c(!1))};return window.addEventListener("popstate",e),()=>window.removeEventListener("popstate",e)},[d,u,b]),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("article",{"data-product-id":i??void 0,className:"group relative h-[320px] overflow-hidden rounded-3xl transition-all duration-500 hover:scale-[1.01] hover:shadow-[0_20px_40px_rgba(0,0,0,0.6)] cursor-pointer",onClick:p,role:"button",tabIndex:0,onKeyDown:e=>
1{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),p())},children:[(0,t.jsxs)("div",{className:"absolute inset-0",children:[(0,t.jsx)(a.default,{src:n,alt:"Обложка курса Godot",fill:!0,className:"object-cover transition-transform duration-700 group-hover:scale-110"}),(0,t.jsx)("div",{className:"absolute inset-0 bg-gradient-to-t from-black via-black/60 to-transparent"}),(0,t.jsx)("div",{className:"absolute inset-0 bg-blue-600/10 group-hover:bg-blue-600/5 transition-colors duration-500"})]}),(0,t.jsxs)("div",{className:"relative h-full flex flex-col p-8 justify-end",children:[(0,t.jsx)("div",{className:"absolute top-6 left-6",children:(0,t.jsx)("span",{className:"inline-flex items-center px-3 py-1 rounded-full bg-blue-500/20 backdrop-blur-md border border-blue-500/30 text-[10px] font-bold uppercase tracking-wider text-blue-200",children:"Game Dev"})}),(0,t.jsxs)("div",{className:"mb-2",children:[(0,t.jsx)("h3",{className:"text-lg sm:text-xl font-extrabold text-white leading-tight",children:"Разработка игр на Godot"}),(0,t.jsx)("p",{className:"mt-2 text-sm text-blue-100/80 max-w-[90%] leading-relaxed",children:"Создай свой 2D платформер с нуля на самом быстрорастущем движке в индустрии."})]}),(0,t.jsxs)("div",{className:"mt-4 flex flex-wrap gap-4 items-center",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-blue-100/60 font-medium",children:[(0,t.jsxs)("svg",{className:"w-4 h-4 text-blue-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z"}),(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})]}),(0,t.jsx)("span",{children:"36 уроков"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-blue-100/60 font-medium",children:[(0,t.jsx)("svg",{className:"w-4 h-4 text-purple-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.254 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"})}),(0,t.jsx)("span",{children:"Все ассеты"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-blue-100/60 font-medium",children:[(0,t.jsx)("svg",{className:"w-4 h-4 text-pink-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"})}),(0,t.jsx)("span",{children:"Проверка ДЗ"})]})]}),(0,t.jsxs)("div",{className:"mt-8 flex items-center justify-between border-t border-white/10 pt-4",children:[(0,t.jsxs)("button",{onClick:e=>{e.stopPropagation(),p()},className:"group/btn relative overflow-hidden flex items-center gap-2 text-sm font-semibold text-white transition-all hover:gap-3 py-2",children:[(0,t.jsx)("span",{children:"Смотреть программу"}),(0,t.jsx)("svg",{className:"w-4 h-4 transition-transform group-hover/btn:translate-x-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 8l4 4m0 0l-4 4m4-4H3"})})]}),(0,t.jsx)("div",{className:"flex flex-col items-end",children:(0,t.jsx)(eL,{isOwned:j,price:e,originalPrice:l,showGoToLearning:!1,isLoading:b,className:"!text-white !p-0 !bg-transparent"})})]})]}),(0,t.jsx)("div",{className:"absolute -inset-full group-hover:inset-0 bg-gradient-to-r from-blue-600/0 via-white/5 to-blue-600/0 -skew-x-12 transition-all duration-1000 pointer-events-none"})]}),d&&(0,t.jsx)(eP,{open:d,onClose:g,price:e,courseId:o,productId:i,rawPrice:s,trailerUrl:v?.trailerUrl,logoUrl:n})]})}function eM(){return(0,t.jsxs)("section",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"inline-flex items-center rounded-full bg-pink-900/30 px-4 py-2 text-sm font-medium text-pink-300",children:[(0,t.jsx)("span",{className:"mr-2",children:"🎨"}),"Практический курс"]}),(0,t.jsx)("h2",{className:"text-2xl font-bold text-white",children:"От идеи до готового кейса в портфолио"}),(0,t.jsx)("p",{className:"text-gray-300 leading-relaxed",children:"Это не теория «про дизайн», а имитация реальной работы с заказчиком. Ты пройдёшь весь путь бренд-дизайнера: от брифа и исследования до айдентики, мокапов и финальной презентации."}),(0,t.jsx)("p",{className:"text-gray-300 leading-relaxed",children:"Много практики, минимум академической воды. Личный фидбек от преподавателя на каждое задание."})]})}function eI(){return(0,t.jsxs)("section",{className:"space-y-4",children:[(0,t.jsx)("h2",{className:"text-2xl font-bold text-white",children:"Кому подойдёт курс"}),(0,t.jsx)("div",{className:"grid grid-cols-2 gap-4",children:[{icon:"🚀",title:"Хочу войти в дизайн",desc:"Начинающие дизайнеры без опыта"},{icon:"🧩",title:"Уже рисую, но нет системы",desc:"Самоучки, уставшие от хаотичных туториалов"},{icon:"💼",title:"Хочу сильный кейс",desc:"Готовый проект в портфолио"},{icon:"😰",title:"Боюсь реальных заказов",desc:"Научишься работать с клиентами"}].map((e,r)=>(0,t.jsxs)("div",{className:"rounded-xl bg-gray-800/50 p-4 border border-gray-700",children:[(0,t.jsx)("div",{className:"text-2xl mb-2",children:e.icon}),(0,t.jsx)("h3",{className:"font-semibold text-white mb-1",children:e.title}),(0,t.jsx)("p",{className:"text-sm text-gray-400",children:e.desc})]},r))})]})}function eT(){return(0,t.jsxs)("section",{className:"space-y-16",children:[(0,t.jsxs)("div",{className:"text-center",children:[(0,t.jsx)("h2",{className:"mb-4 text-3xl font-bold text-white sm:text-4xl",children:"Как проходит обучение"}),(0,t.jsx)("p",{className:"text-lg text-gray-300 max-w-2xl mx-auto",children:"5 этапов работы над реальным бренд-проектом — от брифа до финальной презентации"})]}),(0,t.jsx)("div",{className:"overflow-hidden rounded-3xl bg-gradient-to-br from-pink-950/20 to-purple-950/20",children:(0,t.jsx)("div",{className:"p-8 sm:p-12",children:(0,t.jsxs)("div",{className:"grid items-center gap-8 lg:grid-cols-2",children:[(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"inline-flex items-center rounded-full bg-pink-900/30 px-4 py-2 text-sm font-medium text-pink-300",children:[(0,t.jsx)("span",{className:"mr-2",children:"1"}),"Работа с брифом"]}),(0,t.jsx)("h3",{className:"text-2xl font-bold text-white sm:text-3xl",children:"Всё начинается с брифа"}),(0,t.jsxs)("div",{className:"space-y-4 text-gray-300",children:[(0,t.jsx)("p",{className:"leading-relaxed",children:"В начале курса ты получишь бриф — точно такой же, как от реального заказчика. Это основа для всей дальнейшей работы над проектом."}),(0,t.jsx)("p",{className:"leading-relaxed",children:"Научишься анализировать задачу, выделять ключевые требования и формировать концепцию на основе брифа."})]}),(0,t.jsxs)("div",{className:"flex items-center space-x-2 rounded-lg bg-gray-800/50 p-4",children:[(0,t.jsx)("svg",{className:"h-5 w-5 text-green-400",fill:"currentColor",viewBox:"0 0 20 20",children:(0,t.jsx)("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",clipRule:"evenodd"})}),(0,t.jsx)("span",{className:"font-medium text-gray-300",children:"Реальный формат коммерческих проектов"})]})]}),(0,t.jsx)("div",{className:"relative",children:(0,t.jsx)("div",{className:"overflow-hidden rounded-2xl shadow-2xl",children:(0,t.jsx)(a.default,{src:"https://s3.ru1.storage.beget.cloud/bb4e0f3f0f81-brainy-platform/Landings/pages_images/branding/brif.jpg",alt:"Пример брифа для бренд-дизайна",className:"h-full w-full object-cover",width:800,height:600})})})]})})}),(0,t.jsx)("div",{className:"overflow-hidden rounded-3xl bg-gradient-to-br from-amber-950/20 to-orange-950/20",children:(0,t.jsx)("div",{className:"p-8 sm:p-12",children:(0,t.jsxs)("div",{className:"grid items-center gap-8 lg:grid-cols-2",children:[(0,t.jsx)("div",{className:"order-2 lg:order-1 relative",children:(0,t.jsx)("div",{className:"overflow-hidden rounded-2xl shadow-2xl",children:(0,t.jsx)(a.default,{src:"https://s3.ru1.storage.beget.cloud/bb4e0f3f0f81-brainy-platform/Landings/pages_images/branding/logo-drafts.png",alt:"Процесс создания логотипа",className:"h-full w-full object-cover",width:800,height:600})})}),(0,t.jsxs)("div",{className:"order-1 lg:order-2 space-y-6",children:[(0,t.jsxs)("div",{className:"inline-flex items-center rounded-full bg-amber-900/30 px-4 py-2 text-sm font-medium text-amber-300",children:[(0,t.jsx)("span",{className:"mr-2",children:"2"}),"Создание логотипа"]}),(0,t.jsx)("h3",{className:"text-2xl font-bold text-white sm:text-3xl",children:"От скетчей к финальному логотипу"}),(0,t.jsxs)("div",{className:"space-y-4 text-gray-300",children:[(0,t.jsx)("p",{className:"leading-relaxed",children:"Пройдёшь весь путь создания логотипа: от первых набросков и концепций до финальной отрисовки в векторе."}),(0,t.jsx)("p",{className:"leading-relaxed",children:"Научишься генерировать идеи, отбирать лучшие варианты и доводить их до профессионального уровня."})]}),(0,t.jsxs)("div",{className:"flex items-center space-x-2 rounded-lg bg-gray-800/50 p-4",children:[(0,t.jsx)("svg",{className:"h-5 w-5 text-green-400",fill:"currentColor",viewBox:"0 0 20 20",children:(0,t.jsx)("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",clipRule:"evenodd"})}),(0,t.jsx)("span",{className:"font-medium text-gray-300",children:"Логотип в векторе — готов к использованию"})]})]})]})})}),(0,t.jsx)("div",{className:"overflow-hidden rounded-3xl bg-gradient-to-br from-emerald-950/20 to-teal-950/20",children:(0,t.jsx)("div",{className:"p-8 sm:p-12",children:(0,t.jsxs)("div",{className:"grid items-center gap-8 lg:grid-cols-2",children:[(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"inline-flex items-center rounded-full bg-emerald-900/30 px-4 py-2 text-sm font-medium text-emerald-300",children:[(0,t.jsx)("span",{className:"mr-2",children:"3"}),"Шрифты и цвета"]}
1),(0,t.jsx)("h3",{className:"text-2xl font-bold text-white sm:text-3xl",children:"Визуальный язык бренда"}),(0,t.jsxs)("div",{className:"space-y-4 text-gray-300",children:[(0,t.jsx)("p",{className:"leading-relaxed",children:"Подберёшь шрифтовые пары, которые передают характер бренда, и создашь цветовую палитру с основными и акцентными цветами."}),(0,t.jsx)("p",{className:"leading-relaxed",children:"Научишься обосновывать свой выбор и создавать гармоничные сочетания, которые работают в разных контекстах."})]}),(0,t.jsxs)("div",{className:"flex items-center space-x-2 rounded-lg bg-gray-800/50 p-4",children:[(0,t.jsx)("svg",{className:"h-5 w-5 text-green-400",fill:"currentColor",viewBox:"0 0 20 20",children:(0,t.jsx)("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",clipRule:"evenodd"})}),(0,t.jsx)("span",{className:"font-medium text-gray-300",children:"Полная цветовая система бренда"})]})]}),(0,t.jsx)("div",{className:"relative",children:(0,t.jsx)("div",{className:"overflow-hidden rounded-2xl shadow-2xl",children:(0,t.jsx)(a.default,{src:"https://s3.ru1.storage.beget.cloud/bb4e0f3f0f81-brainy-platform/Landings/pages_images/branding/relaxi-in-colors.png",alt:"Шрифты и цвета бренда",className:"h-full w-full object-cover",width:800,height:600})})})]})})}),(0,t.jsx)("div",{className:"overflow-hidden rounded-3xl bg-gradient-to-br from-blue-950/20 to-indigo-950/20",children:(0,t.jsx)("div",{className:"p-8 sm:p-12",children:(0,t.jsxs)("div",{className:"grid items-center gap-8 lg:grid-cols-2",children:[(0,t.jsx)("div",{className:"order-2 lg:order-1 relative",children:(0,t.jsx)("div",{className:"overflow-hidden rounded-2xl shadow-2xl",children:(0,t.jsx)(a.default,{src:"https://s3.ru1.storage.beget.cloud/bb4e0f3f0f81-brainy-platform/Landings/pages_images/branding/mockups.png",alt:"Мокапы на носителях",className:"h-full w-full object-cover",width:800,height:600})})}),(0,t.jsxs)("div",{className:"order-1 lg:order-2 space-y-6",children:[(0,t.jsxs)("div",{className:"inline-flex items-center rounded-full bg-blue-900/30 px-4 py-2 text-sm font-medium text-blue-300",children:[(0,t.jsx)("span",{className:"mr-2",children:"4"}),"Мокапы на носителях"]}),(0,t.jsx)("h3",{className:"text-2xl font-bold text-white sm:text-3xl",children:"Бренд в реальном мире"}),(0,t.jsxs)("div",{className:"space-y-4 text-gray-300",children:[(0,t.jsx)("p",{className:"leading-relaxed",children:"Применишь айдентику на реальных носителях: визитки, вывески, упаковка, мерч и digital-материалы."}),(0,t.jsx)("p",{className:"leading-relaxed",children:"Научишься работать с мокапами, в том числе с помощью нейросетей — это современный и быстрый способ визуализации."})]}),(0,t.jsxs)("div",{className:"flex items-center space-x-2 rounded-lg bg-gray-800/50 p-4",children:[(0,t.jsx)("svg",{className:"h-5 w-5 text-green-400",fill:"currentColor",viewBox:"0 0 20 20",children:(0,t.jsx)("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",clipRule:"evenodd"})}),(0,t.jsx)("span",{className:"font-medium text-gray-300",children:"Работа с AI для создания мокапов"})]})]})]})})}),(0,t.jsx)("div",{className:"overflow-hidden rounded-3xl bg-gradient-to-br from-violet-950/20 to-purple-950/20",children:(0,t.jsx)("div",{className:"p-8 sm:p-12",children:(0,t.jsxs)("div",{className:"space-y-8",children:[(0,t.jsxs)("div",{className:"text-center space-y-6 max-w-2xl mx-auto",children:[(0,t.jsxs)("div",{className:"inline-flex items-center rounded-full bg-violet-900/30 px-4 py-2 text-sm font-medium text-violet-300",children:[(0,t.jsx)("span",{className:"mr-2",children:"5"}),"Финальная презентация"]}
1),(0,t.jsx)("h3",{className:"text-2xl font-bold text-white sm:text-3xl",children:"Готовый кейс для портфолио"}),(0,t.jsx)("p",{className:"text-gray-300 leading-relaxed",children:"Оформишь весь проект в профессиональную презентацию в Figma Slides. Это готовый кейс, который можно показывать заказчикам и добавлять в портфолио."})]}),(0,t.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,t.jsx)("div",{className:"overflow-hidden rounded-xl shadow-lg",children:(0,t.jsx)(a.default,{src:"https://s3.ru1.storage.beget.cloud/bb4e0f3f0f81-brainy-platform/Landings/pages_images/branding/relaxi1.png",alt:"Слайд презентации 1",className:"w-full h-auto",width:400,height:300})}),(0,t.jsx)("div",{className:"overflow-hidden rounded-xl shadow-lg",children:(0,t.jsx)(a.default,{src:"https://s3.ru1.storage.beget.cloud/bb4e0f3f0f81-brainy-platform/Landings/pages_images/branding/relaxi2.png",alt:"Слайд презентации 2",className:"w-full h-auto",width:400,height:300})}),(0,t.jsx)("div",{className:"overflow-hidden rounded-xl shadow-lg",children:(0,t.jsx)(a.default,{src:"https://s3.ru1.storage.beget.cloud/bb4e0f3f0f81-brainy-platform/Landings/pages_images/branding/relaxi3.png",alt:"Слайд презентации 3",className:"w-full h-auto",width:400,height:300})}),(0,t.jsx)("div",{className:"overflow-hidden rounded-xl shadow-lg",children:(0,t.jsx)(a.default,{src:"https://s3.ru1.storage.beget.cloud/bb4e0f3f0f81-brainy-platform/Landings/pages_images/branding/relaxi4.png",alt:"Слайд презентации 4",className:"w-full h-auto",width:400,height:300})})]}),(0,t.jsx)("div",{className:"text-center",children:(0,t.jsxs)("div",{className:"inline-flex items-center space-x-2 rounded-lg bg-gray-800/50 px-6 py-3",children:[(0,t.jsx)("svg",{className:"h-5 w-5 text-green-400",fill:"currentColor",viewBox:"0 0 20 20",children:(0,t.jsx)("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",clipRule:"evenodd"})}),(0,t.jsx)("span",{className:"font-medium text-gray-300",children:"Проект RELAXI — пример того, что ты создашь на курсе"})]})})]})})})]})}function eF(){return(0,t.jsxs)("section",{className:"space-y-6",children:[(0,t.jsx)("h2",{className:"text-2xl font-bold text-white",children:"Проекты на выбор"}),(0,t.jsx)("p",{className:"text-gray-300 leading-relaxed",children:"В начале обучения ты выбираешь один учебный проект — и работаешь над ним весь курс. Проекты разные по стилю и характеру, чтобы ты мог выбрать то, что тебе интересно."}),(0,t.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-4",children:[{emoji:"⚔️",brand:"Агентство по охоте на монстров",client:"для Геральта из Ривии"},{emoji:"🧅",brand:"Загородное эко-спа",client:"для Шрека"},{emoji:"🔍",brand:"Детективное агентство",client:"для Уэнсдей Аддамс"}].map((e,r)=>(0,t.jsxs)("div",{className:"text-center p-6 rounded-2xl bg-gradient-to-br from-purple-900/20 to-pink-900/20 border border-purple-800",children:[(0,t.jsx)("div",{className:"text-4xl mb-3",children:e.emoji}),(0,t.jsx)("p",{className:"font-semibold text-white mb-1",children:e.brand}),(0,t.jsx)("p",{className:"text-sm text-purple-400",children:e.client})]},r))}),(0,t.jsx)("p",{className:"text-sm text-gray-400 text-center",children:"+ ещё 7 проектов на выбор"})]})}function eR(){return(0,t.jsxs)("section",{className:"space-y-4",children:[(0,t.jsx)("h2",{className:"text-2xl font-bold text-white",children:"Что будет в итоге"}),(0,t.jsx)("div",{className:"grid grid-cols-2 gap-3",children:["Готовый бренд-кейс в портфолио","Логотип в векторе + полная айдентика","Мокапы на реальных носителях","Профессиональная презентация"].map((e,r)=>(0,t.jsxs)("div",{className:"flex items-center gap-3 p-4 rounded-xl bg-green-900/20 border border-green-800",children:[(0,t.jsx)("svg",{className:"w-5 h-5 text-green-400 flex-shrink-0",fill:"currentColor",viewBox:"0 0 20 20",children:(0,t.jsx)("path",{fillRule:"evenodd",d:"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",clipRule:"evenodd"})}),(0,t.jsx)("span",{className:"text-gray-200 font-medium",children:e})]},r))})]})}function eB(){return(0,t.jsxs)("section",{className:"space-y-4",children:[(0,t.jsx)("h2",{className:"text-2xl font-bold text-white",children:"Чему ты научишься"}),(0,t.jsx)("div",{className:"grid grid-cols-2 gap-x-6 gap-y-2",children:["Работать с брифом и заказчиком","Анализировать ЦА и конкурентов","Формировать позиционирование и концепцию","Делать логотип в векторе","Подбирать шрифтовые пары и цвета","Создавать иконки и паттерны","Работать с мокапами","Презентовать проект профессионально"].map((e,r)=>(0,t.jsxs)("div",{className:"flex items-start gap-2",children:[(0,t.jsx)("div",{className:"mt-2 h-1.5 w-1.5 rounded-full bg-pink-500 flex-shrink-0"}),(0,t.jsx)("p",{className:"text-gray-300",children:e})]},r))})]})}function e_(){return(0,t.jsxs)("section",{className:"space-y-4",children:[(0,t.jsx)("h2",{className:"text-2xl font-bold text-white",children:"Преподаватель"}),(0,t.jsx)("div",{className:"rounded-xl bg-gray-800/50 p-6 border border-gray-700",children:(0,t.jsxs)("div",{className:"flex items-start gap-4",children:[(0,t.jsx)("div",{className:"w-16 h-16 rounded-full bg-gradient-to-br from-purple-500 to-pink-500 flex items-center justify-center text-2xl flex-shrink-0",children:"👩‍🎨"}),(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"font-bold text-white",children:"Аня"}),(0,t.jsx)("p",{className:"text-sm text-purple-400 mb-2",children:"Бренд-дизайнер, 5+ лет опыта"}),(0,t.jsx)("p",{className:"text-sm text-gray-400",children:"Образование НИУ ВШЭ. Опыт в Яндексе и СПбГУ. Личный фидбек на каждое задание."})]})]})})]})}function ez(){return(0,t.jsxs)("section",{className:"space-y-4",children:[(0,t.jsx)("h2",{className:"text-2xl font-bold text-white",children:"Что включено в курс"}),(0,t.jsx)("div",{className:"grid grid-cols-2 gap-3",children:["Пошаговое обучение от брифа до презентации","Личный фидбек на каждое задание","Выбор проекта из 10 вариантов","Готовый кейс в портфолио","Работа с нейросетями для мокапов","Пожизненный доступ к материалам"].map((e,r)=>(0,t.jsxs)("div",{className:"flex items-start gap-2",children:[(0,t.jsx)("div",{className:"mt-2 h-1.5 w-1.5 rounded-full bg-purple-500 flex-shrink-0"}),(0,t.jsx)("p",{className:"text-gray-300",children:e})]},r))})]})}function eE({open:e,onClose:s,price:l,courseId:i,productId:o,rawPrice:a,trailerUrl:n,logoUrl:d}){let c=(0,r.useMemo)(()=>({coverUrl:d,title:"Практический курс по бренд-дизайну",subtitle:"От идеи до готового кейса в портфолио",short:"Пройди реальный путь бренд-дизайнера: исследование, айдентика, мокапы и презентация — на одном цельном проекте",ctaUrl:i?"/courses/brand-design":void 0,ctaText:"Записаться на курс",trailerUrl:n}),[i,n,d]);return(0,t.jsx)(u,{open:e,onClose:s,data:c,children:(0,t.jsxs)("div",{className:"space-y-8 sm:space-y-10",children:[(0,t.jsx)(eM,{}),(0,t.jsx)(eI,{}),(0,t.jsx)(eT,{}),(0,t.jsx)(eF,{}),(0,t.jsx)(eB,{}),(0,t.jsx)(eR,{}),(0,t.jsx)(e_,{}),(0,t.jsx)(ez,{}),(0,t.jsx)(g.CourseCTASection,{data:c,price:l,courseId:i,productId:o,rawPrice:a,title:"Хочешь перестать учиться «в теории»?",subtitle:"Сделай полноценный бренд-проект и получи готовый кейс в портфолио",stats:{salary:"🎨",rating:"4.9★",support:"∞",salaryLabel:"готовый кейс в портфолио"}})]})})}
1function eA({price:e,rawPrice:s,originalPrice:l,productId:i,courseId:o,logoUrl:n}){let[d,c]=(0,r.useState)(!1),[u,x]=(0,r.useState)(!1),m="brand-design",p=(0,r.useCallback)(()=>{c(!0),ep("course",m),x(!1)},[]),g=(0,r.useCallback)(()=>{x(!0),c(!1),eg("course"),setTimeout(()=>x(!1),100)},[]),{hasCourse:h,isAuthenticated:f,isLoading:b}=(0,k.useUserCourses)(),j=!!f&&!!o&&h(o),v=(0,ew.getCourseMeta)({id:8,title:"Бренд-дизайн для абсолютных новичков",slug:"brand-design",active:!0,logo_url:n});return(0,r.useEffect)(()=>{if(b)return;!d&&eh("course",m)&&c(!0);let e=()=>{!u&&(eh("course",m)?d||c(!0):d&&c(!1))};return window.addEventListener("popstate",e),()=>window.removeEventListener("popstate",e)},[d,u,b]),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("article",{"data-product-id":i??void 0,className:"group relative h-[320px] overflow-hidden rounded-3xl transition-all duration-500 hover:scale-[1.01] hover:shadow-[0_20px_40px_rgba(0,0,0,0.6)] cursor-pointer",onClick:p,role:"button",tabIndex:0,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),p())},children:[(0,t.jsxs)("div",{className:"absolute inset-0",children:[(0,t.jsx)(a.default,{src:n,alt:"Обложка курса по бренд-дизайну",fill:!0,className:"object-cover transition-transform duration-700 group-hover:scale-110"}),(0,t.jsx)("div",{className:"absolute inset-0 bg-gradient-to-t from-black via-black/60 to-transparent"}),(0,t.jsx)("div",{className:"absolute inset-0 bg-pink-600/10 group-hover:bg-pink-600/5 transition-colors duration-500"})]}),(0,t.jsxs)("div",{className:"relative h-full flex flex-col p-8 justify-end",children:[(0,t.jsx)("div",{className:"absolute top-6 left-6",children:(0,t.jsx)("span",{className:"inline-flex items-center px-3 py-1 rounded-full bg-pink-500/20 backdrop-blur-md border border-pink-500/30 text-[10px] font-bold uppercase tracking-wider text-pink-200",children:"Design"})}),(0,t.jsxs)("div",{className:"mb-2",children:[(0,t.jsx)("h3",{className:"text-lg sm:text-xl font-extrabold text-white leading-tight whitespace-nowrap overflow-hidden text-ellipsis",children:"Бренд-дизайн для абсолютных новичков"}),(0,t.jsx)("p",{className:"mt-2 text-sm text-pink-100/80 max-w-[90%] leading-relaxed",children:"От идеи до готового кейса в портфолио. Пройди весь путь бренд-дизайнера."})]}),(0,t.jsxs)("div",{className:"mt-4 flex flex-wrap gap-4 items-center",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-pink-100/60 font-medium",children:[(0,t.jsx)("svg",{className:"w-4 h-4 text-pink-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01"})}),(0,t.jsx)("span",{children:"Цельный проект"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-pink-100/60 font-medium",children:[(0,t.jsx)("svg",{className:"w-4 h-4 text-purple-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"})}),(0,t.jsx)("span",{children:"Личный фидбек"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-pink-100/60 font-medium",children:[(0,t.jsx)("svg",{className:"w-4 h-4 text-orange-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"})}),(0,t.jsx)("span",{children:"Готовый кейс"})]})]}),(0,t.jsxs)("div",{className:"mt-8 flex items-center justify-between border-t border-white/10 pt-4",children:[(0,t.jsxs)("button",{onClick:e=>{e.stopPropagation(),p()},className:"group/btn relative overflow-hidden flex items-center gap-2 text-sm font-semibold text-white transition-all hover:gap-3 py-2",children:[(0,t.jsx)("span",{children:"Смотреть программу"}),(0,t.jsx)("svg",{className:"w-4 h-4 transition-transform group-hover/btn:translate-x-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 8l4 4m0 0l-4 4m4-4H3"})})]}),(0,t.jsx)("div",{className:"flex flex-col items-end",children:(0,t.jsx)(eL,{isOwned:j,price:e,originalPrice
1:l,showGoToLearning:!1,isLoading:b,className:"!text-white !p-0 !bg-transparent"})})]})]}),(0,t.jsx)("div",{className:"absolute -inset-full group-hover:inset-0 bg-gradient-to-r from-pink-600/0 via-white/5 to-pink-600/0 -skew-x-12 transition-all duration-1000 pointer-events-none"})]}),d&&(0,t.jsx)(eE,{open:d,onClose:g,price:e,courseId:o,productId:i,rawPrice:s,trailerUrl:v?.trailerUrl,logoUrl:n})]})}function eD(e,t){let r=new Map(e.map(e=>[e.id,e]));return t.map(e=>r.get(e)).filter(Boolean)}e.s(["Courses",0,function({currency:e,onCurrencyChange:s}){let[a,n]=(0,r.useState)(null),[d,c]=(0,r.useState)(null),[u,x]=(0,r.useState)(null),[m,p]=(0,r.useState)(null);(0,r.useEffect)(()=>{if(null===m&&void 0===e){let e=function(){for(let e of navigator.languages||[navigator.language])if(e&&e.toLowerCase().startsWith("ru"))break;return"RUB"}();p(e),s&&s(e)}},[m,e,s]);let g=e??m??"RUB",h=!a&&!u;function f(e,t){let r=Math.abs(e)%100,s=r%10;return r>10&&r<20?t[2]:s>1&&s<5?t[1]:1===s?t[0]:t[2]}(0,r.useEffect)(()=>{let e=!0;return Promise.allSettled([(0,o.getActiveCourses)(),(0,ey.getProducts)()]).then(t=>{if(!e)return;let[r,s]=t;"fulfilled"===r.status?n(r.value):x(r.reason?.message||"Ошибка загрузки курсов"),"fulfilled"===s.status?c(s.value):c(null)}).catch(()=>{e&&x("Ошибка загрузки курсов")}),()=>{e=!1}},[]);let{courseIdToPrice:b,courseIdToProductId:j}=(0,r.useMemo)(()=>{let e=new Map,t=new Map,r=new Map;if(!d)return{courseIdToPrice:e,courseIdToProductId:t};let s=g.toLowerCase();for(let l of d){let i="number"==typeof l.prices?.[s]?l.prices[s]:void 0,o=(l.course_ids?.length??0)===1;for(let s of l.course_ids||[]){let a=e.get(s);if(null!=i&&(null==a||i<a)&&e.set(s,i),o&&null!=i){let e=r.get(s);(null==e||i<e)&&(t.set(s,l.id),r.set(s,i))}}}return{courseIdToPrice:e,courseIdToProductId:t}},[d,g]),v=(0,r.useMemo)(()=>{if(!d||!a)return null;let e=d.filter(e=>Array.isArray(e.course_ids)&&e.course_ids.length>1).sort((e,t)=>t.course_ids.length-e.course_ids.length)[0];if(!e)return null;let t=g.toLowerCase(),r="number"==typeof e.prices?.[t]?e.prices[t]:void 0,s=d.filter(e=>(e.course_ids?.length??0)===1),l=new Map;for(let e of s){let r=e.course_ids[0],s="number"==typeof e.prices?.[t]?e.prices[t]:void 0;if(null==s)continue;let i=l.get(r);(null==i||s<i)&&l.set(r,s)}let i=(e.course_ids||[]).map(e=>a.find(t=>t.id===e)).filter(Boolean),o=i.reduce((e,t)=>{let r=l.get(t.id);return e+("number"==typeof r?r:0)},0),n="number"==typeof r?Math.max(0,o-r):0,c=o>0&&"number"==typeof r?Math.round(n/o*100):0;return{product:e,includedCourses:i,programPrice:r,sumSingles:o,savings:n,savingsPct:c}},[d,a,g]),w=(0,r.useMemo)(()=>a?eD(a,[6,1,5,7]):[],[a]),y=(0,r.useMemo)(()=>a?eD(a,[2,3]):[],[a]),N=(0,r.useMemo)(()=>{let e,t;if(!d||!a)return null;let r=d.find(e=>9===e.id);if(!r)return null;let s=a.find(e=>4===e.id);if(!s?.logo_url)return null;let i=g.toLowerCase(),o="number"==typeof r.prices?.[i]?r.prices[i]:void 0,n=(0,l.getNewYearPromoPrice)(o,g);return n?.hasPromo?(e=n.promoPrice,t=n.originalPrice):e=(0,l.formatPrice)(o,g)??"Не удалось загрузить цену",{price:e,rawPrice:o,originalPrice:t,productId:r.id,courseId:4,logoUrl:s.logo_url}},[d,g,a]),C=(0,r.useMemo)(()=>{let e,t;if(!d||!a)return null;let r=d.find(e=>10===e.id);if(!r)return null;let s=a.find(e=>8===e.id);if(!s?.logo_url)return null;let i=g.toLowerCase(),o="number"==typeof r.prices?.[i]?r.prices[i]:void 0,n=(0,l.getNewYearPromoPrice)(o,g);return n?.hasPromo?(e=n.promoPrice,t=n.originalPrice):e=(0,l.formatPrice)(o,g)??"Не удалось загрузить цену",{price:e,rawPrice:o,originalPrice:t,productId:r.id,courseId:8,logoUrl:s.logo_url}},[d,g,a]);return(0,t.jsxs)("section",{id:"courses","data-testid":"courses-section",className:"max-w-7xl mx-auto px-4 pt-4 pb-16 sm:pt-8 sm:pb-20",suppressHydrationWarning:!0,children:[(0,t.jsx)("h2",{className:"cosmic-title",children:"Курсы по тестированию"}),u?(0,t.jsx)("div",{className:"mt-2 text-xs text-red-400",children:u}):null,(0,t.jsx)("div",{className:"mt-3 flex justify-between items-center",children:(0,t.jsxs)("div",{className:"text-xs opacity-70 flex items-center gap-2","aria-label":"Рекомендуемый порядок прохождения",children:[(0,t.jsx)("span",{className:"font-medium",children:"Рекомендуемый порядок прохождения:"}),(0,t.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,t.jsx)("span",{className:"inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-foreground text-background text-[10px]",children:"1"}),(0,t.jsx)("span",{className:"opacity-60",children:"→"}),(0,t.jsx)("span",{className:"inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-foreground text-background text-[10px]",children:"2"}),(0,t.jsx)("span",{className:"opacity-60",children:"→"}),(0,t.jsx)("span",{className:"inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-foreground text-background text-[10px]",children:"3"})]})]})}),(0,t.jsx)("h3",{className:"mt-8 text-lg font-semibold opacity-80",children:"Ручное тестирование"}),(0,t.jsx)(ev.ScrollRow,{testId:"courses-list-manual",children:h?Array.from({length:4}).map((e,r)=>(0,t.jsx)("div",{"data-card":!0,className:"snap-start shrink-0 w-[300px] sm:w-[350px]",children:(0,t.jsx)(eN.CourseCardSkeleton,{})},r)):w.map(e=>{let r={...(0,ew.getCourseMeta)(e)};void 0!==e.sectionsCount&&(r.modules=`${e.sectionsCount} ${f(e.sectionsCount,["модуль","модуля","модулей"])} `),void 0!==e.lessonsCount&&(r.lessons=`${e.lessonsCount} ${f(e.lessonsCount,["урок","урока","уроков"])} `);let s=b.get(e.id),i=(0,l.formatPrice)(s,g)??"Не удалось загрузить цену",o=(0,l.getNewYearPromoPrice)(s,g);o?.hasPromo?(r.price=o.promoPrice,r.originalPrice=o.originalPrice,r.hasPromo=!0,r.promoBadge="🎄 -15%"):r.price=i;let a=j.get(e.id)??void 0;return(0,t.jsx)("div",{"data-card":!0,className:"snap-start shrink-0 w-[300px] sm:w-[350px]",children:(0,t.jsx)(ej,{course:e,meta:r,productId:a,rawPrice:s})},e.id)})}),y.length>0?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("h3",{className:"mt-10 text-lg font-semibold opacity-80",children:"Автоматизация"}),(0,t.jsx)("div",{className:"mt-2 text-xs opacity-70",children:"Эта секция рекомендуется после изучения ручного тестирования."}),(0,t.jsx)(ev.ScrollRow,{testId:"courses-list-automation",children:h?Array.from({length:2}).map((e,r)=>(0,t.jsx)("div",{"data-card":!0,className:"snap-start shrink-0 w-[300px] sm:w-[350px]",children:(0,t.jsx)(eN.CourseCardSkeleton,{})},r)):y.map(e=>{let r={...(0,ew.getCourseMeta)(e)};void 0!==e.sectionsCount&&(r.modules=`${e.sectionsCount} ${f(e.sectionsCount,["модуль","модуля","модулей"])} `),void 0!==e.lessonsCount&&(r.lessons=`${e.lessonsCount} ${f(e.lessonsCount,["урок","урока","уроков"])} `);let s=b.get(e.id),i=(0,l.formatPrice)(s,g)??"Не удалось загрузить цену",o=(0,l.getNewYearPromoPrice)(s,g);o?.hasPromo?(r.price=o.promoPrice,r.originalPrice=o.originalPrice,r.hasPromo=!0,r.promoBadge="🎄 -15%"):r.price=i;let a=j.get(e.id)??void 0;return(0,t.jsx)("div",{"data-card":!0,className:"snap-start shrink-0 w-[300px] sm:w-[350px]",children:(0,t.jsx)(ej,{course:e,meta:r,productId:a,rawPrice:s})},e.id)})})]}):null,v?(0,t.jsx)(i,{info:v,currency:g}):null,N||C?(0,t.jsxs)("div",{className:"mt-10",children:[(0,t.jsx)("h3",{className:"text-lg font-semibold opacity-80 mb-4",children:"Дизайн и разработка игр"}),(0,t.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[N?(0,t.jsx)("div",{className:"flex flex-col",children:(0,t.jsx)(eU,{...N})}):null,C?(0,t.jsx)("div",{className:"flex flex-col",children:(0,t.jsx)(eA,{...C})}):null]})]}):null]})}],41472)},22274,function(e){e.n(e.i(41472))}]);

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