1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,67585,(e,t,i)=>{"use strict";Object.defineProperty(i,"__esModule",{value:!0}),Object.defineProperty(i,"BailoutToCSR",{enumerable:!0,get:function(){return s}});let n=e.r(32061);function s({reason:e,children:t}){if("u"<typeof window)throw Object.defineProperty(new n.BailoutToCSRError(e),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return t}},9885,(e,t,i)=>{"use strict";function n(e){return e.split("/").map(e=>encodeURIComponent(e)).join("/")}Object.defineProperty(i,"__esModule",{value:!0}),Object.defineProperty(i,"encodeURIPath",{enumerable:!0,get:function(){return n}})},52157,(e,t,i)=>{"use strict";Object.defineProperty(i,"__esModule",{value:!0}),Object.defineProperty(i,"PreloadChunks",{enumerable:!0,get:function(){return l}});let n=e.r(43476),s=e.r(74080),a=e.r(63599),o=e.r(9885),r=e.r(43369);function l({moduleIds:e}){if("u">typeof window)return null;let t=a.workAsyncStorage.getStore();if(void 0===t)return null;let i=[];if(t.reactLoadableManifest&&e){let n=t.reactLoadableManifest;for(let t of e){if(!n[t])continue;let e=n[t].files;i.push(...e)}}if(0===i.length)return null;let l=(0,r.getDeploymentIdQueryOrEmptyString)();return(0,n.jsx)(n.Fragment,{children:i.map(e=>{let i=`${t.assetPrefix}/_next/${(0,o.encodeURIPath)(e)}${l}`;return e.endsWith(".css")?(0,n.jsx)("link",{precedence:"dynamic",href:i,rel:"stylesheet",as:"style",nonce:t.nonce},e):((0,s.preload)(i,{as:"script",fetchPriority:"low",nonce:t.nonce}),null)})})}},69093,(e,t,i)=>{"use strict";Object.defineProperty(i,"__esModule",{value:!0}),Object.defineProperty(i,"default",{enumerable:!0,get:function(){return c}});let n=e.r(43476),s=e.r(71645),a=e.r(67585),o=e.r(52157);function r(e){return{default:e&&"default"in e?e.default:e}}let l={loader:()=>Promise.resolve(r(()=>null)),loading:null,ssr:!0},c=function(e){let t={...l,...e},i=(0,s.lazy)(()=>t.loader().then(r)),c=t.loading;function d(e){let r=c?(0,n.jsx)(c,{isLoading:!0,pastDelay:!0,error:null}):null,l=!t.ssr||!!t.loading,d=l?s.Suspense:s.Fragment,h=t.ssr?(0,n.jsxs)(n.Fragment,{children:["u"<typeof window?(0,n.jsx)(o.PreloadChunks,{moduleIds:t.modules}):null,(0,n.jsx)(i,{...e})]}):(0,n.jsx)(a.BailoutToCSR,{reason:"next/dynamic",children:(0,n.jsx)(i,{...e})});return(0,n.jsx)(d,{...l?{fallback:r}:{},children:h})}return d.displayName="LoadableComponent",d}},70703,(e,t,i)=>{"use strict";Object.defineProperty(i,"__esModule",{value:!0}),Object.defineProperty(i,"default",{enumerable:!0,get:function(){return s}});let n=e.r(55682)._(e.r(69093));function s(e,t){let i={};"function"==typeof e&&(i.loader=e);let s={...i,...t};return(0,n.default)({...s,modules:s.loadableGenerated?.modules})}("function"==typeof i.default||"object"==typeof i.default&&null!==i.default)&&void 0===i.default.__esModule&&(Object.defineProperty(i.default,"__esModule",{value:!0}),Object.assign(i.default,i),t.exports=i.default)},0,e=>{"use strict";var t=e.i(43476),i=e.i(71645),n=e.i(22016),s=e.i(70703);e.i(47167);var a=e.i(31178),o=e.i(47414),r=e.i(74008),l=e.i(21476),c=e.i(72846),d=i,h=e.i(37806);function u(e,t){if("function"==typeof e)return e(t);null!=e&&(e.current=t)}class p extends d.Component{getSnapshotBeforeUpdate(e){let t=this.props.childRef.current;if(t&&e.isPresent&&!this.props.isPresent&&!1!==this.props.pop){let e=t.offsetParent,i=(0,c.isHTMLElement)(e)&&e.offsetWidth||0,n=(0,c.isHTMLElement)(e)&&e.offsetHeight||0,s=this.props.sizeRef.current;s.height=t.offsetHeight||0,s.width=t.offsetWidth||0,s.top=t.offsetTop,s.left=t.offsetLeft,s.right=i-s.width-s.left,s.bottom=n-s.height-s.top}return null}componentDidUpdate(){}render(){return this.props.children}}function m({children:e,isPresent:n,anchorX:s,anchorY:a,root:o,pop:r}){let l=(0,d.useId)(),c=(0,d.useRef)(null),m=(0,d.useRef)({width:0,height:0,top:0,left:0,right:0,bottom:0}),{nonce:g}=(0,d.useContext)(h.MotionConfigContext),f=function(...e){return i.useCallback(function(...e){return t=>{let i=!1,n=e.map(e=>{let n=u(e,t);return i||"function"!=typeof n||(i=!0),n});if(i)return()=>{for(let t=0;t<n.length;t++){let i=n[t];"function"==typeof i?i():u(e[t],null)}}}}(...e),e)}(c,e.props?.ref??e?.ref);return(0,d.useInsertionEffect)(()=>{let{width:e,height:t,top:i,left:d,right:h,bottom:u}=m.current;if(n||!1===r||!c.current||!e||!t)return;let p="left"===s?`left: ${d}`:`right: ${h}`,f="bottom"===a?`bottom: ${u}`:`top: ${i}`;c.current.dataset.motionPopId=l;let x=document.createElement("style");g&&(x.nonce=g);let b=o??document.head;return b.appendChild(x),x.sheet&&x.sheet.insertRule(` 2 [data-motion-pop-id="${l}"] { 3 position: absolute !important; 4 width: ${e}px !important; 5 height: ${t}px !important; 6 ${p}px !important; 7 ${f}px !important; 8 } 9 `),()=>{b.contains(x)&&b.removeChild(x)}},[n]),(0,t.jsx)(p,{isPresent:n,childRef:c,sizeRef:m,pop:r,children:!1===r?e:d.cloneElement(e,{ref:f})})}let g=({children:e,initial:n,isPresent:s,onExitComplete:a,custom:r,presenceAffectsLayout:c,mode:d,anchorX:h,anchorY:u,root:p})=>{let g=(0,o.useConstant)(f),x=(0,i.useId)(),b=!0,y=(0,i.useMemo)(()=>(b=!1,{id:x,initial:n,isPresent:s,custom:r,onExitComplete:e=>
9{for(let t of(g.set(e,!0),g.values()))if(!t)return;a&&a()},register:e=>(g.set(e,!1),()=>g.delete(e))}),[s,g,a]);return c&&b&&(y={...y}),(0,i.useMemo)(()=>{g.forEach((e,t)=>g.set(t,!1))},[s]),i.useEffect(()=>{s||g.size||!a||a()},[s]),e=(0,t.jsx)(m,{pop:"popLayout"===d,isPresent:s,anchorX:h,anchorY:u,root:p,children:e}),(0,t.jsx)(l.PresenceContext.Provider,{value:y,children:e})};function f(){return new Map}var x=e.i(64978);let b=e=>e.key||"";function y(e){let t=[];return i.Children.forEach(e,e=>{(0,i.isValidElement)(e)&&t.push(e)}),t}let w=({children:e,custom:n,initial:s=!0,onExitComplete:l,presenceAffectsLayout:c=!0,mode:d="sync",propagate:h=!1,anchorX:u="left",anchorY:p="top",root:m})=>{let[f,w]=(0,x.usePresence)(h),k=(0,i.useMemo)(()=>y(e),[e]),v=h&&!f?[]:k.map(b),j=(0,i.useRef)(!0),N=(0,i.useRef)(k),C=(0,o.useConstant)(()=>new Map),q=(0,i.useRef)(new Set),[S,T]=(0,i.useState)(k),[M,B]=(0,i.useState)(k);(0,r.useIsomorphicLayoutEffect)(()=>{j.current=!1,N.current=k;for(let e=0;e<M.length;e++){let t=b(M[e]);v.includes(t)?(C.delete(t),q.current.delete(t)):!0!==C.get(t)&&C.set(t,!1)}},[M,v.length,v.join("-")]);let P=[];if(k!==S){let e=[...k];for(let t=0;t<M.length;t++){let i=M[t],n=b(i);v.includes(n)||(e.splice(t,0,i),P.push(i))}return"wait"===d&&P.length&&(e=P),B(y(e)),T(k),null}let{forceRender:E}=(0,i.useContext)(a.LayoutGroupContext);return(0,t.jsx)(t.Fragment,{children:M.map(e=>{let i=b(e),a=(!h||!!f)&&(k===M||v.includes(i));return(0,t.jsx)(g,{isPresent:a,initial:(!j.current||!!s)&&void 0,custom:n,presenceAffectsLayout:c,mode:d,root:m,onExitComplete:a?void 0:()=>{if(q.current.has(i)||(q.current.add(i),!C.has(i)))return;C.set(i,!0);let e=!0;C.forEach(t=>{t||(e=!1)}),e&&(E?.(),B(N.current),h&&w?.(),l&&l())},anchorX:u,anchorY:p,children:e},i)})})};var k=e.i(46932);let v=[{slug:"escovitch-fish",name:"Escovitch Fish",nickname:"Easter pickle fish",category:"main",era:"1600s · Spanish-Jewish roots",region:"Old Harbour & the south coast",story:"Escoveitch came ashore with Spanish-Jewish settlers who preserved fried fish in vinegar long before iceboxes reached the island. Jamaica made it her own: whole snapper fried crisp, then drowned while hot in a scotch-bonnet pickle of carrot, onion and pimento. By Good Friday, every coastal kitchen smells of vinegar and allspice.",image:"/images/vol2/escovitch-fish.jpg",arModelUrl:"/models/vol2/escovitch-fish.glb",ingredients:[{item:"Whole snapper, scaled and scored",quantity:"2 (about 1 lb each)"},{item:"Lime",quantity:"1, for washing the fish"},{item:"Salt and black pepper",quantity:"to season the slashes"},{item:"Oil for shallow frying",quantity:"about 1 cup"},{item:"White cane vinegar",quantity:"3/4 cup"},{item:"Carrot, cut in thin ribbons",quantity:"1 large"},{item:"Onion, sliced in rings",quantity:"1 large"},{item:"Scotch bonnet, seeded and sliced",quantity:"1"},{item:"Cho cho (chayote), julienned",quantity:"1/2"},{item:"Whole pimento (allspice) berries",quantity:"1 tsp"},{item:"Sugar",quantity:"1 tsp"}],method:[{step:"Wash the fish with lime and water, dry it well, and season the scored slashes with salt and black pepper.",tip:"Dry skin is the whole secret to crisp escovitch â pat it twice."},{step:"Heat the oil until a breadcrumb sizzles instantly. Fry the fish 5â6 minutes a side until deep gold and crisp. Set on a platter.",minutes:12},{step:"Pour off all but two tablespoons of oil. Add vinegar, carrot, onion, cho cho, scotch bonnet, pimento berries and sugar."},{step:"Simmer the pickle 3â4 minutes â vegetables should stay bright with a little bite.",minutes:4,tip:"Kill the heat while the carrot still snaps; it keeps cooking in the vinegar."},{step:"Pour the hot pickle over the fried fish and let it stand at least 15 minutes â overnight is tradition.",minutes:15}],plating:"Whole fish on the platter, pickle ribbons piled over the shoulders, bammy or festival at the side, lime cheek for squeezing.",hotspots:[{id:"pickle",label:"The pickle",title:"Vinegar was the icebox",body:"Escabeche technique arrived in the 1600s as preservation, not garnish â vinegar kept fried fish safe for days in tropical heat. The hot pour matters: it flash-cooks the vegetables and drives the pickle through the crisp skin into the flesh.",position:[.75,.24,-.55]},{id:"scoring",label:"The scored skin",title:"Why the slashes",body:"Two or three cuts to the bone on each side let the seasoning reach the flesh and let the frying oil crisp the fish clear through â a whole fish fries evenly instead of steaming inside.",position:[-.7,.24,.35]},{id:"pimento",label:"Pimento berries",title:"The Maroon spice",body:"Allspice is Jamaica's own berry â the island still grows most of the world's supply. Maroon cooks smoked wild hog over pimento wood centuries before it seasoned this pickle.",position:[.15,.24,.95]}]},{slug:"brown-stew-chicken",name:"Brown Stew Chicken",nickname:"Sunday stew",category:"main",era:"1800s · yard kitchens",region:"Island-wide",story:"Brown stew is the sound of a Sunday morning: chicken seasoned overnight, burnished in caramelized sugar, then stewed low with thyme, pimento and scotch bonnet until the gravy turns to mahogany silk. It is the dish Jamaican children abroad phone home about.",image:"/images/vol2/brown-stew-chicken.jpg",arModelUrl:"/models/vol2/brown-stew-chicken.glb",ingredients:[{item:"Chicken, cut in stew pieces",quantity:"3 lb"},{item:"Lime or vinegar wash",quantity:"for cleaning"},{item:"Onion, escallion, garlic, thyme",quantity:"1 each / 3 stalks / 4 cloves / 4 sprigs"},{item:"Scotch bonnet",quantity:"1, whole or seeded"},{item:"Pimento berries",quantity:"6"},{item:"Brown sugar",quantity:"2 tbsp"},{item:"Oil",quantity:"3 tbsp"},{item:"Ketchup",quantity:"2 tbsp"},{item:"Carrot and sweet pepper",quantity:"1 each, sliced"},{item:"Water or stock",quantity:"1 1/2 cups"}],method:[{step:"Season the cleaned chicken with onion, escallion, garlic, thyme, salt and pepper. Rest it overnight, or one hour at minimum.",tip:"Overnight in the fridge is the flavour â don't rush Sunday."},{step:"Heat oil, add brown sugar, and let it bubble to a deep amber â this is the browning that names the dish.",minutes:3,tip:"Amber, not black. Burnt sugar turns the gravy bitter."},{step:"Shake seasonings off the chicken and brown the pieces hard on all sides in the caramel.",minutes:8},{step:"Return the seasonings with ketchup, carrot, sweet pepper, pimento and the scotch bonnet. Add water, cover, and stew gently.",minutes:35},{step:"Uncover and reduce until the gravy coats the back of a spoon.",minutes:8}],plating:"Over white rice or rice and peas, gravy spooned generous, fried ripe plantain on the rim.",hotspots:[{id:"browning",label:"Burnt sugar",title:"Browning, the island's caramel",body:"Caramelizing sugar in hot oil â 'browning' â is a West African technique that crossed the Atlantic and anchors half the island's stews. It gives colour and a bittersweet base no bottled sauce can fake.",position:[.6,.24,.6]},{id:"seasoning",label:"Overnight season",title:"The overnight rule",body:"Yard cooks season meat the night before as ritual: salt and aromatics need hours to travel deeper than the skin. The shaken-off seasonings go back into the pot later, so nothing is lost.",position:[-.8,.24,-.3]},{id:"bonnet",label:"Whole bonnet",title:"Float it whole",body:"A whole, unbroken scotch bonnet floated in the stew gives fruit and perfume without fire. Burst it against the pot only if the table can take the heat â that choice is the cook's power.",position:[.05,.24,-.95]}]},{slug:"curry-chicken",name:"Curry Chicken",nickname:"yard curry",category:"main",era:"post-1845 · Indian arrival",region:"Island-wide",story:"When indentured Indian workers reached Jamaica after 1845, their spice tins met the island's scotch bonnet and pimento â and Jamaican curry was born, more turmeric-gold and allspice-deep than anything in Madras. Curry chicken with white rice became a Thursday institution.",image:"/images/vol2/curry-chicken.jpg",arModelUrl:"/models/vol2/curry-chicken.glb",ingredients:[{item:"Chicken, cut small with bone",quantity:"3 lb"},{item:"Jamaican curry powder",quantity:"3 tbsp"},{item:"Turmeric",quantity:"1 tsp"},{item:"Onion, escallion, garlic, thyme",quantity:"1 / 3 stalks / 4 cloves / 3 sprigs"},{item:"Scotch bonnet",quantity:"1"},{item:"Pimento berries",quantity:"5"},{item:"Irish potato, cubed",quantity:"2"},{item:"Coconut milk",quantity:"1/2 cup (optional, for a silkier gravy)"},{item:"Oil",quantity:"3 tbsp"}],method:[{step:"Season the chicken with two tablespoons of the curry powder, the aromatics, salt and pepper. Rest at least an hour."},{step:"Heat oil and 'burn' the remaining curry powder in it for thirty seconds until fragrant and a shade darker.",minutes:1,tip:"Burning the curry blooms the spices in fat â skip it and the curry tastes raw and dusty."},{step:"Add the chicken and turn it until every piece is stained gold.",minutes:6},{step:"Add water just to cover, the bonnet and pimento. Simmer covered.",minutes:25},{step:"Add potato (and coconut milk if using) and cook until the potato melts at the edges and thickens the gravy.",minutes:15}],plating:"A ladle over white rice, gravy running into every grain, avocado slices alongside when pear is in season.",hotspots:[{id:"curry-powder",label:"The curry tin",title:"Jamaican curry is its own nation",body:"Island curry powder leans on turmeric and native pimento, gentler on cumin than Indian blends. It's a fusion document: Indian technique, Jamaican allspice, and heat from a pepper the TaÃno were growing first.",position:[.7,.24,-.5]},{id:"burn",label:"Burnt curry",title:"Bloom, don't boil",body:"Frying the powder in hot oil â 'burning the curry' â is the step that separates yard curry from stew with yellow water. Fat-soluble spice compounds release in oil, never in water.",position:[-.65,.24,.55]},{id:"potato",label:"The potato",title:"The thickener",body:"Irish potato goes in late so its edges dissolve into the gravy â the traditional thickening, no flour needed. Some parish co
9oks use a chunk of yellow yam the same way.",position:[.1,.26,.9]}]},{slug:"run-down",name:"Run Down",nickname:"dip an' fall back",category:"main",era:"1700s · coconut walk kitchens",region:"Portland",story:"Run down is Portland parish in a pot: coconut milk boiled down until it 'runs down' to a rich golden custard, then salt mackerel or fresh fish stewed straight into it with tomato, escallion and bonnet. The old name â dip an' fall back â says how good the sauce is: you dip, you lean back, you return.",image:"/images/vol2/run-down.jpg",arModelUrl:"/models/vol2/run-down.glb",ingredients:[{item:"Salted mackerel (or fresh kingfish)",quantity:"1 lb, soaked overnight if salted"},{item:"Coconut milk, fresh or tinned",quantity:"3 cups"},{item:"Onion and escallion",quantity:"1 / 3 stalks"},{item:"Garlic",quantity:"3 cloves"},{item:"Tomato, chopped",quantity:"2"},{item:"Scotch bonnet",quantity:"1/2, seeded"},{item:"Thyme",quantity:"3 sprigs"},{item:"Green banana and boiled dumpling",quantity:"to serve"}],method:[{step:"Boil the coconut milk hard in a heavy pot, stirring now and then, until the oil breaks free and the milk reduces to a thick golden custard.",minutes:25,tip:"This is the run down itself â stop too early and you have soup, not custard."},{step:"Add onion, escallion, garlic, thyme, tomato and bonnet to the custard and cook until the tomato slumps.",minutes:5},{step:"Lay in the soaked, flaked mackerel and simmer gently so the fish drinks the coconut.",minutes:10},{step:"Season with black pepper â the salt fish usually brings salt enough."}],plating:"In a shallow bowl with boiled green banana and flour dumplings half-drowned in the golden custard.",hotspots:[{id:"custard",label:"The custard",title:"When coconut milk breaks",body:"Boiling coconut milk past its curdle point splits it into sweet oil and golden solids â the 'run down'. It's controlled breaking: the exact stage most recipes warn against is the destination here.",position:[.65,.24,.5]},{id:"mackerel",label:"Salt mackerel",title:"The barrel fish",body:"Salted mackerel came off Atlantic supply ships in barrels and became a plantation protein ration. Kitchens turned necessity into luxury by stewing it in coconut â scarcity cooking that outlived scarcity.",position:[-.75,.24,-.4]},{id:"portland",label:"Portland pot",title:"The coconut parish",body:"Run down belongs to Portland, where coconut walks meet fishing beaches. Maroon settlements in the Rio Grande valley kept one-pot coconut cooking alive when estate kitchens looked to England.",position:[.05,.24,-.9]}]},{slug:"pepper-pot-soup",name:"Pepper Pot Soup",nickname:"Monday pot",category:"soup",era:"TaÃno & African roots",region:"Island-wide",story:"Pepper pot is one of the oldest dishes still on Jamaican fires â a green, glossy soup of callaloo and okra thickened with coconut milk, floating salted meat and spinners. Its bones are TaÃno one-pot cooking; its soul is West African greens wisdom. Every generation stirs the same pot forward.",image:"/images/vol2/pepper-pot-soup.jpg",arModelUrl:"/models/vol2/pepper-pot-soup.glb",ingredients:[{item:"Callaloo, chopped fine",quantity:"1 big bundle (about 1 lb)"},{item:"Okra, sliced",quantity:"8 pods"},{item:"Salted beef or pig tail, soaked",quantity:"1/2 lb"},{item:"Coconut milk",quantity:"2 cups"},{item:"Yellow yam and coco, cubed",quantity:"1/2 lb each"},{item:"Flour for spinners",quantity:"1 cup"},{item:"Escallion, thyme, garlic",quantity:"3 stalks / 3 sprigs / 3 cloves"},{item:"Whole scotch bonnet",quantity:"1"}],method:[{step:"Boil the soaked salted meat in fresh water until tender, changing the water once to tame the salt.",minutes:40},{step:"Add callaloo, okra, yam, coco and coconut milk; simmer until the greens collapse into the broth.",minutes:20},{step:"Roll flour and water into thin spinners and drop them in with the escallion, thyme, garlic and the whole bonnet.",minutes:12,tip:"Spinners go in a rolling pot â still water makes them paste together."},{step:"Some cooks swizzle the soup to break the greens fine; others leave the leaves whole. Simmer to marry, and mind the bonnet stays unburst.",minutes:8}],plating:"Deep enamel bowls, a spinner and a piece of yam in every serving, the bonnet retired to the cook's plate.",hotspots:[{id:"callaloo",label:"The callaloo",title:"Greens that crossed an ocean",body:"Amaranth callaloo is West Africa's leaf-pot tradition replanted in Caribbean soil. Slow-simmered greens in one pot was survival cooking that became the island's most loved soup base.",position:[.7,.24,.45]},{id:"spinners",label:"Spinners",title:"The rolled dumpling",body:"Spinners â flour dumplings rolled thin between the palms â are drop-in starch, no rolling pin, no waste. The name is the motion: one spin of the hands over the pot.",position:[-.7,.24,-.5]},{id:"one-pot",label:"The one pot",title:"TaÃno pepper pot",body:"The TaÃno kept perpetual pepper pots â clay vessels of cassava juice, peppers and whatever the day brought, never emptied, always fed. The modern soup is that idea's direct descendant.",position:[.1,.24,.95]}]},{slug:"fish-tea",name:"Fish Tea",nickname:"beach pot medicine",category:"soup",era:"fishing village tradition",region:"Coastal Jamaica",story:"Fish tea is the broth of the beach: small fish, pumpkin, green banana and cho cho boiled down on driftwoo
9d fires until the sea itself is in the cup. Sold in styrofoam cups at fish fries from Hellshire to Boston Bay, it is called medicine, courage and Friday-night beginning â all in one sip.",image:"/images/vol2/fish-tea.jpg",arModelUrl:"/models/vol2/fish-tea.glb",ingredients:[{item:"Small whole fish (sprat, doctor fish)",quantity:"2 lb"},{item:"Pumpkin, cubed",quantity:"1/2 lb"},{item:"Green banana, sliced",quantity:"2"},{item:"Cho cho, cubed",quantity:"1"},{item:"Irish potato",quantity:"1"},{item:"Escallion, thyme, pimento",quantity:"3 stalks / 4 sprigs / 6 berries"},{item:"Whole scotch bonnet",quantity:"1"},{item:"Green banana spinners",quantity:"optional handful"},{item:"Lime",quantity:"1"}],method:[{step:"Boil the cleaned fish hard in water with pimento until the flesh falls from the bones.",minutes:25},{step:"Strain the broth through a fine sieve, pressing the fish â the strained pot is the tea; the bones retire.",tip:"Straining is what makes it tea and not soup. Sip-clean, no bones.",minutes:5},{step:"Return the broth with pumpkin, green banana, cho cho and potato; boil until the pumpkin melts and colours the tea gold.",minutes:20},{step:"Finish with escallion, thyme and the whole bonnet floated on top for the last five minutes. Squeeze lime into every cup.",minutes:5}],plating:"Hot in enamel mugs or styrofoam cups, straight from the pot, lime squeezed at the last second.",hotspots:[{id:"broth",label:"The strained tea",title:"Tea, not soup",body:"The whole point is the strain: everything boils to surrender, then only the liquid goes forward. Fishermen's economy â small bony fish too fine to plate become the richest cup on the beach.",position:[.6,.24,.55]},{id:"pumpkin",label:"Pumpkin gold",title:"The natural thickener",body:"Calabaza pumpkin dissolves into the broth, giving body and the tea's amber colour with no flour in sight. It also settles the seasoning â sweetness against the bonnet's heat.",position:[-.7,.24,-.45]},{id:"beach",label:"The beach fire",title:"Friday night begins here",body:"At every fish fry, the tea pot boils beside the frying pan â the cup you hold while your escovitch fries. It's sold as a starter, a tonic and a cure, and nobody argues with any of the three claims.",position:[.05,.24,-.9]}]},{slug:"festival",name:"Festival",nickname:"sweet fry dumplin'",category:"side",era:"1960s · Hellshire fry shops",region:"Hellshire & Portmore",story:"Festival is the youngest elder on this table: a sweet, cornmeal-laced fried dumpling born at the Hellshire Beach fry shops to partner fried fish and jerk. The name is the review â every bite is a festival. Crisp ridged crust outside, sweet steamy crumb inside.",image:"/images/vol2/festival.jpg",arModelUrl:"/models/vol2/festival.glb",ingredients:[{item:"Flour",quantity:"2 cups"},{item:"Fine cornmeal",quantity:"1/2 cup"},{item:"Brown sugar",quantity:"3 tbsp"},{item:"Baking powder",quantity:"2 tsp"},{item:"Salt",quantity:"1/2 tsp"},{item:"Vanilla",quantity:"1 tsp"},{item:"Cold water or milk",quantity:"about 3/4 cup"},{item:"Oil for deep frying",quantity:"3 cups"}],method:[{step:"Whisk flour, cornmeal, sugar, baking powder and salt. Add vanilla and enough cold liquid for a soft, barely sticky dough. Rest 15 minutes.",minutes:15,tip:"Rest relaxes the flour so the festival stretches long instead of tearing."},{step:"Divide into 8 pieces and roll each between your palms into a long torpedo, tapered at the ends."},{step:"Fry in medium-hot oil, turning, until deeply golden with dark ridges.",minutes:8,tip:"Medium heat â festival needs time to cook through before the crust darkens."},{step:"Drain on paper and serve hot enough to fog glasses."}],plating:"Stacked beside escovitch fish or jerk, wrapped in a paper napkin like at the beach.",hotspots:[{id:"cornmeal",label:"The cornmeal",title:"The grain that crackles",body:"Cornmeal is festival's signature â it browns faster than flour and gives the crust its sandy crackle. Corn is old Jamaica: the TaÃno grew maize on these plains centuries before wheat flour landed.",position:[.6,.24,.5]},{id:"shape",label:"The torpedo",title:"Shape is function",body:"The long taper maximizes crust and lets the middle cook before the outside burns. A round festival is a raw festival â the shape isn't style, it's engineering.",position:[-.65,.24,-.5]},{id:"hellshire",label:"Hellshire born",title:"A dish with a birth certificate",body:"Unlike most heritage dishes, festival's origin is nearly datable â Hellshire fry vendors in the 1960s-70s sweetening fried dumpling dough for fish customers. Proof the tradition is still writing itself.",position:[.05,.24,-.9]}]},{slug:"bammy",name:"Bammy",nickname:"TaÃno bread",category:"side",era:"pre-1494 · TaÃno",regi
9on:"St. Elizabeth & the south",story:"Bammy is the oldest bread in Jamaica â flat cassava rounds the TaÃno were pressing and griddling before any European sail broke the horizon. Bitter cassava is grated, pressed dry of its poison, and baked into discs that get soaked in coconut milk and fried golden. Five hundred years, same bread.",image:"/images/vol2/bammy.jpg",arModelUrl:"/models/vol2/bammy.glb",ingredients:[{item:"Bitter cassava, peeled and grated",quantity:"2 lb (or 4 ready-made bammies)"},{item:"Salt",quantity:"1 tsp"},{item:"Coconut milk",quantity:"1 1/2 cups, for soaking"},{item:"Butter or oil for frying",quantity:"3 tbsp"}],method:[{step:"Press the grated cassava in a cloth until completely dry â traditionally in a matapee press. The juice is discarded entirely.",tip:"Bitter cassava juice carries natural cyanide; pressing and cooking is the ancestral detox technology.",minutes:20},{step:"Season the dry meal with salt and press firmly into a hot ring or heavy pan to form a 1/2-inch disc. Cook until it binds, flip, cook the other side.",minutes:10},{step:"Soak the finished bammies in coconut milk 10â15 minutes until drunk and softened.",minutes:15},{step:"Fry in butter until golden on both faces, or grill over coals at the beach.",minutes:6}],plating:"Halved or quartered beside fried or steamed fish â bammy and fish is a marriage older than the island's name.",hotspots:[{id:"cassava",label:"Bitter cassava",title:"The poison that fed a people",body:"The TaÃno mastered detoxifying bitter cassava â grate, press, dry, cook â turning a toxic root into the Caribbean's staple starch. Bammy is that laboratory's finest surviving product.",position:[.65,.24,.5]}
9,{id:"soak",label:"Coconut soak",title:"The later gift",body:"The coconut-milk soak is an African-era addition to a TaÃno bread â dry rounds made travel-hardy get softened and enriched just before frying. Two heritages in one disc.",position:[-.7,.24,-.45]},{id:"stelizabeth",label:"St. Bess rounds",title:"The bammy belt",body:"St. Elizabeth's dry sandy soil grows the best cassava, and villages like Middle Quarters still press bammies for the whole island. Roadside bammy with pepper shrimp is a south-coast pilgrimage.",position:[.05,.24,-.9]}]},{slug:"bulla-cake",name:"Bulla Cake",nickname:"penny bulla",category:"dessert",era:"1800s · village bakeries",region:"Island-wide",story:"Bulla is the dark, dense ginger round that fueled generations of schoolchildren â molasses, flour and fresh ginger baked flat and sold for a penny. The classic pairing is bulla and pear: hot bulla split and loaded with cool avocado. Humble arithmetic, perfect result.",image:"/images/vol2/bulla-cake.jpg",arModelUrl:"/models/vol2/bulla-cake.glb",ingredients:[{item:"Flour",quantity:"3 cups"},{item:"Dark molasses (or wet sugar)",quantity:"3/4 cup"},{item:"Brown sugar",quantity:"1/2 cup"},{item:"Fresh ginger, grated",quantity:"2 tbsp"},{item:"Baking soda",quantity:"1 1/2 tsp"},{item:"Mixed spice and nutmeg",quantity:"1 tsp each"},{item:"Melted butter",quantity:"3 tbsp"},{item:"Water",quantity:"about 1/2 cup"}],method:[{step:"Dissolve molasses and sugar in warm water. Whisk flour, soda, ginger and spices in a bowl."},{step:"Bring wet to dry with the melted butter and knead briefly into a firm, dark dough.",tip:"Bulla dough should feel like clay, not bread â dense is the destination."},{step:"Roll 3/4-inch thick, cut in wide rounds, and bake at 350°F until set with a dry matte top.",minutes:25},{step:"Cool on a rack â bulla firms and deepens as it cools.",minutes:15}],plating:"Split, with cool ripe avocado pressed in, or a slab of hard cheese â corner-shop lunch, perfected.",hotspots:[{id:"molasses",label:"The molasses",title:"Sugar's dark shadow",body:"Molasses was the byproduct the estates couldn't export profitably, so it stayed and sweetened the people's baking. Bulla's colour and mineral depth are that history made edible.",position:[.6,.24,.55]},{id:"pear",label:"Bulla & pear",title:"The pairing",body:"In Jamaica 'pear' means avocado, and hot bulla with cold pear is the island's great sweet-fat contrast â spice cake and butter-flesh fruit, each fixing what the other lacks.",position:[-.7,.24,-.45]},{id:"penny",label:"Penny bread",title:"Bread of the school gate",body:"Bakeries stamped bullas out by the thousand because they kept for days without refrigeration â cheap, dense energy for market women and schoolchildren. The recipe barely changed in a century.",position:[.05,.24,-.9]}]},{slug:"plantain-tarts",name:"Plantain Tarts",nickname:"ruby tart",category:"dessert",era:"estate-kitchen era",region:"Island-wide",story:"Plantain tart is pastry-case cunning: overripe black-skinned plantain â the ones others discard â mashed with nutmeg, vanilla and a blush of red colouring, folded into short crescents. Sweetness rescued from ripeness, sold behind every patty-shop glass on the island.",image:"/images/vol2/plantain-tarts.jpg",arModelUrl:"/models/vol2/plantain-tarts.glb",ingredients:[{item:"Very ripe (black) plantains",quantity:"3"},{item:"Brown sugar",quantity:"1/4 cup"},{item:"Butter",quantity:"2 tbsp"},{item:"Nutmeg and vanilla",quantity:"1/2 tsp / 1 tsp"},{item:"Red food colouring",quantity:"2 drops (traditional blush)"},{item:"Flour",quantity:"2 cups, for short pastry"},{item:"Cold butter or shortening",quantity:"2/3 cup"},{item:"Iced water",quantity:"about 6 tbsp"}],method:[{step:"Boil or steam the ripe plantains until soft, then mash with butter, sugar, nutmeg, vanilla and the drops of colouring. Cook down until thick and jammy. Cool.",minutes:15},{step:"Cut cold butter into flour with a pinch of salt, bind with iced water, and rest the pastry 30 minutes cold.",minutes:30,tip:"Warm hands are pastry's enemy â work fast, rest long."},{step:"Roll thin, cut saucers, fill each with a spoon of plantain, fold to crescents and crimp with a fork."},{step:"Bake at 375°F until pale gold at the edges.",minutes:22}],plating:"Cooled to warm, dusted with sugar, beside a cold glass of sorrel or a hot cup of chocolate tea.",hotspots:[{id:"ripeness",label:"Black plantain",title:"Ripeness as ingredient",body:"A plantain at full black is at maximum sugar â estate and yard kitchens learned to time desserts to the fruit, not the calendar. The tart exists because nothing sweet was ever wasted.",position:[.6,.24,.5]},{id:"blush",label:"The red blush",title:"Why plantain tarts are pink",body:"The rosy filling is pure patty-shop heraldry: a drop of red so buyers could tell plantain from coconut gizzada at a glance behind the glass. Colour as labelling, decades before stickers.",position:[-.65,.24,-.5]},{id:"pastry",label:"Short crust",title:"The colonial fold",body:"English short-crust te
9chnique wrapped around African-Caribbean fillings is a whole chapter of island baking â the same marriage that produced the beef patty produced this sweeter cousin.",position:[.05,.24,-.9]}]}];function j({recipe:n,onClose:s}){let[a,o]=(0,i.useState)(!1);return(0,i.useEffect)(()=>{e.A(42320).then(()=>o(!0))},[]),(0,i.useEffect)(()=>{let e=e=>"Escape"===e.key&&s();return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[s]),(0,t.jsxs)(k.motion.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},className:"fixed inset-0 z-50 flex flex-col bg-[#0d0b09]",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between border-b border-white/10 px-4 py-3 md:px-6",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-[10px] uppercase tracking-[3px] text-scotch-500",children:"View on table · AR"}),(0,t.jsx)("h2",{className:"text-lg font-bold text-coconut-50",style:{fontFamily:"var(--font-display), Georgia, serif"},children:n.name})]}),(0,t.jsx)("button",{onClick:s,"aria-label":"Close AR viewer",className:"rounded-full p-2 text-coconut-200/60 transition-colors hover:bg-white/10 hover:text-coconut-50",children:(0,t.jsx)("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})})})]}),(0,t.jsx)("div",{className:"relative min-h-0 flex-1",children:a?(0,t.jsx)("model-viewer",{src:n.arModelUrl,poster:n.image,alt:`3D model of ${n.name} on a plate`,ar:!0,"ar-modes":"webxr scene-viewer quick-look","ar-scale":"fixed","ar-placement":"floor","camera-controls":!0,"auto-rotate":!0,"rotation-per-second":"24deg","shadow-intensity":"1","camera-orbit":"30deg 68deg 0.55m","touch-action":"pan-y",style:{width:"100%",height:"100%",backgroundColor:"#0d0b09"},children:(0,t.jsx)("button",{slot:"ar-button",className:"absolute bottom-6 left-1/2 -translate-x-1/2 rounded-full bg-scotch-600 px-6 py-3 text-sm font-semibold uppercase tracking-[2px] text-white shadow-xl transition-colors hover:bg-scotch-500",children:"Place on your table"})}):(0,t.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,t.jsx)("p",{className:"text-xs uppercase tracking-[3px] text-coconut-200/60",children:"Setting the tableâ¦"})})}),(0,t.jsxs)("p",{className:"border-t border-white/10 px-4 py-3 text-center text-[11px] leading-relaxed text-coconut-200/50 md:px-6",children:["Life-size dish â drag to inspect. On a phone or tablet, tap"," ",(0,t.jsx)("span",{className:"text-scotch-500",children:"Place on your table"})," to set it in your room with the camera."]})]})}var N=e.i(68834);let C=(0,N.create)((e,t)=>({active:!1,slug:"",stepIndex:0,timerTotal:0,timerEndsAt:null,timerRemaining:0,timerDone:!1,checked:{},showIngredients:!1,start:(t,i)=>{let n=(i??0)*60;e({active:!0,slug:t,stepIndex:0,timerTotal:n,timerEndsAt:null,timerRemaining:n,timerDone:!1,checked:{},showIngredients:!1})},exit:()=>e({active:!1,slug:"",stepIndex:0,timerEndsAt:null,timerDone:!1}),goToStep:(t,i)=>{let n=(i??0)*60;e({stepIndex:t,timerTotal:n,timerEndsAt:null,timerRemaining:n,timerDone:!1})},startTimer:()=>{let{timerRemaining:i,timerTotal:n}=t(),s=i>0?i:n;s<=0||e({timerEndsAt:Date.now()+1e3*s,timerDone:!1})},pauseTimer:()=>{let{timerEndsAt:i}=t();null!==i&&e({timerEndsAt:null,timerRemaining:Math.max(0,Math.round((i-Date.now())/1e3))})},resetTimer:()=>{let{timerTotal:i}=t();e({timerEndsAt:null,timerRemaining:i,timerDone:!1})},finishTimer:()=>e({timerEndsAt:null,timerRemaining:0,timerDone:!0}),toggleChecked:t=>e(e=>({checked:{...e.checked,[t]:!e.checked[t]}})),toggleIngredients:()=>e(e=>({showIngredients:!e.showIngredients}))}));var q=e.i(8531);let S=(0,s.default)(()=>e.A(99104).then(e=>e.DishCanvas),{loadableGenerated:{modules:[28147]},ssr:!1});function T({recipe:e,onOpenAssistant:n}){let s,{stepIndex:a,timerTotal:o,timerEndsAt:r,timerRemaining:l,timerDone:c,checked:d,showIngredients:h,exit:u,goToStep:p,startTimer:m,pauseTimer:g,resetTimer:f,finishTimer:x,toggleChecked:b,toggleIngredients:y}=C(),w=e.method[a],v=a===e.method.length-1,j=null!==r,[N,T]=(0,i.useState)(l);(0,i.useEffect)(()=>
9{if(!j)return void T(l);let e=()=>{let e=Math.max(0,Math.round((r-Date.now())/1e3));T(e),e<=0&&x()};e();let t=setInterval(e,500);return()=>clearInterval(t)},[j,r,l,x]);let M=()=>!v&&p(a+1,e.method[a+1].minutes),B=()=>a>0&&p(a-1,e.method[a-1].minutes);(0,i.useEffect)(()=>{let e=e=>{e.target?.tagName!=="INPUT"&&("ArrowRight"===e.key?M():"ArrowLeft"===e.key?B():"Escape"===e.key?u():" "===e.key&&o>0&&(e.preventDefault(),j?g():m()))};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)});let[P,E]=(0,i.useState)(!1),A=(0,i.useRef)(null),R=async()=>{if(P){A.current?.(),E(!1);return}let e=`Step ${a+1}. ${w.step}${w.tip?` A little tip: ${w.tip}`:""}`;A.current=await (0,q.speakPersona)(e,"granny",{onStart:()=>E(!0),onEnd:()=>E(!1),onError:()=>E(!1)})};(0,i.useEffect)(()=>()=>A.current?.(),[]);let I=e.ingredients.filter(e=>d[e.item]).length;return(0,t.jsxs)(k.motion.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},className:"fixed inset-0 z-40 flex flex-col bg-[#12100e] text-coconut-100",style:{fontFamily:"var(--font-vol2), var(--font-body), sans-serif"},children:[(0,t.jsxs)("header",{className:"flex shrink-0 items-center justify-between border-b border-white/10 px-4 py-3 md:px-6",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsxs)("p",{className:"text-[10px] uppercase tracking-[3px] text-scotch-500",children:["Cook mode · step ",a+1," of ",e.method.length]}),(0,t.jsx)("h2",{className:"truncate text-lg font-bold text-coconut-50",style:{fontFamily:"var(--font-display), Georgia, serif"},children:e.name})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("button",{onClick:n,className:"rounded-full border border-white/15 px-3.5 py-2 text-[11px] font-semibold uppercase tracking-[2px] text-coconut-100 transition-colors hover:border-scotch-500/60 hover:text-scotch-400",children:"Ask the kitchen"}),(0,t.jsx)("button",{onClick:u,"aria-label":"Exit cook mode",className:"rounded-full p-2 text-coconut-200/60 transition-colors hover:bg-white/10 hover:text-coconut-50",children:(0,t.jsx)("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})})})]})]}),(0,t.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col-reverse lg:flex-row",children:[(0,t.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col lg:max-w-[46%] lg:border-r lg:border-white/10",children:[(0,t.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto p-5 md:p-6",children:[(0,t.jsx)("div",{className:"mb-5 flex flex-wrap items-center gap-1.5",children:e.method.map((e,i)=>(0,t.jsx)("button",{onClick:()=>p(i,e.minutes),"aria-label":`Go to step ${i+1}`,className:`h-2 rounded-full transition-all ${i===a?"w-7 bg-scotch-500":i<a?"w-2 bg-scotch-500/50":"w-2 bg-white/15 hover:bg-white/30"}`},i))}),(0,t.jsxs)("div",{className:"rounded-2xl bg-white/5 p-5 ring-1 ring-white/10",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,t.jsx)("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-scotch-600 text-sm font-bold text-white",children:a+1}),(0,t.jsx)("button",{onClick:R,"aria-label":P?"Stop reading step":"Read step aloud",className:`rounded-full p-2 transition-colors ${P?"bg-scotch-600 text-white":"text-coconut-200/60 hover:bg-white/10 hover:text-coconut-50"}`,children:(0,t.jsx)("svg",{className:"h-5 w-5",fill:"currentColor",viewBox:"0 0 24 24",children:(0,t.jsx)("path",{d:"M3 10v4a1 1 0 001 1h3l4 4V5L7 9H4a1 1 0 00-1 1zm13.5 2a4.5 4.5 0 00-2.5-4.03v8.05A4.5 4.5 0 0016.5 12zM14 3.23v2.06a7 7 0 010 13.42v2.06a9 9 0 000-17.54z"})})})]}),(0,t.jsx)("p",{className:"mt-4 text-lg leading-relaxed text-coconut-50 md:text-xl",children:w.step}),w.tip&&(0,t.jsx)("p",{className:"mt-4 rounded-xl bg-leaf-600/15 px-4 py-3 text-sm italic leading-snug text-leaf-300 ring-1 ring-leaf-600/25",children:w.tip})]}),o>0&&(0,t.jsxs)("div",{className:`mt-4 flex items-center justify-between rounded-2xl p-4 ring-1 transition-colors ${c?"bg-scotch-600/25 ring-scotch-500 animate-pulse":"bg-white/5 ring-white/10"}`,children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-[10px] uppercase tracking-[3px] text-ackee-400",children:c?"Time's up!":"Step timer"}),(0,t.jsx)("p",{className:"mt-1 text-3xl font-bold tabular-nums text-coconut-50",style:{fontFamily:"var(--font-display), Georgia, serif"},children:(s=Math.floor(N/60),`${s}:${String(N%60).padStart(2,"0")}`)})]}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)("button",{onClick:j?g:m,className:"rounded-full bg-scotch-600 px-5 py-2.5 text-xs font-semibold uppercase tracking-[2px] text-white transition-colors hover:bg-scotch-500",children:j?"Pause":c?"Again":"Start"}),(0,t.jsx)("button",{onClick:f,"aria-label":"Reset timer",className:"rounded-full border border-white/15 px-4 py-2.5 text-xs font-semibold uppercase tracking-[2px] text-coconut-200/80 transition-colors hover:border-white/40",children:"Reset"})]})]}),(0,t.jsxs)("button",{onClick:y,className:"mt-4 flex w-full items-center justify-between rounded-2xl bg-white/5 p-4 text-left ring-1 ring-white/10 transition-colors hover:bg-white/8",children:[(0,t.jsxs)("span",{className:"text-xs font-semibold uppercase tracking-[2px] text-coconut-200/80",children:["Ingredients · ",I,"/",e.ingredients.length," ready"]}),(0,t.jsx)("svg",{className:`h-4 w-4 text-coconut-200/60 transition-transform ${h?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})]}),h&&(0,t.jsx)("ul",{className:"mt-2 space-y-1 rounded-2xl bg-white/5 p-4 ring-1 ring-white/10",children:e.ingredients.map(e=>(0,t.jsx)("li",{children:(0,t.jsxs)("label",{className:"flex cursor-pointer items-baseline gap-3 rounded-lg px-2 py-1.5 transition-colors hover:bg-white/5",children:[(0,t.jsx)("input",{type:"checkbox",checked:!!d[e.item],onChange:()=>b(e.item),className:"translate-y-0.5 accent-[#f2600c]"}),(0,t.jsx)("span",{className:`flex-1 text-sm ${d[e.item]?"text-coconut-200/40 line-through":"text-coconut-100/90"}`,children:e.item}),(0,t.jsx)("span",{className:"shrink-0 text-xs font-medium text-ackee-300/90",children:e.quantity})]})},e.item))})]}),(0,t.jsxs)("div",{className:"flex shrink-0 gap-3 border-t border-white/10 p-4 md:px-6",children:[(0,t.jsx)("button",{onClick:B,disabled:0===a,className:"flex-1 rounded-full border border-white/15 py-3 text-xs font-semibold uppercase tracking-[2px] text-coconut-200/80 transition-colors enabled:hover:border-white/40 disabled:opacity-30",children:"â Back"}),v?(0,t.jsx)("button",{onClick:u,className:"flex-[2] rounded-full bg-leaf-600 py-3 text-xs font-semibold uppercase tracking-[2px] text-white transition-colors hover:bg-leaf-500",children:"Done â serve it up"}):(0,t.jsx)("button",{onClick:M,className:"flex-[2] rounded-full bg-scotch-600 py-3 text-xs font-semibold uppercase tracking-[2px] text-white transition-colors hover:bg-scotch-500",children:"Next step â"})]})]}),(0,t.jsxs)("div",{className:"relative min-h-0 basis-[34dvh] lg:flex-1 lg:basis-auto",children:[(0,t.jsx)("div",{className:"absolute inset-0",style:{background:"radial-gradient(ellipse at 50% 42%, #2a211a 0%, #12100e 72%)"}}),(0,t.jsx)("div",{className:"absolute inset-0",children:(0,t.jsx)(S,{recipe:e,activeHotspot:null,onHotspot:()=>{},showPins:!1})}),(0,t.jsx)("p",{className:"pointer-events-none absolute bottom-3 left-0 right-0 hidden text-center text-[10px] uppercase tracking-[2px] text-coconut-200/40 lg:block",children:"â â steps · space starts the timer · esc to leave"})]})]})]})}let M=(0,N.create)(e=>({open:!1,persona:"granny",messages:[],thinking:!1,setOpen:t=>e({open:t}),setPersona:t=>e({persona:t}),addMessage:t=>e(e=>({messages:[...e.messages,t]})),setThinking:t=>e({thinking:t})}));function B(){let e=window;return e.SpeechRecognition??e.webkitSpeechRecognition??null}let P=[{id:"granny",name:"Miss Vie",blurb:"grandmother's intuition"}
9,{id:"chef",name:"Chef Marcus",blurb:"technique & timing"}];function E({recipe:e,onClose:n}){let{persona:s,messages:a,thinking:o,setPersona:r,addMessage:l,setThinking:c}=M(),d=C(e=>e.active),h=C(e=>e.stepIndex),[u,p]=(0,i.useState)(""),[m,g]=(0,i.useState)(!1),[f,x]=(0,i.useState)(null),b=null!==B(),y=(0,i.useRef)(null),w=(0,i.useRef)(null),v=(0,i.useRef)(null);(0,i.useEffect)(()=>{v.current?.scrollTo({top:v.current.scrollHeight})},[a.length,o]),(0,i.useEffect)(()=>()=>{y.current?.abort(),w.current?.()},[]);let j=async t=>{let i=(t??u).trim();if(i&&!o){p(""),l({role:"user",text:i,persona:s}),c(!0);try{let t=await fetch("/api/chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:i,persona:s,recipeSlug:e.slug,cookAlongStep:d?`Step ${h+1} of ${e.method.length}: ${e.method[h].step}`:void 0})});if(401===t.status)return void l({role:"assistant",persona:s,text:"granny"===s?"Chile, mi need fi know a who mi chatting to! Sign in from the Volume 1 page first, then come back to mi.":"You'll need to sign in first â head back to Volume 1, sign in, and I'll be right here."});let n=await t.json();l({role:"assistant",persona:s,text:(0,q.stripMarkdown)(n.reply??"â¦")})}catch{l({role:"assistant",persona:s,text:"granny"===s?"Mi love, di line drop out. Ask mi one more time.":"Connection hiccup â ask me once more."})}finally{c(!1)}}},N=async(e,t,i)=>{if(f===e){w.current?.(),x(null);return}w.current?.(),w.current=await (0,q.speakPersona)(t,i,{onStart:()=>x(e),onEnd:()=>x(null),onError:()=>x(null)})};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(k.motion.div,{initial:{opacity:0}
9,animate:{opacity:1},exit:{opacity:0},onClick:n,className:"fixed inset-0 z-50 bg-black/55 backdrop-blur-[2px]"}),(0,t.jsxs)(k.motion.aside,{initial:{x:"100%"},animate:{x:0},exit:{x:"100%"},transition:{type:"spring",stiffness:320,damping:32},className:"fixed inset-y-0 right-0 z-50 flex w-full max-w-[420px] flex-col bg-[#1c1613] shadow-2xl ring-1 ring-white/10",style:{fontFamily:"var(--font-vol2), var(--font-body), sans-serif"},children:[(0,t.jsxs)("div",{className:"shrink-0 border-b border-white/10 p-4",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between",children:[(0,t.jsx)("p",{className:"text-[10px] uppercase tracking-[3px] text-scotch-500",children:"The kitchen is listening"}),(0,t.jsx)("button",{onClick:n,"aria-label":"Close assistant",className:"rounded-full p-1.5 text-coconut-200/60 transition-colors hover:bg-white/10 hover:text-coconut-50",children:(0,t.jsx)("svg",{className:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})})})]}),(0,t.jsx)("div",{className:"mt-3 flex gap-2",children:P.map(e=>{let i=s===e.id,n="granny"===e.id?i?"bg-scotch-600 text-white ring-scotch-500":"ring-white/15 text-coconut-200/70 hover:ring-scotch-500/50":i?"bg-leaf-600 text-white ring-leaf-600":"ring-white/15 text-coconut-200/70 hover:ring-leaf-600/50";return(0,t.jsxs)("button",{onClick:()=>r(e.id),className:`flex-1 rounded-xl px-3 py-2.5 text-left ring-1 transition-all ${n}`,children:[(0,t.jsx)("span",{className:"block text-sm font-bold",style:{fontFamily:"var(--font-display), Georgia, serif"},children:e.name}),(0,t.jsx)("span",{className:"block text-[10px] uppercase tracking-wide opacity-80",children:e.blurb})]},e.id)})})]}),(0,t.jsxs)("div",{ref:v,className:"min-h-0 flex-1 overflow-y-auto p-4",children:[0===a.length&&(0,t.jsx)("div",{className:"rounded-xl bg-white/5 p-4 ring-1 ring-white/10",children:(0,t.jsxs)("p",{className:"text-sm leading-relaxed text-coconut-200/75",children:["Ask about ",(0,t.jsx)("span",{className:"text-coconut-100",children:e.name})," ","â substitutions, timing, heat, anything. Tap the mic to talk hands-free while you cook."]})}),(0,t.jsxs)("div",{className:"space-y-3",children:[a.map((e,i)=>"user"===e.role?(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsx)("p",{className:"max-w-[85%] rounded-2xl rounded-br-md bg-white/10 px-3.5 py-2.5 text-sm leading-relaxed text-coconut-50",children:e.text})},i):(0,t.jsx)("div",{className:"flex justify-start",children:(0,t.jsxs)("div",{className:`max-w-[88%] rounded-2xl rounded-bl-md px-3.5 py-2.5 ring-1 ${"granny"===e.persona?"bg-scotch-600/15 ring-scotch-500/30":"bg-leaf-600/15 ring-leaf-600/30"}`,children:[(0,t.jsxs)("div",{className:"mb-1 flex items-center justify-between gap-3",children:[(0,t.jsx)("span",{className:`text-[10px] font-semibold uppercase tracking-[2px] ${"granny"===e.persona?"text-scotch-400":"text-leaf-300"}`,children:"granny"===e.persona?"Miss Vie":"Chef Marcus"}),(0,t.jsx)("button",{onClick:()=>N(i,e.text,e.persona),"aria-label":f===i?"Stop voice":"Play voice",className:`rounded-full p-1 transition-colors ${f===i?"bg-white/20 text-white":"text-coconut-200/50 hover:text-coconut-50"}`,children:(0,t.jsx)("svg",{className:"h-4 w-4",fill:"currentColor",viewBox:"0 0 24 24",children:(0,t.jsx)("path",{d:"M3 10v4a1 1 0 001 1h3l4 4V5L7 9H4a1 1 0 00-1 1zm13.5 2a4.5 4.5 0 00-2.5-4.03v8.05A4.5 4.5 0 0016.5 12z"})})})]}),(0,t.jsx)("p",{className:"text-sm leading-relaxed text-coconut-100/95",children:e.text})]})},i)),o&&(0,t.jsx)("p",{className:"text-xs italic text-coconut-200/50",children:"granny"===s?"Miss Vie a thinkâ¦":"Chef Marcus is thinkingâ¦"})]})]}),(0,t.jsx)("div",{className:"shrink-0 border-t border-white/10 p-3",children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[b&&(0,t.jsx)("button",{onClick:()=>{if(m)return void y.current?.stop();let e=B();if(!e)return;let t=new e;y.current=t,t.lang="en-JM",t.interimResults=!0,t.maxAlternatives=1;let i="";t.onresult=e=>{let t=Array.from({length:e.results.length},(t,i)=>e.results[i][0].transcript).join(" ");i=t,p(t)}
9,t.onend=()=>{g(!1),y.current=null,i.trim()&&j(i)},t.onerror=()=>g(!1),g(!0),t.start()},"aria-label":m?"Stop listening":"Speak your question",className:`shrink-0 rounded-full p-3 ring-1 transition-all ${m?"animate-pulse bg-scotch-600 text-white ring-scotch-500":"text-coconut-200/70 ring-white/15 hover:text-scotch-400 hover:ring-scotch-500/50"}`,children:(0,t.jsx)("svg",{className:"h-5 w-5",fill:"currentColor",viewBox:"0 0 24 24",children:(0,t.jsx)("path",{d:"M12 14a3 3 0 003-3V6a3 3 0 10-6 0v5a3 3 0 003 3zm5-3a5 5 0 01-10 0H5a7 7 0 006 6.92V21h2v-3.08A7 7 0 0019 11h-2z"})})}),(0,t.jsx)("input",{value:u,onChange:e=>p(e.target.value),onKeyDown:e=>"Enter"===e.key&&j(),placeholder:m?"Listeningâ¦":`Ask about ${e.name.toLowerCase()}â¦`,className:"min-w-0 flex-1 rounded-full bg-white/8 px-4 py-3 text-sm text-coconut-50 placeholder-coconut-200/40 ring-1 ring-white/10 outline-none transition-colors focus:ring-scotch-500/60"}),(0,t.jsx)("button",{onClick:()=>j(),disabled:!u.trim()||o,"aria-label":"Send",className:"shrink-0 rounded-full bg-scotch-600 p-3 text-white transition-colors enabled:hover:bg-scotch-500 disabled:opacity-40",children:(0,t.jsx)("svg",{className:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 12h14m0 0l-6-6m6 6l-6 6"})})})]})})]})]})}let A=(0,s.default)(()=>e.A(99104).then(e=>e.DishCanvas),{loadableGenerated:{modules:[28147]},ssr:!1,loading:()=>(0,t.jsx)("div",{className:"flex h-full w-full items-center justify-center",children:(0,t.jsx)("p",{className:"text-xs uppercase tracking-[3px] text-coconut-200/60",children:"Warming the fireâ¦"})})}),R={main:"bg-scotch-500",soup:"bg-ackee-400",side:"bg-leaf-600",dessert:"bg-coconut-200"},I=["story","ingredients","method","plating"];function L(){let[e,s]=(0,i.useState)(v[0].slug),[a,o]=(0,i.useState)("story"),[r,l]=(0,i.useState)(null),[c,d]=(0,i.useState)(!1),h=C(e=>e.active),u=C(e=>e.start),p=M(e=>e.open),m=M(e=>e.setOpen),g=v.find(t=>t.slug===e)??v[0];return(0,t.jsxs)("div",{className:"flex h-dvh flex-col overflow-hidden bg-[#12100e] text-coconut-100",style:{fontFamily:"var(--font-vol2), var(--font-body), sans-serif"},children:[(0,t.jsxs)("header",{className:"flex items-center justify-between border-b border-white/10 px-4 py-3 md:px-6",children:[(0,t.jsx)(n.default,{href:"/",className:"text-xs uppercase tracking-[2px] text-coconut-200/60 transition-colors hover:text-coconut-100",children:"â Volume 1"}),(0,t.jsxs)("div",{className:"text-center",children:[(0,t.jsx)("p",{className:"text-lg font-bold leading-none text-coconut-50 md:text-xl",style:{fontFamily:"var(--font-display), Georgia, serif"},children:"Yard Kitchen"}),(0,t.jsx)("p",{className:"mt-1 text-[10px] uppercase tracking-[4px] text-ackee-400",children:"Volume 2 · Modern Maroon Heritage"})]}),(0,t.jsx)("span",{className:"rounded-full border border-scotch-500/50 px-2.5 py-1 text-[10px] font-semibold uppercase tracking-[2px] text-scotch-500",children:"Early access"})]}),(0,t.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col lg:flex-row",children:[(0,t.jsx)("nav",{className:"flex shrink-0 gap-2 overflow-x-auto border-b border-white/10 px-3 py-2 lg:w-64 lg:flex-col lg:overflow-y-auto lg:border-b-0 lg:border-r lg:px-3 lg:py-4",children:v.map(i=>{let n=i.slug===e;return(0,t.jsxs)("button",{onClick:()=>{s(i.slug),l(null)},className:`group flex shrink-0 items-center gap-3 rounded-xl px-3 py-2 text-left transition-colors ${n?"bg-white/10 ring-1 ring-scotch-500/60":"hover:bg-white/5"}`,children:[(0,t.jsx)("img",{src:i.image,alt:"",className:"h-9 w-9 shrink-0 rounded-full object-cover ring-1 ring-white/15 transition-transform duration-300 group-hover:scale-110",loading:"lazy"}),(0,t.jsxs)("span",{className:"min-w-0",children:[(0,t.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,t.jsx)("span",{className:`h-1.5 w-1.5 shrink-0 rounded-full ${R[i.category]}`}),(0,t.jsx)("span",{className:`truncate text-sm font-semibold ${n?"text-coconut-50":"text-coconut-200/85"}`,style:{fontFamily:"var(--font-display), Georgia, serif"},children:i.name})]}),(0,t.jsx)("span",{className:"hidden truncate text-[11px] italic text-coconut-200/50 lg:block",children:i.nickname})]})]},i.slug)})}),(0,t.jsxs)("main",{className:"relative min-h-0 flex-1 basis-[42dvh] lg:basis-auto",children:[(0,t.jsx)("div",{className:"absolute inset-0",style:{background:"radial-gradient(ellipse at 50% 42%, #2a211a 0%, #12100e 72%)"}}),(0,t.jsx)("div",{className:"absolute inset-0",children:!h&&(0,t.jsx)(A,{recipe:g,activeHotspot:r,onHotspot:l})}),(0,t.jsxs)("div",{className:"absolute right-3 top-3 z-10 flex flex-col items-end gap-2 md:right-4 md:top-4 md:flex-row md:items-center",children:[(0,t.jsxs)("button",{onClick:()=>u(g.slug,g.method[0]?.minutes),className:"flex items-center gap-2 rounded-full bg-scotch-600 px-3.5 py-2 text-[11px] font-semibold uppercase tracking-[2px] text-white shadow-lg transition-colors hover:bg-scotch-500",children:[(0,t.jsx)("svg",{className:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6v6l4 2m6-2a10 10 0 11-20 0 10 10 0 0120 0z"})}),"Cook this dish"]}
9),g.arModelUrl&&(0,t.jsxs)("button",{onClick:()=>d(!0),className:"flex items-center gap-2 rounded-full border border-white/15 bg-black/45 px-3.5 py-2 text-[11px] font-semibold uppercase tracking-[2px] text-coconut-100 backdrop-blur-sm transition-colors hover:border-scotch-500/60 hover:text-scotch-400",children:[(0,t.jsx)("svg",{className:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 3l7 4v10l-7 4-7-4V7l7-4zm0 0v8m7-4l-7 4m-7-4l7 4"})}),"View on table"]})]}),(0,t.jsxs)("button",{onClick:()=>m(!0),"aria-label":"Ask Miss Vie or Chef Marcus",className:"absolute bottom-24 right-3 z-10 flex items-center gap-2 rounded-full border border-white/15 bg-black/45 px-3.5 py-2.5 text-[11px] font-semibold uppercase tracking-[2px] text-coconut-100 backdrop-blur-sm transition-colors hover:border-scotch-500/60 hover:text-scotch-400 md:bottom-6 md:right-4",children:[(0,t.jsx)("svg",{className:"h-4 w-4",fill:"currentColor",viewBox:"0 0 24 24",children:(0,t.jsx)("path",{d:"M12 3C6.5 3 2 6.9 2 11.7c0 2.7 1.4 5.1 3.6 6.7-.1.9-.5 2.3-1.5 3.6 0 0 2.4-.3 4.5-1.7 1.1.3 2.2.5 3.4.5 5.5 0 10-3.9 10-8.7S17.5 3 12 3z"})}),"Ask the kitchen"]}),(0,t.jsxs)("div",{className:"pointer-events-none absolute bottom-0 left-0 right-0 p-4 text-center md:p-5",children:[(0,t.jsx)("p",{className:"text-[10px] uppercase tracking-[3px] text-scotch-500",children:g.era}),(0,t.jsx)("h1",{className:"mt-1 text-2xl font-bold text-coconut-50 md:text-3xl",style:{fontFamily:"var(--font-display), Georgia, serif"},children:g.name}),(0,t.jsxs)("p",{className:"mt-0.5 text-xs italic text-ackee-300/80",children:["â",g.nickname,"â · ",g.region]}),(0,t.jsx)("p",{className:"mt-2 hidden text-[10px] uppercase tracking-[2px] text-coconut-200/40 md:block",children:"Drag to orbit · hover the dish · tap a glowing pin to fly in"})]})]}),(0,t.jsxs)("aside",{className:"flex min-h-0 flex-1 flex-col border-t border-white/10 lg:w-[380px] lg:flex-none lg:flex-initial lg:border-l lg:border-t-0",children:[(0,t.jsx)("div",{className:"flex shrink-0 border-b border-white/10",children:I.map(e=>(0,t.jsx)("button",{onClick:()=>o(e),className:`flex-1 px-2 py-3 text-[11px] font-semibold uppercase tracking-[2px] transition-colors ${a===e?"border-b-2 border-scotch-500 text-coconut-50":"border-b-2 border-transparent text-coconut-200/50 hover:text-coconut-200"}`,children:e},e))}),(0,t.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto p-5",children:["story"===a&&(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,t.jsx)("span",{className:"rounded-full bg-white/8 px-3 py-1 text-[11px] tracking-wide text-coconut-200/80 ring-1 ring-white/10",children:g.era}),(0,t.jsx)("span",{className:"rounded-full bg-white/8 px-3 py-1 text-[11px] tracking-wide text-coconut-200/80 ring-1 ring-white/10",children:g.region})]}),(0,t.jsx)("p",{className:"text-[15px] leading-relaxed text-coconut-100/90",children:g.story}),(0,t.jsxs)("div",{className:"rounded-xl bg-white/5 p-4 ring-1 ring-white/10",children:[(0,t.jsx)("p",{className:"mb-2 text-[10px] uppercase tracking-[3px] text-ackee-400",children:"On the model"}),(0,t.jsx)("p",{className:"text-sm leading-relaxed text-coconut-200/75",children:"The glowing pins on the dish carry its heritage â tap them in the 3D view to read each story."})]})]}),"ingredients"===a&&(0,t.jsx)("ul",{className:"space-y-2.5",children:g.ingredients.map(e=>(0,t.jsxs)("li",{className:"flex items-baseline justify-between gap-4 border-b border-white/5 pb-2.5",children:[(0,t.jsx)("span",{className:"text-sm text-coconut-100/90",children:e.item}),(0,t.jsx)("span",{className:"shrink-0 text-xs font-medium text-ackee-300/90",children:e.quantity})]},e.item))}),"method"===a&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{onClick:()=>u(g.slug,g.method[0]?.minutes),className:"mb-5 w-full rounded-full bg-scotch-600 py-3 text-xs font-semibold uppercase tracking-[2px] text-white transition-colors hover:bg-scotch-500",children:"Cook this dish step-by-step â"}),(0,t.jsx)("ol",{className:"space-y-5",children:g.method.map((e,i)=>(0,t.jsxs)("li",{className:"flex gap-3.5",children:[(0,t.jsx)("span",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-scotch-600 text-xs font-bold text-white",children:i+1}),(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("p",{className:"text-sm leading-relaxed text-coconut-100/90",children:e.step}),e.minutes&&(0,t.jsxs)("p",{className:"mt-1 text-[11px] font-medium tracking-wide text-ackee-400",children:["â± about ",e.minutes," min"]}),e.tip&&(0,t.jsx)("p",{className:"mt-1.5 rounded-lg bg-leaf-600/15 px-3 py-2 text-[13px] italic leading-snug text-leaf-300 ring-1 ring-leaf-600/25",children:e.tip})]})]},i))})]}),"plating"===a&&(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)("img",{src:g.image,alt:g.name,className:"w-full rounded-xl ring-1 ring-white/10"}),(0,t.jsx)("p",{className:"text-[15px] leading-relaxed text-coconut-100/90",children:g.plating})]})]})]})]}),(0,t.jsx)(w,{children:h&&(0,t.jsx)(T,{recipe:g,onOpenAssistant:()=>m(!0)})}),(0,t.jsx)(w,{children:p&&(0,t.jsx)(E,{recipe:g,onClose:()=>m(!1)})}),(0,t.jsx)(w,{children:c&&(0,t.jsx)(j,{recipe:g,onClose:()=>d(!1)})}),(0,t.jsx)(w,{children:r&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(k.motion.div,{initial:{opacity:0}
9,animate:{opacity:1},exit:{opacity:0},onClick:()=>l(null),className:"fixed inset-0 z-40 bg-black/55 backdrop-blur-[2px]"}),(0,t.jsxs)(k.motion.aside,{initial:{x:"100%"},animate:{x:0},exit:{x:"100%"},transition:{type:"spring",stiffness:320,damping:32},className:"fixed inset-y-0 right-0 z-50 flex w-full max-w-[420px] flex-col bg-[#1c1613] shadow-2xl ring-1 ring-white/10",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4 border-b border-white/10 p-5",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("p",{className:"text-[10px] uppercase tracking-[3px] text-scotch-500",children:["Heritage pin · ",r.label]}),(0,t.jsx)("h2",{className:"mt-1.5 text-2xl font-bold text-coconut-50",style:{fontFamily:"var(--font-display), Georgia, serif"},children:r.title})]}),(0,t.jsx)("button",{onClick:()=>l(null),"aria-label":"Close heritage pin",className:"rounded-full p-2 text-coconut-200/60 transition-colors hover:bg-white/10 hover:text-coconut-50",children:(0,t.jsx)("svg",{className:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})})})]}),(0,t.jsxs)("div",{className:"flex-1 overflow-y-auto p-5",children:[(0,t.jsx)("p",{className:"text-[15px] leading-relaxed text-coconut-100/90",children:r.body}),(0,t.jsx)("div",{className:"mt-6 rounded-xl bg-white/5 p-4 ring-1 ring-white/10",children:(0,t.jsxs)("p",{className:"text-[11px] leading-relaxed text-coconut-200/60",children:["From ",(0,t.jsx)("span",{className:"text-coconut-200/90",children:g.name})," ","â ",g.era,", ",g.region,"."]})})]})]})]})})]})}e.s(["Vol2Experience",()=>L],0)}]);
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.