{"version":3,"file":"LessonCard.C6HF-Ryo.mjs","names":["useState","useMemo","_Fragment","__esmMin","pe","init_npm_react_18_3_1","_e","init_jsx_runtime","c","p","init_framer_DymZktPS","addPropertyControls","ControlType","norm","s","resolveCategories","hits","add","category","BY_KEY","part","sortByPriority","firstTag","tags","bySlug","TAG_TO_CAT","CATS","lessonType","DEFAULT_CAT","list","PRIORITY","a","b","imageSource","img","src","durationLabel","m","minutes","verb","type","hasVideo","LessonCard","props","hover","setHover","cats","cat","catAttr","art","thumb","videoThumbnail","hero","image","chosen","alt","altText","title","videoEmbedCode","isPlayable","isGated","access","eyebrow","eyebrowSource","href","link","ink","FONT","style","TITLE_CSS","aspect","radius","playColor","playRing","playIcon","accent","TITLE_FONT","muted","durationMin","l","init_LessonCard"],"sources":["https:/framerusercontent.com/modules/qeQ9f6kyVDzRult8Q7ji/bcdjsnZZAb14sgRwQOHn/LessonCard.js"],"sourcesContent":["/**\n * LessonCard — Movement Wisdom Yoga\n *\n * The card used everywhere a lesson is shown: the /lessons grid, the home-page\n * ticker, and \"keep going\" rows at the bottom of a lesson.\n *\n * Designed to live INSIDE a Framer CMS Collection List. Bind each property to\n * a field on the Lessons collection once, and every card renders itself.\n *\n * It renders a `data-mw-cat` attribute on its root. LessonFilterBar and\n * LessonLoadMore read that attribute to filter and paginate — which is why no\n * per-category CMS list is needed. The attribute may hold SEVERAL slugs,\n * space-separated: a lesson in both Yoga Classes and Yoga Knowledge appears\n * under both tabs.\n *\n * Card art (2026-08-17): the Video thumbnail WINS over the Hero image whenever\n * it has a source. A thumbnail says \"this is a video\" at a glance and is framed\n * for the card crop; a hero is an illustration composed for an article header.\n * Most lessons have only one of the two, so in practice this is a null check.\n * Bind BOTH image props — Video thumbnail -> `Video Thumbnail` (qIH814XAN),\n * Hero image -> `Hero Image` (d3Nzibe6J) — and the card picks per lesson.\n *\n * ALT TEXT (2026-08-20): bind the `Alt text` control to `Hero Alt Text`\n * (kM5ffRA_L). Before that binding existed the card read alt off the Framer\n * ResponsiveImage object — but the lesson's alt lives in a SEPARATE CMS string\n * field, so `image.alt` was always empty and all 45 images on /lessons shipped\n * `alt=\"\"`. Resolution order is now:\n *     1. the `altText` prop  (the correct source — bind it)\n *     2. alt carried on the chosen image object\n *     3. alt carried on the other image object\n *     4. the lesson title\n * Step 4 means the card can never emit an empty alt again, even unbound: a\n * title is a weaker alt than a written description, but it is never nothing,\n * and this image is always a link to the thing the title names.\n *\n * Root element: renders an <a> only when a `link` is provided. When the card is\n * placed inside an already-linked Framer frame (the home-page ticker), leave the\n * Link control empty and the root renders a <div> instead — this avoids nested\n * <a> elements, which fail Framer's SEO/optimization check.\n *\n * Category resolution, in order (2026-08-17):\n *   1. the `category` prop — bind this to the Categories field. Accepts titles\n *      (\"Yoga Classes\") or slugs (\"yoga-classes\"), one or many, comma- or\n *      space-separated. This is the correct source; everything below is a\n *      fallback for when the prop is left unbound.\n *   2. derived from the first tag (map below). \"Yoga Class\" -> yoga-classes.\n *   3. Lesson Type \"Practice\" -> yoga-classes. A follow-along practice is a\n *      class by definition.\n *   4. fallback: Yoga Knowledge.\n *\n * The eyebrow shows ONE category — the most specific match, per PRIORITY.\n * Yoga Knowledge is the catch-all and always loses to a more specific one.\n *\n * Play button (2026-08-19): matches the full-size video player's play button\n * (see VideoEmbed.tsx).\n *\n * WARM DESIGN SYSTEM (2026-10-19): radius 0 everywhere (image, gated badge,\n * separator dot), Coral Deep eyebrow, Chocolate ink, Umber secondary text,\n * Clay image placeholder.\n *\n * PLAY BUTTON (2026-10-20): the ONE round element in an otherwise radius-0\n * system — a circle reads as \"play\" at a glance and is the only place the\n * design system allows a curve. Colors were chosen by measuring candidate\n * combinations against 25 real lesson / class / promo thumbnails (the 6px band\n * around the button position at a 320x200 card). No flat fill works on every\n * thumbnail: Coral vanishes on the coral-heavy Astral Veil art (21 of 25\n * thumbnails below 2:1), Shell alone fails on pale art, Chocolate alone fails\n * on dark art. Shell fill + Chocolate icon + a thin Chocolate ring is the\n * only combination that clears 3:1 against all 25 (worst case 3.98:1, mean\n * 6.2:1) — the fill carries it on dark art, the ring carries it on pale art.\n * Icon on fill is 14.4:1. Keep the ring; without it pale thumbnails swallow\n * the button.\n *\n * TITLE = H4 (2026-10-20): the lesson title uses the project's /H4 text style\n * — Forevs Medium, 1.15em line height, 0 tracking, balanced wrapping — at\n * 30px desktop / 24px tablet / 18px phone. A code component cannot apply a\n * Framer text style, so the values are mirrored here; if /H4 changes, change\n * TITLE_CSS below to match. The size steps follow the page breakpoints\n * (Desktop 1200+, Tablet 810-1199, Phone below 810) with media queries, since\n * the card has no way to know which breakpoint instance it sits in. Weight is\n * 400 on purpose: \"Forevs Medium\" is its own family, and any other weight\n * makes the browser fake a bold on top of it. If the title ever renders in\n * Georgia, the family name below does not match the one Framer registered for\n * the uploaded font — fix TITLE_FONT, nothing else.\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n */import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useState,useMemo}from\"react\";import{addPropertyControls,ControlType}from\"framer\";const FONT='\"Satoshi\", ui-sans-serif, system-ui, -apple-system, sans-serif';/** Mirrors the /H4 text style: Forevs Medium. */const TITLE_FONT='\"Forevs Medium\", \"Forevs-Medium\", \"Forevs\", Georgia, \"Times New Roman\", serif';/** H4 sizes per breakpoint. Desktop is the base; Tablet and Phone step down. */const TITLE_CSS=`\n.mw-lesson-title { font-size: 30px; }\n@media (max-width: 1199.98px) { .mw-lesson-title { font-size: 24px; } }\n@media (max-width: 809.98px) { .mw-lesson-title { font-size: 18px; } }\n`;const CATS=[{slug:\"yoga-classes\",label:\"Yoga classes\"},{slug:\"yoga-teacher-training\",label:\"Yoga teacher training\"},{slug:\"for-teachers\",label:\"For teachers\"},{slug:\"yoga-knowledge\",label:\"Yoga knowledge\"}];/** Most specific first. Drives which single category the eyebrow shows. */const PRIORITY=CATS.map(c=>c.slug);const DEFAULT_CAT=CATS[3]// Yoga knowledge\n;/** \"Yoga Classes\", \"yoga-classes\", \"Yoga_Classes\" all normalise to the same key. */function norm(s){return String(s||\"\").toLowerCase().replace(/[^a-z0-9]+/g,\" \").trim();}const BY_KEY={};CATS.forEach(c=>{BY_KEY[norm(c.slug)]=c;BY_KEY[norm(c.label)]=c;});/**\n * Fallback map, used only when the Category prop is unbound or unrecognised.\n * Keyed on the FIRST tag. Once Categories is bound this is never consulted.\n */const TAG_TO_CAT={\"yoga class\":\"yoga-classes\",\"yoga classes\":\"yoga-classes\",\"yoga teacher training\":\"yoga-teacher-training\",\"teaching skills\":\"for-teachers\",\"yoga business\":\"for-teachers\",\"yoga philosophy\":\"yoga-knowledge\",\"yoga anatomy\":\"yoga-knowledge\",\"yoga poses\":\"yoga-knowledge\",\"yoga styles\":\"yoga-knowledge\",meditation:\"yoga-knowledge\",breathwork:\"yoga-knowledge\",\"myths spirituality\":\"yoga-knowledge\",\"myths and spirituality\":\"yoga-knowledge\"};/** Returns every category this lesson belongs to, ordered by PRIORITY. */function resolveCategories(category,tags,lessonType){const hits=[];const add=c=>{if(c&&!hits.includes(c))hits.push(c);};// 1. the Category prop — may carry several values, joined by Framer.\nString(category||\"\").split(/[,;|/]+/).forEach(part=>add(BY_KEY[norm(part)]));if(hits.length)return sortByPriority(hits);// 2. first tag\nconst firstTag=norm(String(tags||\"\").split(\",\")[0]);const bySlug=TAG_TO_CAT[firstTag];if(bySlug)add(CATS.find(c=>c.slug===bySlug));if(hits.length)return hits;// 3. a follow-along practice is a class\nif(lessonType===\"Practice\")add(BY_KEY[\"yoga classes\"]);if(hits.length)return hits;// 4. catch-all\nreturn[DEFAULT_CAT];}function sortByPriority(list){return[...list].sort((a,b)=>PRIORITY.indexOf(a.slug)-PRIORITY.indexOf(b.slug));}/**\n * Normalises either shape a Framer image prop can arrive in — a plain URL\n * string, or a ResponsiveImage object — and returns null when there is no\n * usable source, so callers can simply do `thumb || hero`.\n */function imageSource(img){if(!img)return null;if(typeof img===\"string\"){const src=img.trim();return src?{src}:null;}const src=typeof img.src===\"string\"?img.src.trim():\"\";if(!src)return null;return{src,srcSet:img.srcSet,alt:img.alt};}function durationLabel(minutes,type,hasVideo){const m=Math.max(0,Math.round(minutes||0));let verb=\"read\";if(type===\"Practice\")verb=\"practice\";else if(type===\"Video\")verb=\"watch\";else if(type===\"Audio\")verb=\"listen\";else if(!type&&hasVideo)verb=\"watch\";if(!m)return verb===\"read\"?\"Article\":\"Video\";return`${m} min ${verb}`;}export default function LessonCard(props){const{title,image,videoThumbnail,altText,link,tags,category,durationMin,lessonType,videoEmbedCode,access,eyebrowSource,aspect,radius,accent,ink,muted,playColor,playIcon,playRing,style}=props;const[hover,setHover]=useState(false);const cats=useMemo(()=>resolveCategories(category,tags,lessonType),[category,tags,lessonType]);const cat=cats[0];const catAttr=cats.map(c=>c.slug).join(\" \");// Video thumbnail wins; hero image is the fallback.\nconst art=useMemo(()=>{const thumb=imageSource(videoThumbnail);const hero=imageSource(image);const chosen=thumb||hero;if(!chosen)return null;// The CMS alt field is the real source. Then whichever image object\n// carries an alt. Then the title — never an empty string.\nconst alt=String(altText||\"\").trim()||chosen.alt||(chosen===thumb?hero?.alt:thumb?.alt)||String(title||\"\").trim();return{...chosen,alt};},[videoThumbnail,image,altText,title]);const hasVideo=!!(videoEmbedCode&&String(videoEmbedCode).trim());const isPlayable=lessonType===\"Video\"||lessonType===\"Practice\"||hasVideo;const isGated=access===\"Email\"||access===\"Members\";const firstTag=(tags||\"\").split(\",\")[0].trim();const eyebrow=eyebrowSource===\"Tag\"&&firstTag?firstTag:cat.label;// Only become an anchor when we actually have a destination. Otherwise the\n// parent frame supplies the link and an extra <a> here would nest links.\nconst href=typeof link===\"string\"&&link.trim()?link.trim():undefined;const Root=href?\"a\":\"div\";const rootLinkProps=href?{href}:{};return /*#__PURE__*/_jsxs(Root,{...rootLinkProps,\"data-mw-cat\":catAttr,\"data-mw-lesson\":\"1\",onMouseEnter:()=>setHover(true),onMouseLeave:()=>setHover(false),style:{display:\"block\",textDecoration:\"none\",color:ink,fontFamily:FONT,cursor:\"pointer\",transform:hover?\"translateY(-4px)\":\"translateY(0)\",transition:\"transform 200ms cubic-bezier(0.165,0.84,0.44,1)\",...style},children:[/*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:{__html:TITLE_CSS}}),/*#__PURE__*/_jsxs(\"div\",{style:{position:\"relative\",width:\"100%\",aspectRatio:String(aspect),borderRadius:radius,overflow:\"hidden\",background:\"#F5E8E0\"},children:[art&&/*#__PURE__*/_jsx(\"img\",{src:art.src,srcSet:art.srcSet,alt:art.alt,loading:\"lazy\",decoding:\"async\",style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",display:\"block\",transform:hover?\"scale(1.04)\":\"scale(1)\",transition:\"transform 600ms cubic-bezier(0.165,0.84,0.44,1)\"}}),isPlayable&&/*#__PURE__*/_jsx(\"div\",{\"aria-hidden\":\"true\",style:{position:\"absolute\",left:12,bottom:12,width:36,height:36,boxSizing:\"border-box\",// The one round element in a radius-0 system.\nborderRadius:\"50%\",background:playColor,border:`1.5px solid ${playRing}`,boxShadow:\"0 4px 24px rgba(58,27,20,0.35)\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\"},children:/*#__PURE__*/_jsx(\"svg\",{viewBox:\"0 0 20 20\",\"aria-hidden\":\"true\",focusable:\"false\",style:{width:\"42%\",height:\"42%\",marginLeft:\"8%\"},fill:playIcon,children:/*#__PURE__*/_jsx(\"polygon\",{points:\"4,2 18,10 4,18\"})})}),isGated&&/*#__PURE__*/_jsxs(\"div\",{style:{position:\"absolute\",top:12,right:12,display:\"flex\",alignItems:\"center\",gap:6,padding:\"6px 11px 6px 9px\",borderRadius:0,background:\"rgba(255,255,255,0.94)\",boxShadow:\"0 1px 2px rgba(58,27,20,.08)\",fontSize:11.5,fontWeight:700,color:ink,whiteSpace:\"nowrap\"},children:[/*#__PURE__*/_jsx(\"svg\",{viewBox:\"0 0 24 24\",\"aria-hidden\":\"true\",focusable:\"false\",style:{width:11,height:11,fill:accent},children:/*#__PURE__*/_jsx(\"path\",{d:\"M12 1a5 5 0 00-5 5v3H6a2 2 0 00-2 2v9a2 2 0 002 2h12a2 2 0 002-2v-9a2 2 0 00-2-2h-1V6a5 5 0 00-5-5zm-3 8V6a3 3 0 016 0v3H9z\"})}),access===\"Members\"?\"Members\":\"Free with email\"]})]}),/*#__PURE__*/_jsx(\"div\",{style:{fontSize:11.5,fontWeight:700,letterSpacing:\"0.13em\",textTransform:\"uppercase\",color:accent,margin:\"14px 0 6px\"},children:eyebrow}),/*#__PURE__*/_jsx(\"h3\",{className:\"mw-lesson-title\",style:{margin:0,// /H4: Forevs Medium, 1.15em, no tracking, balanced wrap.\n// Font size comes from TITLE_CSS (30 / 24 / 18).\nfontFamily:TITLE_FONT,fontWeight:400,fontStyle:\"normal\",lineHeight:\"1.15em\",letterSpacing:0,textWrap:\"balance\",textDecoration:hover?\"underline\":\"none\",textUnderlineOffset:4,textDecorationThickness:1.5},children:title}),/*#__PURE__*/_jsxs(\"div\",{style:{marginTop:8,fontSize:13,color:muted,display:\"flex\",alignItems:\"center\",gap:7},children:[/*#__PURE__*/_jsx(\"span\",{children:durationLabel(durationMin,lessonType,hasVideo)}),firstTag&&eyebrowSource!==\"Tag\"&&/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"span\",{\"aria-hidden\":\"true\",style:{width:3,height:3,borderRadius:0,background:\"#E5D3C8\"}}),/*#__PURE__*/_jsx(\"span\",{children:firstTag})]})]})]});}LessonCard.defaultProps={title:\"Lesson title placeholder\",altText:\"\",tags:\"Yoga Philosophy\",category:\"\",durationMin:8,lessonType:\"Written\",videoEmbedCode:\"\",access:\"Free\",eyebrowSource:\"Category\",aspect:\"16 / 10\",radius:0,accent:\"#C23F2A\",ink:\"#3A1B14\",muted:\"#7A6057\",playColor:\"#FBF5F0\",playIcon:\"#3A1B14\",playRing:\"#3A1B14\"};addPropertyControls(LessonCard,{title:{type:ControlType.String,title:\"Title\"},videoThumbnail:{type:ControlType.ResponsiveImage,title:\"Video thumb\",description:\"Bind to Video Thumbnail. Wins over Hero image whenever it is set.\"},image:{type:ControlType.ResponsiveImage,title:\"Hero image\"},altText:{type:ControlType.String,title:\"Alt text\",description:'BIND THIS to Hero Alt Text. Framer keeps the lesson\\'s alt in its own CMS field, not on the image object, so without this binding the card ships alt=\"\". Falls back to the lesson title.'},link:{type:ControlType.Link,title:\"Link\",description:\"Leave empty when the card sits inside an already-linked frame — that avoids nested links.\"},tags:{type:ControlType.String,title:\"Tags\"},category:{type:ControlType.String,title:\"Category\",description:\"BIND THIS to the Categories field. Titles or slugs, one or many. Left empty, the card guesses from Tags and Lesson Type.\"},durationMin:{type:ControlType.Number,title:\"Duration min\",min:0,max:300,step:1,displayStepper:true},lessonType:{type:ControlType.Enum,title:\"Lesson type\",options:[\"Written\",\"Video\",\"Practice\",\"Audio\",\"Quick tip\"]},videoEmbedCode:{type:ControlType.String,title:\"Video embed\",description:\"Only used to detect that a lesson has video.\"},access:{type:ControlType.Enum,title:\"Access\",options:[\"Free\",\"Email\",\"Members\"]},eyebrowSource:{type:ControlType.Enum,title:\"Eyebrow\",options:[\"Category\",\"Tag\"]},aspect:{type:ControlType.Enum,title:\"Aspect\",options:[\"16 / 10\",\"16 / 9\",\"4 / 3\",\"1 / 1\",\"4 / 5\"]},radius:{type:ControlType.Number,title:\"Image radius\",min:0,max:40,description:\"Corner radius of the image only. Stays 0 in the warm design system. The play button is always a circle.\"},accent:{type:ControlType.Color,title:\"Accent\"},ink:{type:ControlType.Color,title:\"Ink\"},muted:{type:ControlType.Color,title:\"Muted\"},playColor:{type:ControlType.Color,title:\"Play fill\",description:\"Shell. Tested against 25 real thumbnails: Shell fill + Chocolate icon + Chocolate ring is the only combination that clears 3:1 on all of them.\"},playIcon:{type:ControlType.Color,title:\"Play icon\",description:\"Chocolate. 14.4:1 on the Shell fill.\"},playRing:{type:ControlType.Color,title:\"Play ring\",description:\"Chocolate. Keeps the button visible on pale thumbnails where the Shell fill disappears.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"LessonCard\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./LessonCard.map"],"mappings":"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"}