waveframe 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +4 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +3 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +491 -0
- package/dist/index.d.ts +491 -2
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/package.json +8 -8
- package/dist/src/App.d.ts +0 -2
- package/dist/src/__tests__/WaveframePlayer.test.d.ts +0 -1
- package/dist/src/atoms/CodeBlock.d.ts +0 -9
- package/dist/src/components/WaveframePlayer.d.ts +0 -83
- package/dist/src/core/PeakAnalyzer.d.ts +0 -41
- package/dist/src/core/PlayerCore.d.ts +0 -92
- package/dist/src/core/WaveframeEngine.d.ts +0 -122
- package/dist/src/hooks/usePersistentSettings.d.ts +0 -1
- package/dist/src/hooks/useResampledPeaks.d.ts +0 -1
- package/dist/src/hooks/useResizeObserver.d.ts +0 -1
- package/dist/src/hooks/useWaveframe.d.ts +0 -51
- package/dist/src/hooks/useWaveframeStore.d.ts +0 -27
- package/dist/src/index.d.ts +0 -7
- package/dist/src/main.d.ts +0 -0
- package/dist/src/molecules/ArtworkOverlay.d.ts +0 -20
- package/dist/src/organisms/SettingsPanel.d.ts +0 -29
- package/dist/src/organisms/Waveform.d.ts +0 -15
- package/dist/src/types/index.d.ts +0 -75
- package/dist/src/utils/audio.d.ts +0 -33
- package/dist/src/utils/index.d.ts +0 -13
- package/dist/waveframe.cjs +0 -7
- package/dist/waveframe.css +0 -3
- package/dist/waveframe.es.js +0 -603
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';var react=require('react'),jsxRuntime=require('react/jsx-runtime');var A=class{audio;listeners=new Set;_state;constructor(){this.audio=new Audio,this._state={isPlaying:false,currentTime:0,duration:0,volume:1,muted:false},this.initListeners();}initListeners(){this.audio.addEventListener("play",()=>this.updateState({isPlaying:true})),this.audio.addEventListener("pause",()=>this.updateState({isPlaying:false})),this.audio.addEventListener("timeupdate",()=>this.updateState({currentTime:this.audio.currentTime})),this.audio.addEventListener("durationchange",()=>this.updateState({duration:this.audio.duration})),this.audio.addEventListener("volumechange",()=>this.updateState({volume:this.audio.volume,muted:this.audio.muted})),this.audio.addEventListener("ended",()=>this.updateState({isPlaying:false}));}updateState(t){this._state={...this._state,...t},this.notify();}notify(){this.listeners.forEach(t=>t(this._state));}subscribe(t){return this.listeners.add(t),()=>this.listeners.delete(t)}get state(){return this._state}setSource(t){this.audio.src=t,this.audio.load();}play(){return this.audio.play()}pause(){this.audio.pause();}togglePlay(){this._state.isPlaying?this.pause():this.play();}seek(t){this.audio.currentTime=t;}setVolume(t){this.audio.volume=t;}setMuted(t){this.audio.muted=t;}dispose(){this.pause(),this.audio.src="",this.listeners.clear();}};var C=class{audioCtx=null;constructor(){}getContext(){return this.audioCtx||(this.audioCtx=new(window.AudioContext||window.webkitAudioContext)),this.audioCtx}async generatePeaks(t,e=512){try{let o;if(typeof t=="string"){let c=await fetch(t);if(!c.ok)throw new Error(`Failed to fetch audio: ${c.statusText}`);o=await c.arrayBuffer();}else o=await t.arrayBuffer();let n=(await this.getContext().decodeAudioData(o)).getChannelData(0),s=Math.floor(n.length/e),l=[];for(let c=0;c<e;c++){let u=0,g=c*s,d=g+s;for(let y=g;y<d;y++){let S=Math.abs(n[y]);S>u&&(u=S);}l.push(u);}let x=Math.max(...l);return l.map(c=>c/(x||1))}catch(o){throw console.error("PeakAnalyzer Error:",o),o}}dispose(){this.audioCtx&&(this.audioCtx.close(),this.audioCtx=null);}};var W=class{player;analyzer;listeners=new Set;_state;_media=null;_objectUrl=null;constructor(){this.player=new A,this.analyzer=new C,this._state={...this.player.state,peaks:[],isAnalyzing:false,error:null},this.player.subscribe(t=>{this.updateState({...t});});}updateState(t){this._state={...this._state,...t},this.notify();}notify(){this.listeners.forEach(t=>t(this._state));}subscribe(t){return this.listeners.add(t),()=>this.listeners.delete(t)}getSnapshot(){return this._state}revokeOldSource(){this._objectUrl&&(URL.revokeObjectURL(this._objectUrl),this._objectUrl=null);}load(t,e){if(this._media!==t){this.revokeOldSource(),this._media=t;let i;typeof t=="string"?i=t:(this._objectUrl=URL.createObjectURL(t),i=this._objectUrl),this.player.setSource(i);let a=e&&e.length>0;this.updateState({peaks:e||[],isAnalyzing:false,error:null}),a||this.analyze();}else e&&e!==this._state.peaks&&this.updateState({peaks:e});}async analyze(t=512){if(!this._media){this.updateState({error:"No media loaded to analyze"});return}this.updateState({isAnalyzing:true,error:null});try{let e=await this.analyzer.generatePeaks(this._media,t);this.updateState({peaks:e,isAnalyzing:!1});}catch(e){this.updateState({isAnalyzing:false,error:e instanceof Error?e.message:"Analysis failed"});}}togglePlay(){this.player.togglePlay();}play(){this.player.play();}pause(){this.player.pause();}seek(t){let{duration:e}=this._state;e&&this.player.seek(t*e);}setVolume(t){this.player.setVolume(t);}setMuted(t){this.player.setMuted(t);}dispose(){this.revokeOldSource(),this.player.dispose(),this.analyzer.dispose(),this.listeners.clear();}};var q=r=>react.useSyncExternalStore(t=>r.subscribe(t),()=>r.getSnapshot());var Q=(r,t={})=>{let{peaks:e,engine:o}=t,i=react.useMemo(()=>o||new W,[o]),a=o||i,n=q(a);return react.useEffect(()=>{r&&a.load(r,e);},[a,r,e]),react.useEffect(()=>()=>{o||i.dispose();},[i,o]),{state:n,engine:a,togglePlay:()=>a.togglePlay(),play:()=>a.play(),pause:()=>a.pause(),seek:s=>a.seek(s),setVolume:s=>a.setVolume(s),setMuted:s=>a.setMuted(s),analyze:s=>a.analyze(s)}};var Nt=async(r,t=512)=>{let e=new C;try{return await e.generatePeaks(r,t)}finally{e.dispose();}},jt=async r=>{let e=await(await fetch(r)).blob();return URL.createObjectURL(e)},At=r=>{r&&r.startsWith("blob:")&&URL.revokeObjectURL(r);};var V=r=>{if(isNaN(r))return "0:00";let t=Math.floor(r/60),e=Math.floor(r%60);return `${t}:${e.toString().padStart(2,"0")}`},Y=(r,t)=>{if(r.length===0)return [];if(r.length===t)return r;let e=new Array(t),o=r.length/t;if(o>1)for(let i=0;i<t;i++){let a=0,n=Math.floor(i*o),s=Math.floor((i+1)*o);for(let l=n;l<s;l++)r[l]>a&&(a=r[l]);e[i]=a;}else for(let i=0;i<t;i++){let a=i*o,n=Math.floor(a),s=Math.min(n+1,r.length-1),l=a-n;e[i]=r[n]+(r[s]-r[n])*l;}return e},Tt=r=>r.split(`
|
|
3
|
+
`).map(t=>{let e=t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),o={},i=0,a=(n,s)=>{let l=`__TOKEN_${i++}__`;return o[l]=`<span class="${s}">${n}</span>`,l};return e=e.replace(/("(?:[^"\\]|\\.)*")/g,n=>a(n,"text-[#ce9178]")),e=e.replace(/\b(\d+(\.\d+)?)\b/g,n=>a(n,"text-[#b5cea8]")),e=e.replace(/\b(WaveframePlayer)\b/g,n=>a(n,"text-[#4ec9b0]")),e=e.replace(/\b([a-z][a-zA-Z0-9]+)(?==)/g,n=>a(n,"text-[#9cdcfe]")),e=e.replace(/(<|>|\{|\}|\/|:|,)/g,'<span class="text-gray-500">$1</span>'),Object.entries(o).forEach(([n,s])=>{e=e.replace(n,s);}),e});var tt=(r,t)=>react.useMemo(()=>Y(r,t),[r,t]);var T=r=>{let[t,e]=react.useState(0);return react.useEffect(()=>{if(!r.current)return;let o=new ResizeObserver(i=>{for(let a of i)e(a.contentRect.width);});return o.observe(r.current),()=>o.disconnect()},[r]),t};var D=react.memo(({artworkUrl:r,title:t,isLoading:e})=>jsxRuntime.jsxs("div",{className:"relative flex-shrink-0 w-32 h-32 md:w-40 md:h-40 overflow-hidden rounded-[var(--wf-artwork-rounded,0.75rem)] shadow-lg group/artwork",children:[jsxRuntime.jsx("div",{className:`w-full h-full transition-all duration-700 ${e?"blur-md scale-110":""}`,children:r?jsxRuntime.jsx("img",{src:r,alt:t,className:"w-full h-full object-cover transition-transform duration-500 group-hover/artwork:scale-110"}):jsxRuntime.jsx("div",{className:"w-full h-full bg-gradient-to-br from-[var(--wf-placeholder-from,#fb923c)] to-[var(--wf-placeholder-to,#ec4899)] flex items-center justify-center",children:jsxRuntime.jsx("svg",{className:"w-16 h-16 text-white opacity-50",fill:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{d:"M12 3v10.55c-.59-.34-1.27-.55-2-.55-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4V7h4V3h-6z"})})})}),e&&jsxRuntime.jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-black/10 backdrop-blur-[1px]",children:jsxRuntime.jsx("div",{className:"w-8 h-8 border-4 border-white/30 border-t-white rounded-full animate-spin"})})]}));D.displayName="ArtworkOverlay";var G=react.memo(({peaks:r,currentTime:t,duration:e,waveColor:o,progressColor:i,height:a,onSeek:n,resolution:s="auto",barWidth:l=2,barGap:x=1})=>{let c=react.useRef(null),u=react.useRef(null),g=react.useRef(null),d=T(g);react.useEffect(()=>{let b=c.current,f=u.current;if(!b||!f)return;let h=b.getContext("2d"),p=f.getContext("2d");if(!h||!p)return;let k=window.devicePixelRatio||1,P=b.getBoundingClientRect(),_=P.width*k,L=P.height*k;[b,f].forEach(w=>{(w.width!==_||w.height!==L)&&(w.width=_,w.height=L);}),(()=>{if(r.length===0)return;let{width:w,height:m}=b;h.clearRect(0,0,w,m),p.clearRect(0,0,w,m);let O=r.length,N=w/O,E=typeof s=="number"?N*.7:l*k,B=typeof s=="number"?N*.3:x*k;h.lineCap="round",h.lineWidth=E,p.lineCap="round",p.lineWidth=E,r.forEach(($,R)=>{let j=R*(E+B)+E/2,X=$*m*.8,H=(m-X)/2,Z=H+X;h.beginPath(),h.strokeStyle=o,h.moveTo(j,H),h.lineTo(j,Z),h.stroke(),p.beginPath(),p.strokeStyle=i,p.moveTo(j,H),p.lineTo(j,Z),p.stroke();});})();},[r,o,i,s,l,x,a]);let y=b=>{if(g.current&&e){let f=g.current.getBoundingClientRect(),h=b.clientX-f.left,p=Math.max(0,Math.min(1,h/f.width));n(p);}},S=e?t/e*100:0;return jsxRuntime.jsxs("div",{ref:g,className:"relative w-full cursor-pointer overflow-hidden",style:{height:`${a}px`},onClick:y,children:[jsxRuntime.jsx("canvas",{ref:c,className:"absolute inset-0 w-full h-full"}),jsxRuntime.jsx("div",{className:"absolute inset-0 h-full overflow-hidden transition-[width] duration-100 ease-linear pointer-events-none",style:{width:`${S}%`},children:jsxRuntime.jsx("canvas",{ref:u,className:"absolute h-full",style:{width:`${d}px`}})})]})});G.displayName="Waveform";var ut=react.memo(({media:r,peaks:t,artwork:e,title:o,artist:i,waveColor:a,progressColor:n,height:s=80,className:l="",style:x,resolution:c="auto",barWidth:u=2,barGap:g=1,theme:d,engine:y})=>{let{state:S,togglePlay:b,seek:f}=Q(r,{peaks:t,engine:y}),{isPlaying:h,currentTime:p,duration:k,peaks:P,isAnalyzing:_}=S,[L,U]=react.useState(typeof e=="string"?e:void 0);react.useEffect(()=>{if(e instanceof Blob){let R=URL.createObjectURL(e);return U(R),()=>URL.revokeObjectURL(R)}else U(e);},[e]);let w=react.useRef(null),m=T(w),O=react.useMemo(()=>typeof c=="number"?c:m>0?Math.max(1,Math.floor(m/(u+g))):P.length||1,[c,m,u,g,P.length]),N=tt(P,O),E=react.useMemo(()=>a||(d?d.bg==="#ffffff"?"#e5e7eb":"#374151":"#e5e7eb"),[a,d]),B=n||d?.primary||"#3b82f6",$=react.useMemo(()=>({...{"--wf-bg-color":d?.bg||"white","--wf-border-color":d?.border||"#f3f4f6","--wf-title-color":d?.text||"#111827","--wf-artist-color":d?.text||"#6b7280","--wf-time-color":d?.text||"#9ca3af","--wf-play-btn-bg":d?.primary||"#3b82f6","--wf-placeholder-from":d?.primary||"#fb923c","--wf-placeholder-to":d?.bg||"#ec4899"},...x}),[d,x]);return jsxRuntime.jsxs("div",{className:`group relative flex flex-col md:flex-row items-stretch gap-6 p-6 bg-[var(--wf-bg-color,white)] border border-[var(--wf-border-color,#f3f4f6)] rounded-[var(--wf-rounded,1rem)] shadow-xl hover:shadow-2xl transition-all duration-300 overflow-hidden ${l}`,style:$,children:[jsxRuntime.jsx(D,{artworkUrl:L,title:o,isLoading:_}),jsxRuntime.jsxs("div",{className:"flex-1 w-full flex flex-col min-w-0",children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-4 mb-6",children:[jsxRuntime.jsx("button",{onClick:b,className:"w-12 h-12 md:w-14 md:h-14 flex-shrink-0 flex items-center justify-center rounded-full bg-[var(--wf-play-btn-bg,#3b82f6)] text-white shadow-[0_4px_12px_rgba(0,0,0,0.15)] hover:shadow-[0_6px_16px_rgba(0,0,0,0.2)] transition-all hover:scale-105 active:scale-95 cursor-pointer border-none outline-none group/play",children:h?jsxRuntime.jsx("svg",{className:"w-6 h-6 md:w-7 md:h-7",fill:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{d:"M6 19h4V5H6v14zm8-14v14h4V5h-4z"})}):jsxRuntime.jsx("svg",{className:"w-6 h-6 md:w-7 md:h-7 ml-1",fill:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{d:"M8 5v14l11-7z"})})}),jsxRuntime.jsxs("div",{className:"flex-1 flex flex-col min-w-0",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between gap-4",children:[i&&jsxRuntime.jsx("p",{className:"text-[10px] md:text-xs font-bold uppercase text-[var(--wf-artist-color,#6b7280)] opacity-60 tracking-[0.1em] line-clamp-1",children:i}),jsxRuntime.jsxs("div",{className:"text-[10px] font-mono text-[var(--wf-time-color,#9ca3af)] tabular-nums flex-shrink-0",children:[V(p)," / ",V(k)]})]}),o&&jsxRuntime.jsx("h3",{className:"text-lg md:text-xl font-black text-[var(--wf-title-color,#111827)] tracking-tight line-clamp-1 mt-0.5 leading-tight",children:o})]})]}),jsxRuntime.jsx("div",{className:"mt-auto",ref:w,children:jsxRuntime.jsx(G,{peaks:N,currentTime:p,duration:k,waveColor:E,progressColor:B,height:s,onSeek:f,resolution:c,barWidth:u,barGap:g})})]})]})});ut.displayName="WaveframePlayer";exports.PeakAnalyzer=C;exports.PlayerCore=A;exports.WaveframeEngine=W;exports.WaveframePlayer=ut;exports.formatTime=V;exports.generatePeaks=Nt;exports.highlightCode=Tt;exports.loadAudioToMemory=jt;exports.resamplePeaks=Y;exports.revokeAudioMemory=At;exports.useWaveframeStore=q;//# sourceMappingURL=index.cjs.map
|
|
4
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/PlayerCore.ts","../src/core/PeakAnalyzer.ts","../src/core/WaveframeEngine.ts","../src/hooks/useWaveframeStore.ts","../src/hooks/useWaveframe.ts","../src/utils/audio.ts","../src/utils/index.ts","../src/hooks/useResampledPeaks.ts","../src/hooks/useResizeObserver.ts","../src/molecules/ArtworkOverlay.tsx","../src/organisms/Waveform.tsx","../src/components/WaveframePlayer.tsx"],"names":["PlayerCore","patch","l","listener","url","time","volume","muted","PeakAnalyzer","media","samples","arrayBuffer","response","channelData","blockSize","peaks","i","max","start","end","j","val","maxPeak","p","error","WaveframeEngine","playerState","sourceUrl","hasPeaks","percentage","duration","useWaveframeStore","engine","useSyncExternalStore","callback","useWaveframe","options","providedEngine","internalEngine","useMemo","state","useEffect","v","m","generatePeaks","audioUrl","analyzer","loadAudioToMemory","blob","revokeAudioMemory","formatTime","seconds","min","sec","resamplePeaks","targetCount","resampled","ratio","position","index","nextIndex","fraction","highlightCode","code","line","h","tokens","counter","addToken","cls","id","html","useResampledPeaks","useResizeObserver","ref","width","setWidth","useState","observer","entries","entry","ArtworkOverlay","memo","artworkUrl","title","isLoading","jsxs","jsx","Waveform","currentTime","waveColor","progressColor","height","onSeek","resolution","barWidth","barGap","canvasRef","useRef","progressCanvasRef","containerRef","containerWidth","canvas","progressCanvas","ctx","pCtx","dpr","rect","targetWidth","targetHeight","c","barCount","actualBarTotalWidth","actualBarWidth","actualBarGap","peak","x","barHeight","yStart","yEnd","handleSeek","e","progressPercent","WaveframePlayer","propPeaks","artwork","artist","propWaveColor","propProgressColor","className","propStyle","theme","togglePlay","seek","isPlaying","isAnalyzing","resolvedArtworkUrl","setResolvedArtworkUrl","resampledPeaks","mergedStyle"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Represents the low-level playback state of the audio element.\n */\nexport type PlayerState = {\n /** Whether the audio is currently playing */\n isPlaying: boolean;\n /** The current playback time in seconds */\n currentTime: number;\n /** The total duration of the track in seconds */\n duration: number;\n /** The current volume level (0 to 1) */\n volume: number;\n /** Whether the audio is currently muted */\n muted: boolean;\n};\n\n/**\n * A callback function that receives the latest PlayerState.\n */\nexport type PlayerListener = (state: PlayerState) => void;\n\n/**\n * The internal core class responsible for managing the HTMLAudioElement.\n * \n * It handles raw playback logic, volume control, and synchronizes the \n * internal `PlayerState` with DOM events from the underlying `Audio` instance.\n */\nexport class PlayerCore {\n private audio: HTMLAudioElement;\n private listeners: Set<PlayerListener> = new Set();\n private _state: PlayerState;\n\n /**\n * Initializes a new PlayerCore instance and sets up event listeners on a new Audio object.\n */\n constructor() {\n this.audio = new Audio();\n this._state = {\n isPlaying: false,\n currentTime: 0,\n duration: 0,\n volume: 1,\n muted: false,\n };\n\n this.initListeners();\n }\n\n /**\n * Subscribes to various HTMLMediaElement events to keep the internal state in sync.\n */\n private initListeners() {\n this.audio.addEventListener('play', () => this.updateState({ isPlaying: true }));\n this.audio.addEventListener('pause', () => this.updateState({ isPlaying: false }));\n this.audio.addEventListener('timeupdate', () => this.updateState({ currentTime: this.audio.currentTime }));\n this.audio.addEventListener('durationchange', () => this.updateState({ duration: this.audio.duration }));\n this.audio.addEventListener('volumechange', () => this.updateState({ \n volume: this.audio.volume, \n muted: this.audio.muted \n }));\n this.audio.addEventListener('ended', () => this.updateState({ isPlaying: false }));\n }\n\n /**\n * Updates the internal state and notifies subscribers.\n */\n private updateState(patch: Partial<PlayerState>) {\n this._state = { ...this._state, ...patch };\n this.notify();\n }\n\n /**\n * Triggers all registered listener callbacks.\n */\n private notify() {\n this.listeners.forEach(l => l(this._state));\n }\n\n /**\n * Registers a listener for state updates.\n * @param listener The callback function.\n * @returns An unsubscribe function.\n */\n public subscribe(listener: PlayerListener) {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n /**\n * Returns the current playback state.\n */\n public get state() {\n return this._state;\n }\n\n /**\n * Updates the source URL of the underlying audio element.\n * @param url The audio source URL.\n */\n public setSource(url: string) {\n this.audio.src = url;\n this.audio.load();\n }\n\n /**\n * Starts playback. Returns a promise that resolves when playback begins.\n */\n public play() {\n return this.audio.play();\n }\n\n /**\n * Pauses playback.\n */\n public pause() {\n this.audio.pause();\n }\n\n /**\n * Toggles between play and pause states.\n */\n public togglePlay() {\n if (this._state.isPlaying) {\n this.pause();\n } else {\n this.play();\n }\n }\n\n /**\n * Seeks to a specific time.\n * @param time Time in seconds.\n */\n public seek(time: number) {\n this.audio.currentTime = time;\n }\n\n /**\n * Sets the volume level.\n * @param volume Level from 0 to 1.\n */\n public setVolume(volume: number) {\n this.audio.volume = volume;\n }\n\n /**\n * Mutes or unmutes the audio element.\n * @param muted Mute status.\n */\n public setMuted(muted: boolean) {\n this.audio.muted = muted;\n }\n\n /**\n * Cleans up the audio element and removes all listeners.\n */\n public dispose() {\n this.pause();\n this.audio.src = '';\n this.listeners.clear();\n }\n}\n","/**\n * A specialized class for decoding audio data and generating waveform peaks.\n * \n * It leverages the Web Audio API (`AudioContext`) to process audio buffers \n * and extract amplitude data for visualization.\n */\nexport class PeakAnalyzer {\n private audioCtx: AudioContext | null = null;\n\n /**\n * Initializes the analyzer. AudioContext creation is deferred to the first use \n * to comply with browser autoplay and resource management policies.\n */\n constructor() {}\n\n /**\n * Lazily creates or returns the existing AudioContext.\n */\n private getContext(): AudioContext {\n if (!this.audioCtx) {\n this.audioCtx = new (window.AudioContext || (window as any).webkitAudioContext)();\n }\n return this.audioCtx;\n }\n\n /**\n * Processes media (URL or Blob) and generates a set of normalized peaks.\n * \n * @param media The URL string or Blob object to analyze.\n * @param samples The number of peaks (bars) to generate. Defaults to 512.\n * @returns A promise resolving to an array of normalized peak values (0 to 1).\n * \n * @example\n * ```typescript\n * const analyzer = new PeakAnalyzer();\n * \n * // Analyze from URL\n * const peaksFromUrl = await analyzer.generatePeaks('https://example.com/audio.mp3');\n * \n * // Analyze from Blob\n * const peaksFromBlob = await analyzer.generatePeaks(myAudioBlob);\n * ```\n */\n public async generatePeaks(media: string | Blob, samples: number = 512): Promise<number[]> {\n try {\n let arrayBuffer: ArrayBuffer;\n\n if (typeof media === 'string') {\n const response = await fetch(media);\n if (!response.ok) throw new Error(`Failed to fetch audio: ${response.statusText}`);\n arrayBuffer = await response.arrayBuffer();\n } else {\n arrayBuffer = await media.arrayBuffer();\n }\n\n const audioCtx = this.getContext();\n const audioBuffer = await audioCtx.decodeAudioData(arrayBuffer);\n \n const channelData = audioBuffer.getChannelData(0); // Use left channel\n const blockSize = Math.floor(channelData.length / samples);\n const peaks = [];\n\n for (let i = 0; i < samples; i++) {\n let max = 0;\n const start = i * blockSize;\n const end = start + blockSize;\n \n for (let j = start; j < end; j++) {\n const val = Math.abs(channelData[j]);\n if (val > max) max = val;\n }\n peaks.push(max);\n }\n \n // Normalize peaks to 0-1 range\n const maxPeak = Math.max(...peaks);\n return peaks.map(p => p / (maxPeak || 1));\n } catch (error) {\n console.error('PeakAnalyzer Error:', error);\n throw error;\n }\n }\n\n /**\n * Closes the AudioContext and releases system audio resources.\n */\n public dispose() {\n if (this.audioCtx) {\n this.audioCtx.close();\n this.audioCtx = null;\n }\n }\n}\n","import { PlayerCore, PlayerState } from './PlayerCore';\nimport { PeakAnalyzer } from './PeakAnalyzer';\n\n/**\n * Represents the complete state of the Waveframe engine, combining playback and analysis.\n */\nexport type EngineState = PlayerState & {\n /** The current set of generated or provided waveform peaks (0-1 range) */\n peaks: number[];\n /** Whether an audio analysis process is currently in progress */\n isAnalyzing: boolean;\n /** Any error message encountered during playback or analysis */\n error: string | null;\n};\n\n/**\n * A callback function that receives the latest EngineState.\n */\nexport type EngineListener = (state: EngineState) => void;\n\n/**\n * The orchestrator class for Waveframe. \n * \n * It manages the lifecycle of audio playback and waveform analysis, providing a unified \n * store-like interface that can be easily consumed by React or other frameworks.\n * \n * @example\n * ```typescript\n * const engine = new WaveframeEngine();\n * \n * // Load from URL (automatic analysis if peaks omitted)\n * engine.load('https://example.com/audio.mp3');\n * \n * // Load from Blob with pre-computed peaks\n * engine.load(myBlob, [0.1, 0.5, 0.8]);\n * \n * // Subscription\n * const unsubscribe = engine.subscribe((state) => {\n * console.log('Current time:', state.currentTime);\n * });\n * ```\n */\nexport class WaveframeEngine {\n private player: PlayerCore;\n private analyzer: PeakAnalyzer;\n private listeners: Set<EngineListener> = new Set();\n private _state: EngineState;\n\n private _media: string | Blob | null = null;\n private _objectUrl: string | null = null;\n\n /**\n * Creates a new instance of the WaveframeEngine.\n * Initializes internal PlayerCore and PeakAnalyzer.\n */\n constructor() {\n this.player = new PlayerCore();\n this.analyzer = new PeakAnalyzer();\n \n this._state = {\n ...this.player.state,\n peaks: [],\n isAnalyzing: false,\n error: null,\n };\n\n // Subscribe to player updates\n this.player.subscribe((playerState) => {\n this.updateState({ ...playerState });\n });\n }\n\n /**\n * Internal method to update the state and notify all subscribers.\n */\n private updateState(patch: Partial<EngineState>) {\n this._state = { ...this._state, ...patch };\n this.notify();\n }\n\n /**\n * Notifies all registered listeners of a state change.\n */\n private notify() {\n this.listeners.forEach(l => l(this._state));\n }\n\n // --- Store Interface ---\n\n /**\n * Registers a listener to be called whenever the engine state changes.\n * @param listener The callback function.\n * @returns An unsubscribe function.\n */\n public subscribe(listener: EngineListener) {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n /**\n * Returns a snapshot of the current engine state.\n * Useful for `useSyncExternalStore`.\n */\n public getSnapshot(): EngineState {\n return this._state;\n }\n\n // --- Actions ---\n\n /**\n * Revokes any existing Object URLs to prevent memory leaks.\n */\n private revokeOldSource() {\n if (this._objectUrl) {\n URL.revokeObjectURL(this._objectUrl);\n this._objectUrl = null;\n }\n }\n\n /**\n * Loads media (URL or Blob) into the player.\n * \n * If a string is passed, it's treated as a URL and used directly for playback.\n * If a Blob is passed, an Object URL is created for playback.\n * \n * If `peaks` are not provided, it automatically triggers an analysis.\n * \n * @param media The audio source (URL string or Blob/File object).\n * @param peaks Optional pre-generated peaks for the waveform.\n */\n public load(media: string | Blob, peaks?: number[]) {\n const isNewMedia = this._media !== media;\n \n if (isNewMedia) {\n this.revokeOldSource();\n this._media = media;\n\n let sourceUrl: string;\n if (typeof media === 'string') {\n sourceUrl = media;\n } else {\n this._objectUrl = URL.createObjectURL(media);\n sourceUrl = this._objectUrl;\n }\n\n this.player.setSource(sourceUrl);\n \n const hasPeaks = peaks && peaks.length > 0;\n this.updateState({ \n peaks: peaks || [], \n isAnalyzing: false, \n error: null \n });\n\n // Automatic analysis if peaks are missing\n if (!hasPeaks) {\n this.analyze();\n }\n } else if (peaks && peaks !== this._state.peaks) {\n // Update peaks if they change even if media is same\n this.updateState({ peaks });\n }\n }\n\n /**\n * Analyzes the current media to generate waveform peaks.\n * @param samples The number of peaks to generate. Defaults to 512.\n */\n public async analyze(samples: number = 512) {\n if (!this._media) {\n this.updateState({ error: 'No media loaded to analyze' });\n return;\n }\n\n this.updateState({ isAnalyzing: true, error: null });\n try {\n const peaks = await this.analyzer.generatePeaks(this._media, samples);\n this.updateState({ peaks, isAnalyzing: false });\n } catch (e) {\n this.updateState({ \n isAnalyzing: false, \n error: e instanceof Error ? e.message : 'Analysis failed' \n });\n }\n }\n\n /**\n * Toggles playback between playing and paused.\n */\n public togglePlay() {\n this.player.togglePlay();\n }\n\n /**\n * Starts audio playback.\n */\n public play() {\n this.player.play();\n }\n\n /**\n * Pauses audio playback.\n */\n public pause() {\n this.player.pause();\n }\n\n /**\n * Seeks to a specific position in the track.\n * @param percentage The seek position as a decimal (0 to 1).\n */\n public seek(percentage: number) {\n const { duration } = this._state;\n if (duration) {\n this.player.seek(percentage * duration);\n }\n }\n\n /**\n * Sets the playback volume.\n * @param volume The volume level (0 to 1).\n */\n public setVolume(volume: number) {\n this.player.setVolume(volume);\n }\n\n /**\n * Mutes or unmutes the audio.\n * @param muted Whether the audio should be muted.\n */\n public setMuted(muted: boolean) {\n this.player.setMuted(muted);\n }\n\n /**\n * Disposes of the engine, pausing playback and clearing all listeners and resources.\n */\n public dispose() {\n this.revokeOldSource();\n this.player.dispose();\n this.analyzer.dispose();\n this.listeners.clear();\n }\n}\n","import { useSyncExternalStore } from 'react';\nimport { WaveframeEngine, EngineState } from '../core/WaveframeEngine';\n\n/**\n * A React hook that synchronizes a WaveframeEngine's state with a React component.\n * \n * It uses `useSyncExternalStore` for high-performance updates, ensuring that \n * the component only re-renders when the engine's state snapshot actually changes.\n * \n * @param engine The WaveframeEngine instance to subscribe to.\n * @returns The current EngineState (isPlaying, currentTime, peaks, etc.).\n * \n * @example\n * ```tsx\n * const MyPlayer = ({ engine }: { engine: WaveframeEngine }) => {\n * const { isPlaying, currentTime, duration } = useWaveframeStore(engine);\n * \n * return (\n * <div>\n * <button onClick={() => engine.togglePlay()}>\n * {isPlaying ? 'Pause' : 'Play'}\n * </button>\n * <p>{currentTime.toFixed(2)} / {duration.toFixed(2)}</p>\n * </div>\n * );\n * };\n * ```\n */\nexport const useWaveframeStore = (engine: WaveframeEngine): EngineState => {\n return useSyncExternalStore(\n (callback) => engine.subscribe(callback),\n () => engine.getSnapshot()\n );\n};\n","import { useMemo, useEffect } from 'react';\nimport { WaveframeEngine, EngineState } from '../core/WaveframeEngine';\nimport { useWaveframeStore } from './useWaveframeStore';\n\n/**\n * Configuration options for the `useWaveframe` hook.\n */\nexport interface UseWaveframeOptions {\n /** Optional pre-computed peaks to skip automatic analysis */\n peaks?: number[];\n /** Optional external engine instance for shared playback across components */\n engine?: WaveframeEngine;\n}\n\n/**\n * A headless hook that provides full control over the Waveframe engine.\n * \n * It manages the engine's lifecycle, loads the provided media, and returns \n * the current state along with playback controls.\n * \n * @param media The audio source (URL string or Blob/File object).\n * @param options Additional configuration and an optional external engine.\n * \n * @example\n * ```tsx\n * const { state, togglePlay, seek } = useWaveframe('https://example.com/audio.mp3');\n * \n * return (\n * <div>\n * <button onClick={togglePlay}>{state.isPlaying ? 'Pause' : 'Play'}</button>\n * <div onClick={(e) => seek(0.5)}>Seek to Middle</div>\n * </div>\n * );\n * ```\n */\nexport const useWaveframe = (media: string | Blob | undefined, options: UseWaveframeOptions = {}) => {\n const { peaks, engine: providedEngine } = options;\n\n // Initialize engine (only once)\n const internalEngine = useMemo(() => providedEngine || new WaveframeEngine(), [providedEngine]);\n const engine = providedEngine || internalEngine;\n\n // Subscribe to engine state\n const state = useWaveframeStore(engine);\n\n // Sync media with engine\n useEffect(() => {\n if (media) {\n engine.load(media, peaks);\n }\n }, [engine, media, peaks]);\n\n // Handle disposal\n useEffect(() => {\n return () => {\n // Only dispose if we created it internally\n if (!providedEngine) {\n internalEngine.dispose();\n }\n };\n }, [internalEngine, providedEngine]);\n\n return {\n /** The current reactive state of the engine */\n state,\n /** The raw WaveframeEngine instance for advanced usage */\n engine,\n /** Toggles playback between playing and paused */\n togglePlay: () => engine.togglePlay(),\n /** Starts audio playback */\n play: () => engine.play(),\n /** Pauses audio playback */\n pause: () => engine.pause(),\n /** Seeks to a specific percentage (0-1) */\n seek: (percentage: number) => engine.seek(percentage),\n /** Sets the playback volume (0-1) */\n setVolume: (v: number) => engine.setVolume(v),\n /** Mutes or unmutes the audio */\n setMuted: (m: boolean) => engine.setMuted(m),\n /** Manually triggers a re-analysis of the current media */\n analyze: (samples?: number) => engine.analyze(samples),\n };\n};\n","/**\n * Advanced Audio Utilities using Web Audio API\n */\nimport { PeakAnalyzer } from '../core/PeakAnalyzer';\n\n/**\n * Loads audio from a URL, decodes it, and generates a specific number of peaks (samples).\n * \n * This is a high-level utility function that internally manages a `PeakAnalyzer` instance.\n * \n * @param audioUrl The URL of the audio file to analyze.\n * @param samples The number of peaks (bars) to generate. Defaults to 512.\n * @returns A promise resolving to an array of normalized peak values (0 to 1).\n * \n * @example\n * ```typescript\n * const peaks = await generatePeaks('https://example.com/audio.mp3', 256);\n * ```\n */\nexport const generatePeaks = async (audioUrl: string, samples: number = 512): Promise<number[]> => {\n const analyzer = new PeakAnalyzer();\n try {\n return await analyzer.generatePeaks(audioUrl, samples);\n } finally {\n analyzer.dispose();\n }\n};\n\n/**\n * Loads audio into memory as a Blob and returns a temporary Object URL.\n * \n * Useful for ensuring audio data is fully loaded locally before starting \n * playback or analysis, which can help with CORS issues or slow networks.\n * \n * @param url The URL of the remote audio file.\n * @returns A promise resolving to a temporary `blob:` URL.\n */\nexport const loadAudioToMemory = async (url: string): Promise<string> => {\n const response = await fetch(url);\n const blob = await response.blob();\n return URL.createObjectURL(blob);\n};\n\n/**\n * Cleanup function to prevent memory leaks from Object URLs.\n * \n * Call this when a `blob:` URL is no longer needed (e.g., when the component unmounts).\n * \n * @param url The Object URL to revoke.\n */\nexport const revokeAudioMemory = (url: string) => {\n if (url && url.startsWith('blob:')) {\n URL.revokeObjectURL(url);\n }\n};\n","/**\n * Formats seconds into a M:SS string\n */\nexport const formatTime = (seconds: number): string => {\n if (isNaN(seconds)) return '0:00';\n const min = Math.floor(seconds / 60);\n const sec = Math.floor(seconds % 60);\n return `${min}:${sec.toString().padStart(2, '0')}`;\n};\n\n/**\n * Resamples an array of peaks to a target count using bucket-max or linear interpolation\n */\nexport const resamplePeaks = (peaks: number[], targetCount: number): number[] => {\n if (peaks.length === 0) return [];\n if (peaks.length === targetCount) return peaks;\n\n const resampled = new Array(targetCount);\n const ratio = peaks.length / targetCount;\n\n if (ratio > 1) {\n // Downsampling: Bucket Max\n for (let i = 0; i < targetCount; i++) {\n let max = 0;\n const start = Math.floor(i * ratio);\n const end = Math.floor((i + 1) * ratio);\n for (let j = start; j < end; j++) {\n if (peaks[j] > max) max = peaks[j];\n }\n resampled[i] = max;\n }\n } else {\n // Upsampling: Linear Interpolation\n for (let i = 0; i < targetCount; i++) {\n const position = i * ratio;\n const index = Math.floor(position);\n const nextIndex = Math.min(index + 1, peaks.length - 1);\n const fraction = position - index;\n resampled[i] = peaks[index] + (peaks[nextIndex] - peaks[index]) * fraction;\n }\n }\n return resampled;\n};\n\n/**\n * High-performance token-based syntax highlighter for React snippets\n */\nexport const highlightCode = (code: string): string[] => {\n return code.split('\\n').map((line) => {\n // 1. Escape basic HTML\n let h = line.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n\n // 2. Identify and tokenize segments to avoid nested replacement issues\n const tokens: { [key: string]: string } = {};\n let counter = 0;\n const addToken = (val: string, cls: string) => {\n const id = `__TOKEN_${counter++}__`;\n tokens[id] = `<span class=\"${cls}\">${val}</span>`;\n return id;\n };\n\n // Strings\n h = h.replace(/(\"(?:[^\"\\\\]|\\\\.)*\")/g, (m) => addToken(m, 'text-[#ce9178]'));\n // Numbers\n h = h.replace(/\\b(\\d+(\\.\\d+)?)\\b/g, (m) => addToken(m, 'text-[#b5cea8]'));\n // Component Name\n h = h.replace(/\\b(WaveframePlayer)\\b/g, (m) => addToken(m, 'text-[#4ec9b0]'));\n // Props (anything followed by =)\n h = h.replace(/\\b([a-z][a-zA-Z0-9]+)(?==)/g, (m) => addToken(m, 'text-[#9cdcfe]'));\n\n // 3. Style remaining symbols\n h = h.replace(/(<|>|\\{|\\}|\\/|:|,)/g, '<span class=\"text-gray-500\">$1</span>');\n\n // 4. In-place token resolution\n Object.entries(tokens).forEach(([id, html]) => {\n h = h.replace(id, html);\n });\n\n return h;\n });\n};\n\nexport * from './audio';\n","import { useMemo } from 'react';\nimport { resamplePeaks } from '../utils';\n\nexport const useResampledPeaks = (peaks: number[], targetCount: number) => {\n return useMemo(() => resamplePeaks(peaks, targetCount), [peaks, targetCount]);\n};\n","import { useState, useEffect } from 'react';\n\nexport const useResizeObserver = (ref: React.RefObject<HTMLElement | null>) => {\n const [width, setWidth] = useState(0);\n\n useEffect(() => {\n if (!ref.current) return;\n\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setWidth(entry.contentRect.width);\n }\n });\n\n observer.observe(ref.current);\n return () => observer.disconnect();\n }, [ref]);\n\n return width;\n};\n","import React, { memo } from 'react';\n\n/**\n * Props for the ArtworkOverlay component.\n */\ninterface ArtworkOverlayProps {\n /** The URL or Object URL of the artwork image */\n artworkUrl?: string;\n /** The title of the track (used for alt text) */\n title?: string;\n /** Whether the artwork is currently being processed or the audio is analyzing */\n isLoading?: boolean;\n}\n\n/**\n * A purely visual component for displaying track artwork.\n * \n * It handles loading states with a blur effect and provides a consistent \n * container for the track image.\n */\nexport const ArtworkOverlay: React.FC<ArtworkOverlayProps> = memo(({ \n artworkUrl, \n title, \n isLoading\n}) => {\n return (\n <div className=\"relative flex-shrink-0 w-32 h-32 md:w-40 md:h-40 overflow-hidden rounded-[var(--wf-artwork-rounded,0.75rem)] shadow-lg group/artwork\">\n <div className={`w-full h-full transition-all duration-700 ${isLoading ? 'blur-md scale-110' : ''}`}>\n {artworkUrl ? (\n <img\n src={artworkUrl}\n alt={title}\n className=\"w-full h-full object-cover transition-transform duration-500 group-hover/artwork:scale-110\"\n />\n ) : (\n <div className=\"w-full h-full bg-gradient-to-br from-[var(--wf-placeholder-from,#fb923c)] to-[var(--wf-placeholder-to,#ec4899)] flex items-center justify-center\">\n <svg className=\"w-16 h-16 text-white opacity-50\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M12 3v10.55c-.59-.34-1.27-.55-2-.55-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4V7h4V3h-6z\" />\n </svg>\n </div>\n )}\n </div>\n\n {isLoading && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-black/10 backdrop-blur-[1px]\">\n <div className=\"w-8 h-8 border-4 border-white/30 border-t-white rounded-full animate-spin\" />\n </div>\n )}\n </div>\n );\n});\n\nArtworkOverlay.displayName = 'ArtworkOverlay';\n","import React, { useRef, useEffect, memo } from 'react';\nimport { useResizeObserver } from '../hooks/useResizeObserver';\n\ninterface WaveformProps {\n peaks: number[];\n currentTime: number;\n duration: number;\n waveColor: string;\n progressColor: string;\n height: number;\n onSeek: (percentage: number) => void;\n resolution?: number | 'auto';\n barWidth?: number;\n barGap?: number;\n}\n\nexport const Waveform: React.FC<WaveformProps> = memo(({\n peaks,\n currentTime,\n duration,\n waveColor,\n progressColor,\n height,\n onSeek,\n resolution = 'auto',\n barWidth = 2,\n barGap = 1,\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const progressCanvasRef = useRef<HTMLCanvasElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const containerWidth = useResizeObserver(containerRef);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n const progressCanvas = progressCanvasRef.current;\n if (!canvas || !progressCanvas) return;\n\n const ctx = canvas.getContext('2d');\n const pCtx = progressCanvas.getContext('2d');\n if (!ctx || !pCtx) return;\n\n const dpr = window.devicePixelRatio || 1;\n const rect = canvas.getBoundingClientRect();\n const targetWidth = rect.width * dpr;\n const targetHeight = rect.height * dpr;\n\n [canvas, progressCanvas].forEach(c => {\n if (c.width !== targetWidth || c.height !== targetHeight) {\n c.width = targetWidth;\n c.height = targetHeight;\n }\n });\n\n const draw = () => {\n if (peaks.length === 0) return;\n const { width, height } = canvas;\n \n ctx.clearRect(0, 0, width, height);\n pCtx.clearRect(0, 0, width, height);\n\n const barCount = peaks.length;\n const actualBarTotalWidth = width / barCount;\n const actualBarWidth = typeof resolution === 'number' \n ? actualBarTotalWidth * 0.7 \n : barWidth * dpr;\n const actualBarGap = typeof resolution === 'number'\n ? actualBarTotalWidth * 0.3\n : barGap * dpr;\n\n ctx.lineCap = 'round';\n ctx.lineWidth = actualBarWidth;\n pCtx.lineCap = 'round';\n pCtx.lineWidth = actualBarWidth;\n\n peaks.forEach((peak, index) => {\n const x = index * (actualBarWidth + actualBarGap) + actualBarWidth / 2;\n const barHeight = peak * height * 0.8;\n const yStart = (height - barHeight) / 2;\n const yEnd = yStart + barHeight;\n\n ctx.beginPath();\n ctx.strokeStyle = waveColor;\n ctx.moveTo(x, yStart);\n ctx.lineTo(x, yEnd);\n ctx.stroke();\n\n pCtx.beginPath();\n pCtx.strokeStyle = progressColor;\n pCtx.moveTo(x, yStart);\n pCtx.lineTo(x, yEnd);\n pCtx.stroke();\n });\n };\n\n draw();\n }, [peaks, waveColor, progressColor, resolution, barWidth, barGap, height]);\n\n const handleSeek = (e: React.MouseEvent<HTMLDivElement>) => {\n if (containerRef.current && duration) {\n const rect = containerRef.current.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const percentage = Math.max(0, Math.min(1, x / rect.width));\n onSeek(percentage);\n }\n };\n\n const progressPercent = duration ? (currentTime / duration) * 100 : 0;\n\n return (\n <div \n ref={containerRef} \n className=\"relative w-full cursor-pointer overflow-hidden\" \n style={{ height: `${height}px` }}\n onClick={handleSeek}\n >\n <canvas ref={canvasRef} className=\"absolute inset-0 w-full h-full\" />\n <div \n className=\"absolute inset-0 h-full overflow-hidden transition-[width] duration-100 ease-linear pointer-events-none\"\n style={{ width: `${progressPercent}%` }}\n >\n <canvas ref={progressCanvasRef} className=\"absolute h-full\" style={{ width: `${containerWidth}px` }} />\n </div>\n </div>\n );\n});\n\nWaveform.displayName = 'Waveform';\n","import React, { memo, useMemo, useRef, useState, useEffect } from 'react';\nimport { WaveframeTheme } from '../types';\nimport { WaveframeEngine } from '../core/WaveframeEngine';\nimport { useWaveframe } from '../hooks/useWaveframe';\nimport { useResampledPeaks } from '../hooks/useResampledPeaks';\nimport { useResizeObserver } from '../hooks/useResizeObserver';\nimport { ArtworkOverlay } from '../molecules/ArtworkOverlay';\nimport { Waveform } from '../organisms/Waveform';\nimport { formatTime } from '../utils';\n\n/**\n * Props for the WaveframePlayer component\n */\nexport interface WaveframePlayerProps {\n /**\n * The audio source to play. Can be a URL string or a Blob/File object.\n */\n media?: string | Blob;\n /**\n * Optional pre-generated peaks for the waveform (0-1 range).\n * If omitted or empty, the player will automatically analyze the media.\n */\n peaks?: number[];\n /**\n * The artwork source to display. Can be a URL string or a Blob/File object.\n */\n artwork?: string | Blob;\n /**\n * The title of the track\n */\n title?: string;\n /**\n * The artist of the track\n */\n artist?: string;\n /**\n * The base color of the waveform bars\n * @default \"#e5e7eb\" (light) or \"#374151\" (dark)\n */\n waveColor?: string;\n /**\n * The color of the played progress part of the waveform\n * @default theme.primary or \"#3b82f6\"\n */\n progressColor?: string;\n /**\n * The height of the waveform in pixels\n * @default 80\n */\n height?: number;\n /**\n * Additional CSS classes for the container\n */\n className?: string;\n /**\n * Inline styles for the container\n */\n style?: React.CSSProperties;\n /**\n * The number of bars to render. Use 'auto' to fit the container width.\n * @default \"auto\"\n */\n resolution?: number | 'auto';\n /**\n * The width of each bar in pixels (if resolution is 'auto')\n * @default 2\n */\n barWidth?: number;\n /**\n * The gap between bars in pixels (if resolution is 'auto')\n * @default 1\n */\n barGap?: number;\n /**\n * Custom theme configuration\n */\n theme?: WaveframeTheme;\n /**\n * Optional WaveframeEngine instance for external control.\n * If provided, the player will sync with this engine instead of creating its own.\n */\n engine?: WaveframeEngine;\n}\n\n/**\n * The standard \"all-in-one\" Waveframe player component.\n * \n * This component features a SoundCloud-inspired layout with a prominent \n * play/pause button positioned next to the track metadata.\n */\nexport const WaveframePlayer: React.FC<WaveframePlayerProps> = memo(({\n media,\n peaks: propPeaks,\n artwork,\n title,\n artist,\n waveColor: propWaveColor,\n progressColor: propProgressColor,\n height = 80,\n className = '',\n style: propStyle,\n resolution = 'auto',\n barWidth = 2,\n barGap = 1,\n theme,\n engine: providedEngine,\n}) => {\n // Use the headless hook for state and controls\n const { state, togglePlay, seek } = useWaveframe(media, {\n peaks: propPeaks,\n engine: providedEngine,\n });\n\n const { isPlaying, currentTime, duration, peaks, isAnalyzing } = state;\n\n // Handle Artwork Blob -> Object URL\n const [resolvedArtworkUrl, setResolvedArtworkUrl] = useState<string | undefined>(\n typeof artwork === 'string' ? artwork : undefined\n );\n\n useEffect(() => {\n if (artwork instanceof Blob) {\n const url = URL.createObjectURL(artwork);\n setResolvedArtworkUrl(url);\n return () => URL.revokeObjectURL(url);\n } else {\n setResolvedArtworkUrl(artwork);\n }\n }, [artwork]);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const containerWidth = useResizeObserver(containerRef);\n\n const targetCount = useMemo(() => {\n if (typeof resolution === 'number') return resolution;\n if (containerWidth > 0) {\n return Math.max(1, Math.floor(containerWidth / (barWidth + barGap)));\n }\n return peaks.length || 1;\n }, [resolution, containerWidth, barWidth, barGap, peaks.length]);\n\n const resampledPeaks = useResampledPeaks(peaks, targetCount);\n\n const waveColor = useMemo(() => {\n if (propWaveColor) return propWaveColor;\n if (theme) return theme.bg === '#ffffff' ? '#e5e7eb' : '#374151';\n return '#e5e7eb';\n }, [propWaveColor, theme]);\n\n const progressColor = propProgressColor || theme?.primary || '#3b82f6';\n\n const mergedStyle = useMemo(() => {\n const baseStyle = {\n '--wf-bg-color': theme?.bg || 'white',\n '--wf-border-color': theme?.border || '#f3f4f6',\n '--wf-title-color': theme?.text || '#111827',\n '--wf-artist-color': theme?.text || '#6b7280',\n '--wf-time-color': theme?.text || '#9ca3af',\n '--wf-play-btn-bg': theme?.primary || '#3b82f6',\n '--wf-placeholder-from': theme?.primary || '#fb923c',\n '--wf-placeholder-to': theme?.bg || '#ec4899',\n };\n return { ...baseStyle, ...propStyle } as React.CSSProperties;\n }, [theme, propStyle]);\n\n return (\n <div\n className={`group relative flex flex-col md:flex-row items-stretch gap-6 p-6 bg-[var(--wf-bg-color,white)] border border-[var(--wf-border-color,#f3f4f6)] rounded-[var(--wf-rounded,1rem)] shadow-xl hover:shadow-2xl transition-all duration-300 overflow-hidden ${className}`}\n style={mergedStyle}\n >\n <ArtworkOverlay \n artworkUrl={resolvedArtworkUrl} \n title={title} \n isLoading={isAnalyzing}\n />\n\n <div className=\"flex-1 w-full flex flex-col min-w-0\">\n <div className=\"flex items-center gap-4 mb-6\">\n {/* SoundCloud-style circular play button */}\n <button\n onClick={togglePlay}\n className=\"w-12 h-12 md:w-14 md:h-14 flex-shrink-0 flex items-center justify-center rounded-full bg-[var(--wf-play-btn-bg,#3b82f6)] text-white shadow-[0_4px_12px_rgba(0,0,0,0.15)] hover:shadow-[0_6px_16px_rgba(0,0,0,0.2)] transition-all hover:scale-105 active:scale-95 cursor-pointer border-none outline-none group/play\"\n >\n {isPlaying ? (\n <svg className=\"w-6 h-6 md:w-7 md:h-7\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M6 19h4V5H6v14zm8-14v14h4V5h-4z\" />\n </svg>\n ) : (\n <svg className=\"w-6 h-6 md:w-7 md:h-7 ml-1\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n )}\n </button>\n\n <div className=\"flex-1 flex flex-col min-w-0\">\n <div className=\"flex items-center justify-between gap-4\">\n {artist && (\n <p className=\"text-[10px] md:text-xs font-bold uppercase text-[var(--wf-artist-color,#6b7280)] opacity-60 tracking-[0.1em] line-clamp-1\">\n {artist}\n </p>\n )}\n <div className=\"text-[10px] font-mono text-[var(--wf-time-color,#9ca3af)] tabular-nums flex-shrink-0\">\n {formatTime(currentTime)} / {formatTime(duration)}\n </div>\n </div>\n {title && (\n <h3 className=\"text-lg md:text-xl font-black text-[var(--wf-title-color,#111827)] tracking-tight line-clamp-1 mt-0.5 leading-tight\">\n {title}\n </h3>\n )}\n </div>\n </div>\n\n <div className=\"mt-auto\" ref={containerRef}>\n <Waveform \n peaks={resampledPeaks}\n currentTime={currentTime}\n duration={duration}\n waveColor={waveColor}\n progressColor={progressColor}\n height={height}\n onSeek={seek}\n resolution={resolution}\n barWidth={barWidth}\n barGap={barGap}\n />\n </div>\n </div>\n </div>\n );\n});\n\nWaveframePlayer.displayName = 'WaveframePlayer';\n"]}
|
package/dist/index.css
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
@layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50: oklch(97.1% .013 17.38);--color-red-200: oklch(88.5% .062 18.334);--color-red-300: oklch(80.8% .114 19.571);--color-red-600: oklch(57.7% .245 27.325);--color-orange-50: oklch(98% .016 73.684);--color-orange-100: oklch(95.4% .038 75.164);--color-orange-200: oklch(90.1% .076 70.697);--color-orange-600: oklch(64.6% .222 41.116);--color-green-50: oklch(98.2% .018 155.826);--color-green-100: oklch(96.2% .044 156.743);--color-green-200: oklch(92.5% .084 155.995);--color-green-400: oklch(79.2% .209 151.711);--color-green-600: oklch(62.7% .194 149.214);--color-blue-50: oklch(97% .014 254.604);--color-blue-200: oklch(88.2% .059 254.128);--color-blue-300: oklch(80.9% .105 251.813);--color-blue-400: oklch(70.7% .165 254.624);--color-blue-500: oklch(62.3% .214 259.815);--color-blue-600: oklch(54.6% .245 262.881);--color-blue-700: oklch(48.8% .243 264.376);--color-gray-50: oklch(98.5% .002 247.839);--color-gray-100: oklch(96.7% .003 264.542);--color-gray-200: oklch(92.8% .006 264.531);--color-gray-300: oklch(87.2% .01 258.338);--color-gray-400: oklch(70.7% .022 261.325);--color-gray-500: oklch(55.1% .027 264.364);--color-gray-600: oklch(44.6% .03 256.802);--color-gray-700: oklch(37.3% .034 259.733);--color-gray-800: oklch(27.8% .033 256.848);--color-gray-900: oklch(21% .034 264.665);--color-black: #000;--color-white: #fff;--spacing: .25rem;--container-4xl: 56rem;--container-5xl: 64rem;--text-xs: .75rem;--text-xs--line-height: calc(1 / .75);--text-sm: .875rem;--text-sm--line-height: calc(1.25 / .875);--text-lg: 1.125rem;--text-lg--line-height: calc(1.75 / 1.125);--text-xl: 1.25rem;--text-xl--line-height: calc(1.75 / 1.25);--font-weight-medium: 500;--font-weight-bold: 700;--font-weight-black: 900;--tracking-tighter: -.05em;--tracking-tight: -.025em;--tracking-wide: .025em;--tracking-widest: .1em;--leading-tight: 1.25;--leading-relaxed: 1.625;--radius-lg: .5rem;--radius-xl: .75rem;--ease-out: cubic-bezier(0, 0, .2, 1);--animate-spin: spin 1s linear infinite;--blur-md: 12px;--blur-xl: 24px;--default-transition-duration: .15s;--default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);--default-font-family: var(--font-sans);--default-mono-font-family: var(--font-mono)}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings, normal);font-variation-settings:var(--default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::-moz-placeholder{color:currentcolor;@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,currentcolor 50%,transparent)}}::placeholder{color:currentcolor;@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.-top-1\/2{top:-50%}.top-0{top:calc(var(--spacing) * 0)}.right-0{right:calc(var(--spacing) * 0)}.-left-1\/2{left:-50%}.left-0{left:calc(var(--spacing) * 0)}.z-20{z-index:20}.container{width:100%;@media(width>=40rem){max-width:40rem}@media(width>=48rem){max-width:48rem}@media(width>=64rem){max-width:64rem}@media(width>=80rem){max-width:80rem}@media(width>=96rem){max-width:96rem}}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-32{margin-top:calc(var(--spacing) * 32)}.mt-auto{margin-top:auto}.mr-4{margin-right:calc(var(--spacing) * 4)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-1{margin-left:calc(var(--spacing) * 1)}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-32{height:calc(var(--spacing) * 32)}.h-\[200\%\]{height:200%}.h-full{height:100%}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-32{width:calc(var(--spacing) * 32)}.w-\[200\%\]{width:200%}.w-full{width:100%}.w-px{width:1px}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.scale-110{--tw-scale-x: 110%;--tw-scale-y: 110%;--tw-scale-z: 110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-col{flex-direction:column}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-12{gap:calc(var(--spacing) * 12)}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[var\(--wf-artwork-rounded\,0\.75rem\)\]{border-radius:var(--wf-artwork-rounded,.75rem)}.rounded-\[var\(--wf-rounded\,1rem\)\]{border-radius:var(--wf-rounded,1rem)}.rounded-full{border-radius:calc(infinity * 1px)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style: dashed;border-style:dashed}.border-none{--tw-border-style: none;border-style:none}.border-\[\#333\]{border-color:#333}.border-\[var\(--wf-border-color\,\#f3f4f6\)\]{border-color:var(--wf-border-color,#f3f4f6)}.border-blue-200{border-color:var(--color-blue-200)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-200\/50{border-color:color-mix(in srgb,oklch(92.8% .006 264.531) 50%,transparent);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--color-gray-200) 50%,transparent)}}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-900{border-color:var(--color-gray-900)}.border-green-200{border-color:var(--color-green-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-red-200{border-color:var(--color-red-200)}.border-white\/30{border-color:color-mix(in srgb,#fff 30%,transparent);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.border-t-white{border-top-color:var(--color-white)}.bg-\[\#1e1e1e\]{background-color:#1e1e1e}.bg-\[\#252526\]{background-color:#252526}.bg-\[var\(--wf-bg-color\,white\)\]{background-color:var(--wf-bg-color,white)}.bg-\[var\(--wf-play-btn-bg\,\#3b82f6\)\]{background-color:var(--wf-play-btn-bg,#3b82f6)}.bg-black\/10{background-color:color-mix(in srgb,#000 10%,transparent);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\/50{background-color:color-mix(in srgb,oklch(98.5% .002 247.839) 50%,transparent);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-gray-50) 50%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-200\/60{background-color:color-mix(in srgb,oklch(92.8% .006 264.531) 60%,transparent);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-gray-200) 60%,transparent)}}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-white{background-color:var(--color-white)}.bg-white\/70{background-color:color-mix(in srgb,#fff 70%,transparent);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.bg-gradient-to-br{--tw-gradient-position: to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[var\(--wf-placeholder-from\,\#fb923c\)\]{--tw-gradient-from: var(--wf-placeholder-from,#fb923c);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-\[var\(--wf-placeholder-to\,\#ec4899\)\]{--tw-gradient-to: var(--wf-placeholder-to,#ec4899);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-cover{-o-object-fit:cover;object-fit:cover}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pb-24{padding-bottom:calc(var(--spacing) * 24)}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading, var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[13px\]{font-size:13px}.leading-relaxed{--tw-leading: var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading: var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight: var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight: var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight: var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-\[0\.1em\]{--tw-tracking: .1em;letter-spacing:.1em}.tracking-\[0\.2em\]{--tw-tracking: .2em;letter-spacing:.2em}.tracking-tight{--tw-tracking: var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking: var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wide{--tw-tracking: var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-widest{--tw-tracking: var(--tracking-widest);letter-spacing:var(--tracking-widest)}.whitespace-pre{white-space:pre}.text-\[\#4ec9b0\]{color:#4ec9b0}.text-\[\#9cdcfe\]{color:#9cdcfe}.text-\[\#b5cea8\]{color:#b5cea8}.text-\[\#ce9178\]{color:#ce9178}.text-\[var\(--wf-artist-color\,\#6b7280\)\]{color:var(--wf-artist-color,#6b7280)}.text-\[var\(--wf-time-color\,\#9ca3af\)\]{color:var(--wf-time-color,#9ca3af)}.text-\[var\(--wf-title-color\,\#111827\)\]{color:var(--wf-title-color,#111827)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500\/80{color:color-mix(in srgb,oklch(62.3% .214 259.815) 80%,transparent);@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,var(--color-blue-500) 80%,transparent)}}.text-blue-600{color:var(--color-blue-600)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.text-green-400{color:var(--color-green-400)}.text-green-600{color:var(--color-green-600)}.text-orange-600{color:var(--color-orange-600)}.text-red-600{color:var(--color-red-600)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.accent-blue-600{accent-color:var(--color-blue-600)}.opacity-50{opacity:50%}.opacity-60{opacity:60%}.shadow-2xl{--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / .25));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_12px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow: 0 4px 12px var(--tw-shadow-color, rgba(0,0,0,.15));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-blue-500\/30{--tw-shadow-color: color-mix(in srgb, oklch(62.3% .214 259.815) 30%, transparent);@supports (color: color-mix(in lab,red,red)){--tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-blue-500) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.blur{--tw-blur: blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-md{--tw-blur: blur(var(--blur-md));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur: blur(1px);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur: blur(var(--blur-xl));backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.duration-100{--tw-duration: .1s;transition-duration:.1s}.duration-300{--tw-duration: .3s;transition-duration:.3s}.duration-500{--tw-duration: .5s;transition-duration:.5s}.duration-700{--tw-duration: .7s;transition-duration:.7s}.ease-linear{--tw-ease: linear;transition-timing-function:linear}.ease-out{--tw-ease: var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style: none;outline-style:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.group-hover\:text-gray-600{&:is(:where(.group):hover *){@media(hover:hover){color:var(--color-gray-600)}}}.group-hover\/artwork\:scale-110{&:is(:where(.group\/artwork):hover *){@media(hover:hover){--tw-scale-x: 110%;--tw-scale-y: 110%;--tw-scale-z: 110%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}.hover\:scale-105{&:hover{@media(hover:hover){--tw-scale-x: 105%;--tw-scale-y: 105%;--tw-scale-z: 105%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}.hover\:scale-110{&:hover{@media(hover:hover){--tw-scale-x: 110%;--tw-scale-y: 110%;--tw-scale-z: 110%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}.hover\:border-gray-300{&:hover{@media(hover:hover){border-color:var(--color-gray-300)}}}.hover\:border-red-300{&:hover{@media(hover:hover){border-color:var(--color-red-300)}}}.hover\:bg-blue-700{&:hover{@media(hover:hover){background-color:var(--color-blue-700)}}}.hover\:bg-gray-50{&:hover{@media(hover:hover){background-color:var(--color-gray-50)}}}.hover\:bg-gray-100{&:hover{@media(hover:hover){background-color:var(--color-gray-100)}}}.hover\:bg-green-100{&:hover{@media(hover:hover){background-color:var(--color-green-100)}}}.hover\:bg-orange-100{&:hover{@media(hover:hover){background-color:var(--color-orange-100)}}}.hover\:bg-red-50{&:hover{@media(hover:hover){background-color:var(--color-red-50)}}}.hover\:text-blue-300{&:hover{@media(hover:hover){color:var(--color-blue-300)}}}.hover\:text-blue-600{&:hover{@media(hover:hover){color:var(--color-blue-600)}}}.hover\:text-gray-900{&:hover{@media(hover:hover){color:var(--color-gray-900)}}}.hover\:shadow-2xl{&:hover{@media(hover:hover){--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / .25));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}.hover\:shadow-\[0_6px_16px_rgba\(0\,0\,0\,0\.2\)\]{&:hover{@media(hover:hover){--tw-shadow: 0 6px 16px var(--tw-shadow-color, rgba(0,0,0,.2));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}.hover\:ring-2{&:hover{@media(hover:hover){--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}.hover\:ring-blue-500\/20{&:hover{@media(hover:hover){--tw-ring-color: color-mix(in srgb, oklch(62.3% .214 259.815) 20%, transparent);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--color-blue-500) 20%, transparent)}}}}.focus\:border-blue-200{&:focus{border-color:var(--color-blue-200)}}.focus\:border-blue-500{&:focus{border-color:var(--color-blue-500)}}.focus\:bg-white{&:focus{background-color:var(--color-white)}}.focus\:ring-2{&:focus{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:ring-blue-500\/20{&:focus{--tw-ring-color: color-mix(in srgb, oklch(62.3% .214 259.815) 20%, transparent);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--color-blue-500) 20%, transparent)}}}.active\:scale-90{&:active{--tw-scale-x: 90%;--tw-scale-y: 90%;--tw-scale-z: 90%;scale:var(--tw-scale-x) var(--tw-scale-y)}}.active\:scale-95{&:active{--tw-scale-x: 95%;--tw-scale-y: 95%;--tw-scale-z: 95%;scale:var(--tw-scale-x) var(--tw-scale-y)}}.active\:scale-\[0\.98\]{&:active{scale:.98}}.md\:h-7{@media(width>=48rem){height:calc(var(--spacing) * 7)}}.md\:h-14{@media(width>=48rem){height:calc(var(--spacing) * 14)}}.md\:h-40{@media(width>=48rem){height:calc(var(--spacing) * 40)}}.md\:w-7{@media(width>=48rem){width:calc(var(--spacing) * 7)}}.md\:w-14{@media(width>=48rem){width:calc(var(--spacing) * 14)}}.md\:w-40{@media(width>=48rem){width:calc(var(--spacing) * 40)}}.md\:flex-row{@media(width>=48rem){flex-direction:row}}.md\:text-xl{@media(width>=48rem){font-size:var(--text-xl);line-height:var(--tw-leading, var(--text-xl--line-height))}}.md\:text-xs{@media(width>=48rem){font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height))}}.lg\:w-96{@media(width>=64rem){width:calc(var(--spacing) * 96)}}.lg\:flex-row{@media(width>=64rem){flex-direction:row}}}@property --tw-scale-x{syntax: "*"; inherits: false; initial-value: 1;}@property --tw-scale-y{syntax: "*"; inherits: false; initial-value: 1;}@property --tw-scale-z{syntax: "*"; inherits: false; initial-value: 1;}@property --tw-border-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-gradient-position{syntax: "*"; inherits: false;}@property --tw-gradient-from{syntax: "<color>"; inherits: false; initial-value: #0000;}@property --tw-gradient-via{syntax: "<color>"; inherits: false; initial-value: #0000;}@property --tw-gradient-to{syntax: "<color>"; inherits: false; initial-value: #0000;}@property --tw-gradient-stops{syntax: "*"; inherits: false;}@property --tw-gradient-via-stops{syntax: "*"; inherits: false;}@property --tw-gradient-from-position{syntax: "<length-percentage>"; inherits: false; initial-value: 0%;}@property --tw-gradient-via-position{syntax: "<length-percentage>"; inherits: false; initial-value: 50%;}@property --tw-gradient-to-position{syntax: "<length-percentage>"; inherits: false; initial-value: 100%;}@property --tw-leading{syntax: "*"; inherits: false;}@property --tw-font-weight{syntax: "*"; inherits: false;}@property --tw-tracking{syntax: "*"; inherits: false;}@property --tw-ordinal{syntax: "*"; inherits: false;}@property --tw-slashed-zero{syntax: "*"; inherits: false;}@property --tw-numeric-figure{syntax: "*"; inherits: false;}@property --tw-numeric-spacing{syntax: "*"; inherits: false;}@property --tw-numeric-fraction{syntax: "*"; inherits: false;}@property --tw-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: "*"; inherits: false;}@property --tw-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: "*"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: "*"; inherits: false;}@property --tw-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: "*"; inherits: false;}@property --tw-inset-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: "*"; inherits: false;}@property --tw-ring-offset-width{syntax: "<length>"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: "*"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-blur{syntax: "*"; inherits: false;}@property --tw-brightness{syntax: "*"; inherits: false;}@property --tw-contrast{syntax: "*"; inherits: false;}@property --tw-grayscale{syntax: "*"; inherits: false;}@property --tw-hue-rotate{syntax: "*"; inherits: false;}@property --tw-invert{syntax: "*"; inherits: false;}@property --tw-opacity{syntax: "*"; inherits: false;}@property --tw-saturate{syntax: "*"; inherits: false;}@property --tw-sepia{syntax: "*"; inherits: false;}@property --tw-drop-shadow{syntax: "*"; inherits: false;}@property --tw-drop-shadow-color{syntax: "*"; inherits: false;}@property --tw-drop-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-drop-shadow-size{syntax: "*"; inherits: false;}@property --tw-backdrop-blur{syntax: "*"; inherits: false;}@property --tw-backdrop-brightness{syntax: "*"; inherits: false;}@property --tw-backdrop-contrast{syntax: "*"; inherits: false;}@property --tw-backdrop-grayscale{syntax: "*"; inherits: false;}@property --tw-backdrop-hue-rotate{syntax: "*"; inherits: false;}@property --tw-backdrop-invert{syntax: "*"; inherits: false;}@property --tw-backdrop-opacity{syntax: "*"; inherits: false;}@property --tw-backdrop-saturate{syntax: "*"; inherits: false;}@property --tw-backdrop-sepia{syntax: "*"; inherits: false;}@property --tw-duration{syntax: "*"; inherits: false;}@property --tw-ease{syntax: "*"; inherits: false;}@keyframes spin{to{transform:rotate(360deg)}}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-scale-x: 1;--tw-scale-y: 1;--tw-scale-z: 1;--tw-border-style: solid;--tw-gradient-position: initial;--tw-gradient-from: #0000;--tw-gradient-via: #0000;--tw-gradient-to: #0000;--tw-gradient-stops: initial;--tw-gradient-via-stops: initial;--tw-gradient-from-position: 0%;--tw-gradient-via-position: 50%;--tw-gradient-to-position: 100%;--tw-leading: initial;--tw-font-weight: initial;--tw-tracking: initial;--tw-ordinal: initial;--tw-slashed-zero: initial;--tw-numeric-figure: initial;--tw-numeric-spacing: initial;--tw-numeric-fraction: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-blur: initial;--tw-brightness: initial;--tw-contrast: initial;--tw-grayscale: initial;--tw-hue-rotate: initial;--tw-invert: initial;--tw-opacity: initial;--tw-saturate: initial;--tw-sepia: initial;--tw-drop-shadow: initial;--tw-drop-shadow-color: initial;--tw-drop-shadow-alpha: 100%;--tw-drop-shadow-size: initial;--tw-backdrop-blur: initial;--tw-backdrop-brightness: initial;--tw-backdrop-contrast: initial;--tw-backdrop-grayscale: initial;--tw-backdrop-hue-rotate: initial;--tw-backdrop-invert: initial;--tw-backdrop-opacity: initial;--tw-backdrop-saturate: initial;--tw-backdrop-sepia: initial;--tw-duration: initial;--tw-ease: initial}}}
|
|
2
|
+
/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
|
|
3
|
+
/*# sourceMappingURL=index.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/styles/index.css"],"sourcesContent":["/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --font-sans: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\",\n \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n --color-red-50: oklch(97.1% 0.013 17.38);\n --color-red-200: oklch(88.5% 0.062 18.334);\n --color-red-300: oklch(80.8% 0.114 19.571);\n --color-red-600: oklch(57.7% 0.245 27.325);\n --color-orange-50: oklch(98% 0.016 73.684);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-200: oklch(90.1% 0.076 70.697);\n --color-orange-600: oklch(64.6% 0.222 41.116);\n --color-green-50: oklch(98.2% 0.018 155.826);\n --color-green-100: oklch(96.2% 0.044 156.743);\n --color-green-200: oklch(92.5% 0.084 155.995);\n --color-green-400: oklch(79.2% 0.209 151.711);\n --color-green-600: oklch(62.7% 0.194 149.214);\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-200: oklch(88.2% 0.059 254.128);\n --color-blue-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-600: oklch(54.6% 0.245 262.881);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: oklch(96.7% 0.003 264.542);\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-300: oklch(87.2% 0.01 258.338);\n --color-gray-400: oklch(70.7% 0.022 261.325);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-600: oklch(44.6% 0.03 256.802);\n --color-gray-700: oklch(37.3% 0.034 259.733);\n --color-gray-800: oklch(27.8% 0.033 256.848);\n --color-gray-900: oklch(21% 0.034 264.665);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-4xl: 56rem;\n --container-5xl: 64rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --font-weight-medium: 500;\n --font-weight-bold: 700;\n --font-weight-black: 900;\n --tracking-tighter: -0.05em;\n --tracking-tight: -0.025em;\n --tracking-wide: 0.025em;\n --tracking-widest: 0.1em;\n --leading-tight: 1.25;\n --leading-relaxed: 1.625;\n --radius-lg: 0.5rem;\n --radius-xl: 0.75rem;\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --animate-spin: spin 1s linear infinite;\n --blur-md: 12px;\n --blur-xl: 24px;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::-moz-placeholder {\n opacity: 1;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::-moz-placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n -webkit-appearance: button;\n -moz-appearance: button;\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .pointer-events-none {\n pointer-events: none;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .-top-1\\/2 {\n top: calc(calc(1 / 2 * 100%) * -1);\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .-left-1\\/2 {\n left: calc(calc(1 / 2 * 100%) * -1);\n }\n .left-0 {\n left: calc(var(--spacing) * 0);\n }\n .z-20 {\n z-index: 20;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .mx-4 {\n margin-inline: calc(var(--spacing) * 4);\n }\n .mt-0\\.5 {\n margin-top: calc(var(--spacing) * 0.5);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .mt-4 {\n margin-top: calc(var(--spacing) * 4);\n }\n .mt-32 {\n margin-top: calc(var(--spacing) * 32);\n }\n .mt-auto {\n margin-top: auto;\n }\n .mr-4 {\n margin-right: calc(var(--spacing) * 4);\n }\n .mb-4 {\n margin-bottom: calc(var(--spacing) * 4);\n }\n .mb-6 {\n margin-bottom: calc(var(--spacing) * 6);\n }\n .ml-1 {\n margin-left: calc(var(--spacing) * 1);\n }\n .line-clamp-1 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline-block {\n display: inline-block;\n }\n .h-1\\.5 {\n height: calc(var(--spacing) * 1.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-12 {\n height: calc(var(--spacing) * 12);\n }\n .h-16 {\n height: calc(var(--spacing) * 16);\n }\n .h-32 {\n height: calc(var(--spacing) * 32);\n }\n .h-\\[200\\%\\] {\n height: 200%;\n }\n .h-full {\n height: 100%;\n }\n .h-screen {\n height: 100vh;\n }\n .min-h-screen {\n min-height: 100vh;\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-5 {\n width: calc(var(--spacing) * 5);\n }\n .w-6 {\n width: calc(var(--spacing) * 6);\n }\n .w-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-9 {\n width: calc(var(--spacing) * 9);\n }\n .w-12 {\n width: calc(var(--spacing) * 12);\n }\n .w-16 {\n width: calc(var(--spacing) * 16);\n }\n .w-20 {\n width: calc(var(--spacing) * 20);\n }\n .w-32 {\n width: calc(var(--spacing) * 32);\n }\n .w-\\[200\\%\\] {\n width: 200%;\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-4xl {\n max-width: var(--container-4xl);\n }\n .max-w-5xl {\n max-width: var(--container-5xl);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .flex-1 {\n flex: 1;\n }\n .flex-shrink {\n flex-shrink: 1;\n }\n .flex-shrink-0 {\n flex-shrink: 0;\n }\n .flex-grow {\n flex-grow: 1;\n }\n .scale-110 {\n --tw-scale-x: 110%;\n --tw-scale-y: 110%;\n --tw-scale-z: 110%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .animate-spin {\n animation: var(--animate-spin);\n }\n .cursor-default {\n cursor: default;\n }\n .cursor-not-allowed {\n cursor: not-allowed;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .appearance-none {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n }\n .flex-col {\n flex-direction: column;\n }\n .items-center {\n align-items: center;\n }\n .items-stretch {\n align-items: stretch;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-start {\n justify-content: flex-start;\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-5 {\n gap: calc(var(--spacing) * 5);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .gap-8 {\n gap: calc(var(--spacing) * 8);\n }\n .gap-12 {\n gap: calc(var(--spacing) * 12);\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .overflow-x-auto {\n overflow-x: auto;\n }\n .overflow-y-auto {\n overflow-y: auto;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-\\[var\\(--wf-artwork-rounded\\,0\\.75rem\\)\\] {\n border-radius: var(--wf-artwork-rounded,0.75rem);\n }\n .rounded-\\[var\\(--wf-rounded\\,1rem\\)\\] {\n border-radius: var(--wf-rounded,1rem);\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius-lg);\n }\n .rounded-xl {\n border-radius: var(--radius-xl);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-4 {\n border-style: var(--tw-border-style);\n border-width: 4px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n .border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .border-none {\n --tw-border-style: none;\n border-style: none;\n }\n .border-\\[\\#333\\] {\n border-color: #333;\n }\n .border-\\[var\\(--wf-border-color\\,\\#f3f4f6\\)\\] {\n border-color: var(--wf-border-color,#f3f4f6);\n }\n .border-blue-200 {\n border-color: var(--color-blue-200);\n }\n .border-gray-100 {\n border-color: var(--color-gray-100);\n }\n .border-gray-200 {\n border-color: var(--color-gray-200);\n }\n .border-gray-200\\/50 {\n border-color: color-mix(in srgb, oklch(92.8% 0.006 264.531) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-gray-200) 50%, transparent);\n }\n }\n .border-gray-300 {\n border-color: var(--color-gray-300);\n }\n .border-gray-900 {\n border-color: var(--color-gray-900);\n }\n .border-green-200 {\n border-color: var(--color-green-200);\n }\n .border-orange-200 {\n border-color: var(--color-orange-200);\n }\n .border-red-200 {\n border-color: var(--color-red-200);\n }\n .border-white\\/30 {\n border-color: color-mix(in srgb, #fff 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 30%, transparent);\n }\n }\n .border-t-white {\n border-top-color: var(--color-white);\n }\n .bg-\\[\\#1e1e1e\\] {\n background-color: #1e1e1e;\n }\n .bg-\\[\\#252526\\] {\n background-color: #252526;\n }\n .bg-\\[var\\(--wf-bg-color\\,white\\)\\] {\n background-color: var(--wf-bg-color,white);\n }\n .bg-\\[var\\(--wf-play-btn-bg\\,\\#3b82f6\\)\\] {\n background-color: var(--wf-play-btn-bg,#3b82f6);\n }\n .bg-black\\/10 {\n background-color: color-mix(in srgb, #000 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 10%, transparent);\n }\n }\n .bg-blue-50 {\n background-color: var(--color-blue-50);\n }\n .bg-blue-600 {\n background-color: var(--color-blue-600);\n }\n .bg-gray-50 {\n background-color: var(--color-gray-50);\n }\n .bg-gray-50\\/50 {\n background-color: color-mix(in srgb, oklch(98.5% 0.002 247.839) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-50) 50%, transparent);\n }\n }\n .bg-gray-100 {\n background-color: var(--color-gray-100);\n }\n .bg-gray-200 {\n background-color: var(--color-gray-200);\n }\n .bg-gray-200\\/60 {\n background-color: color-mix(in srgb, oklch(92.8% 0.006 264.531) 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-200) 60%, transparent);\n }\n }\n .bg-gray-800 {\n background-color: var(--color-gray-800);\n }\n .bg-gray-900 {\n background-color: var(--color-gray-900);\n }\n .bg-green-50 {\n background-color: var(--color-green-50);\n }\n .bg-orange-50 {\n background-color: var(--color-orange-50);\n }\n .bg-white {\n background-color: var(--color-white);\n }\n .bg-white\\/70 {\n background-color: color-mix(in srgb, #fff 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 70%, transparent);\n }\n }\n .bg-gradient-to-br {\n --tw-gradient-position: to bottom right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .from-\\[var\\(--wf-placeholder-from\\,\\#fb923c\\)\\] {\n --tw-gradient-from: var(--wf-placeholder-from,#fb923c);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-\\[var\\(--wf-placeholder-to\\,\\#ec4899\\)\\] {\n --tw-gradient-to: var(--wf-placeholder-to,#ec4899);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .object-cover {\n -o-object-fit: cover;\n object-fit: cover;\n }\n .p-6 {\n padding: calc(var(--spacing) * 6);\n }\n .p-8 {\n padding: calc(var(--spacing) * 8);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .px-8 {\n padding-inline: calc(var(--spacing) * 8);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-2\\.5 {\n padding-block: calc(var(--spacing) * 2.5);\n }\n .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n .pt-4 {\n padding-top: calc(var(--spacing) * 4);\n }\n .pb-24 {\n padding-bottom: calc(var(--spacing) * 24);\n }\n .text-center {\n text-align: center;\n }\n .text-right {\n text-align: right;\n }\n .font-mono {\n font-family: var(--font-mono);\n }\n .font-sans {\n font-family: var(--font-sans);\n }\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .text-\\[8px\\] {\n font-size: 8px;\n }\n .text-\\[9px\\] {\n font-size: 9px;\n }\n .text-\\[10px\\] {\n font-size: 10px;\n }\n .text-\\[13px\\] {\n font-size: 13px;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .leading-tight {\n --tw-leading: var(--leading-tight);\n line-height: var(--leading-tight);\n }\n .font-black {\n --tw-font-weight: var(--font-weight-black);\n font-weight: var(--font-weight-black);\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .tracking-\\[0\\.1em\\] {\n --tw-tracking: 0.1em;\n letter-spacing: 0.1em;\n }\n .tracking-\\[0\\.2em\\] {\n --tw-tracking: 0.2em;\n letter-spacing: 0.2em;\n }\n .tracking-tight {\n --tw-tracking: var(--tracking-tight);\n letter-spacing: var(--tracking-tight);\n }\n .tracking-tighter {\n --tw-tracking: var(--tracking-tighter);\n letter-spacing: var(--tracking-tighter);\n }\n .tracking-wide {\n --tw-tracking: var(--tracking-wide);\n letter-spacing: var(--tracking-wide);\n }\n .tracking-widest {\n --tw-tracking: var(--tracking-widest);\n letter-spacing: var(--tracking-widest);\n }\n .whitespace-pre {\n white-space: pre;\n }\n .text-\\[\\#4ec9b0\\] {\n color: #4ec9b0;\n }\n .text-\\[\\#9cdcfe\\] {\n color: #9cdcfe;\n }\n .text-\\[\\#b5cea8\\] {\n color: #b5cea8;\n }\n .text-\\[\\#ce9178\\] {\n color: #ce9178;\n }\n .text-\\[var\\(--wf-artist-color\\,\\#6b7280\\)\\] {\n color: var(--wf-artist-color,#6b7280);\n }\n .text-\\[var\\(--wf-time-color\\,\\#9ca3af\\)\\] {\n color: var(--wf-time-color,#9ca3af);\n }\n .text-\\[var\\(--wf-title-color\\,\\#111827\\)\\] {\n color: var(--wf-title-color,#111827);\n }\n .text-blue-400 {\n color: var(--color-blue-400);\n }\n .text-blue-500\\/80 {\n color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-blue-500) 80%, transparent);\n }\n }\n .text-blue-600 {\n color: var(--color-blue-600);\n }\n .text-gray-300 {\n color: var(--color-gray-300);\n }\n .text-gray-400 {\n color: var(--color-gray-400);\n }\n .text-gray-500 {\n color: var(--color-gray-500);\n }\n .text-gray-600 {\n color: var(--color-gray-600);\n }\n .text-gray-700 {\n color: var(--color-gray-700);\n }\n .text-gray-900 {\n color: var(--color-gray-900);\n }\n .text-green-400 {\n color: var(--color-green-400);\n }\n .text-green-600 {\n color: var(--color-green-600);\n }\n .text-orange-600 {\n color: var(--color-orange-600);\n }\n .text-red-600 {\n color: var(--color-red-600);\n }\n .text-white {\n color: var(--color-white);\n }\n .uppercase {\n text-transform: uppercase;\n }\n .tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .accent-blue-600 {\n accent-color: var(--color-blue-600);\n }\n .opacity-50 {\n opacity: 50%;\n }\n .opacity-60 {\n opacity: 60%;\n }\n .shadow-2xl {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-\\[0_4px_12px_rgba\\(0\\,0\\,0\\,0\\.15\\)\\] {\n --tw-shadow: 0 4px 12px var(--tw-shadow-color, rgba(0,0,0,0.15));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xl {\n --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-blue-500\\/30 {\n --tw-shadow-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-blue-500) 30%, transparent) var(--tw-shadow-alpha), transparent);\n }\n }\n .blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-md {\n --tw-blur: blur(var(--blur-md));\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .backdrop-blur-\\[1px\\] {\n --tw-backdrop-blur: blur(1px);\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .backdrop-blur-xl {\n --tw-backdrop-blur: blur(var(--blur-xl));\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .transition-\\[width\\] {\n transition-property: width;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-transform {\n transition-property: transform, translate, scale, rotate;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .duration-100 {\n --tw-duration: 100ms;\n transition-duration: 100ms;\n }\n .duration-300 {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n .duration-500 {\n --tw-duration: 500ms;\n transition-duration: 500ms;\n }\n .duration-700 {\n --tw-duration: 700ms;\n transition-duration: 700ms;\n }\n .ease-linear {\n --tw-ease: linear;\n transition-timing-function: linear;\n }\n .ease-out {\n --tw-ease: var(--ease-out);\n transition-timing-function: var(--ease-out);\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n .group-hover\\:text-gray-600 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-gray-600);\n }\n }\n }\n .group-hover\\/artwork\\:scale-110 {\n &:is(:where(.group\\/artwork):hover *) {\n @media (hover: hover) {\n --tw-scale-x: 110%;\n --tw-scale-y: 110%;\n --tw-scale-z: 110%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .hover\\:scale-105 {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 105%;\n --tw-scale-y: 105%;\n --tw-scale-z: 105%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .hover\\:scale-110 {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 110%;\n --tw-scale-y: 110%;\n --tw-scale-z: 110%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .hover\\:border-gray-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-gray-300);\n }\n }\n }\n .hover\\:border-red-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-red-300);\n }\n }\n }\n .hover\\:bg-blue-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-700);\n }\n }\n }\n .hover\\:bg-gray-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-50);\n }\n }\n }\n .hover\\:bg-gray-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-100);\n }\n }\n }\n .hover\\:bg-green-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-green-100);\n }\n }\n }\n .hover\\:bg-orange-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-orange-100);\n }\n }\n }\n .hover\\:bg-red-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-red-50);\n }\n }\n }\n .hover\\:text-blue-300 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-300);\n }\n }\n }\n .hover\\:text-blue-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-600);\n }\n }\n }\n .hover\\:text-gray-900 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-gray-900);\n }\n }\n }\n .hover\\:shadow-2xl {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-\\[0_6px_16px_rgba\\(0\\,0\\,0\\,0\\.2\\)\\] {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 6px 16px var(--tw-shadow-color, rgba(0,0,0,0.2));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:ring-2 {\n &:hover {\n @media (hover: hover) {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:ring-blue-500\\/20 {\n &:hover {\n @media (hover: hover) {\n --tw-ring-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-blue-500) 20%, transparent);\n }\n }\n }\n }\n .focus\\:border-blue-200 {\n &:focus {\n border-color: var(--color-blue-200);\n }\n }\n .focus\\:border-blue-500 {\n &:focus {\n border-color: var(--color-blue-500);\n }\n }\n .focus\\:bg-white {\n &:focus {\n background-color: var(--color-white);\n }\n }\n .focus\\:ring-2 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\:ring-blue-500\\/20 {\n &:focus {\n --tw-ring-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-blue-500) 20%, transparent);\n }\n }\n }\n .active\\:scale-90 {\n &:active {\n --tw-scale-x: 90%;\n --tw-scale-y: 90%;\n --tw-scale-z: 90%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n .active\\:scale-95 {\n &:active {\n --tw-scale-x: 95%;\n --tw-scale-y: 95%;\n --tw-scale-z: 95%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n .active\\:scale-\\[0\\.98\\] {\n &:active {\n scale: 0.98;\n }\n }\n .md\\:h-7 {\n @media (width >= 48rem) {\n height: calc(var(--spacing) * 7);\n }\n }\n .md\\:h-14 {\n @media (width >= 48rem) {\n height: calc(var(--spacing) * 14);\n }\n }\n .md\\:h-40 {\n @media (width >= 48rem) {\n height: calc(var(--spacing) * 40);\n }\n }\n .md\\:w-7 {\n @media (width >= 48rem) {\n width: calc(var(--spacing) * 7);\n }\n }\n .md\\:w-14 {\n @media (width >= 48rem) {\n width: calc(var(--spacing) * 14);\n }\n }\n .md\\:w-40 {\n @media (width >= 48rem) {\n width: calc(var(--spacing) * 40);\n }\n }\n .md\\:flex-row {\n @media (width >= 48rem) {\n flex-direction: row;\n }\n }\n .md\\:text-xl {\n @media (width >= 48rem) {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n }\n .md\\:text-xs {\n @media (width >= 48rem) {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n }\n .lg\\:w-96 {\n @media (width >= 64rem) {\n width: calc(var(--spacing) * 96);\n }\n }\n .lg\\:flex-row {\n @media (width >= 64rem) {\n flex-direction: row;\n }\n }\n}\n@property --tw-scale-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-gradient-position {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from {\n syntax: \"<color>\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-via {\n syntax: \"<color>\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-to {\n syntax: \"<color>\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-via-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from-position {\n syntax: \"<length-percentage>\";\n inherits: false;\n initial-value: 0%;\n}\n@property --tw-gradient-via-position {\n syntax: \"<length-percentage>\";\n inherits: false;\n initial-value: 50%;\n}\n@property --tw-gradient-to-position {\n syntax: \"<length-percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ordinal {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-slashed-zero {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-figure {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-spacing {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-fraction {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-border-style: solid;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-ordinal: initial;\n --tw-slashed-zero: initial;\n --tw-numeric-figure: initial;\n --tw-numeric-spacing: initial;\n --tw-numeric-fraction: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n }\n }\n}\n"],"mappings":"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","names":[]}
|