PageSourceSearch

https://shadowingenglish.com/_next/static/chunks/3f44d00f5778bc27.js

js shadowingenglish.com collected 2026-10-02 00:56:23 UTC 44,902 bytes, 3 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,571930,e=>{"use strict";let t=(0,e.i(475254).default)("bookmark",[["path",{d:"M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z",key:"oz39mx"}]]);e.s(["Bookmark",()=>t],571930)},273525,e=>{"use strict";var t=e.i(843476),r=e.i(271645),a=e.i(174080),l=e.i(770703),s=e.i(571930),i=e.i(726714),n=e.i(643531),o=e.i(531278),c=e.i(830058),d=e.i(277149);let u=(0,l.default)(()=>e.A(407805),{loadableGenerated:{modules:[67833]},ssr:!1});function m({youtubeChannelId:e,size:l="md"}){let{user:m,loading:p}=(0,c.useAuth)(),h=(0,d.useDictionary)(),[f,x]=(0,r.useState)(null),[g,b]=(0,r.useState)(!1),[y,v]=(0,r.useState)(!1),[j,w]=(0,r.useState)(!1),[N,S]=(0,r.useState)(!1),C=(0,r.useRef)(null);(0,r.useEffect)(()=>(S(!0),()=>{C.current&&clearTimeout(C.current)}),[]),(0,r.useEffect)(()=>{if(p||!m)return void x(!1);let t=!1;return(async()=>{try{let r=await fetch("/api/user/channel-likes"),a=await r.json();if(t)return;let l=Array.isArray(a?.channels)&&a.channels.some(t=>t.id===e);x(l)}catch{t||x(!1)}})(),()=>{t=!0}},[p,m,e]);let k=(0,r.useCallback)(async()=>{if(!m)return void v(!0);if(g||null===f)return;let t=!f;x(t),b(!0);try{(t?await fetch("/api/user/channel-likes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({channelId:e})}):await fetch(`/api/user/channel-likes?channelId=${encodeURIComponent(e)}`,{method:"DELETE"})).ok?t&&(C.current&&clearTimeout(C.current),w(!0),C.current=setTimeout(()=>w(!1),2500)):x(!t)}catch{x(!t)}finally{b(!1)}},[g,f,m,e]),_=(0,r.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),k()},[k]),E=!0===f,A=m?E?h?.channels?.saved||"Saved":h?.channels?.save||"Save channel":h?.channels?.signInToSave||"Sign in to save",P=g?o.Loader2:E?i.BookmarkCheck:s.Bookmark,z=h?.channels?.savedToast||"Saved to My Videos";return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("button",{type:"button",onClick:_,disabled:g||p||!!m&&null===f,"aria-pressed":E,"aria-busy":g||!!m&&null===f,className:`inline-flex items-center font-semibold rounded-full border transition-colors ${"sm"===l?"px-2 py-1 text-[11px] gap-1":"px-3 py-1.5 text-[13px] gap-1.5"} ${E?"border-accent-light text-accent-light bg-accent-light/10 hover:bg-accent-light/20":"border-[var(--border-color)] text-[var(--text-secondary)] hover:text-[var(--accent-primary-light)] hover:border-[var(--accent-primary-light)]"} disabled:opacity-60 disabled:cursor-not-allowed`,children:[(0,t.jsx)(P,{size:"sm"===l?12:14,className:g?"animate-spin":void 0}),A]}),y&&(0,t.jsx)(u,{isOpen:y,onClose:()=>v(!1),initialMode:"login"}),N&&j&&(0,a.createPortal)((0,t.jsxs)("div",{role:"status","aria-live":"polite",className:"fixed bottom-6 left-1/2 -translate-x-1/2 z-[9999] inline-flex items-center gap-2 px-4 py-2.5 rounded-full bg-emerald-600 text-white text-sm font-semibold shadow-lg animate-toast-enter",children:[(0,t.jsx)(n.Check,{size:16}),z]}),document.body)]})}e.s(["default",()=>m])},506666,e=>{"use strict";var t=e.i(843476),r=e.i(271645),a=e.i(853123),l=e.i(273525),s=e.i(559956),i=e.i(15660);function n({langPrefix:e,topic:a,level:l,title:s,seeMoreLabel:n,viewChannelLabel:d,emptyLabel:u}){let[m,p]=(0,r.useState)([]),[h,f]=(0,r.useState)(!0),[x,g]=(0,r.useState)(!1),[b,y]=(0,r.useState)(!0),[v,j]=(0,r.useState)(0),{blocked:w,ready:N}=(0,i.useYouTubeAccess)(),S=(0,r.useCallback)(async(e,t)=>{t?f(!0):g(!0);try{let r=new URLSearchParams({limit:String(6),offset:String(e)});a&&"All"!==a&&r.set("topic",a),l&&"All"!==l&&r.set("level",l);let s=await fetch(`/api/explore/by-channel?${r.toString()}`),i=await s.json(),n=Array.isArray(i?.channels)?i.channels:[];p(e=>{if(t)return n;let r=new Set(e.map(e=>e.id));return[...e,...n.filter(e=>!r.has(e.id))]}),y(!!i?.hasMore),j(e+6)}catch{t&&p([]),y(!1)}finally{t?f(!1):g(!1)}},[a,l]);return((0,r.useEffect)(()=>{N&&!w&&(j(0),S(0,!0))},[S,N,w]),N&&w)?null:(0,t.jsxs)("section",{className:"mt-12 mb-8 [html[data-yt-blocked]_&]:hidden",children:[(0,t.jsx)("h2",{className:"text-xl md:text-2xl font-bold text-txt-primary mb-5",children:s||"Browse by channel"}),h?(0,t.jsx)(c,{}):0===m.length?(0,t.jsx)("p",{className:"text-sm text-txt-muted py-6",children:u||"No channels to show yet."}):(0,t.jsx)("div",{className:"flex flex-col gap-8",children:m.map(r=>(0,t.jsx)(o,{group:r,langPrefix:e},r.id))}),!h&&b&&(0,t.jsx)("div",{className:"mt-8 flex justify-center",children:(0,t.jsx)("button",{type:"button",onClick:()=>{h||x||!b||S(v,!1)},disabled:x,className:"inline-flex items-center gap-2 px-5 py-2.5 rounded-full border border-border bg-glass text-sm font-semibold text-txt-secondary hover:text-txt-primary hover:bg-glass-hover disabled:opacity-60",children:x?"Loading…":n||"See more channels"})})]})}function o({group:e,langPrefix:r}){let i=e.videos.slice(0,4);return(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 mb-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 flex-1 min-w-0",children:[(0,t.jsx)("div",{className:"relative w-11 h-11 rounded-full overflow-hidden bg-slate-800 flex-shrink-0",children:e.thumbnailUrl?(0,t.jsx)("img",{src:e.thumbnailUrl,alt:"",loading:"lazy",className:"w-full h-full object-cover"}):(0,t.jsx)("div",{className:"w-full h-full flex items-center justify-center text-txt-muted font-bold",children:e.name?.[0]?.toUpperCase()||"?"})}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsx)("div",{className:"text-base font-bold text-txt-primary truncate",children:e.name}),e.handle&&(0,t.jsx)("div",{className:"text-xs text-txt-muted truncate",children:e.handle})]})]}),(0,t.jsx)(l.default,{youtubeChannelId:e.id,size:"sm"})]}),(0,t.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:i.map(e=>{let l=e.slug||(0,s.generateSlug)(e.title,e.videoId);return(0,t.jsx)(a.default,{href:`${r}/practice/${l}`,videoId:e.videoId,title:e.title,thumbnail:e.thumbnail,category:e.category,level:e.level,sentenceCount:e.sentenceCount,count:e.count,fluid:!0},e.videoId)})})]})}function c(){return(0,t.jsx)("div",{className:"flex flex-col gap-8",children:Array.from({length:2}).map((e,r)=>(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 mb-3 animate-pulse",children:[(0,t.jsx)("div",{className:"w-11 h-11 rounded-full bg-slate-800/60"}),(0,t.jsxs)("div",{className:"flex-1 max-w-[200px] space-y-2",children:[(0,t.jsx)("div",{className:"h-3 rounded bg-slate-700/60"}),(0,t.jsx)("div",{className:"h-3 w-2/3 rounded bg-slate-700/40"})]})]}),(0,t.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:Array.from({length:4}).map((e,r)=>(0,t.jsx)("div",{className:"aspect-video rounded-lg bg-slate-800/40 animate-pulse"},r))})]},r))})}e.s(["default",()=>n])},90623,e=>{"use strict";var t=e.i(843476),r=e.i(522016),a=e.i(463059);function l({items:e}){return(0,t.jsx)("nav",{className:"max-w-[1440px] mx-auto px-6 pt-4 pb-0 overflow-hidden animate-[fadeInDown_0.4s_ease-out] md:px-6 max-md:px-4 max-md:pt-3","aria-label":"Breadcrumb",children:(0,t.jsx)("ol",{className:"flex items-center flex-wrap list-none m-0 p-0 min-w-0",children:e.map((l,s)=>{let i=s===e.length-1;return(0,t.jsx)("li",{className:`flex items-center min-w-0 ${i?"":"shrink"}`,children:!i&&l.href?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.default,{href:l.href,className:"text-[13px] font-medium text-[var(--text-muted)] no-underline break-words min-w-0 transition-colors duration-150 hover:text-[var(--accent-primary-light)]",children:l.label}),(0,t.jsx)(a.ChevronRight,{size:14,className:"text-[var(--text-muted)] opacity-50 mx-1.5 shrink-0"})]}):(0,t.jsx)("span",{className:"text-[13px] font-semibold text-[var(--text-secondary)] break-words","aria-current":"page",children:l.label})},s)})})})}e.s(["default",()=>l])},919982,e=>{"use strict";var t=e.i(843476),r=e.i(271645),a=e.i(522016),l=e.i(618566),s=e.i(25652),i=e.i(90623),n=e.i(6
157688),o=e.i(37727),c=e.i(555436);function d({value:e,onChange:a,placeholder:l="Channel"}){let[s,i]=(0,r.useState)(!1),[d,u]=(0,r.useState)(""),[m,p]=(0,r.useState)([]),[h,f]=(0,r.useState)(null),[x,g]=(0,r.useState)(!1),b=(0,r.useRef)(null),y=(0,r.useRef)(null),v=(0,r.useRef)(0);(0,r.useEffect)(()=>{let e=e=>{b.current&&!b.current.contains(e.target)&&i(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]),(0,r.useEffect)(()=>{if(!e)return void f(null);if(h?.id===e)return;let t=!1;return fetch(`/api/channels?ids=${encodeURIComponent(e)}`).then(e=>e.ok?e.json():[]).then(e=>{!t&&Array.isArray(e)&&e[0]&&f(e[0])}).catch(()=>{}),()=>{t=!0}},[e,h?.id]);let j=(0,r.useCallback)(async e=>{let t=++v.current;g(!0);try{let r=e?`/api/channels?q=${encodeURIComponent(e)}&limit=20`:"/api/channels?limit=30",a=await fetch(r),l=a.ok?await a.json():[];if(t!==v.current)return;p(Array.isArray(l)?l:[])}catch{t===v.current&&p([])}finally{t===v.current&&g(!1)}},[]);return(0,r.useEffect)(()=>{if(!s)return;let e=setTimeout(()=>j(d),200*!!d);return()=>clearTimeout(e)},[s,d,j]),(0,t.jsxs)("div",{ref:b,className:"relative inline-block min-w-[200px] max-w-[280px]",children:[(0,t.jsx)("button",{type:"button",onClick:()=>{i(e=>!e),setTimeout(()=>y.current?.focus(),0)},className:"filter-select w-full text-left flex items-center gap-2 cursor-pointer",style:{paddingRight:h?32:void 0},children:h?(0,t.jsxs)(t.Fragment,{children:[h.thumbnailUrl?(0,t.jsx)(n.default,{src:h.thumbnailUrl,alt:"",width:20,height:20,className:"rounded-full flex-shrink-0",unoptimized:!0}):(0,t.jsx)("span",{className:"w-5 h-5 rounded-full bg-glass-hover flex-shrink-0"}),(0,t.jsx)("span",{className:"truncate",children:h.name})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(c.Search,{size:14,className:"opacity-60 flex-shrink-0"}),(0,t.jsx)("span",{className:"truncate opacity-70",children:l})]})}),h&&(0,t.jsx)("button",{type:"button",onClick:()=>{f(null),a(null),u("")},"aria-label":"Clear channel filter",className:"absolute top-1/2 right-2 -translate-y-1/2 p-1 rounded-full hover:bg-glass-hover cursor-pointer",children:(0,t.jsx)(o.X,{size:14})}),s&&(0,t.jsxs)("div",{className:"absolute z-30 mt-1 left-0 right-0 min-w-[280px] bg-card border border-border rounded-lg shadow-xl overflow-hidden",children:[(0,t.jsx)("div",{className:"p-2 border-b border-border",children:(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(c.Search,{size:14,className:"absolute left-2 top-1/2 -translate-y-1/2 opacity-60"}),(0,t.jsx)("input",{ref:y,type:"text",value:d,onChange:e=>u(e.target.value),placeholder:"Search channels...",className:"w-full pl-8 pr-2 py-1.5 text-sm bg-bg-primary border border-border rounded outline-none focus:border-accent-primary"})]})}),(0,t.jsx)("div",{className:"max-h-72 overflow-y-auto",children:x&&0===m.length?(0,t.jsx)("div",{className:"px-3 py-4 text-center text-xs text-txt-secondary",children:"Loading..."}):0===m.length?(0,t.jsx)("div",{className:"px-3 py-4 text-center text-xs text-txt-secondary",children:d?"No channels found":"No channels available"}):m.map(e=>{let r=h?.id===e.id;return(0,t.jsxs)("button",{type:"button",onClick:()=>{f(e),a(e.id),u(""),i(!1)},className:`w-full flex items-center gap-2 px-3 py-2 text-left text-sm cursor-pointer hover:bg-glass-hover ${r?"bg-glass-hover":""}`,children:[e.thumbnailUrl?(0,t.jsx)(n.default,{src:e.thumbnailUrl,alt:"",width:24,height:24,className:"rounded-full flex-shrink-0",unoptimized:!0}):(0,t.jsx)("span",{className:"w-6 h-6 rounded-full bg-glass-hover flex-shrink-0"}),(0,t.jsxs)("span",{className:"flex-1 min-w-0",children:[(0,t.jsx)("span",{className:"block truncate text-txt-primary",children:e.name}),e.handle&&(0,t.jsx)("span",{className:"block truncate text-[11px] text-txt-secondary",children:e.handle})]}),(0,t.jsx)("span",{className:"text-[11px] text-txt-secondary flex-shrink-0",children:e.videoCount})]},e.id)})})]})]})}var u=e.i(853123),m=e.i(559956),p=e.i(277149),h=e.i(830058),f=e.i(905496),x=e.i(15660),g=e.i(19836);function b({initialVideos:e=[],initialHasMore:n=!1,initialTotal:o=0,initialTopic:c="All",initialLevel:b="All",initialTopicSlug:y="all",initialChannelYoutubeId:v,seoH1:j,seoIntro:w,seoBodyTitle:N,seoBody:S,relatedTitle:C,relatedLinks:k,afterVideos:_}){let E=(0,p.useDictionary)(),A=(0,l.useParams)(),P=(0,l.useRouter)(),{user:z,getVideoProgress:T}=(0,h.useAuth)(),R=A.lang,$=R&&"en"!==R?`/${R}`:"",[O,I]=(0,r.useState)(e),[L,M]=(0,r.useState)(c),[D,U]=(0,r.useState)(b),[B,q]=(0,r.useState)(y||"all"),[F,G]=(0,r.useState)(v||null),[V,H]=(0,r.useState)([]),[W,Y]=(0,r.useState)(!1),[X,J]=(0,r.useState)(!1),[K,Q]=(0,r.useState)(n),[Z,ee]=(0,r.useState)(o),[et,er]=(0,r.useState)(!1),{blocked:ea,ready:el}=(0,x.useYouTubeAccess)(),es=el&&ea,ei=(0,r.useRef)(es);ei.current=es,(0,r.useEffect)(()=>{fetch("/api/categories").then(e=>e.json()).then(e=>{Array.isArray(e)&&H(e)}).catch(e=>console.error("Fetch categories error:",e))},[]),(0,r.useEffect)(()=>{(M(c),U(b),q(y||"all"),G(v||null),ei.current)?en(0,!1,c,b,y||"all",null):(I(e),Q(n),ee(o))},[c,b,y,v,e,n,o]);let en=(0,r.useCallback)(async(e=0,t=!1,r="All",a="All",l="all",s=null)=>{try{0===e?Y(!0):J(!0);let i=new URL("/api/popular",window.location.origin);i.searchParams.set("limit","24"),i.searchParams.set("offset",e.toString()),i.searchParams.set("topic",r),i.searchParams.set("level",a),l&&"all"!==l&&i.searchParams.set("categorySlug",l),ei.current?i.searchParams.set("source","self"):s&&i.searchParams.set("channel",s);let n=await fetch(i.toString());if(n.ok){let e=await n.json(),r=e.flat||[];I(e=>t?[...e,...r]:r),Q(e.hasMore??!1),ee(e.total??0)}}catch(e){console.error(e)}finally{Y(!1),J(!1)}},[]),eo=(0,r.useRef)(!1);(0,r.useEffect)(()=>{eo.current!==es&&(eo.current=es,en(0,!1,L,D,B,es?null:F))},[es,en]);let ec=(e,t,r,a=F)=>{M(e),U(t),q(r),G(a);let l=`${$}/practice`,s=r&&"all"!==r&&"All"!==r,i=t&&"All"!==t;s&&i?l+=`/topic/${r}/${t.toLowerCase()}`:s?l+=`/topic/${r}`:i&&(l+=`/level/${t.toLowerCase()}`),a&&(l+=`?channel=${encodeURIComponent(a)}`),P.push(l,{scroll:!1})},ed=(0,r.useCallback)(e=>{G(e),ec(L,D,B,e),en(0,!1,L,D,B,e)},[L,D,B,en]);(0,r.useEffect)(()=>{let e=()=>{en(0,!1,L,D,B,F)};return window.addEventListener(f.LEARNER_TAGS_CHANGED_EVENT,e),()=>window.removeEventListener(f.LEARNER_TAGS_CHANGED_EVENT,e)},[en,L,D,B,F]);let eu=(0,r.useCallback)(()=>{!X&&K&&en(O.length,!0,L,D,B,F)},[X,K,O.length,en,L,D,B,F]),em=[{label:E.home?.title||"Home",href:`${$}/`},{label:E.player?.practice||"Practice",href:"All"!==L||"All"!==D?`${$}/practice`:void 0}];return"All"!==L&&em.push({label:L,href:"All"!==D?`${$}/practice/topic/${B}`:void 0}),"All"!==D&&em.push({label:D,href:void 0}),(0,t.jsxs)("div",{className:"app-container",style:{paddingBottom:"80px"},children:[(0,t.jsx)(i.default,{items:em}),(0,t.jsxs)("header",{style:{marginBottom:"32px",animation:"fadeInDown 0.6s ease-out"},children:[(0,t.jsxs)("h1",{style:{fontSize:"32px",fontWeight:800,background:"var(--accent-gradient)",WebkitBackgroun
1dClip:"text",WebkitTextFillColor:"transparent",backgroundClip:"text",marginBottom:"8px"},children:[(0,t.jsx)(s.TrendingUp,{size:28,style:{display:"inline",verticalAlign:"middle",marginRight:"10px"}}),j||E.player?.practice||"Practice"]}),(0,t.jsx)("p",{style:{color:"var(--text-secondary)",fontSize:"15px",maxWidth:"700px",marginTop:"12px",lineHeight:"1.6"},children:w||E.player?.practiceShortDesc||"Choose a video and start practicing according to your interests and difficulty level."})]}),es&&(0,t.jsx)(g.default,{}),(0,t.jsxs)("div",{className:"filter-bar",children:[(0,t.jsx)("div",{className:"filter-group",children:(0,t.jsxs)("select",{className:"filter-select",value:B,onChange:e=>{let t=e.target.value;ec("all"===t?"All":V.find(e=>e.slug===t)?.name||"All",D,t)},children:[(0,t.jsxs)("option",{value:"all",children:[E.player?.all||"All"," Topics"]}),V.map(e=>(0,t.jsx)("option",{value:e.slug,children:e.name},e.slug))]})}),!es&&(0,t.jsx)("div",{className:"filter-group",children:(0,t.jsx)(d,{value:F,onChange:ed,placeholder:E.player?.channel||"Channel"})}),(0,t.jsxs)("div",{className:"filter-levels",children:[(0,t.jsx)("button",{className:`level-pill ${"All"===D?"active":""}`,onClick:()=>ec(L,"All",B),children:E.player?.all||"All"}),["A1","A2","B1","B2","C1","C2"].map(e=>(0,t.jsxs)("button",{className:`level-pill level-${e.toLowerCase()} ${D===e?"active":""}`,onClick:()=>ec(L,e,B),children:[(0,t.jsx)("span",{className:"level-dot"}),E.player?.[`level_${e}`]||e]},e))]})]}),!es&&(0,t.jsxs)("div",{className:"hidden [html[data-yt-blocked]_&]:block",style:{textAlign:"center",padding:"60px 0",color:"var(--text-muted)"},children:[(0,t.jsx)("div",{className:"spinner",style:{width:32,height:32,margin:"0 auto 12px",border:"3px solid var(--border-color)",borderTopColor:"var(--accent-primary)",borderRadius:"50%",animation:"spin 0.6s linear infinite"}}),E.player?.loadingList||"Loading video list..."]}),(0,t.jsxs)("div",{className:es?void 0:"[html[data-yt-blocked]_&]:hidden",children:[W&&(0,t.jsxs)("div",{style:{textAlign:"center",padding:"60px 0",color:"var(--text-muted)"},children:[(0,t.jsx)("div",{className:"spinner",style:{width:32,height:32,margin:"0 auto 12px",border:"3px solid var(--border-color)",borderTopColor:"var(--accent-primary)",borderRadius:"50%",animation:"spin 0.6s linear infinite"}}),E.player?.loadingList||"Loading video list..."]}),!W&&(0,t.jsxs)("div",{className:"topics-grid",children:[O.map((e,r)=>{let a=e.slug||(e.title?(0,m.generateSlug)(e.title,e.videoId):e.videoId),l=z?T(e.videoId):null,s=e.level?E.player?.[`level_${e.level}`]||e.level:void 0;return(0,t.jsx)(u.default,{href:`${$}/practice/${a}`,videoId:e.videoId,title:e.title||e.videoId,thumbnail:e.thumbnail,category:e.category,level:e.level,sentenceCount:e.sentenceCount,count:e.count,likes:e.likes,progress:l?{percent:l.percent,completed:l.completed}:null,fluid:!0,labels:{sentences:E.player?.sentences||"sentences",levelText:s}},`${e.videoId}-${r}`)}),0===O.length&&!X&&(0,t.jsx)("div",{style:{gridColumn:"1/-1",textAlign:"center",padding:"40px",color:"var(--text-muted)"},children:E.errors?.noVideosInTopic||"No videos found in this topic."})]}),X&&(0,t.jsxs)("div",{style:{textAlign:"center",padding:"24px 0",color:"var(--text-muted)"},children:[(0,t.jsx)("div",{className:"spinner",style:{width:24,height:24,margin:"0 auto 8px",border:"3px solid var(--border-color)",borderTopColor:"var(--accent-primary)",borderRadius:"50%",animation:"spin 0.6s linear infinite"}}),E.player?.loadingMore||"Loading more..."]}),!W&&K&&!X&&(0,t.jsx)("div",{className:"flex justify-center my-6",children:(0,t.jsx)("button",{type:"button",onClick:eu,className:"inline-flex items-center gap-2 px-5 py-2.5 rounded-full border border-border bg-glass text-sm font-semibold text-txt-secondary hover:text-txt-primary hover:bg-glass-hover",children:E.player?.loadMore||"Load more"})}),!W&&!K&&O.length>0&&(0,t.jsx)("div",{style:{textAlign:"center",padding:"24px 0",color:"var(--text-muted)",fontSize:"13px"},children:(E.player?.allDisplayed||"All {count} videos displayed").replace("{count}",O.length.toString())})]}),_,(0,t.jsxs)("div",{className:"mt-12 p-6 rounded-2xl bg-glass border border-border",style:{animation:"fadeIn 0.6s ease-out"},children:[(0,t.jsx)("h2",{className:"text-xl font-bold text-txt-primary mb-3",children:N||E.player?.practiceLongDescTitle||"What is the Shadowing Method?"}),(0,t.jsx)("p",{className:`text-[15px] leading-relaxed text-txt-secondary transition-all duration-300 ${!et?"line-clamp-3":""}`,children:S||E.player?.practiceLongDesc||"The Shadowing method is a highly effective technique to improve your English pronunciation, intonation, and fluency by listening and immediately repeating what you hear. This page offers a curated collection of videos across various topics and difficulty levels. Select a topic that matches your interests and level, and start practicing today to communicate more confidently!"}),(0,t.jsx)("button",{onClick:()=>er(!et),className:"mt-3 text-sm font-semibold text-accent-primary hover:underline cursor-pointer block mx-auto",children:et?E.guide?.collapse||"Show less":E.guide?.expand||"Read more"})]}),k&&k.length>0&&(0,t.jsxs)("nav",{className:"mt-8 p-6 rounded-2xl bg-glass border border-border","aria-label":C,children:[(0,t.jsx)("h2",{className:"text-lg font-bold text-txt-primary mb-4",children:C||E.player?.relatedTitle||"Related practice"}),(0,t.jsx)("div",{className:"flex flex-wrap gap-2",children:k.map(e=>(0,t.jsx)(a.default,{href:e.href,className:"px-3 py-1.5 rounded-full bg-bg-secondary border border-border text-sm text-txt-primary hover:bg-bg-primary hover:text-accent-primary transition-colors",children:e.label},e.href))})]})]})}e.s(["default",()=>b],919982)},488143,(e,t,r)=>{"use strict";function a({widthInt:e,heightInt:t,blurWidth:r,blurHeight:a,blurDataURL:l,objectFit:s}){let i=r?40*r:e,n=a?40*a:t,o=i&&n?`viewBox='0 0 ${i} ${n}'`:"";return`%3Csvg xmlns='http://www.w3.org/2000/svg' ${o}%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3Cfe
1ColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='${o?"none":"contain"===s?"xMidYMid":"cover"===s?"xMidYMid slice":"none"}' style='filter: url(%23b);' href='${l}'/%3E%3C/svg%3E`}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"getImageBlurSvg",{enumerable:!0,get:function(){return a}})},987690,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={VALID_LOADERS:function(){return s},imageConfigDefault:function(){return i}};for(var l in a)Object.defineProperty(r,l,{enumerable:!0,get:a[l]});let s=["default","imgix","cloudinary","akamai","custom"],i={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],path:"/_next/image",loader:"default",loaderFile:"",domains:[],disableStaticImages:!1,minimumCacheTTL:14400,formats:["image/webp"],maximumRedirects:3,maximumResponseBody:5e7,dangerouslyAllowLocalIP:!1,dangerouslyAllowSVG:!1,contentSecurityPolicy:"script-src 'none'; frame-src 'none'; sandbox;",contentDispositionType:"attachment",localPatterns:void 0,remotePatterns:[],qualities:[75],unoptimized:!1}},908927,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"getImgProps",{enumerable:!0,get:function(){return c}}),e.r(233525);let a=e.r(543369),l=e.r(488143),s=e.r(987690),i=["-moz-initial","fill","none","scale-down",void 0];function n(e){return void 0!==e.default}function o(e){return void 0===e?e:"number"==typeof e?Number.isFinite(e)?e:NaN:"string"==typeof e&&/^[0-9]+$/.test(e)?parseInt(e,10):NaN}function c({src:e,sizes:t,unoptimized:r=!1,priority:c=!1,preload:d=!1,loading:u,className:m,quality:p,width:h,height:f,fill:x=!1,style:g,overrideSrc:b,onLoad:y,onLoadingComplete:v,placeholder:j="empty",blurDataURL:w,fetchPriority:N,decoding:S="async",layout:C,objectFit:k,objectPosition:_,lazyBoundary:E,lazyRoot:A,...P},z){var T;let R,$,O,{imgConf:I,showAltText:L,blurComplete:M,defaultLoader:D}=z,U=I||s.imageConfigDefault;if("allSizes"in U)R=U;else{let e=[...U.deviceSizes,...U.imageSizes].sort((e,t)=>e-t),t=U.deviceSizes.sort((e,t)=>e-t),r=U.qualities?.sort((e,t)=>e-t);R={...U,allSizes:e,deviceSizes:t,qualities:r}}if(void 0===D)throw Object.defineProperty(Error("images.loaderFile detected but the file is missing default export.\nRead more: https://nextjs.org/docs/messages/invalid-images-config"),"__NEXT_ERROR_CODE",{value:"E163",enumerable:!1,configurable:!0});let B=P.loader||D;delete P.loader,delete P.srcSet;let q="__next_img_default"in B;if(q){if("custom"===R.loader)throw Object.defineProperty(Error(`Image with src "${e}" is missing "loader" prop.
2Read more: https://nextjs.org/docs/messages/next-image-missing-loader`),"__NEXT_ERROR_CODE",{value:"E252",enumerable:!1,configurable:!0})}else{let e=B;B=t=>{let{config:r,...a}=t;return e(a)}}if(C){"fill"===C&&(x=!0);let e={intrinsic:{maxWidth:"100%",height:"auto"},responsive:{width:"100%",height:"auto"}}[C];e&&(g={...g,...e});let r={responsive:"100vw",fill:"100vw"}[C];r&&!t&&(t=r)}let F="",G=o(h),V=o(f);if((T=e)&&"object"==typeof T&&(n(T)||void 0!==T.src)){let t=n(e)?e.default:e;if(!t.src)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ${JSON.stringify(t)}`),"__NEXT_ERROR_CODE",{value:"E460",enumerable:!1,configurable:!0});if(!t.height||!t.width)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ${JSON.stringify(t)}`),"__NEXT_ERROR_CODE",{value:"E48",enumerable:!1,configurable:!0});if($=t.blurWidth,O=t.blurHeight,w=w||t.blurDataURL,F=t.src,!x)if(G||V){if(G&&!V){let e=G/t.width;V=Math.round(t.height*e)}else if(!G&&V){let e=V/t.height;G=Math.round(t.width*e)}}else G=t.width,V=t.height}let H=!c&&!d&&("lazy"===u||void 0===u);(!(e="string"==typeof e?e:F)||e.startsWith("data:")||e.startsWith("blob:"))&&(r=!0,H=!1),R.unoptimized&&(r=!0),q&&!R.dangerouslyAllowSVG&&e.split("?",1)[0].endsWith(".svg")&&(r=!0);let W=o(p),Y=Object.assign(x?{position:"absolute",height:"100%",width:"100%",left:0,top:0,right:0,bottom:0,objectFit:k,objectPosition:_}:{},L?{}:{color:"transparent"},g),X=M||"empty"===j?null:"blur"===j?`url("data:image/svg+xml;charset=utf-8,${(0,l.getImageBlurSvg)({widthInt:G,heightInt:V,blurWidth:$,blurHeight:O,blurDataURL:w||"",objectFit:Y.objectFit})}")`:`url("${j}")`,J=i.includes(Y.objectFit)?"fill"===Y.objectFit?"100% 100%":"cover":Y.objectFit,K=X?{backgroundSize:J,backgroundPosition:Y.objectPosition||"50% 50%",backgroundRepeat:"no-repeat",backgroundImage:X}:{},Q=function({config:e,src:t,unoptimized:r,width:l,quality:s,sizes:i,loader:n}){if(r){let e=(0,a.getDeploymentId)();if(t.startsWith("/")&&!t.startsWith("//")&&e){let r=t.includes("?")?"&":"?";t=`${t}${r}dpl=${e}`}return{src:t,srcSet:void 0,sizes:void 0}}let{widths:o,kind:c}=function({deviceSizes:e,allSizes:t},r,a){if(a){let r=/(^|\s)(1?\d?\d)vw/g,l=[];for(let e;e=r.exec(a);)l.push(parseInt(e[2]));if(l.length){let r=.01*Math.min(...l);return{widths:t.filter(t=>t>=e[0]*r),kind:"w"}}return{widths:t,kind:"w"}}return"number"!=typeof r?{widths:e,kind:"w"}:{widths:[...new Set([r,2*r].map(e=>t.find(t=>t>=e)||t[t.length-1]))],kind:"x"}}(e,l,i),d=o.length-1;
2return{sizes:i||"w"!==c?i:"100vw",srcSet:o.map((r,a)=>`${n({config:e,src:t,quality:s,width:r})} ${"w"===c?r:a+1}${c}`).join(", "),src:n({config:e,src:t,quality:s,width:o[d]})}}({config:R,src:e,unoptimized:r,width:G,quality:W,sizes:t,loader:B}),Z=H?"lazy":u;return{props:{...P,loading:Z,fetchPriority:N,width:G,height:V,decoding:S,className:m,style:{...Y,...K},sizes:Q.sizes,srcSet:Q.srcSet,src:b||Q.src},meta:{unoptimized:r,preload:d||c,placeholder:j,fill:x}}}},898879,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return n}});let a=e.r(271645),l="u"<typeof window,s=l?()=>{}:a.useLayoutEffect,i=l?()=>{}:a.useEffect;function n(e){let{headManager:t,reduceComponentsToState:r}=e;function n(){if(t&&t.mountedInstances){let e=a.Children.toArray(Array.from(t.mountedInstances).filter(Boolean));t.updateHead(r(e))}}return l&&(t?.mountedInstances?.add(e.children),n()),s(()=>(t?.mountedInstances?.add(e.children),()=>{t?.mountedInstances?.delete(e.children)})),s(()=>(t&&(t._pendingUpdate=n),()=>{t&&(t._pendingUpdate=n)})),i(()=>(t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null),()=>{t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null)})),null}},325633,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={default:function(){return f},defaultHead:function(){return u}};for(var l in a)Object.defineProperty(r,l,{enumerable:!0,get:a[l]});let s=e.r(555682),i=e.r(190809),n=e.r(843476),o=i._(e.r(271645)),c=s._(e.r(898879)),d=e.r(742732);function u(){return[(0,n.jsx)("meta",{charSet:"utf-8"},"charset"),(0,n.jsx)("meta",{name:"viewport",content:"width=device-width"},"viewport")]}function m(e,t){return"string"==typeof t||"number"==typeof t?e:t.type===o.default.Fragment?e.concat(o.default.Children.toArray(t.props.children).reduce((e,t)=>"string"==typeof t||"number"==typeof t?e:e.concat(t),[])):e.concat(t)}e.r(233525);let p=["name","httpEquiv","charSet","itemProp"];function h(e){let t,r,a,l;return e.reduce(m,[]).reverse().concat(u().reverse()).filter((t=new Set,r=new Set,a=new Set,l={},e=>{let s=!0,i=!1;if(e.key&&"number"!=typeof e.key&&e.key.indexOf("$")>0){i=!0;let r=e.key.slice(e.key.indexOf("$")+1);t.has(r)?s=!1:t.add(r)}switch(e.type){case"title":case"base":r.has(e.type)?s=!1:r.add(e.type);break;case"meta":for(let t=0,r=p.length;t<r;t++){let r=p[t];if(e.props.hasOwnProperty(r))if("charSet"===r)a.has(r)?s=!1:a.add(r);else{let t=e.props[r],a=l[r]||new Set;("name"!==r||!i)&&a.has(t)?s=!1:(a.add(t),l[r]=a)}}}return s})).reverse().map((e,t)=>{let r=e.key||t;return o.default.cloneElement(e,{key:r})})}let f=function({children:e}){let t=(0,o.useContext)(d.HeadManagerContext);return(0,n.jsx)(c.default,{reduceComponentsToState:h,headManager:t,children:e})};("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},918556,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ImageConfigContext",{enumerable:!0,get:function(){return s}});let a=e.r(555682)._(e.r(271645)),l=e.r(987690),s=a.default.createContext(l.imageConfigDefault)},65856,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"RouterContext",{enumerable:!0,get:function(){return a}});let a=e.r(555682)._(e.r(271645)).default.createContext(null)},670965,(e,t,r)=>{"use strict";function a(e,t){let r=e||75;return t?.qualities?.length?t.qualities.reduce((e,t)=>Math.abs(t-r)<Math.abs(e-r)?t:e,0):r}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"findClosestQuality",{enumerable:!0,get:function(){return a}})},1948,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return i}});let a=e.r(670965),l=e.r(543369);function s({config:e,src:t,width:r,quality:s}){if(t.startsWith("/")&&t.includes("?")&&e.localPatterns?.length===1&&"**"===e.localPatterns[0].pathname&&""===e.localPatterns[0].search)throw Object.defineProperty(Error(`Image with src "${t}" is using a query string which is not configured in images.localPatterns.
3Read more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`),"__NEXT_ERROR_CODE",{value:"E871",enumerable:!1,
3configurable:!0});let i=(0,a.findClosestQuality)(s,e),n=(0,l.getDeploymentId)();return`${e.path}?url=${encodeURIComponent(t)}&w=${r}&q=${i}${t.startsWith("/")&&n?`&dpl=${n}`:""}`}s.__next_img_default=!0;let i=s},605500,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"Image",{enumerable:!0,get:function(){return v}});let a=e.r(555682),l=e.r(190809),s=e.r(843476),i=l._(e.r(271645)),n=a._(e.r(174080)),o=a._(e.r(325633)),c=e.r(908927),d=e.r(987690),u=e.r(918556);e.r(233525);let m=e.r(65856),p=a._(e.r(1948)),h=e.r(818581),f={deviceSizes:[640,750,828,1080,1200],imageSizes:[16,32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!0};function x(e,t,r,a,l,s,i){let n=e?.src;e&&e["data-loaded-src"]!==n&&(e["data-loaded-src"]=n,("decode"in e?e.decode():Promise.resolve()).catch(()=>{}).then(()=>{if(e.parentElement&&e.isConnected){if("empty"!==t&&l(!0),r?.current){let t=new Event("load");Object.defineProperty(t,"target",{writable:!1,value:e});let a=!1,l=!1;r.current({...t,nativeEvent:t,currentTarget:e,target:e,isDefaultPrevented:()=>a,isPropagationStopped:()=>l,persist:()=>{},preventDefault:()=>{a=!0,t.preventDefault()},stopPropagation:()=>{l=!0,t.stopPropagation()}})}a?.current&&a.current(e)}}))}function g(e){return i.use?{fetchPriority:e}:{fetchpriority:e}}"u"<typeof window&&(globalThis.__NEXT_IMAGE_IMPORTED=!0);let b=(0,i.forwardRef)(({src:e,srcSet:t,sizes:r,height:a,width:l,decoding:n,className:o,style:c,fetchPriority:d,placeholder:u,loading:m,unoptimized:p,fill:f,onLoadRef:b,onLoadingCompleteRef:y,setBlurComplete:v,setShowAltText:j,sizesInput:w,onLoad:N,onError:S,...C},k)=>{let _=(0,i.useCallback)(e=>{e&&(S&&(e.src=e.src),e.complete&&x(e,u,b,y,v,p,w))},[e,u,b,y,v,S,p,w]),E=(0,h.useMergedRef)(k,_);return(0,s.jsx)("img",{...C,...g(d),loading:m,width:l,height:a,decoding:n,"data-nimg":f?"fill":"1",className:o,style:c,sizes:r,srcSet:t,src:e,ref:E,onLoad:e=>{x(e.currentTarget,u,b,y,v,p,w)},onError:e=>{j(!0),"empty"!==u&&v(!0),S&&S(e)}})});function y({isAppRouter:e,imgAttributes:t}){let r={as:"image",imageSrcSet:t.srcSet,imageSizes:t.sizes,crossOrigin:t.crossOrigin,referrerPolicy:t.referrerPolicy,...g(t.fetchPriority)};return e&&n.default.preload?(n.default.preload(t.src,r),null):(0,s.jsx)(o.default,{children:(0,s.jsx)("link",{rel:"preload",href:t.srcSet?void 0:t.src,...r},"__nimg-"+t.src+t.srcSet+t.sizes)})}let v=(0,i.forwardRef)((e,t)=>{let r=(0,i.useContext)(m.RouterContext),a=(0,i.useContext)(u.ImageConfigContext),l=(0,i.useMemo)(()=>{let e=f||a||d.imageConfigDefault,t=[...e.deviceSizes,...e.imageSizes].sort((e,t)=>e-t),r=e.deviceSizes.sort((e,t)=>e-t),l=e.qualities?.sort((e,t)=>e-t);return{...e,allSizes:t,deviceSizes:r,qualities:l,localPatterns:"u"<typeof window?a?.localPatterns:e.localPatterns}},[a]),{onLoad:n,onLoadingComplete:o}=e,h=(0,i.useRef)(n);(0,i.useEffect)(()=>{h.current=n},[n]);let x=(0,i.useRef)(o);(0,i.useEffect)(()=>{x.current=o},[o]);let[g,v]=(0,i.useState)(!1),[j,w]=(0,i.useState)(!1),{props:N,meta:S}=(0,c.getImgProps)(e,{defaultLoader:p.default,imgConf:l,blurComplete:g,showAltText:j});return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(b,{...N,unoptimized:S.unoptimized,placeholder:S.placeholder,fill:S.fill,onLoadRef:h,onLoadingCompleteRef:x,setBlurComplete:v,setShowAltText:w,sizesInput:e.sizes,ref:t}),S.preload?(0,s.jsx)(y,{isAppRouter:!r,imgAttributes:N}):null]})});("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},794909,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a={default:function(){return d},getImageProps:function(){return c}};for(var l in a)Object.defineProperty(r,l,{enumerable:!0,get:a[l]});let s=e.r(555682),i=e.r(908927),n=e.r(605500),o=s._(e.r(1948));function c(e){let{props:t}=(0,i.getImgProps)(e,{defaultLoader:o.default,imgConf:{deviceSizes:[640,750,828,1080,1200],imageSizes:[16,32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!0}});for(let[e,r]of Object.entries(t))void 0===r&&delete t[e];return{props:t}}let d=n.Image},657688,(e,t,r)=>{t.exports=e.r(794909)},555436,e=>{"use strict";let t=(0,e.i(475254).default)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);e.s(["Search",()=>t],555436)},726714,e=>{"use strict";let t=(0,e.i(475254).default)("bookmark-check",[["path",{d:"M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z",key:"oz39mx"}],["path",{d:"m9 10 2 2 4-4",key:"1gnqz4"}]]);e.s(["BookmarkCheck",()=>t],726714)},19836,e=>{"use strict";var t=e.i(843476),r=e.i(248256),a=e.i(277149),l=e.i(15660);function s(){let e=(0,a.useDictionary)(),s=e?.ytAccess,{setMode:i}=(0,l.useYouTubeAccess)();return(0,t.jsxs)("div",{role:"status",className:"mb-5 flex flex-col sm:flex-row sm:items-center gap-3 rounded-2xl border border-border bg-card px-4 py-3",children:[(0,t.jsx)(r.Globe,{size:20,className:"hidden sm:block shrink-0 text-accent-primary","aria-hidden":!0}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)("p",{className:"text-sm font-semibold text-txt-primary",children:s?.bannerTitle||"Showing site videos only"}),(0,t.jsx)("p",{className:"text-[13px] text-txt-secondary leading-snug",children:s?.bannerBody||"You chose lessons hosted on our own servers — they play without YouTube."})]}),(0,t.jsx)("button",{type:"button",onClick:()=>i("youtube"),className:"shrink-0 self-start sm:self-auto px-3 py-1.5 rounded-full border border-border text-[13px] font-medium text-txt-secondary hover:text-txt-primary hover:bg-glass-hover transition-colors",children:s?.showYouTube||"Show YouTube videos"})]})}e.s(["default",()=>s])},248256,e=>{"use strict";let t=(0,e.i(475254).default)("globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);e.s(["Globe",()=>t],248256)},463059,e=>{"use strict";let t=(0,e.i(475254).default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);e.s(["ChevronRight",()=>t],463059)},868298,535818,379976,e=>{"use strict";var t=e.i(843476),r=e.i(271645);let a=/^z_[A-Za-z0-9]{14}$/;function l(e){return a.test(e)}e.s(["isSelfVideoId",()=>l],535818);let s="/og-default.jpg";function i(e,t,r="mq"){return t||(l(e)?s:`https://img.youtube.com/vi/${e}/${"max"===r?"maxresdefault":"hq"===r?"hqdefault":"mqdefault"}.jpg`)}function n(e,t){return t===e?s:e}function o(e,t,a="mq"){let[l,c]=(0,r.useState)(null),d=n(i(e,t,a),l),u=(0,r.useCallback)(()=>{d!==s&&c(d)},[d]);return{src:d,onError:u}}
3function c({videoId:e,thumbnail:r,quality:a,onError:l,alt:s,...i}){let n=o(e,r,a);return(0,t.jsx)("img",{...i,alt:s,src:n.src,onError:e=>{n.onError(),l?.(e)}})}e.s(["DEFAULT_THUMBNAIL",0,s,"pickThumbnailSrc",()=>n,"resolveThumbnailUrl",()=>i],379976),e.s(["default",()=>c,"useVideoThumbnail",()=>o],868298)},559956,e=>{"use strict";function t(e,t){if(!e)return t;let r=e.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)+/g,"");return r?`${r}-${t}`:t}e.s(["generateSlug",()=>t])},853123,e=>{"use strict";var t=e.i(843476),r=e.i(522016),a=e.i(578488),l=e.i(790597);let s=(0,e.i(475254).default)("text-align-start",[["path",{d:"M21 5H3",key:"1fi0y6"}],["path",{d:"M15 12H3",key:"6jk70r"}],["path",{d:"M17 19H3",key:"z6ezky"}]]);var i=e.i(868298);let n={A1:{bg:"#dcfce7",fg:"#15803d"},A2:{bg:"#dcfce7",fg:"#15803d"},B1:{bg:"#fef3c7",fg:"#b45309"},B2:{bg:"#ffedd5",fg:"#c2410c"},C1:{bg:"#fee2e2",fg:"#dc2626"},C2:{bg:"#ffe4e6",fg:"#e11d48"}};function o({href:e,videoId:o,title:c,thumbnail:d,category:u,level:m,sentenceCount:p,count:h,likes:f,progress:x,tooltip:g,badge:b,fluid:y=!1,onClick:v,labels:j}){let w=j?.levelText||m||"",N=f??0;return(0,t.jsxs)(r.default,{href:e,prefetch:!1,onClick:v,title:g,className:`popular-video-item group${y?" popular-video-item--fluid":""}`,children:[(0,t.jsxs)("div",{className:"video-slide-thumb",children:[(0,t.jsx)(i.default,{videoId:o,thumbnail:d,alt:c||"Video Thumbnail",width:320,height:180,loading:"lazy",decoding:"async"}),(0,t.jsx)("span",{className:"absolute inset-0 flex items-center justify-center pointer-events-none z-[1] opacity-0 group-hover:opacity-100 transition-opacity",children:(0,t.jsx)("span",{className:"inline-flex items-center justify-center w-11 h-11 rounded-full bg-emerald-500 shadow-[0_6px_16px_-4px_rgba(16,185,129,0.6)]",children:(0,t.jsx)("svg",{viewBox:"0 0 24 24",className:"w-5 h-5 fill-white ml-0.5","aria-hidden":!0,children:(0,t.jsx)("path",{d:"M8 5v14l11-7z"})})})}),m&&(0,t.jsx)("span",{style:{background:n[m]?.bg||"#e5e7eb",color:n[m]?.fg||"#374151"},className:"absolute top-2 left-2 px-2 py-0.5 rounded-full text-[10px] font-extrabold z-[2]",children:w}),null!=h&&h>0&&(0,t.jsxs)("div",{className:"video-practice-badge",children:[(0,t.jsx)(a.Flame,{size:11}),(0,t.jsx)("span",{children:h.toLocaleString()})]}),null!=p&&p>0&&(0,t.jsxs)("div",{className:"absolute bottom-2 left-2 inline-flex items-center gap-[3px] px-[7px] py-[3px] rounded-md bg-black/70 backdrop-blur-[6px] text-white text-[10px] font-semibold z-[2]",children:[(0,t.jsx)(s,{size:10,"aria-hidden":"true"}),(0,t.jsxs)("span",{children:[p," ",j?.sentences||"sentences"]})]}),b&&(0,t.jsx)("div",{className:"absolute bottom-2 right-2 z-[2]",children:b}),x&&x.percent>0&&(0,t.jsx)("div",{className:"video-progress-overlay",children:(0,t.jsx)("div",{className:"video-progress-bar",style:{width:`${x.completed?100:x.percent}%`}})})]}),c&&(0,t.jsx)("h3",{className:"video-slide-title",children:c}),(u||N>0)&&(0,t.jsxs)("div",{className:"px-1 pb-1 flex items-center gap-2 text-[11px] font-semibold text-txt-muted",children:[u&&(0,t.jsx)("span",{className:"truncate",children:u}),N>0&&(0,t.jsxs)("span",{className:"inline-flex items-center gap-1 shrink-0 ml-auto",children:[(0,t.jsx)(l.Heart,{size:11,className:"fill-red-500 text-red-500"}),N]})]})]})}e.s(["default",()=>o],853123)},905496,e=>{"use strict";var t=e.i(843476),r=e.i(271645),a=e.i(277149);let l="learner-tags-changed";function s(){let e=(0,a.useDictionary)().learnerTags||{},[s,n]=(0,r.useState)({audience:[],goal:[]}),[o,c]=(0,r.useState)(new Set),[d,u]=(0,r.useState)(!0),[m,p]=(0,r.useState)(!1),[h,f]=(0,r.useState)(!0);(0,r.useEffect)(()=>{let e=!1;return(async()=>{try{let[t,r]=await Promise.all([fetch("/api/learner-tags"),fetch("/api/user/learner-tags")]);if(e)return;if(t.ok){let e=await t.json();n({audience:e.audience||[],goal:e.goal||[]})}if(r.ok){let e=await r.json();c(new Set(e.tags||[]))}}catch(e){console.error("[LearnerTagSelector] load:",e)}finally{e||u(!1)}})(),()=>{e=!0}},[]);let x=(0,r.useCallback)(async e=>{p(!0);try{(await fetch("/api/user/learner-tags",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({tags:Array.from(e)})})).ok&&window.dispatchEvent(new CustomEvent(l))}catch(e){console.error("[LearnerTagSelector] save:",e)}finally{p(!1)}},[]),g=(0,r.useCallback)(e=>{c(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),x(r),r})},[x]),b=(0,r.useCallback)(()=>{c(new Set),x(new Set)},[x]);if(d||0===s.audience.length&&0===s.goal.length)return null;let y=(t,r)=>e[t]||r;return(0,t.jsx)("section",{className:"relative z-[1] max-w-[1440px] mx-auto px-4 sm:px-6 pt-5 md:pt-6 pb-2",children:(0,t.jsxs)("div",{className:"mo-card px-4 py-3 md:px-5 md:py-4",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2 mb-2",children:[(0,t.jsxs)("button",{type:"button",onClick:()=>f(e=>!e),className:"flex items-center gap-2 text-sm md:text-base font-extrabold text-txt-primary curs
3or-pointer",children:[(0,t.jsx)("span",{children:"🎯"}),(0,t.jsx)("span",{children:e.title||"Tailor to your goal"}),o.size>0&&(0,t.jsxs)("span",{className:"text-xs font-medium text-accent-primary",children:["(",o.size,")"]}),(0,t.jsx)("span",{className:"text-txt-secondary text-xs",children:h?"▲":"▼"})]}),o.size>0&&(0,t.jsx)("button",{type:"button",onClick:b,disabled:m,className:"text-xs text-txt-secondary hover:text-txt-primary underline cursor-pointer disabled:opacity-50",children:e.clear||"Clear"})]}),!h&&(0,t.jsx)("p",{className:"text-xs text-txt-secondary leading-relaxed",children:e.subtitle||"Tell us who you are and what you're studying for — we'll pick videos that match."}),h&&(0,t.jsxs)("div",{className:"flex flex-col gap-3",children:[s.audience.length>0&&(0,t.jsx)(i,{label:e.audienceLabel||"I am a…",tags:s.audience,selected:o,onToggle:g,disabled:m,tagLabel:y}),s.goal.length>0&&(0,t.jsx)(i,{label:e.goalLabel||"Studying for…",tags:s.goal,selected:o,onToggle:g,disabled:m,tagLabel:y}),(0,t.jsx)("p",{className:"text-[11px] text-txt-secondary italic",children:e.appliesTo||"Affects Popular & Level sections. Other lists stay the same."})]})]})})}function i({label:e,tags:r,selected:a,onToggle:l,disabled:s,tagLabel:i}){return(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-xs uppercase tracking-wide text-txt-secondary mb-1.5 font-medium",children:e}),(0,t.jsx)("div",{className:"flex flex-wrap gap-1.5",children:r.map(e=>{let r=a.has(e.slug);return(0,t.jsx)("button",{type:"button",onClick:()=>l(e.slug),disabled:s,className:`px-3 py-1.5 rounded-full text-xs font-bold border-2 transition-all cursor-pointer outline-none disabled:opacity-60 ${r?"bg-[var(--accent-primary)] text-white border-[var(--accent-primary)] shadow-[0_2px_0_var(--accent-primary-dark)]":"bg-card border-[var(--mo-line)] text-txt-primary hover:border-[var(--accent-primary)]/45 hover:-translate-y-0.5"}`,children:i(e.slug,e.name)},e.slug)})})]})}e.s(["LEARNER_TAGS_CHANGED_EVENT",0,l,"default",()=>s])}]);

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.