![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/.cursor-server/data/User/History/-3c656a3f/ |
<?php
session_start();
// Include security tracking
require_once 'includes/security_tracking.php';
// Handle AJAX requests
$is_ajax = isset($_GET['ajax']) && $_GET['ajax'] == '1';
// KILLER SEO OPTIMIZATION FOR HOMEPAGE
$page_title = 'Free AI Music Generator Software 2024 - Create Professional Beats & Songs | SoundStudioPro';
$page_description = 'Best free AI music generator software for creating professional beats, songs & tracks instantly. Generate royalty-free music in any genre with advanced AI technology. Join 50,000+ creators worldwide. Start free!';
$current_page = 'index';
// High-value keywords for music software niche
$meta_keywords = 'free AI music generator, AI music software, music production software, beat maker software, AI song generator, royalty free music, music creation software, AI music composer, online music maker, free music software, AI beat maker, music generator app, artificial intelligence music, automated music creation, AI music platform, music studio software, digital music creator, AI music technology, music composition software, free music production tools, best AI music generator 2024, professional music creator, AI music maker free, music generator online, artificial intelligence composer, beat creator software, song maker AI, music AI generator, free beat maker, AI music creation, music software free, AI composer software';
// Enhanced OG meta tags for homepage
$og_title = 'Free AI Music Generator Software - Create Professional Music Instantly | SoundStudioPro';
$og_description = 'Generate professional AI music for free. Create beats, songs & tracks in any genre with our advanced AI music generator. Used by 50,000+ creators worldwide. Commercial license included!';
$og_image = 'https://' . $_SERVER['HTTP_HOST'] . '/assets/images/ai-music-generator-homepage.jpg';
$og_type = 'website';
// Twitter optimization
$twitter_title = 'Free AI Music Generator - Create Professional Beats & Songs Instantly';
$twitter_description = 'Best free AI music software for creating professional tracks. Generate beats, songs & music in any genre with advanced AI. Start creating now!';
// Additional SEO meta tags
$additional_meta = [
'author' => 'SoundStudioPro Team',
'copyright' => 'SoundStudioPro',
'robots' => 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1',
'googlebot' => 'index, follow',
'bingbot' => 'index, follow',
'classification' => 'Music Software, AI Technology, Music Production',
'category' => 'Music Technology',
'coverage' => 'Worldwide',
'distribution' => 'Global',
'rating' => 'General',
'revisit-after' => '1 day',
'language' => 'English',
'geo.region' => 'US',
'geo.placename' => 'United States',
'application-name' => 'SoundStudioPro',
'theme-color' => '#667eea',
'msapplication-TileColor' => '#667eea',
'apple-mobile-web-app-title' => 'SoundStudioPro',
'apple-mobile-web-app-capable' => 'yes'
];
// Include header only for full page loads
if (!$is_ajax) {
include 'includes/header.php';
// Add advanced SEO meta tags and structured data for homepage
echo '<meta name="keywords" content="' . htmlspecialchars($meta_keywords) . '">';
// Add additional meta tags for enhanced SEO
foreach ($additional_meta as $name => $content) {
echo '<meta name="' . htmlspecialchars($name) . '" content="' . htmlspecialchars($content) . '">';
}
// Homepage-specific JSON-LD structured data
$homepage_schema = [
"@context" => "https://schema.org",
"@type" => "WebSite",
"name" => "SoundStudioPro - AI Music Generation Platform",
"description" => "Professional AI music creation software for generating original tracks, beats, and songs with advanced artificial intelligence technology",
"url" => "https://soundstudiopro.com",
"potentialAction" => [
"@type" => "SearchAction",
"target" => [
"@type" => "EntryPoint",
"urlTemplate" => "https://soundstudiopro.com/community_fixed.php?search={search_term}"
],
"query-input" => "required name=search_term"
],
"publisher" => [
"@type" => "Organization",
"name" => "SoundStudioPro",
"logo" => [
"@type" => "ImageObject",
"url" => "https://soundstudiopro.com/assets/images/logo.png"
]
]
];
echo '<script type="application/ld+json">' . json_encode($homepage_schema, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . '</script>';
// Organization schema
$organization_schema = [
"@context" => "https://schema.org",
"@type" => "Organization",
"name" => "SoundStudioPro",
"description" => "Leading AI music creation platform for professional track generation",
"url" => "https://soundstudiopro.com",
"logo" => "https://soundstudiopro.com/assets/images/logo.png",
"foundingDate" => "2024",
"founder" => [
"@type" => "Organization",
"name" => "SoundStudioPro Team"
],
"address" => [
"@type" => "PostalAddress",
"addressCountry" => "US"
],
"contactPoint" => [
"@type" => "ContactPoint",
"contactType" => "customer support",
"url" => "https://soundstudiopro.com/contact.php"
],
"sameAs" => [
"https://twitter.com/soundstudiopro",
"https://facebook.com/soundstudiopro",
"https://youtube.com/soundstudiopro"
]
];
echo '<script type="application/ld+json">' . json_encode($organization_schema, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . '</script>';
// Product schema for the software
$product_schema = [
"@context" => "https://schema.org",
"@type" => "SoftwareApplication",
"name" => "SoundStudioPro AI Music Generator",
"description" => "Professional AI music creation software for generating original tracks, beats, and songs with advanced artificial intelligence technology",
"applicationCategory" => "MusicApplication",
"operatingSystem" => ["Windows", "macOS", "Linux", "Web Browser", "iOS", "Android"],
"downloadUrl" => "https://soundstudiopro.com",
"softwareVersion" => "2.0",
"releaseNotes" => "Advanced AI music generation with improved quality and new features",
"offers" => [
[
"@type" => "Offer",
"price" => "0",
"priceCurrency" => "USD",
"description" => "Free AI Music Generation",
"availability" => "https://schema.org/InStock"
],
[
"@type" => "Offer",
"price" => "9.99",
"priceCurrency" => "USD",
"description" => "Premium AI Music Generation",
"availability" => "https://schema.org/InStock"
]
],
"aggregateRating" => [
"@type" => "AggregateRating",
"ratingValue" => "4.9",
"ratingCount" => "2500",
"bestRating" => "5",
"worstRating" => "1"
],
"features" => [
"AI Music Generation",
"Beat Making",
"Song Creation",
"Royalty-Free Music",
"Multiple Genres",
"High-Quality Audio",
"Real-time Preview",
"Community Sharing",
"Commercial License",
"Instant Download"
],
"screenshot" => "https://soundstudiopro.com/assets/images/app-screenshot.png",
"author" => [
"@type" => "Organization",
"name" => "SoundStudioPro"
]
];
echo '<script type="application/ld+json">' . json_encode($product_schema, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . '</script>';
// FAQ Schema for homepage
$faq_schema = [
"@context" => "https://schema.org",
"@type" => "FAQPage",
"mainEntity" => [
[
"@type" => "Question",
"name" => "What is the best free AI music generator software?",
"acceptedAnswer" => [
"@type" => "Answer",
"text" => "SoundStudioPro is the top-rated free AI music generator software, offering professional-quality music creation with advanced artificial intelligence. Create beats, songs, and tracks in any genre instantly with commercial licensing included."
]
],
[
"@type" => "Question",
"name" => "How does AI music generation work?",
"acceptedAnswer" => [
"@type" => "Answer",
"text" => "Our AI music generator uses advanced machine learning algorithms to analyze musical patterns and create original compositions. Simply input your preferences for genre, mood, and style, and our AI creates professional music in seconds."
]
],
[
"@type" => "Question",
"name" => "Can I use AI-generated music commercially?",
"acceptedAnswer" => [
"@type" => "Answer",
"text" => "Yes! All music generated with SoundStudioPro comes with a commercial license, allowing you to use tracks for YouTube videos, podcasts, games, and other commercial projects without paying royalties."
]
],
[
"@type" => "Question",
"name" => "Is SoundStudioPro really free to use?",
"acceptedAnswer" => [
"@type" => "Answer",
"text" => "Yes! SoundStudioPro offers free AI music generation with the ability to create professional beats, songs, and tracks. Premium features are available for advanced users, but our core AI music generator is completely free."
]
]
]
];
echo '<script type="application/ld+json">' . json_encode($faq_schema, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . '</script>';
}
// Global player is included via footer.php
?>
<div class="container" id="pageContainer">
<div class="main-content">
<style>
/* Reset & Base Styles */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
font-size: 62.5%;
scroll-behavior: smooth;
}
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.6;
color: #1a202c;
background: #0a0a0a;
min-height: 100vh;
overflow-x: hidden;
padding-bottom: 120px; /* Increased space to prevent button overlap */
}
/* Custom Scrollbar */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: #1a1a1a;
}
::-webkit-scrollbar-thumb {
background: linear-gradient(135deg, #667eea, #764ba2);
border-radius: 4px;
}
/* Container & Layout */
.container {
max-width: 140rem;
margin: 0 auto;
padding: 0 2rem;
}
/* Hero Section */
.hero {
padding: 8rem 0 6rem;
text-align: center;
color: white;
background: linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 50%, #0a0a0a 100%);
position: relative;
overflow: hidden;
}
.hero::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="grid" width="10" height="10" patternUnits="userSpaceOnUse"><path d="M 10 0 L 0 0 0 10" fill="none" stroke="rgba(102,126,234,0.1)" stroke-width="0.5"/></pattern></defs><rect width="100" height="100" fill="url(%23grid)"/></svg>');
opacity: 0.3;
}
.hero-content {
max-width: 90rem;
margin: 0 auto;
position: relative;
z-index: 2;
}
.hero-badge {
display: inline-block;
background: linear-gradient(135deg, rgba(102, 126, 234, 0.2), rgba(118, 75, 162, 0.2));
color: #667eea;
padding: 1.2rem 2.4rem;
border-radius: 50px;
font-size: 1.4rem;
font-weight: 600;
margin-bottom: 2rem;
backdrop-filter: blur(10px);
border: 1px solid rgba(102, 126, 234, 0.3);
animation: pulse 2s infinite;
}
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.05); }
}
.hero-title {
font-size: 7.2rem;
font-weight: 900;
line-height: 1.1;
margin-bottom: 2.4rem;
background: linear-gradient(135deg, #ffffff, #667eea, #764ba2);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
animation: gradientShift 3s ease-in-out infinite;
}
@keyframes gradientShift {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}
.hero-subtitle {
font-size: 2.4rem;
font-weight: 400;
margin-bottom: 3rem;
opacity: 0.9;
max-width: 70rem;
margin-left: auto;
margin-right: auto;
color: #a0aec0;
}
.hero-actions {
display: flex;
gap: 2rem;
justify-content: center;
flex-wrap: wrap;
}
/* Buttons */
.btn {
display: inline-flex;
align-items: center;
gap: 1rem;
padding: 2rem 4rem;
border-radius: 16px;
font-size: 1.6rem;
font-weight: 600;
text-decoration: none;
transition: all 0.3s ease;
border: none;
cursor: pointer;
position: relative;
overflow: hidden;
}
.btn-primary {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
box-shadow: 0 10px 30px rgba(102, 126, 234, 0.3);
}
.btn-primary:hover {
transform: translateY(-3px);
box-shadow: 0 20px 50px rgba(102, 126, 234, 0.4);
}
.btn-secondary {
background: rgba(255, 255, 255, 0.1);
color: white;
border: 2px solid rgba(255, 255, 255, 0.2);
backdrop-filter: blur(10px);
}
.btn-secondary:hover {
background: rgba(255, 255, 255, 0.2);
transform: translateY(-3px);
border-color: rgba(255, 255, 255, 0.3);
}
/* Music Creation Interface */
.music-creator {
background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);
padding: 8rem 0;
border-radius: 40px 40px 0 0;
margin-top: -4rem;
position: relative;
z-index: 10;
}
/* Create Music Section */
.create-music-section {
background: linear-gradient(135deg, rgba(102, 126, 234, 0.15), rgba(118, 75, 162, 0.15));
border-radius: 24px;
padding: 4rem;
margin-bottom: 4rem;
backdrop-filter: blur(15px);
border: 1px solid rgba(255, 255, 255, 0.15);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
position: relative;
overflow: hidden;
}
.create-music-section::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 2px;
background: linear-gradient(90deg, #667eea, #764ba2, #667eea);
animation: shimmer 3s ease-in-out infinite;
}
@keyframes shimmer {
0%, 100% { transform: translateX(-100%); }
50% { transform: translateX(100%); }
}
.create-music-header {
text-align: center;
margin-bottom: 3rem;
}
.section-title {
font-size: 3.2rem;
font-weight: 700;
color: white;
margin-bottom: 1rem;
}
.section-subtitle {
font-size: 1.6rem;
color: #a0aec0;
}
.create-music-form {
max-width: 90rem;
margin: 0 auto;
}
/* Mode Selector */
.mode-selector {
display: flex;
gap: 1rem;
margin-bottom: 3rem;
background: rgba(255, 255, 255, 0.05);
border-radius: 12px;
padding: 0.5rem;
}
.mode-option {
flex: 1;
padding: 1.5rem;
border-radius: 8px;
cursor: pointer;
text-align: center;
transition: all 0.3s ease;
background: transparent;
border: 2px solid transparent;
}
.mode-option.active {
background: linear-gradient(135deg, #667eea, #764ba2);
border-color: rgba(102, 126, 234, 0.3);
transform: translateY(-2px);
}
.mode-option i {
font-size: 2rem;
margin-bottom: 0.5rem;
display: block;
}
.mode-option span {
display: block;
font-size: 1.6rem;
font-weight: 600;
color: white;
margin-bottom: 0.3rem;
}
.mode-option small {
font-size: 1.2rem;
color: #a0aec0;
}
.mode-option.active small {
color: rgba(255, 255, 255, 0.8);
}
.mode-cost {
font-size: 1.2rem;
font-weight: 600;
color: #ffc107;
margin-top: 0.5rem;
padding: 0.3rem 0.8rem;
background: rgba(255, 193, 7, 0.1);
border-radius: 6px;
border: 1px solid rgba(255, 193, 7, 0.2);
}
.mode-option.active .mode-cost {
background: rgba(255, 193, 7, 0.2);
border-color: rgba(255, 193, 7, 0.4);
}
/* Pro Mode Styles */
.pro-mode-header {
background: linear-gradient(135deg, rgba(255, 193, 7, 0.1), rgba(255, 152, 0, 0.1));
border: 2px solid rgba(255, 193, 7, 0.3);
border-radius: 16px;
padding: 2rem;
margin-bottom: 3rem;
text-align: center;
}
.pro-mode-header h3 {
color: #ffc107;
font-size: 2.4rem;
margin-bottom: 0.5rem;
display: flex;
align-items: center;
justify-content: center;
gap: 1rem;
}
.pro-mode-header p {
color: #a0aec0;
font-size: 1.4rem;
margin: 0;
}
.pro-section {
background: rgba(255, 255, 255, 0.02);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 12px;
padding: 2rem;
margin-bottom: 2rem;
}
.pro-section h4 {
color: #ffc107;
font-size: 1.8rem;
margin-bottom: 1.5rem;
display: flex;
align-items: center;
gap: 0.8rem;
border-bottom: 1px solid rgba(255, 193, 7, 0.2);
padding-bottom: 0.8rem;
}
.pro-section h4 i {
font-size: 1.6rem;
}
/* Credit Cost Styling */
.credit-cost-display {
transition: all 0.3s ease;
}
.credit-cost-display.advanced-cost {
background: linear-gradient(135deg, rgba(102, 126, 234, 0.2), rgba(118, 75, 162, 0.2));
border-color: rgba(102, 126, 234, 0.4);
color: #667eea;
}
.credit-cost-display.pro-cost {
background: linear-gradient(135deg, rgba(255, 193, 7, 0.2), rgba(255, 152, 0, 0.2));
border-color: rgba(255, 193, 7, 0.4);
color: #ffc107;
}
.credit-cost-display.advanced-cost .cost-label,
.credit-cost-display.pro-cost .cost-label {
font-weight: 600;
}
/* Form Modes */
.form-mode {
display: none;
animation: fadeIn 0.3s ease;
}
.form-mode.active {
display: block;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
.form-row {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 2rem;
margin-bottom: 2rem;
}
.form-group {
margin-bottom: 2rem;
}
.form-group label {
display: block;
color: white;
font-size: 1.4rem;
font-weight: 600;
margin-bottom: 0.8rem;
}
.form-input {
width: 100%;
padding: 1.4rem 1.8rem;
border: 2px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
background: rgba(255, 255, 255, 0.08);
color: white;
font-size: 1.5rem;
backdrop-filter: blur(20px);
transition: all 0.3s ease;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.form-input:focus {
outline: none;
border-color: rgba(102, 126, 234, 0.6);
box-shadow: 0 0 25px rgba(102, 126, 234, 0.3);
background: rgba(255, 255, 255, 0.12);
transform: translateY(-2px);
}
.form-input:hover {
border-color: rgba(255, 255, 255, 0.2);
background: rgba(255, 255, 255, 0.1);
}
.form-input::placeholder {
color: #a0aec0;
}
/* Select Dropdown Styling */
.form-input[type="select"],
.form-input[data-type="select"],
select.form-input {
color: white;
background: rgba(255, 255, 255, 0.08);
cursor: pointer;
}
.form-input[type="select"] option,
.form-input[data-type="select"] option,
select.form-input option {
background: #1a1a1a;
color: white;
padding: 1rem;
border: none;
}
.form-input[type="select"] option:hover,
.form-input[data-type="select"] option:hover,
select.form-input option:hover {
background: rgba(102, 126, 234, 0.3);
}
.form-input[type="select"] option:checked,
.form-input[data-type="select"] option:checked,
select.form-input option:checked {
background: linear-gradient(135deg, #667eea, #764ba2);
color: white;
}
/* Additional Select Styling for Better Browser Support */
select {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6,9 12,15 18,9'%3e%3c/polyline%3e%3c/svg%3e");
background-repeat: no-repeat;
background-position: right 1rem center;
background-size: 1.5rem;
padding-right: 3rem;
}
/* Removed -ms-expand for compatibility */
/* Ensure dropdown options are visible */
select option {
background-color: #1a1a1a !important;
color: white !important;
border: none !important;
padding: 1rem !important;
}
select option:hover {
background-color: rgba(102, 126, 234, 0.3) !important;
}
select option:checked {
background: linear-gradient(135deg, #667eea, #764ba2) !important;
color: white !important;
}
/* Character Count */
.char-count {
text-align: right;
font-size: 1.2rem;
color: #a0aec0;
margin-top: 0.5rem;
}
/* Radio Group */
.radio-group {
display: flex;
gap: 2rem;
margin-top: 0.5rem;
}
.radio-option {
display: flex;
align-items: center;
gap: 0.8rem;
cursor: pointer;
padding: 1rem 1.5rem;
border-radius: 8px;
background: rgba(255, 255, 255, 0.05);
border: 2px solid rgba(255, 255, 255, 0.1);
transition: all 0.3s ease;
}
.radio-option:hover {
background: rgba(255, 255, 255, 0.1);
border-color: rgba(102, 126, 234, 0.3);
}
.radio-option input[type="radio"] {
width: 1.8rem;
height: 1.8rem;
accent-color: #667eea;
}
.radio-option input[type="radio"]:checked + span {
color: #667eea;
font-weight: 600;
}
.radio-option span {
color: white;
font-size: 1.4rem;
}
.form-actions {
display: flex;
align-items: center;
gap: 2rem;
flex-wrap: wrap;
position: relative;
z-index: 1000; /* Ensure button is above other elements */
}
.credits-info {
color: #a0aec0;
font-size: 1.4rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.credits-info.low-credits {
color: #f56565;
animation: pulse 2s infinite;
}
.credit-warning {
color: #f56565;
font-weight: 600;
margin-left: 0.5rem;
}
.loading-state {
text-align: center;
padding: 4rem 2rem;
}
.loading-content {
display: flex;
flex-direction: column;
align-items: center;
gap: 2rem;
}
.loading-spinner {
width: 6rem;
height: 6rem;
border: 4px solid rgba(255, 255, 255, 0.1);
border-top: 4px solid #667eea;
border-radius: 50%;
animation: spin 1s linear infinite;
margin: 0 auto 2rem;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.loading-content h3 {
color: white;
font-size: 2.4rem;
margin-bottom: 1rem;
}
.loading-content p {
color: #a0aec0;
font-size: 1.6rem;
margin-bottom: 2rem;
}
.loading-note {
font-size: 1.4rem;
color: #667eea;
font-style: italic;
margin-top: 2rem;
}
.progress-bar {
width: 100%;
max-width: 400px;
height: 8px;
background: rgba(255, 255, 255, 0.1);
border-radius: 4px;
overflow: hidden;
margin: 2rem auto;
}
.progress-fill {
height: 100%;
background: linear-gradient(90deg, #667eea, #764ba2);
width: 0%;
animation: progress 3s ease-in-out infinite;
}
@keyframes progress {
0% { width: 0%; }
50% { width: 70%; }
100% { width: 100%; }
}
/* Success Message */
.success-message {
position: fixed;
top: 20px;
right: 20px;
background: linear-gradient(135deg, #48bb78, #38a169);
color: white;
padding: 2rem;
border-radius: 12px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
z-index: 10000;
animation: slideIn 0.5s ease;
max-width: 400px;
}
@keyframes slideIn {
from { transform: translateX(100%); opacity: 0; }
to { transform: translateX(0); opacity: 1; }
}
.success-content {
text-align: center;
}
.success-content i {
font-size: 3rem;
margin-bottom: 1rem;
}
.success-content h3 {
font-size: 1.8rem;
margin-bottom: 1rem;
}
.success-content p {
font-size: 1.4rem;
margin-bottom: 0.5rem;
}
/* Processing Card */
.processing-card {
border: 2px solid #667eea;
background: linear-gradient(135deg, rgba(102, 126, 234, 0.1), rgba(118, 75, 162, 0.1));
animation: pulse 2s infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.7; }
}
.status-processing {
background: linear-gradient(135deg, #667eea, #764ba2);
color: white;
padding: 0.5rem 1rem;
border-radius: 6px;
font-size: 1.2rem;
font-weight: 600;
}
.results-section {
text-align: center;
padding: 3rem;
background: rgba(72, 187, 120, 0.1);
border-radius: 16px;
border: 1px solid rgba(72, 187, 120, 0.2);
}
.results-content h3 {
font-size: 2.4rem;
color: white;
margin-bottom: 2rem;
}
.audio-player {
margin-bottom: 2rem;
}
.results-actions {
display: flex;
gap: 1rem;
justify-content: center;
flex-wrap: wrap;
}
/* Slider Styles */
.slider-container {
margin-top: 1rem;
}
.slider {
width: 100%;
height: 6px;
border-radius: 3px;
background: rgba(255, 255, 255, 0.1);
outline: none;
-webkit-appearance: none;
appearance: none;
cursor: pointer;
}
.slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 20px;
height: 20px;
border-radius: 50%;
background: linear-gradient(135deg, #667eea, #764ba2);
cursor: pointer;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
}
.slider::-moz-range-thumb {
width: 20px;
height: 20px;
border-radius: 50%;
background: linear-gradient(135deg, #667eea, #764ba2);
cursor: pointer;
border: none;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
}
.slider-labels {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 0.8rem;
font-size: 1.2rem;
color: #a0aec0;
}
.slider-labels span:nth-child(2) {
color: #667eea;
font-weight: 600;
font-size: 1.4rem;
}
.creator-container {
max-width: 80rem;
margin: 0 auto;
}
.creator-header {
text-align: center;
margin-bottom: 6rem;
}
.creator-title {
font-size: 4.8rem;
font-weight: 700;
color: white;
margin-bottom: 2rem;
}
.creator-subtitle {
font-size: 2rem;
color: #a0aec0;
}
.btn {
padding: 1.2rem 2.4rem;
border: none;
border-radius: 10px;
font-size: 1.6rem;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
display: inline-flex;
align-items: center;
gap: 0.8rem;
text-decoration: none;
}
.btn-primary {
background: linear-gradient(45deg, #667eea, #764ba2);
color: white;
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4);
}
.creator-form {
background: rgba(255, 255, 255, 0.05);
padding: 4rem;
border-radius: 24px;
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.1);
}
.form-group {
margin-bottom: 3rem;
}
.form-label {
display: block;
font-size: 1.6rem;
font-weight: 600;
color: white;
margin-bottom: 1rem;
}
.form-input,
.form-textarea,
.form-select {
width: 100%;
padding: 1.5rem 2rem;
border: 2px solid rgba(255, 255, 255, 0.1);
border-radius: 12px;
background: rgba(255, 255, 255, 0.05);
color: white;
font-size: 1.6rem;
transition: all 0.3s ease;
}
.form-input:focus,
.form-textarea:focus,
.form-select:focus {
outline: none;
border-color: #667eea;
background: rgba(255, 255, 255, 0.1);
}
.form-textarea {
min-height: 12rem;
resize: vertical;
}
.form-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 2rem;
}
.create-btn {
width: 100%;
padding: 2rem;
font-size: 1.8rem;
font-weight: 700;
background: linear-gradient(135deg, #667eea, #764ba2);
color: white;
border: none;
border-radius: 16px;
cursor: pointer;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.create-btn:hover {
transform: translateY(-2px);
box-shadow: 0 15px 40px rgba(102, 126, 234, 0.4);
}
.create-btn:disabled {
opacity: 0.6;
cursor: not-allowed;
transform: none;
}
/* Results Section */
.results-section {
margin-top: 4rem;
display: none;
}
.results-header {
text-align: center;
margin-bottom: 3rem;
}
.results-title {
font-size: 3.2rem;
font-weight: 700;
color: white;
margin-bottom: 1rem;
}
.audio-player {
background: rgba(255, 255, 255, 0.05);
padding: 3rem;
border-radius: 20px;
margin-bottom: 2rem;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.audio-player audio {
width: 100%;
border-radius: 12px;
}
.download-btn {
display: inline-flex;
align-items: center;
gap: 1rem;
padding: 1.5rem 3rem;
background: linear-gradient(135deg, #48bb78, #38a169);
color: white;
text-decoration: none;
border-radius: 12px;
font-weight: 600;
transition: all 0.3s ease;
}
.download-btn:hover {
transform: translateY(-2px);
box-shadow: 0 10px 30px rgba(72, 187, 120, 0.3);
}
/* Features Section */
.features {
background: #1a1a1a;
padding: 8rem 0;
}
.section-header {
text-align: center;
margin-bottom: 6rem;
}
.section-title {
font-size: 4.8rem;
font-weight: 700;
color: white;
margin-bottom: 2rem;
}
.section-subtitle {
font-size: 2rem;
color: #a0aec0;
max-width: 60rem;
margin: 0 auto;
}
.features-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(35rem, 1fr));
gap: 3rem;
}
.feature-card {
background: rgba(255, 255, 255, 0.05);
padding: 4rem 3rem;
border-radius: 20px;
text-align: center;
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.1);
transition: all 0.3s ease;
}
.feature-card:hover {
transform: translateY(-10px);
border-color: rgba(102, 126, 234, 0.3);
box-shadow: 0 30px 80px rgba(102, 126, 234, 0.2);
}
.feature-icon {
font-size: 4rem;
color: #667eea;
margin-bottom: 2rem;
}
.feature-title {
font-size: 2.4rem;
font-weight: 700;
color: white;
margin-bottom: 1.5rem;
}
.feature-description {
font-size: 1.6rem;
color: #a0aec0;
line-height: 1.6;
}
/* Pricing Section */
.pricing {
background: #0a0a0a;
padding: 8rem 0;
}
.credits-packages {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 3rem;
max-width: 120rem;
margin: 0 auto;
padding: 0 2rem;
}
.credit-package {
background: linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 50%, #0a0a0a 100%);
border: 2px solid;
border-image: linear-gradient(135deg, #667eea, #764ba2) 1;
border-radius: 20px;
padding: 3rem 2rem;
text-align: center;
position: relative;
transition: all 0.3s ease;
backdrop-filter: blur(10px);
}
.credit-package:hover {
transform: translateY(-10px);
box-shadow: 0 20px 40px rgba(102, 126, 234, 0.3);
}
.credit-package.featured {
transform: scale(1.05);
border-image: linear-gradient(135deg, #667eea, #764ba2) 1;
box-shadow: 0 0 30px rgba(102, 126, 234, 0.3);
}
.credit-package.featured:hover {
transform: scale(1.05) translateY(-10px);
}
.package-icon {
width: 80px;
height: 80px;
background: linear-gradient(135deg, #667eea, #764ba2);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 2rem;
font-size: 2.4rem;
color: white;
}
.package-name {
font-size: 2.8rem;
font-weight: 800;
color: white;
margin-bottom: 1rem;
}
.package-credits {
font-size: 2rem;
color: #667eea;
font-weight: 700;
margin-bottom: 1.5rem;
}
.package-price {
margin-bottom: 1.5rem;
}
.original-price {
display: block;
font-size: 1.4rem;
color: #ff6b6b;
text-decoration: line-through;
margin-bottom: 0.5rem;
opacity: 0.8;
}
.current-price {
display: block;
font-size: 3.2rem;
font-weight: 900;
color: white;
margin-bottom: 0.5rem;
}
.per-credit {
display: block;
font-size: 1.2rem;
color: #a0aec0;
}
.special-badge {
background: linear-gradient(135deg, #ff6b6b, #ee5a52);
color: white;
padding: 0.6rem 1.2rem;
border-radius: 12px;
font-size: 1rem;
font-weight: 600;
margin-bottom: 1.5rem;
display: inline-block;
box-shadow: 0 4px 15px rgba(255, 107, 107, 0.3);
animation: pulse 2s infinite;
}
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.05); }
100% { transform: scale(1); }
}
.package-badge {
position: absolute;
top: -12px;
right: 15px;
background: linear-gradient(135deg, #667eea, #764ba2);
color: white;
padding: 0.5rem 1rem;
border-radius: 10px;
font-size: 0.9rem;
font-weight: 600;
z-index: 3;
}
.package-features {
list-style: none;
padding: 0;
margin-bottom: 3rem;
}
.package-features li {
color: #a0aec0;
font-size: 1.4rem;
margin-bottom: 0.8rem;
display: flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
text-align: center;
}
.package-features li.crossed-out {
text-decoration: line-through;
color: #718096;
opacity: 0.6;
}
.purchase-btn {
background: linear-gradient(135deg, #667eea, #764ba2);
border: none;
color: white;
padding: 1.5rem 3rem;
border-radius: 12px;
font-size: 1.8rem;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
width: 100%;
position: relative;
z-index: 2;
}
.purchase-btn:hover {
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4);
}
/* CTA Section */
.cta {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
padding: 8rem 0;
text-align: center;
}
.cta-content {
max-width: 60rem;
margin: 0 auto;
}
.cta-title {
font-size: 4.8rem;
font-weight: 700;
margin-bottom: 2rem;
color: white;
}
.cta-description {
font-size: 2rem;
margin-bottom: 4rem;
opacity: 0.9;
color: white;
}
/* Responsive Design */
@media (max-width: 768px) {
html { font-size: 56.25%; }
.hero-title { font-size: 4.8rem; }
.hero-subtitle { font-size: 1.8rem; }
.section-title { font-size: 3.2rem; }
.hero-actions {
flex-direction: column;
align-items: center;
gap: 1.5rem;
}
.btn {
width: 100%;
max-width: 30rem;
justify-content: center;
padding: 1.5rem 2rem;
font-size: 1.6rem;
}
.features-grid { grid-template-columns: 1fr; }
.pricing-grid { grid-template-columns: 1fr; }
.form-row { grid-template-columns: 1fr; }
.creator-form {
padding: 2rem;
margin: 0 1rem;
}
.mode-selector {
flex-direction: column;
gap: 1rem;
}
.mode-option {
padding: 1.5rem;
text-align: center;
}
.form-group {
margin-bottom: 2rem;
}
.form-input,
.form-textarea,
.form-select {
padding: 1.2rem;
font-size: 1.6rem;
}
.slider-container {
margin-top: 1rem;
}
.slider-labels {
font-size: 1.2rem;
}
.form-actions {
flex-direction: column;
gap: 1.5rem;
}
.credits-info {
text-align: center;
font-size: 1.4rem;
}
}
@media (max-width: 480px) {
html { font-size: 50%; }
.hero-title { font-size: 4rem; }
.hero-subtitle { font-size: 1.6rem; }
.section-title { font-size: 2.8rem; }
.container { padding: 0 1rem; }
.creator-form {
padding: 1.5rem;
margin: 0 0.5rem;
}
.hero {
padding: 6rem 0 4rem;
}
.hero-badge {
padding: 1rem 2rem;
font-size: 1.2rem;
}
.btn {
padding: 1.2rem 1.5rem;
font-size: 1.4rem;
}
.mode-option {
padding: 1.2rem;
}
.form-input,
.form-textarea,
.form-select {
padding: 1rem;
font-size: 1.4rem;
}
}
</style>
<!-- Hero Section -->
<section class="hero">
<div class="container">
<div class="hero-content">
<div class="hero-badge">🎵 Advanced AI Music Creation</div>
<h1 class="hero-title">Create Professional Music with AI</h1>
<p class="hero-subtitle">Generate studio-quality, watermark-free music tracks, lyrics, and music videos. Get 5 free credits when you sign up! Powered by cutting-edge AI technology that understands your creative vision.</p>
<div class="hero-actions">
<a href="#create" class="btn btn-primary">🎵 Start Creating Now</a>
<a href="#features" class="btn btn-secondary">Explore Features</a>
<a href="/community_fixed.php" class="btn btn-secondary">🎵 Browse Music Feed</a>
</div>
</div>
</div>
</section>
<!-- Music Creation Interface -->
<section id="create" class="music-creator">
<div class="container">
<div class="creator-container">
<div class="creator-header">
<h2 class="creator-title">🎵 Create Professional AI Music</h2>
<button onclick="openCreateMusicModal()" class="btn btn-primary">
<i class="fas fa-music"></i>
Create Music
</button>
<p class="creator-subtitle">Generate studio-quality music with vocals, lyrics, and multiple variations using advanced AI models</p>
</div>
<div class="creator-form">
<?php if (!isset($_SESSION['user_id'])): ?>
<div style="text-align: center; padding: 4rem;">
<div style="font-size: 6rem; margin-bottom: 2rem;">🔒</div>
<h3 style="color: white; font-size: 2.4rem; margin-bottom: 1.5rem;">Login Required</h3>
<p style="color: #a0aec0; font-size: 1.6rem; margin-bottom: 3rem;">You need to be logged in to create music. Join our community of artists!</p>
<div style="display: flex; gap: 2rem; justify-content: center; flex-wrap: wrap;">
<a href="auth/login.php" class="btn btn-primary">Login</a>
<a href="auth/register.php" class="btn btn-secondary">Sign Up</a>
</div>
</div>
<?php else: ?>
<!-- Success/Error Messages -->
<?php if (isset($_SESSION['success'])): ?>
<div style="background: rgba(34, 197, 94, 0.1); border: 1px solid #22c55e; padding: 1rem; margin-bottom: 2rem; border-radius: 8px; color: #22c55e;">
<strong>✅ Success:</strong> <?= htmlspecialchars($_SESSION['success']) ?>
</div>
<?php unset($_SESSION['success']); ?>
<?php endif; ?>
<?php if (isset($_SESSION['error'])): ?>
<div style="background: rgba(239, 68, 68, 0.1); border: 1px solid #ef4444; padding: 1rem; margin-bottom: 2rem; border-radius: 8px; color: #ef4444;">
<strong>❌ Error:</strong> <?= htmlspecialchars($_SESSION['error']) ?>
</div>
<?php unset($_SESSION['error']); ?>
<?php endif; ?>
<!-- Debug info (remove in production) -->
<?php if (isset($_GET['debug'])): ?>
<div style="background: rgba(255,255,255,0.1); padding: 1rem; margin-bottom: 2rem; border-radius: 8px; font-size: 1.2rem; color: #a0aec0;">
<strong>Debug Info:</strong><br>
User ID: <?= $_SESSION['user_id'] ?? 'Not set' ?><br>
Session ID: <?= session_id() ?><br>
Session Data: <?= htmlspecialchars(json_encode($_SESSION)) ?>
</div>
<?php endif; ?>
<form method="POST" action="create_music.php" id="musicForm">
<input type="hidden" name="type" value="music">
<input type="hidden" name="model_name" value="V3_5">
<input type="hidden" name="duration" value="30">
<input type="hidden" name="customMode" value="false">
<!-- Mode Selection -->
<div class="mode-selector">
<div class="mode-option active" data-mode="simple">
<i class="fas fa-magic"></i>
<span>Simple Mode</span>
<small>Quick generation with basic prompts</small>
<div class="mode-cost">1 Credit</div>
</div>
<div class="mode-option" data-mode="advanced">
<i class="fas fa-sliders-h"></i>
<span>Advanced Mode</span>
<small>Full control with style, lyrics, and variations</small>
<div class="mode-cost">3 Credits</div>
</div>
<div class="mode-option" data-mode="pro">
<i class="fas fa-cogs"></i>
<span>Pro Mode</span>
<small>Maximum control with every possible parameter</small>
<div class="mode-cost">5 Credits</div>
</div>
</div>
<!-- Simple Mode Form -->
<div id="simpleForm" class="form-mode active">
<div class="form-group">
<label for="simplePrompt">Describe your music</label>
<textarea name="prompt" id="simplePrompt" class="form-input" rows="3" placeholder="e.g., 'A happy electronic dance track with heavy bass and synth melodies' (max 400 characters)">A happy electronic dance track with heavy bass and synth melodies</textarea>
<div class="char-count">0/400</div>
</div>
</div>
<!-- Advanced Mode Form -->
<div id="advancedForm" class="form-mode">
<div class="form-row">
<div class="form-group">
<label for="title">Song Title</label>
<input type="text" name="title" id="title" class="form-input" placeholder="e.g., Neon Dreams" maxlength="80">
<div class="char-count">0/80</div>
</div>
<div class="form-group">
<label for="modelVersion">AI Model</label>
<select name="model_name" id="modelVersion" class="form-input">
<option value="V3_5">V3.5 (Fast)</option>
<option value="V4">V4 (Balanced)</option>
<option value="V4_5">V4.5 (Premium)</option>
</select>
</div>
<div class="form-group">
<label for="variations">Variations</label>
<select id="variations" class="form-input">
<option value="1">1 variation</option>
<option value="2" selected>2 variations</option>
<option value="3">3 variations</option>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="tempo">Tempo (BPM)</label>
<select id="tempo" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="60">60 BPM (Largo - Very Slow)</option>
<option value="70">70 BPM (Adagio - Slow)</option>
<option value="80">80 BPM (Andante - Walking Pace)</option>
<option value="90">90 BPM (Moderato - Moderate)</option>
<option value="100">100 BPM (Allegretto - Moderately Fast)</option>
<option value="120" selected>120 BPM (Allegro - Fast)</option>
<option value="140">140 BPM (Vivace - Lively)</option>
<option value="160">160 BPM (Presto - Very Fast)</option>
<option value="180">180 BPM (Prestissimo - Extremely Fast)</option>
</select>
</div>
<div class="form-group">
<label for="key">Musical Key</label>
<select id="key" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="C">C Major</option>
<option value="G">G Major</option>
<option value="D">D Major</option>
<option value="A">A Major</option>
<option value="E">E Major</option>
<option value="B">B Major</option>
<option value="F#">F# Major</option>
<option value="C#">C# Major</option>
<option value="F">F Major</option>
<option value="Bb">Bb Major</option>
<option value="Eb">Eb Major</option>
<option value="Ab">Ab Major</option>
<option value="Db">Db Major</option>
<option value="Gb">Gb Major</option>
<option value="Cb">Cb Major</option>
</select>
</div>
<div class="form-group">
<label for="scale">Scale/Mode</label>
<select id="scale" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="major">Major (Happy/Bright)</option>
<option value="minor">Minor (Sad/Melancholic)</option>
<option value="dorian">Dorian (Jazzy/Mysterious)</option>
<option value="mixolydian">Mixolydian (Bluesy/Rock)</option>
<option value="lydian">Lydian (Dreamy/Ethereal)</option>
<option value="phrygian">Phrygian (Exotic/Dramatic)</option>
<option value="locrian">Locrian (Tense/Unstable)</option>
</select>
</div>
<div class="form-group">
<label for="timeSignature">Time Signature</label>
<select id="timeSignature" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="4/4">4/4 (Common Time)</option>
<option value="3/4">3/4 (Waltz)</option>
<option value="6/8">6/8 (Jig)</option>
<option value="2/4">2/4 (March)</option>
<option value="5/4">5/4 (Unusual)</option>
<option value="7/8">7/8 (Complex)</option>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="energy">Energy Level</label>
<div class="slider-container">
<input type="range" id="energy" min="1" max="10" value="7" class="slider">
<div class="slider-labels">
<span>Calm</span>
<span id="energyValue">7</span>
<span>Intense</span>
</div>
</div>
</div>
<div class="form-group">
<label for="excitement">Excitement</label>
<div class="slider-container">
<input type="range" id="excitement" min="1" max="10" value="6" class="slider">
<div class="slider-labels">
<span>Relaxed</span>
<span id="excitementValue">6</span>
<span>Thrilling</span>
</div>
</div>
</div>
<div class="form-group">
<label for="mood">Mood</label>
<select id="mood" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="happy">Happy/Joyful</option>
<option value="sad">Sad/Melancholic</option>
<option value="energetic">Energetic/Upbeat</option>
<option value="calm">Calm/Peaceful</option>
<option value="romantic">Romantic/Intimate</option>
<option value="mysterious">Mysterious/Enigmatic</option>
<option value="dramatic">Dramatic/Epic</option>
<option value="nostalgic">Nostalgic/Retro</option>
<option value="futuristic">Futuristic/Electronic</option>
<option value="organic">Organic/Natural</option>
</select>
</div>
<div class="form-group">
<label for="language">Language</label>
<select id="language" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="english">English</option>
<option value="spanish">Spanish</option>
<option value="french">French</option>
<option value="german">German</option>
<option value="italian">Italian</option>
<option value="portuguese">Portuguese</option>
<option value="japanese">Japanese</option>
<option value="korean">Korean</option>
<option value="chinese">Chinese</option>
<option value="instrumental">Instrumental Only</option>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="genre">Genre</label>
<select id="genre" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="pop">Pop</option>
<option value="rock">Rock</option>
<option value="electronic">Electronic/Dance</option>
<option value="hip-hop">Hip-Hop/Rap</option>
<option value="jazz">Jazz</option>
<option value="classical">Classical</option>
<option value="country">Country</option>
<option value="r&b">R&B/Soul</option>
<option value="reggae">Reggae</option>
<option value="blues">Blues</option>
<option value="folk">Folk</option>
<option value="metal">Metal</option>
<option value="punk">Punk</option>
<option value="indie">Indie/Alternative</option>
<option value="ambient">Ambient</option>
<option value="lofi">Lo-Fi</option>
<option value="synthwave">Synthwave</option>
<option value="trap">Trap</option>
<option value="dubstep">Dubstep</option>
</select>
</div>
<div class="form-group">
<label for="voiceType">Voice Type</label>
<select id="voiceType" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="male">Male</option>
<option value="female">Female</option>
<option value="duet">Male & Female</option>
<option value="choir">Choir</option>
<option value="child">Children's</option>
<option value="robot">Robot/AI</option>
</select>
</div>
<div class="form-group">
<label for="useCase">Use Case</label>
<select id="useCase" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="background">Background Music</option>
<option value="workout">Workout/Exercise</option>
<option value="meditation">Meditation/Relaxation</option>
<option value="party">Party/Dancing</option>
<option value="study">Study/Focus</option>
<option value="sleep">Sleep/Lullaby</option>
<option value="gaming">Gaming</option>
<option value="commercial">Commercial/Ad</option>
<option value="podcast">Podcast Intro</option>
<option value="video">Video Background</option>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="instruments">Primary Instruments</label>
<select id="instruments" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="piano">Piano</option>
<option value="guitar">Guitar</option>
<option value="drums">Drums</option>
<option value="bass">Bass</option>
<option value="synth">Synthesizer</option>
<option value="strings">Strings</option>
<option value="brass">Brass</option>
<option value="woodwind">Woodwind</option>
<option value="percussion">Percussion</option>
<option value="electronic">Electronic</option>
<option value="acoustic">Acoustic</option>
<option value="orchestra">Orchestra</option>
</select>
</div>
<div class="form-group">
<label for="instrumental">Vocal Options</label>
<div class="radio-group">
<label class="radio-option">
<input type="radio" name="instrumental" value="false" checked>
<span>With Vocals</span>
</label>
<label class="radio-option">
<input type="radio" name="instrumental" value="true">
<span>Instrumental Only</span>
</label>
</div>
</div>
<div class="form-group">
<label for="duration">Duration</label>
<select id="duration" class="form-input">
<option value="15">15 seconds</option>
<option value="30" selected>30 seconds</option>
<option value="60">1 minute</option>
<option value="120">2 minutes</option>
<option value="180">3 minutes</option>
<option value="240">4 minutes</option>
<option value="300">5 minutes</option>
</select>
</div>
</div>
<div class="form-group">
<label for="advancedPrompt">Detailed Lyrics/Prompt</label>
<textarea name="advancedPrompt" id="advancedPrompt" class="form-input" rows="6" placeholder="Write your lyrics or detailed description... Example: [Verse] Night city lights shining bright Neon dreams in the midnight sky [Chorus] We're dancing through the night Electric hearts, electric minds"></textarea>
<div class="char-count">0/3000</div>
</div>
<div class="form-group">
<label for="tags">Tags (Optional)</label>
<input type="text" name="tags" id="tags" class="form-input" placeholder="e.g., electrifying, rock, energetic, upbeat">
</div>
</div>
<!-- Pro Mode Form -->
<div id="proForm" class="form-mode">
<div class="pro-mode-header">
<h3><i class="fas fa-crown"></i> Professional Studio Controls</h3>
<p>Maximum control over every aspect of music generation</p>
</div>
<!-- Basic Info Section -->
<div class="pro-section">
<h4><i class="fas fa-info-circle"></i> Basic Information</h4>
<div class="form-row">
<div class="form-group">
<label for="proTitle">Song Title</label>
<input type="text" name="proTitle" id="proTitle" class="form-input" placeholder="e.g., Neon Dreams" maxlength="80">
<div class="char-count">0/80</div>
</div>
<div class="form-group">
<label for="proModel">AI Model</label>
<select name="proModel" id="proModel" class="form-input">
<option value="V3_5">V3.5 (Fast & Reliable)</option>
<option value="V4">V4 (Balanced Quality)</option>
<option value="V4_5">V4.5 (Premium Quality)</option>
<option value="V5">V5 (Experimental)</option>
</select>
</div>
<div class="form-group">
<label for="proVariations">Variations</label>
<select id="proVariations" class="form-input">
<option value="1">1 variation</option>
<option value="2" selected>2 variations</option>
<option value="3">3 variations</option>
<option value="4">4 variations</option>
<option value="5">5 variations</option>
</select>
</div>
</div>
</div>
<!-- Musical Theory Section -->
<div class="pro-section">
<h4><i class="fas fa-music"></i> Musical Theory</h4>
<div class="form-row">
<div class="form-group">
<label for="proKey">Musical Key</label>
<select id="proKey" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="C">C Major</option>
<option value="G">G Major</option>
<option value="D">D Major</option>
<option value="A">A Major</option>
<option value="E">E Major</option>
<option value="B">B Major</option>
<option value="F#">F# Major</option>
<option value="C#">C# Major</option>
<option value="F">F Major</option>
<option value="Bb">Bb Major</option>
<option value="Eb">Eb Major</option>
<option value="Ab">Ab Major</option>
<option value="Db">Db Major</option>
<option value="Gb">Gb Major</option>
<option value="Cb">Cb Major</option>
<option value="Cm">C Minor</option>
<option value="Gm">G Minor</option>
<option value="Dm">D Minor</option>
<option value="Am">A Minor</option>
<option value="Em">E Minor</option>
<option value="Bm">B Minor</option>
</select>
</div>
<div class="form-group">
<label for="proScale">Scale/Mode</label>
<select id="proScale" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="major">Major (Happy/Bright)</option>
<option value="minor">Minor (Sad/Melancholic)</option>
<option value="dorian">Dorian (Jazzy/Mysterious)</option>
<option value="mixolydian">Mixolydian (Bluesy/Rock)</option>
<option value="lydian">Lydian (Dreamy/Ethereal)</option>
<option value="phrygian">Phrygian (Exotic/Dramatic)</option>
<option value="locrian">Locrian (Tense/Unstable)</option>
<option value="pentatonic">Pentatonic (Folk/World)</option>
<option value="blues">Blues Scale</option>
<option value="chromatic">Chromatic (Experimental)</option>
</select>
</div>
<div class="form-group">
<label for="proTimeSignature">Time Signature</label>
<select id="proTimeSignature" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="4/4">4/4 (Common Time)</option>
<option value="3/4">3/4 (Waltz)</option>
<option value="6/8">6/8 (Jig)</option>
<option value="2/4">2/4 (March)</option>
<option value="5/4">5/4 (Unusual)</option>
<option value="7/8">7/8 (Complex)</option>
<option value="9/8">9/8 (Compound)</option>
<option value="12/8">12/8 (Blues)</option>
<option value="3/8">3/8 (Simple)</option>
<option value="6/4">6/4 (Compound)</option>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="proTempo">Tempo (BPM)</label>
<select id="proTempo" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="40">40 BPM (Grave - Very Slow)</option>
<option value="50">50 BPM (Largo - Slow)</option>
<option value="60">60 BPM (Adagio - Slow)</option>
<option value="70">70 BPM (Andante - Walking Pace)</option>
<option value="80">80 BPM (Moderato - Moderate)</option>
<option value="90">90 BPM (Allegretto - Moderately Fast)</option>
<option value="100">100 BPM (Allegro - Fast)</option>
<option value="120" selected>120 BPM (Allegro - Fast)</option>
<option value="140">140 BPM (Vivace - Lively)</option>
<option value="160">160 BPM (Presto - Very Fast)</option>
<option value="180">180 BPM (Prestissimo - Extremely Fast)</option>
<option value="200">200 BPM (Ultra Fast)</option>
</select>
</div>
<div class="form-group">
<label for="proChordProgression">Chord Progression</label>
<select id="proChordProgression" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="I-IV-V">I-IV-V (Classic)</option>
<option value="ii-V-I">ii-V-I (Jazz)</option>
<option value="I-V-vi-IV">I-V-vi-IV (Pop)</option>
<option value="vi-IV-I-V">vi-IV-I-V (Emotional)</option>
<option value="I-vi-IV-V">I-vi-IV-V (Classic Rock)</option>
<option value="I-bVII-IV">I-bVII-IV (Blues)</option>
<option value="i-VI-III-VII">i-VI-III-VII (Minor)</option>
<option value="custom">Custom (Specify in prompt)</option>
</select>
</div>
<div class="form-group">
<label for="proOctave">Octave Range</label>
<select id="proOctave" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="low">Low (Bass heavy)</option>
<option value="mid">Mid (Balanced)</option>
<option value="high">High (Treble heavy)</option>
<option value="wide">Wide (Full range)</option>
<option value="narrow">Narrow (Focused)</option>
</select>
</div>
</div>
</div>
<!-- Genre & Style Section -->
<div class="pro-section">
<h4><i class="fas fa-palette"></i> Genre & Style</h4>
<div class="form-row">
<div class="form-group">
<label for="proGenre">Primary Genre</label>
<select id="proGenre" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="pop">Pop</option>
<option value="rock">Rock</option>
<option value="electronic">Electronic/Dance</option>
<option value="hip-hop">Hip-Hop/Rap</option>
<option value="jazz">Jazz</option>
<option value="classical">Classical</option>
<option value="country">Country</option>
<option value="r&b">R&B/Soul</option>
<option value="reggae">Reggae</option>
<option value="blues">Blues</option>
<option value="folk">Folk</option>
<option value="metal">Metal</option>
<option value="punk">Punk</option>
<option value="indie">Indie/Alternative</option>
<option value="ambient">Ambient</option>
<option value="lofi">Lo-Fi</option>
<option value="synthwave">Synthwave</option>
<option value="trap">Trap</option>
<option value="dubstep">Dubstep</option>
<option value="house">House</option>
<option value="techno">Techno</option>
<option value="trance">Trance</option>
<option value="drum-bass">Drum & Bass</option>
<option value="garage">UK Garage</option>
<option value="grime">Grime</option>
<option value="drill">Drill</option>
<option value="afrobeats">Afrobeats</option>
<option value="k-pop">K-Pop</option>
<option value="latin">Latin</option>
<option value="world">World Music</option>
</select>
</div>
<div class="form-group">
<label for="proSubGenre">Sub-Genre</label>
<select id="proSubGenre" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="alternative">Alternative</option>
<option value="progressive">Progressive</option>
<option value="experimental">Experimental</option>
<option value="fusion">Fusion</option>
<option value="acoustic">Acoustic</option>
<option value="electric">Electric</option>
<option value="vintage">Vintage/Retro</option>
<option value="modern">Modern</option>
<option value="futuristic">Futuristic</option>
<option value="organic">Organic</option>
<option value="synthetic">Synthetic</option>
</select>
</div>
<div class="form-group">
<label for="proDecade">Decade Style</label>
<select id="proDecade" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="1960s">1960s (Psychedelic)</option>
<option value="1970s">1970s (Disco/Rock)</option>
<option value="1980s">1980s (Synthwave)</option>
<option value="1990s">1990s (Grunge/Electronica)</option>
<option value="2000s">2000s (Pop/Rock)</option>
<option value="2010s">2010s (EDM/Hip-Hop)</option>
<option value="2020s">2020s (Modern)</option>
</select>
</div>
</div>
</div>
<!-- Instruments Section -->
<div class="pro-section">
<h4><i class="fas fa-guitar"></i> Instruments & Arrangement</h4>
<div class="form-row">
<div class="form-group">
<label for="proLeadInstrument">Lead Instrument</label>
<select id="proLeadInstrument" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="piano">Piano</option>
<option value="guitar">Guitar</option>
<option value="synth">Synthesizer</option>
<option value="violin">Violin</option>
<option value="saxophone">Saxophone</option>
<option value="trumpet">Trumpet</option>
<option value="flute">Flute</option>
<option value="voice">Voice</option>
<option value="drums">Drums</option>
<option value="bass">Bass</option>
</select>
</div>
<div class="form-group">
<label for="proRhythmSection">Rhythm Section</label>
<select id="proRhythmSection" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="drums-bass">Drums + Bass</option>
<option value="drums-only">Drums Only</option>
<option value="bass-only">Bass Only</option>
<option value="percussion">Percussion</option>
<option value="electronic-beats">Electronic Beats</option>
<option value="acoustic-drums">Acoustic Drums</option>
<option value="none">No Rhythm Section</option>
</select>
</div>
<div class="form-group">
<label for="proHarmonySection">Harmony Section</label>
<select id="proHarmonySection" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="piano">Piano</option>
<option value="guitar">Guitar</option>
<option value="strings">Strings</option>
<option value="synth-pads">Synth Pads</option>
<option value="brass">Brass</option>
<option value="choir">Choir</option>
<option value="none">No Harmony</option>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="proArrangement">Arrangement Style</label>
<select id="proArrangement" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="minimal">Minimal (Sparse)</option>
<option value="standard">Standard (Balanced)</option>
<option value="dense">Dense (Layered)</option>
<option value="orchestral">Orchestral (Full)</option>
<option value="electronic">Electronic (Synthetic)</option>
<option value="acoustic">Acoustic (Natural)</option>
<option value="hybrid">Hybrid (Mixed)</option>
</select>
</div>
<div class="form-group">
<label for="proComplexity">Musical Complexity</label>
<select id="proComplexity" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="simple">Simple (Basic)</option>
<option value="moderate">Moderate (Standard)</option>
<option value="complex">Complex (Advanced)</option>
<option value="virtuoso">Virtuoso (Expert)</option>
</select>
</div>
<div class="form-group">
<label for="proDensity">Track Density</label>
<select id="proDensity" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="sparse">Sparse (Few elements)</option>
<option value="moderate">Moderate (Balanced)</option>
<option value="dense">Dense (Many elements)</option>
<option value="wall-of-sound">Wall of Sound (Maximum)</option>
</select>
</div>
</div>
</div>
<!-- Production Section -->
<div class="pro-section">
<h4><i class="fas fa-sliders-h"></i> Production & Mixing</h4>
<div class="form-row">
<div class="form-group">
<label for="proReverb">Reverb Level</label>
<div class="slider-container">
<input type="range" id="proReverb" min="0" max="10" value="5" class="slider">
<div class="slider-labels">
<span>Dry</span>
<span id="proReverbValue">5</span>
<span>Wet</span>
</div>
</div>
</div>
<div class="form-group">
<label for="proCompression">Compression</label>
<div class="slider-container">
<input type="range" id="proCompression" min="0" max="10" value="5" class="slider">
<div class="slider-labels">
<span>Light</span>
<span id="proCompressionValue">5</span>
<span>Heavy</span>
</div>
</div>
</div>
<div class="form-group">
<label for="proStereoWidth">Stereo Width</label>
<div class="slider-container">
<input type="range" id="proStereoWidth" min="0" max="10" value="5" class="slider">
<div class="slider-labels">
<span>Mono</span>
<span id="proStereoWidthValue">5</span>
<span>Wide</span>
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="proBassLevel">Bass Level</label>
<div class="slider-container">
<input type="range" id="proBassLevel" min="0" max="10" value="5" class="slider">
<div class="slider-labels">
<span>Low</span>
<span id="proBassLevelValue">5</span>
<span>High</span>
</div>
</div>
</div>
<div class="form-group">
<label for="proMidLevel">Mid Level</label>
<div class="slider-container">
<input type="range" id="proMidLevel" min="0" max="10" value="5" class="slider">
<div class="slider-labels">
<span>Low</span>
<span id="proMidLevelValue">5</span>
<span>High</span>
</div>
</div>
</div>
<div class="form-group">
<label for="proTrebleLevel">Treble Level</label>
<div class="slider-container">
<input type="range" id="proTrebleLevel" min="0" max="10" value="5" class="slider">
<div class="slider-labels">
<span>Low</span>
<span id="proTrebleLevelValue">5</span>
<span>High</span>
</div>
</div>
</div>
</div>
</div>
<!-- Voice & Language Section -->
<div class="pro-section">
<h4><i class="fas fa-microphone"></i> Voice & Language</h4>
<div class="form-row">
<div class="form-group">
<label for="proVoiceType">Voice Type</label>
<select id="proVoiceType" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="male">Male</option>
<option value="female">Female</option>
<option value="duet">Male & Female</option>
<option value="choir">Choir</option>
<option value="child">Children's</option>
<option value="robot">Robot/AI</option>
<option value="whisper">Whisper</option>
<option value="screaming">Screaming</option>
<option value="rapping">Rapping</option>
<option value="singing">Singing</option>
<option value="spoken">Spoken Word</option>
</select>
</div>
<div class="form-group">
<label for="proLanguage">Language</label>
<select id="proLanguage" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="english">English</option>
<option value="spanish">Spanish</option>
<option value="french">French</option>
<option value="german">German</option>
<option value="italian">Italian</option>
<option value="portuguese">Portuguese</option>
<option value="japanese">Japanese</option>
<option value="korean">Korean</option>
<option value="chinese">Chinese</option>
<option value="russian">Russian</option>
<option value="arabic">Arabic</option>
<option value="hindi">Hindi</option>
<option value="instrumental">Instrumental Only</option>
</select>
</div>
<div class="form-group">
<label for="proVocalStyle">Vocal Style</label>
<select id="proVocalStyle" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="clean">Clean</option>
<option value="distorted">Distorted</option>
<option value="autotune">Auto-tune</option>
<option value="harmonized">Harmonized</option>
<option value="layered">Layered</option>
<option value="choir">Choir</option>
<option value="call-response">Call & Response</option>
<option value="ad-libs">Ad-libs</option>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="proLyricTheme">Lyric Theme</label>
<select id="proLyricTheme" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="love">Love/Romance</option>
<option value="party">Party/Celebration</option>
<option value="inspirational">Inspirational</option>
<option value="sad">Sad/Melancholic</option>
<option value="angry">Angry/Aggressive</option>
<option value="peaceful">Peaceful/Calm</option>
<option value="adventure">Adventure/Epic</option>
<option value="nostalgic">Nostalgic/Retro</option>
<option value="futuristic">Futuristic/Sci-fi</option>
<option value="nature">Nature/Organic</option>
<option value="urban">Urban/City</option>
<option value="abstract">Abstract/Artistic</option>
</select>
</div>
<div class="form-group">
<label for="proRhymeScheme">Rhyme Scheme</label>
<select id="proRhymeScheme" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="AABB">AABB (Simple)</option>
<option value="ABAB">ABAB (Alternating)</option>
<option value="ABBA">ABBA (Enclosed)</option>
<option value="ABCB">ABCB (Ballad)</option>
<option value="AABA">AABA (Jazz)</option>
<option value="complex">Complex (Advanced)</option>
<option value="free">Free Verse</option>
</select>
</div>
<div class="form-group">
<label for="proHookFrequency">Hook Frequency</label>
<select id="proHookFrequency" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="minimal">Minimal</option>
<option value="standard">Standard</option>
<option value="frequent">Frequent</option>
<option value="constant">Constant</option>
</select>
</div>
</div>
</div>
<!-- Structure Section -->
<div class="pro-section">
<h4><i class="fas fa-layer-group"></i> Song Structure</h4>
<div class="form-row">
<div class="form-group">
<label for="proIntroLength">Intro Length</label>
<select id="proIntroLength" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="0">No Intro</option>
<option value="4">4 seconds</option>
<option value="8">8 seconds</option>
<option value="16">16 seconds</option>
<option value="32">32 seconds</option>
</select>
</div>
<div class="form-group">
<label for="proVerseChorusRatio">Verse/Chorus Ratio</label>
<select id="proVerseChorusRatio" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="verse-heavy">Verse Heavy</option>
<option value="balanced">Balanced</option>
<option value="chorus-heavy">Chorus Heavy</option>
<option value="chorus-only">Chorus Only</option>
</select>
</div>
<div class="form-group">
<label for="proBridge">Bridge Options</label>
<select id="proBridge" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="none">No Bridge</option>
<option value="instrumental">Instrumental Bridge</option>
<option value="vocal">Vocal Bridge</option>
<option value="solo">Solo Bridge</option>
<option value="breakdown">Breakdown Bridge</option>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="proOutroStyle">Outro Style</label>
<select id="proOutroStyle" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="fade">Fade Out</option>
<option value="stop">Hard Stop</option>
<option value="repeat">Repeat Chorus</option>
<option value="instrumental">Instrumental Outro</option>
<option value="vocal">Vocal Outro</option>
</select>
</div>
<div class="form-group">
<label for="proBuildUps">Build-up Sections</label>
<select id="proBuildUps" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="none">None</option>
<option value="subtle">Subtle</option>
<option value="moderate">Moderate</option>
<option value="dramatic">Dramatic</option>
<option value="multiple">Multiple</option>
</select>
</div>
<div class="form-group">
<label for="proTransitions">Transition Style</label>
<select id="proTransitions" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="smooth">Smooth</option>
<option value="abrupt">Abrupt</option>
<option value="fade">Fade</option>
<option value="crossfade">Crossfade</option>
<option value="break">Break</option>
</select>
</div>
</div>
</div>
<!-- Advanced Controls -->
<div class="pro-section">
<h4><i class="fas fa-cogs"></i> Advanced Controls</h4>
<div class="form-row">
<div class="form-group">
<label for="proDuration">Duration</label>
<select id="proDuration" class="form-input">
<option value="15">15 seconds</option>
<option value="30">30 seconds</option>
<option value="60">1 minute</option>
<option value="120">2 minutes</option>
<option value="180" selected>3 minutes</option>
<option value="240">4 minutes</option>
<option value="300">5 minutes</option>
<option value="600">10 minutes</option>
</select>
</div>
<div class="form-group">
<label for="proQuality">Production Quality</label>
<select id="proQuality" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="demo">Demo Quality</option>
<option value="radio">Radio Quality</option>
<option value="studio">Studio Quality</option>
<option value="master">Master Quality</option>
</select>
</div>
<div class="form-group">
<label for="proMood">Overall Mood</label>
<select id="proMood" class="form-input">
<option value="">Auto (AI decides)</option>
<option value="happy">Happy/Joyful</option>
<option value="sad">Sad/Melancholic</option>
<option value="energetic">Energetic/Upbeat</option>
<option value="calm">Calm/Peaceful</option>
<option value="romantic">Romantic/Intimate</option>
<option value="mysterious">Mysterious/Enigmatic</option>
<option value="dramatic">Dramatic/Epic</option>
<option value="nostalgic">Nostalgic/Retro</option>
<option value="futuristic">Futuristic/Electronic</option>
<option value="organic">Organic/Natural</option>
<option value="aggressive">Aggressive/Intense</option>
<option value="dreamy">Dreamy/Ethereal</option>
<option value="dark">Dark/Atmospheric</option>
<option value="uplifting">Uplifting/Inspirational</option>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="proEnergy">Energy Level</label>
<div class="slider-container">
<input type="range" id="proEnergy" min="1" max="10" value="7" class="slider">
<div class="slider-labels">
<span>Calm</span>
<span id="proEnergyValue">7</span>
<span>Intense</span>
</div>
</div>
</div>
<div class="form-group">
<label for="proExcitement">Excitement Level</label>
<div class="slider-container">
<input type="range" id="proExcitement" min="1" max="10" value="6" class="slider">
<div class="slider-labels">
<span>Relaxed</span>
<span id="proExcitementValue">6</span>
<span>Thrilling</span>
</div>
</div>
</div>
<div class="form-group">
<label for="proDanceability">Danceability</label>
<div class="slider-container">
<input type="range" id="proDanceability" min="1" max="10" value="5" class="slider">
<div class="slider-labels">
<span>Static</span>
<span id="proDanceabilityValue">5</span>
<span>Groovy</span>
</div>
</div>
</div>
</div>
</div>
<!-- Pro Prompt Section -->
<div class="pro-section">
<h4><i class="fas fa-edit"></i> Professional Prompt</h4>
<div class="form-group">
<label for="proPrompt">Detailed Professional Prompt</label>
<textarea name="proPrompt" id="proPrompt" class="form-input" rows="8" placeholder="Write your detailed professional prompt here... Example: Create a progressive house track with a driving 4/4 beat at 128 BPM in D major. Lead with a saw wave synthesizer, supported by a punchy kick drum and rolling bassline. Include a female vocal with auto-tune effects, singing about empowerment and freedom. The track should have a dramatic build-up leading to an energetic drop with heavy sidechain compression. Use reverb and delay effects for atmospheric depth. Target length: 3 minutes with a clear verse-chorus structure."></textarea>
<div class="char-count">0/5000</div>
</div>
<div class="form-group">
<label for="proTags">Professional Tags</label>
<input type="text" name="proTags" id="proTags" class="form-input" placeholder="e.g., progressive-house, saw-lead, sidechain, auto-tune, female-vocal, driving-beat, atmospheric, build-up, drop">
</div>
</div>
</div>
<div class="form-actions">
<button type="submit" id="createBtn" class="btn btn-primary">
<i class="fas fa-magic"></i> Generate Music
</button>
<div class="credits-info <?= ($_SESSION['credits'] ?? 5) <= 2 ? 'low-credits' : '' ?>">
<i class="fas fa-coins"></i> Cost: <span id="creditCost">1</span> Credit (You have <?= $_SESSION['credits'] ?? 5 ?> credits)
<?php if (($_SESSION['credits'] ?? 5) <= 2): ?>
<span class="credit-warning">⚠️ Low credits!</span>
<?php endif; ?>
</div>
</div>
</form>
<!-- Loading State -->
<div id="loading" class="loading-state" style="display: none;">
<div class="loading-content">
<div class="loading-spinner"></div>
<h3>🎵 Generating Your Music...</h3>
<p id="loadingMessage">Connecting to AI music generation service...</p>
<div class="progress-bar">
<div class="progress-fill"></div>
</div>
<p class="loading-note">This may take 1-3 minutes for high-quality generation</p>
</div>
</div>
<!-- Results -->
<div id="results" class="results-section" style="display: none;">
<div class="results-content">
<h3>Your Music is Ready!</h3>
<div class="results-actions">
<a id="downloadBtn" href="#" class="btn btn-success" download>
<i class="fas fa-download"></i> Download
</a>
<button class="btn btn-secondary" onclick="location.reload()">
<i class="fas fa-plus"></i> Create Another
</button>
</div>
</div>
</div>
<?php endif; ?>
</div>
</div>
</div>
</section>
<!-- Features Section -->
<section id="features" class="features">
<div class="container">
<div class="section-header">
<h2 class="section-title">Professional Music Creation Tools</h2>
<p class="section-subtitle">Everything you need to create, edit, and produce professional music with AI assistance.</p>
</div>
<div class="features-grid">
<div class="feature-card">
<i class="fas fa-brain feature-icon"></i>
<h3 class="feature-title">Advanced AI Models</h3>
<p class="feature-description">Multiple specialized AI models with advanced parameters: genre, key, tempo, mood, instruments, and professional mastering capabilities.</p>
</div>
<div class="feature-card">
<i class="fas fa-chart-line feature-icon"></i>
<h3 class="feature-title">Professional Analytics</h3>
<p class="feature-description">Track performance, play counts, engagement metrics, and revenue insights with comprehensive artist analytics dashboard.</p>
</div>
<div class="feature-card">
<i class="fas fa-users feature-icon"></i>
<h3 class="feature-title">Artist Community</h3>
<p class="feature-description">Connect with fellow artists, share music, collaborate on projects, and build your fanbase with social features.</p>
</div>
<div class="feature-card">
<i class="fas fa-headphones feature-icon"></i>
<h3 class="feature-title">Global Music Player</h3>
<p class="feature-description">Professional music streaming across the entire platform with advanced playback controls and playlist management.</p>
</div>
<div class="feature-card">
<i class="fas fa-database feature-icon"></i>
<h3 class="feature-title">Advanced Library</h3>
<p class="feature-description">Organize your music with smart playlists, tags, advanced search, and professional workflow management.</p>
</div>
<div class="feature-card">
<i class="fas fa-code feature-icon"></i>
<h3 class="feature-title">Comprehensive API</h3>
<p class="feature-description">Integrate AI music generation into your applications with our powerful and well-documented API system.</p>
</div>
<div class="feature-card">
<i class="fas fa-music feature-icon"></i>
<h3 class="feature-title">Multiple Music Types</h3>
<p class="feature-description">Generate music, lyrics, WAV conversion, vocal removal, track extension, and audio variations with specialized AI models.</p>
</div>
<div class="feature-card">
<i class="fas fa-dollar-sign feature-icon"></i>
<h3 class="feature-title">Artist Earnings</h3>
<p class="feature-description">Monetize your music with track sales, licensing, and revenue sharing. Track earnings with detailed analytics dashboard.</p>
</div>
<div class="feature-card">
<i class="fas fa-share-alt feature-icon"></i>
<h3 class="feature-title">Social Features</h3>
<p class="feature-description">Like, follow, comment, and share tracks. Build your network with user profiles, follows, and community engagement.</p>
</div>
<div class="feature-card">
<i class="fas fa-cog feature-icon"></i>
<h3 class="feature-title">Advanced Parameters</h3>
<p class="feature-description">Fine-tune your music with genre, key, tempo, mood, energy, excitement, time signature, and instrument selection.</p>
</div>
<div class="feature-card">
<i class="fas fa-shield-alt feature-icon"></i>
<h3 class="feature-title">Enterprise Security</h3>
<p class="feature-description">Advanced security with threat detection, user protection, comprehensive audit logs, and IP blacklisting.</p>
</div>
<div class="feature-card">
<i class="fas fa-credit-card feature-icon"></i>
<h3 class="feature-title">Flexible Pricing</h3>
<p class="feature-description">Free, starter, and pro plans with credit system. Purchase tracks, manage subscriptions, and track usage.</p>
</div>
<div class="feature-card">
<i class="fas fa-waveform feature-icon"></i>
<h3 class="feature-title">Audio Variations</h3>
<p class="feature-description">Generate multiple variations of your tracks with different styles, arrangements, and audio processing options.</p>
</div>
<div class="feature-card">
<i class="fas fa-user-tie feature-icon"></i>
<h3 class="feature-title">Artist Profiles</h3>
<p class="feature-description">Professional artist profiles with bio, location, social links, music style, influences, and featured tracks showcase.</p>
</div>
<div class="feature-card">
<i class="fas fa-shopping-cart feature-icon"></i>
<h3 class="feature-title">Music Marketplace</h3>
<p class="feature-description">Buy and sell tracks, manage purchases, track downloads, and monetize your music with licensing options.</p>
</div>
</div>
</div>
</section>
<!-- Pricing Section -->
<section id="pricing" class="pricing">
<div class="container">
<div class="section-header">
<h2 class="section-title">Choose Your Plan</h2>
<p class="section-subtitle">Flexible pricing plans designed for creators of all levels. Start creating professional music today.</p>
</div>
<div class="credits-packages">
<!-- Free Package -->
<div class="credit-package">
<div class="package-icon">
<i class="fas fa-gift"></i>
</div>
<h3 class="package-name">Free</h3>
<div class="package-credits">5 Credits</div>
<div class="package-price">
<span class="current-price">$0</span>
<span class="per-credit">Free forever</span>
</div>
<div class="free-badge">Free Plan</div>
<ul class="package-features">
<li>5 music tracks</li>
<li>Basic AI models</li>
<li>Standard generation speed</li>
<li>Community access</li>
<li>Personal use only</li>
<li>Basic support</li>
<li>Standard quality audio</li>
<li>No commercial rights</li>
</ul>
<button class="purchase-btn" onclick="window.location.href='/auth/register.php'">
<i class="fas fa-user-plus"></i>
Sign Up Free
</button>
</div>
<!-- Starter Package -->
<div class="credit-package">
<div class="package-icon">
<i class="fas fa-star"></i>
</div>
<h3 class="package-name">Starter</h3>
<div class="package-credits">30 Credits</div>
<div class="package-price">
<span class="original-price">$29.99</span>
<span class="current-price">$19.99</span>
<span class="per-credit">$0.67 per track</span>
</div>
<div class="special-badge">Special Offer</div>
<ul class="package-features">
<li>30 music tracks</li>
<li>Advanced AI models</li>
<li>High-speed generation</li>
<li>Priority queue access</li>
<li>Ad-free experience</li>
<li>Personal use license</li>
<li>Unlimited downloads</li>
<li>Personal use license</li>
</ul>
<button class="purchase-btn" onclick="window.location.href='/credits.php'">
<i class="fas fa-shopping-cart"></i>
Get Started
</button>
</div>
<!-- Popular Package -->
<div class="credit-package featured">
<div class="package-badge">Most Popular</div>
<div class="package-icon">
<i class="fas fa-fire"></i>
</div>
<h3 class="package-name">Pro</h3>
<div class="package-credits">200 Credits</div>
<div class="package-price">
<span class="original-price">$79</span>
<span class="current-price">$59</span>
<span class="per-credit">$0.30 per track</span>
</div>
<div class="special-badge">Special Offer</div>
<ul class="package-features">
<li>200 music tracks</li>
<li>Advanced AI models</li>
<li>High-speed generation</li>
<li>Priority queue access</li>
<li>Ad-free experience</li>
<li>Commercial use license</li>
<li>Unlimited downloads</li>
<li>Priority support</li>
</ul>
<button class="purchase-btn" onclick="window.location.href='/credits.php'">
<i class="fas fa-shopping-cart"></i>
Get Started
</button>
</div>
<!-- Premium Package -->
<div class="credit-package">
<div class="package-icon">
<i class="fas fa-crown"></i>
</div>
<h3 class="package-name">Premium</h3>
<div class="package-credits">500 Credits</div>
<div class="package-price">
<span class="original-price">$179</span>
<span class="current-price">$129</span>
<span class="per-credit">$0.26 per track</span>
</div>
<div class="special-badge">Special Offer</div>
<ul class="package-features">
<li>500 music tracks</li>
<li>Advanced AI models</li>
<li>High-speed generation</li>
<li>Priority queue access</li>
<li>Ad-free experience</li>
<li>Commercial use license</li>
<li>Unlimited downloads</li>
<li>Dedicated support</li>
<li>API access</li>
</ul>
<button class="purchase-btn" onclick="window.location.href='/credits.php'">
<i class="fas fa-shopping-cart"></i>
Get Started
</button>
</div>
</div>
</div>
</section>
<!-- CTA Section -->
<section class="cta">
<div class="container">
<div class="cta-content">
<h2 class="cta-title">Ready to Create Amazing Music?</h2>
<p class="cta-description">Join thousands of creators who trust SoundStudioPro to generate professional music for their projects.</p>
<a href="#create" class="btn btn-primary">🎵 Start Creating Now</a>
</div>
</div>
</section>
<script>
// Check if user is logged in
<?php
if (!isset($_SESSION['user_id'])) {
// echo "window.location.href = '/auth/login.php';"; // Redirect disabled
}
?>
// Secure API Configuration (no sensitive data exposed)
const API_ENDPOINT = window.location.protocol + '//' + window.location.host + '/api.php';
// DOM Elements for create music
const createBtn = document.getElementById('createBtn');
const loading = document.getElementById('loading');
const results = document.getElementById('results');
const audioElement = document.getElementById('audioElement');
const downloadBtn = document.getElementById('downloadBtn');
// Debug all DOM elements
console.log('🎵 DOM Elements check:');
console.log('- createBtn:', createBtn);
console.log('- loading:', loading);
console.log('- results:', results);
console.log('- audioElement:', audioElement);
console.log('- downloadBtn:', downloadBtn);
if (createBtn) {
console.log('🎵 Create button properties:', {
id: createBtn.id,
className: createBtn.className,
disabled: createBtn.disabled,
style: createBtn.style.cssText,
onclick: createBtn.onclick,
innerHTML: createBtn.innerHTML.substring(0, 100) + '...'
});
} else {
console.error('🎵 ERROR: createBtn element not found!');
}
// Character count updates
function updateCharCount(element, maxLength) {
const count = element.value.length;
const countElement = element.parentNode.querySelector('.char-count');
if (countElement) {
countElement.textContent = `${count}/${maxLength}`;
countElement.style.color = count > maxLength ? '#ef4444' : '#a0aec0';
}
}
// Update credit cost based on mode and variations
function updateCreditCost() {
const isAdvanced = document.querySelector('.mode-option[data-mode="advanced"]')?.classList.contains('active') || false;
const isPro = document.querySelector('.mode-option[data-mode="pro"]')?.classList.contains('active') || false;
let baseCost = 1; // Simple mode
let variations = 1;
if (isAdvanced) {
baseCost = 3; // Advanced mode costs 3 credits
variations = parseInt(document.getElementById('variations')?.value || '1');
} else if (isPro) {
baseCost = 5; // Pro mode costs 5 credits
variations = parseInt(document.getElementById('proVariations')?.value || '1');
}
const totalCost = baseCost * variations;
const creditCostElement = document.getElementById('creditCost');
if (creditCostElement) {
creditCostElement.textContent = totalCost;
}
// Update cost display styling based on mode
const costDisplay = document.querySelector('.credit-cost-display');
if (costDisplay) {
costDisplay.className = 'credit-cost-display';
if (isAdvanced) {
costDisplay.classList.add('advanced-cost');
} else if (isPro) {
costDisplay.classList.add('pro-cost');
}
}
}
// Character count listeners
document.getElementById('simplePrompt')?.addEventListener('input', (e) => updateCharCount(e.target, 400));
document.getElementById('title')?.addEventListener('input', (e) => updateCharCount(e.target, 80));
document.getElementById('advancedPrompt')?.addEventListener('input', (e) => updateCharCount(e.target, 3000));
document.getElementById('proTitle')?.addEventListener('input', (e) => updateCharCount(e.target, 80));
document.getElementById('proPrompt')?.addEventListener('input', (e) => updateCharCount(e.target, 5000));
document.getElementById('variations')?.addEventListener('change', updateCreditCost);
document.getElementById('proVariations')?.addEventListener('change', updateCreditCost);
// Simple form validation and mode switching
console.log('🎵 Setting up form functionality');
// Mode switching
document.querySelectorAll('.mode-option').forEach(option => {
option.addEventListener('click', () => {
const mode = option.dataset.mode;
// Update active mode
document.querySelectorAll('.mode-option').forEach(opt => opt.classList.remove('active'));
option.classList.add('active');
// Show/hide forms
document.querySelectorAll('.form-mode').forEach(form => form.classList.remove('active'));
document.getElementById(mode + 'Form').classList.add('active');
// Update credit cost
updateCreditCost();
});
});
// Slider value updates
document.getElementById('energy')?.addEventListener('input', (e) => {
document.getElementById('energyValue').textContent = e.target.value;
});
document.getElementById('excitement')?.addEventListener('input', (e) => {
document.getElementById('excitementValue').textContent = e.target.value;
});
// Pro Mode slider updates
document.getElementById('proReverb')?.addEventListener('input', (e) => {
document.getElementById('proReverbValue').textContent = e.target.value;
});
document.getElementById('proCompression')?.addEventListener('input', (e) => {
document.getElementById('proCompressionValue').textContent = e.target.value;
});
document.getElementById('proStereoWidth')?.addEventListener('input', (e) => {
document.getElementById('proStereoWidthValue').textContent = e.target.value;
});
document.getElementById('proBassLevel')?.addEventListener('input', (e) => {
document.getElementById('proBassLevelValue').textContent = e.target.value;
});
document.getElementById('proMidLevel')?.addEventListener('input', (e) => {
document.getElementById('proMidLevelValue').textContent = e.target.value;
});
document.getElementById('proTrebleLevel')?.addEventListener('input', (e) => {
document.getElementById('proTrebleLevelValue').textContent = e.target.value;
});
document.getElementById('proEnergy')?.addEventListener('input', (e) => {
document.getElementById('proEnergyValue').textContent = e.target.value;
});
document.getElementById('proExcitement')?.addEventListener('input', (e) => {
document.getElementById('proExcitementValue').textContent = e.target.value;
});
document.getElementById('proDanceability')?.addEventListener('input', (e) => {
document.getElementById('proDanceabilityValue').textContent = e.target.value;
});
// Update form fields based on mode
function updateFormFields() {
const isAdvanced = document.querySelector('.mode-option[data-mode="advanced"]')?.classList.contains('active') || false;
const isPro = document.querySelector('.mode-option[data-mode="pro"]')?.classList.contains('active') || false;
const form = document.getElementById('musicForm');
if (form) {
// Update hidden fields based on mode
const customModeField = form.querySelector('input[name="customMode"]');
if (customModeField) {
customModeField.value = (isAdvanced || isPro) ? 'true' : 'false';
}
// Update model_name field based on mode
let modelNameHidden = form.querySelector('input[name="model_name"]');
if (!modelNameHidden) {
modelNameHidden = document.createElement('input');
modelNameHidden.type = 'hidden';
modelNameHidden.name = 'model_name';
form.appendChild(modelNameHidden);
}
if (isAdvanced) {
const modelVersionSelect = document.getElementById('modelVersion');
if (modelVersionSelect) {
modelNameHidden.value = modelVersionSelect.value;
}
} else if (isPro) {
const proModelSelect = document.getElementById('proModel');
if (proModelSelect) {
modelNameHidden.value = proModelSelect.value;
}
}
console.log('🎵 Form updated - Advanced mode:', isAdvanced, 'Pro mode:', isPro);
console.log('🎵 Custom mode value:', customModeField?.value);
console.log('🎵 Model name value:', modelNameHidden?.value);
}
}
// Update form when mode changes
document.querySelectorAll('.mode-option').forEach(option => {
option.addEventListener('click', () => {
setTimeout(updateFormFields, 100); // Small delay to ensure DOM is updated
});
});
// Update form when model version changes
document.getElementById('modelVersion')?.addEventListener('change', updateFormFields);
document.getElementById('proModel')?.addEventListener('change', updateFormFields);
// Initial form setup
updateFormFields();
// Simple form submission handling
const form = document.getElementById('musicForm');
if (form) {
form.addEventListener('submit', function(e) {
console.log('🎵 Form submitted!');
// Basic validation
const isAdvanced = document.querySelector('.mode-option[data-mode="advanced"]')?.classList.contains('active') || false;
if (isAdvanced) {
const title = document.getElementById('title')?.value?.trim();
const advancedPrompt = document.getElementById('advancedPrompt')?.value?.trim();
if (!title || !advancedPrompt) {
e.preventDefault();
alert('Please fill in all required fields: Title and Lyrics/Prompt');
return false;
}
} else {
const simplePrompt = document.getElementById('simplePrompt')?.value?.trim();
if (!simplePrompt) {
e.preventDefault();
alert('Please describe the music you want to create');
return false;
}
}
// Show loading state
const createBtn = document.getElementById('createBtn');
if (createBtn) {
createBtn.disabled = true;
createBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Generating...';
}
console.log('🎵 Form validation passed, submitting...');
});
}
// Smooth scrolling for navigation links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});
// Add some interactive effects
document.addEventListener('DOMContentLoaded', function() {
// Add parallax effect to hero section
window.addEventListener('scroll', function() {
const scrolled = window.pageYOffset;
const hero = document.querySelector('.hero');
if (hero) {
hero.style.transform = `translateY(${scrolled * 0.5}px)`;
}
});
// Add typing effect to hero title
const heroTitle = document.querySelector('.hero-title');
if (heroTitle) {
const text = heroTitle.textContent;
heroTitle.textContent = '';
let i = 0;
const typeWriter = () => {
if (i < text.length) {
heroTitle.textContent += text.charAt(i);
i++;
setTimeout(typeWriter, 50);
}
};
setTimeout(typeWriter, 1000);
}
});
</script>
<script>
// Homepage functionality using global player - SIMPLIFIED LIKE COMMUNITY PAGE
// Initialize homepage (preserve existing playback during AJAX navigation)
function initializeHomepage() {
console.log('🎵 Homepage initializing - checking for existing playback');
if (typeof window.enhancedGlobalPlayer !== 'undefined') {
console.log('🎵 Enhanced Global player available');
// Check if music is currently playing - don't interrupt it
const audioElement = document.getElementById('globalAudioElement');
const isCurrentlyPlaying = audioElement && !audioElement.paused;
if (isCurrentlyPlaying) {
console.log('🎵 Music currently playing - preserving playback during homepage load');
// Just ensure player is visible, don't reload playlist
if (window.enhancedGlobalPlayer.showPlayer) {
window.enhancedGlobalPlayer.showPlayer();
}
} else {
console.log('🎵 No music playing - initializing homepage features');
// Show player and load VIP playlist when no music is playing
if (window.enhancedGlobalPlayer.showPlayer) {
window.enhancedGlobalPlayer.showPlayer();
}
// Load VIP playlist for proper track navigation (only when not playing)
if (window.enhancedGlobalPlayer && typeof window.enhancedGlobalPlayer.loadPlaylist === 'function') {
console.log('🎵 Loading VIP playlist for homepage');
window.enhancedGlobalPlayer.loadPlaylist('vip', false); // false = don't auto-play
}
console.log('🎵 Homepage player initialized - ready for user interaction');
}
} else {
console.error('🎵 Enhanced Global player not available');
}
}
// Initialize on DOM ready and AJAX loads
document.addEventListener('DOMContentLoaded', initializeHomepage);
document.addEventListener('ajaxPageLoaded', function(e) {
console.log('🎵 Homepage: AJAX page loaded - preserving existing playback');
initializeHomepage();
});
// EMERGENCY FALLBACK - Ensure global player always loads on homepage
window.addEventListener('load', function() {
setTimeout(function() {
if (typeof window.enhancedGlobalPlayer !== 'undefined') {
console.log('🎵 EMERGENCY: Forcing global player initialization');
window.enhancedGlobalPlayer.showPlayer();
// Load VIP playlist if no music is playing
const audioElement = document.getElementById('globalAudioElement');
if (!audioElement || audioElement.paused) {
if (window.enhancedGlobalPlayer.loadPlaylist) {
window.enhancedGlobalPlayer.loadPlaylist('vip', false);
}
}
} else {
console.error('🎵 EMERGENCY: Global player still not available!');
}
}, 500);
});
// Use global playTrack function from footer
function playLocalTrack(audioUrl, title, artist) {
console.log('🎵 Homepage calling global playTrack:', { audioUrl, title, artist });
window.playTrack(audioUrl, title, artist);
}
// Update credits display
function updateCreditsDisplay() {
// Get current credits from the display
const creditsText = document.querySelector('.credits-info');
if (creditsText) {
const currentCredits = parseInt(creditsText.textContent.match(/You have (\d+) credits/)?.[1] || 0);
const newCredits = Math.max(0, currentCredits - 1);
// Update the display
const warningHtml = newCredits <= 2 ? '<span class="credit-warning">⚠️ Low credits!</span>' : '';
creditsText.innerHTML = `<i class="fas fa-coins"></i> Cost: <span id="creditCost">1</span> Credit (You have ${newCredits} credits) ${warningHtml}`;
// Update CSS class for low credits
if (newCredits <= 2) {
creditsText.classList.add('low-credits');
} else {
creditsText.classList.remove('low-credits');
}
// Also update any other credit displays on the page
const allCreditDisplays = document.querySelectorAll('[data-credits-display]');
allCreditDisplays.forEach(display => {
display.textContent = newCredits;
});
// Only update credits if user is logged in and we don't have current credits
if (typeof window.currentUserCredits === 'undefined') {
fetch('/update_credits.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ action: 'get_current_credits' })
})
.then(response => response.json())
.then(data => {
if (data.credits !== undefined) {
// Update with actual server value (no caching)
creditsText.innerHTML = `<i class="fas fa-coins"></i> Cost: <span id="creditCost">1</span> Credit (You have ${data.credits} credits)`;
}
})
.catch(error => {
console.log('Could not update credits from server:', error);
});
} else {
// Always get fresh credits from server
updateCreditsFromServer();
}
}
}
// Show credit refill prompt
function showCreditRefillPrompt(result) {
// Hide loading
createBtn.disabled = false;
loading.style.display = 'none';
// Create modal overlay with animations
const modal = document.createElement('div');
modal.className = 'credit-refill-modal';
modal.innerHTML = `
<div class="credit-refill-content">
<div class="credit-refill-header">
<div class="credit-icon-container">
<i class="fas fa-coins credit-icon"></i>
<div class="coin-particles"></div>
</div>
<h3 class="animated-title">Out of Credits!</h3>
<div class="pulse-ring"></div>
</div>
<div class="credit-refill-body">
<p class="animated-text">${result.message || 'You have no credits remaining. Please refill your credits to continue creating music.'}</p>
<div class="credit-status">
<div class="credit-counter">
<span class="counter-label">Credits Remaining</span>
<span class="counter-value" data-target="${result.credits_remaining || 0}">0</span>
</div>
<div class="credit-counter">
<span class="counter-label">Credits Needed</span>
<span class="counter-value" data-target="${result.credits_needed || 1}">0</span>
</div>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 0%"></div>
</div>
</div>
<div class="credit-refill-actions">
<button class="btn btn-primary refill-btn animated-btn" onclick="window.location.href='${result.refill_options?.url || '/credits.php'}';">
<i class="fas fa-plus"></i>
<span>${result.refill_options?.text || 'Refill Credits'}</span>
<div class="btn-particles"></div>
</button>
<button class="btn btn-secondary cancel-btn" onclick="closeCreditRefillModal()">
<i class="fas fa-times"></i>
<span>Cancel</span>
</button>
</div>
</div>
`;
document.body.appendChild(modal);
// Animate counters
setTimeout(() => {
const counters = modal.querySelectorAll('.counter-value');
counters.forEach(counter => {
const target = parseInt(counter.getAttribute('data-target'));
const duration = 1000;
const increment = target / (duration / 16);
let current = 0;
const updateCounter = () => {
current += increment;
if (current < target) {
counter.textContent = Math.floor(current);
requestAnimationFrame(updateCounter);
} else {
counter.textContent = target;
}
};
updateCounter();
});
}, 600);
// Add styles if not already present
if (!document.getElementById('credit-refill-styles')) {
const styles = document.createElement('style');
styles.id = 'credit-refill-styles';
styles.textContent = `
.credit-refill-modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.9);
display: flex;
align-items: center;
justify-content: center;
z-index: 10000;
backdrop-filter: blur(20px);
animation: modalFadeIn 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}
@keyframes modalFadeIn {
from {
opacity: 0;
transform: scale(0.8);
}
to {
opacity: 1;
transform: scale(1);
}
}
.credit-refill-content {
background: linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 50%, #0a0a0a 100%);
border: 2px solid;
border-image: linear-gradient(135deg, #667eea, #764ba2) 1;
border-radius: 24px;
padding: 3.5rem;
max-width: 550px;
width: 90%;
text-align: center;
box-shadow: 0 25px 80px rgba(102, 126, 234, 0.3);
backdrop-filter: blur(30px);
animation: contentSlideIn 0.8s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
}
@keyframes contentSlideIn {
from {
opacity: 0;
transform: translateY(50px) scale(0.9);
}
to {
opacity: 1;
transform: translateY(0) scale(1);
}
}
.credit-refill-content::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="grid" width="10" height="10" patternUnits="userSpaceOnUse"><path d="M 10 0 L 0 0 0 10" fill="none" stroke="rgba(102,126,234,0.1)" stroke-width="0.5"/></pattern></defs><rect width="100" height="100" fill="url(%23grid)"/></svg>');
opacity: 0.3;
pointer-events: none;
}
.credit-refill-header {
margin-bottom: 2.5rem;
position: relative;
z-index: 2;
}
.credit-icon-container {
position: relative;
display: inline-block;
margin-bottom: 1.5rem;
}
.credit-icon {
font-size: 5rem;
color: #667eea;
background: linear-gradient(135deg, #667eea, #764ba2);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
animation: iconFloat 3s ease-in-out infinite;
position: relative;
z-index: 2;
}
@keyframes iconFloat {
0%, 100% { transform: translateY(0px) rotate(0deg); }
50% { transform: translateY(-10px) rotate(5deg); }
}
.coin-particles {
position: absolute;
top: 50%;
left: 50%;
width: 100px;
height: 100px;
transform: translate(-50%, -50%);
pointer-events: none;
}
.coin-particles::before,
.coin-particles::after {
content: '🪙';
position: absolute;
font-size: 1.5rem;
animation: particleFloat 4s ease-in-out infinite;
}
.coin-particles::before {
top: -20px;
left: -20px;
animation-delay: 0s;
}
.coin-particles::after {
bottom: -20px;
right: -20px;
animation-delay: 2s;
}
@keyframes particleFloat {
0%, 100% { transform: translateY(0px) rotate(0deg); opacity: 0.7; }
50% { transform: translateY(-15px) rotate(180deg); opacity: 1; }
}
.pulse-ring {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 120px;
height: 120px;
border: 3px solid rgba(102, 126, 234, 0.3);
border-radius: 50%;
animation: pulseRing 2s ease-out infinite;
pointer-events: none;
}
@keyframes pulseRing {
0% {
transform: translate(-50%, -50%) scale(0.8);
opacity: 1;
}
100% {
transform: translate(-50%, -50%) scale(1.5);
opacity: 0;
}
}
.animated-title {
color: white;
font-size: 2.8rem;
font-weight: 800;
margin: 0;
background: linear-gradient(135deg, #ffffff, #667eea);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
animation: titleGlow 2s ease-in-out infinite alternate;
}
@keyframes titleGlow {
from { filter: drop-shadow(0 0 10px rgba(102, 126, 234, 0.5)); }
to { filter: drop-shadow(0 0 20px rgba(102, 126, 234, 0.8)); }
}
.credit-refill-body {
margin-bottom: 2.5rem;
position: relative;
z-index: 2;
}
.animated-text {
color: #a0aec0;
font-size: 1.7rem;
line-height: 1.6;
margin-bottom: 2rem;
animation: textFadeIn 1s ease-out 0.3s both;
}
@keyframes textFadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.credit-status {
display: flex;
justify-content: space-between;
background: linear-gradient(135deg, rgba(102, 126, 234, 0.1), rgba(118, 75, 162, 0.1));
border: 1px solid rgba(102, 126, 234, 0.3);
border-radius: 16px;
padding: 2rem;
margin: 1.5rem 0;
animation: statusSlideIn 0.8s ease-out 0.5s both;
}
@keyframes statusSlideIn {
from {
opacity: 0;
transform: translateX(-30px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
.credit-counter {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
}
.counter-label {
color: #a0aec0;
font-size: 1.3rem;
font-weight: 500;
}
.counter-value {
color: #667eea;
font-size: 2.4rem;
font-weight: 900;
animation: counterPulse 0.5s ease-out;
}
@keyframes counterPulse {
0% { transform: scale(1); }
50% { transform: scale(1.2); }
100% { transform: scale(1); }
}
.progress-bar {
width: 100%;
height: 8px;
background: rgba(102, 126, 234, 0.2);
border-radius: 4px;
overflow: hidden;
margin-top: 1.5rem;
}
.progress-fill {
height: 100%;
background: linear-gradient(90deg, #667eea, #764ba2);
border-radius: 4px;
transition: width 1s ease-out;
animation: progressFill 1.5s ease-out 0.8s both;
}
@keyframes progressFill {
from { width: 0%; }
to { width: 100%; }
}
.credit-refill-actions {
display: flex;
gap: 1.5rem;
justify-content: center;
position: relative;
z-index: 2;
animation: actionsFadeIn 1s ease-out 1s both;
}
@keyframes actionsFadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.refill-btn {
background: linear-gradient(135deg, #667eea, #764ba2);
border: none;
color: white;
padding: 1.5rem 3rem;
border-radius: 16px;
font-size: 1.7rem;
font-weight: 700;
cursor: pointer;
transition: all 0.3s ease;
display: flex;
align-items: center;
gap: 1rem;
position: relative;
overflow: hidden;
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3);
}
.refill-btn:hover {
transform: translateY(-3px) scale(1.05);
box-shadow: 0 15px 40px rgba(102, 126, 234, 0.5);
}
.refill-btn:active {
transform: translateY(-1px) scale(1.02);
}
.btn-particles {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
}
.btn-particles::before,
.btn-particles::after {
content: '';
position: absolute;
width: 4px;
height: 4px;
background: rgba(255, 255, 255, 0.8);
border-radius: 50%;
animation: btnParticle 2s ease-in-out infinite;
}
.btn-particles::before {
top: 20%;
left: 20%;
animation-delay: 0s;
}
.btn-particles::after {
bottom: 20%;
right: 20%;
animation-delay: 1s;
}
@keyframes btnParticle {
0%, 100% { transform: scale(0) rotate(0deg); opacity: 0; }
50% { transform: scale(1) rotate(180deg); opacity: 1; }
}
.cancel-btn {
background: rgba(160, 174, 192, 0.2);
border: 1px solid rgba(160, 174, 192, 0.3);
color: #a0aec0;
padding: 1.5rem 3rem;
border-radius: 16px;
font-size: 1.7rem;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
display: flex;
align-items: center;
gap: 1rem;
}
.cancel-btn:hover {
background: rgba(160, 174, 192, 0.3);
color: white;
transform: translateY(-2px);
box-shadow: 0 8px 20px rgba(160, 174, 192, 0.3);
}
@media (max-width: 768px) {
.credit-refill-content {
padding: 2.5rem 2rem;
margin: 1rem;
}
.credit-refill-actions {
flex-direction: column;
}
.credit-status {
flex-direction: column;
gap: 1.5rem;
}
.animated-title {
font-size: 2.4rem;
}
.credit-icon {
font-size: 4rem;
}
}
`;
document.head.appendChild(styles);
}
}
// Close credit refill modal
function closeCreditRefillModal() {
const modal = document.querySelector('.credit-refill-modal');
if (modal) {
modal.remove();
}
}
// Generic animated modal for all types of prompts
function showAnimatedModal(config) {
const modal = document.createElement('div');
modal.className = 'animated-modal';
const iconClass = config.icon || 'fas fa-info-circle';
const modalType = config.type || 'info';
const title = config.title || 'Information';
const message = config.message || '';
let actionsHtml = '';
if (config.actions && config.actions.length > 0) {
actionsHtml = config.actions.map(action => {
const btnClass = action.type === 'primary' ? 'btn-primary' : 'btn-secondary';
const actionAttr = action.action === 'close' ? 'onclick="closeAnimatedModal()"' : '';
return `<button class="btn ${btnClass} modal-btn" ${actionAttr}>${action.text}</button>`;
}).join('');
}
modal.innerHTML = `
<div class="animated-modal-content ${modalType}-modal">
<div class="modal-header">
<div class="modal-icon-container">
<i class="${iconClass} modal-icon"></i>
<div class="icon-particles"></div>
</div>
<h3 class="modal-title">${title}</h3>
<div class="pulse-ring"></div>
</div>
<div class="modal-body">
<p class="modal-message">${message}</p>
</div>
<div class="modal-actions">
${actionsHtml}
</div>
</div>
`;
document.body.appendChild(modal);
// Add styles if not already present
if (!document.getElementById('animated-modal-styles')) {
const styles = document.createElement('style');
styles.id = 'animated-modal-styles';
styles.textContent = `
.animated-modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.9);
display: flex;
align-items: center;
justify-content: center;
z-index: 10000;
backdrop-filter: blur(20px);
animation: modalFadeIn 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}
.animated-modal-content {
background: linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 50%, #0a0a0a 100%);
border: 2px solid;
border-radius: 24px;
padding: 3.5rem;
max-width: 500px;
width: 90%;
text-align: center;
box-shadow: 0 25px 80px rgba(102, 126, 234, 0.3);
backdrop-filter: blur(30px);
animation: contentSlideIn 0.8s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
}
.error-modal {
border-image: linear-gradient(135deg, #e53e3e, #c53030) 1;
box-shadow: 0 25px 80px rgba(229, 62, 62, 0.3);
}
.warning-modal {
border-image: linear-gradient(135deg, #d69e2e, #b7791f) 1;
box-shadow: 0 25px 80px rgba(214, 158, 46, 0.3);
}
.info-modal {
border-image: linear-gradient(135deg, #3182ce, #2c5aa0) 1;
box-shadow: 0 25px 80px rgba(49, 130, 206, 0.3);
}
.success-modal {
border-image: linear-gradient(135deg, #38a169, #2f855a) 1;
box-shadow: 0 25px 80px rgba(56, 161, 105, 0.3);
}
.modal-header {
margin-bottom: 2rem;
position: relative;
}
.modal-icon-container {
position: relative;
display: inline-block;
margin-bottom: 1.5rem;
}
.modal-icon {
font-size: 4rem;
animation: iconFloat 3s ease-in-out infinite;
position: relative;
z-index: 2;
}
.error-modal .modal-icon {
color: #e53e3e;
background: linear-gradient(135deg, #e53e3e, #c53030);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.warning-modal .modal-icon {
color: #d69e2e;
background: linear-gradient(135deg, #d69e2e, #b7791f);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.info-modal .modal-icon {
color: #3182ce;
background: linear-gradient(135deg, #3182ce, #2c5aa0);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.success-modal .modal-icon {
color: #38a169;
background: linear-gradient(135deg, #38a169, #2f855a);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.modal-title {
color: white;
font-size: 2.4rem;
font-weight: 800;
margin: 0;
animation: titleGlow 2s ease-in-out infinite alternate;
}
.modal-message {
color: #a0aec0;
font-size: 1.6rem;
line-height: 1.6;
margin-bottom: 2rem;
animation: textFadeIn 1s ease-out 0.3s both;
}
.modal-actions {
display: flex;
gap: 1.5rem;
justify-content: center;
animation: actionsFadeIn 1s ease-out 1s both;
}
.modal-btn {
padding: 1.2rem 2.5rem;
border-radius: 12px;
font-size: 1.5rem;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
border: none;
display: flex;
align-items: center;
gap: 0.8rem;
}
.modal-btn.btn-primary {
background: linear-gradient(135deg, #667eea, #764ba2);
color: white;
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3);
}
.modal-btn.btn-primary:hover {
transform: translateY(-3px) scale(1.05);
box-shadow: 0 15px 40px rgba(102, 126, 234, 0.5);
}
.modal-btn.btn-secondary {
background: rgba(160, 174, 192, 0.2);
border: 1px solid rgba(160, 174, 192, 0.3);
color: #a0aec0;
}
.modal-btn.btn-secondary:hover {
background: rgba(160, 174, 192, 0.3);
color: white;
transform: translateY(-2px);
box-shadow: 0 8px 20px rgba(160, 174, 192, 0.3);
}
@media (max-width: 768px) {
.animated-modal-content {
padding: 2.5rem 2rem;
margin: 1rem;
}
.modal-actions {
flex-direction: column;
}
.modal-title {
font-size: 2rem;
}
.modal-icon {
font-size: 3rem;
}
}
`;
document.head.appendChild(styles);
}
}
// Close animated modal
function closeAnimatedModal() {
const modal = document.querySelector('.animated-modal');
if (modal) {
modal.remove();
}
}
</script>
<style>
.music-player {
position: fixed !important;
bottom: 0 !important;
left: 0 !important;
right: 0 !important;
background: linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 50%, #0a0a0a 100%);
border-top: 2px solid;
border-image: linear-gradient(90deg, #667eea, #764ba2, #667eea) 1;
backdrop-filter: blur(25px);
z-index: 9999 !important;
padding: 0.8rem 1.5rem;
box-shadow: 0 -8px 25px rgba(0, 0, 0, 0.6);
overflow: hidden;
width: 100vw !important;
height: auto !important;
min-height: 70px;
}
.music-player::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="grid" width="10" height="10" patternUnits="userSpaceOnUse"><path d="M 10 0 L 0 0 0 10" fill="none" stroke="rgba(102,126,234,0.1)" stroke-width="0.5"/></pattern></defs><rect width="100" height="100" fill="url(%23grid)"/></svg>');
opacity: 0.3;
pointer-events: none;
}
.player-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0.8rem;
position: relative;
z-index: 2;
}
.player-info {
display: flex;
flex-direction: column;
gap: 0.2rem;
flex: 1;
margin-right: 1.5rem;
}
.player-info span:first-child {
color: white;
font-weight: 600;
font-size: 1.3rem;
background: linear-gradient(135deg, #ffffff, #667eea, #764ba2);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
}
.player-info span:last-child {
color: #a0aec0;
font-size: 1.1rem;
font-weight: 500;
}
.player-controls {
display: flex;
gap: 0.8rem;
align-items: center;
flex-shrink: 0;
}
.control-btn {
background: linear-gradient(135deg, rgba(102, 126, 234, 0.2), rgba(118, 75, 162, 0.2));
border: 1px solid rgba(102, 126, 234, 0.3);
color: white;
padding: 0.6rem 0.8rem;
border-radius: 8px;
cursor: pointer;
transition: all 0.3s ease;
font-size: 1.2rem;
backdrop-filter: blur(10px);
position: relative;
overflow: hidden;
}
.control-btn::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
transition: left 0.5s ease;
}
.control-btn:hover::before {
left: 100%;
}
.control-btn:hover {
background: linear-gradient(135deg, rgba(102, 126, 234, 0.4), rgba(118, 75, 162, 0.4));
border-color: rgba(102, 126, 234, 0.6);
transform: translateY(-2px);
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
}
.control-btn:active {
transform: translateY(0px);
}
.player-body {
display: flex;
align-items: center;
gap: 1.5rem;
position: relative;
z-index: 2;
}
.progress-container {
flex: 1;
display: flex;
flex-direction: column;
gap: 0.4rem;
}
.progress-bar {
width: 100%;
height: 6px;
background: rgba(255, 255, 255, 0.08);
border-radius: 3px;
overflow: hidden;
cursor: pointer;
border: 1px solid rgba(102, 126, 234, 0.2);
position: relative;
}
.progress-bar::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(90deg, transparent, rgba(102, 126, 234, 0.1), transparent);
animation: shimmer 2s ease-in-out infinite;
}
@keyframes shimmer {
0%, 100% { opacity: 0.3; }
50% { opacity: 0.6; }
}
.progress-fill {
height: 100%;
background: linear-gradient(135deg, #667eea, #764ba2);
width: 0%;
transition: width 0.1s ease;
position: relative;
z-index: 2;
box-shadow: 0 0 10px rgba(102, 126, 234, 0.5);
}
.progress-fill::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
animation: progressShimmer 1.5s ease-in-out infinite;
}
@keyframes progressShimmer {
0% { transform: translateX(-100%); }
100% { transform: translateX(100%); }
}
.time-display {
display: flex;
justify-content: space-between;
font-size: 1.1rem;
color: #a0aec0;
font-weight: 500;
}
.volume-container {
display: flex;
align-items: center;
gap: 0.8rem;
color: #a0aec0;
background: linear-gradient(135deg, rgba(102, 126, 234, 0.1), rgba(118, 75, 162, 0.1));
padding: 0.6rem 1rem;
border-radius: 8px;
border: 1px solid rgba(102, 126, 234, 0.2);
backdrop-filter: blur(10px);
}
.volume-container i {
font-size: 1.2rem;
color: #667eea;
}
.volume-container input[type="range"] {
width: 80px;
height: 4px;
background: rgba(255, 255, 255, 0.1);
border-radius: 2px;
outline: none;
cursor: pointer;
border: 1px solid rgba(102, 126, 234, 0.3);
}
.volume-container input[type="range"]::-webkit-slider-thumb {
appearance: none;
width: 14px;
height: 14px;
background: linear-gradient(135deg, #667eea, #764ba2);
border-radius: 50%;
cursor: pointer;
border: 1px solid rgba(255, 255, 255, 0.3);
box-shadow: 0 1px 4px rgba(102, 126, 234, 0.4);
transition: all 0.3s ease;
}
.volume-container input[type="range"]::-webkit-slider-thumb:hover {
transform: scale(1.1);
box-shadow: 0 2px 8px rgba(102, 126, 234, 0.6);
}
.volume-container input[type="range"]::-moz-range-thumb {
width: 14px;
height: 14px;
background: linear-gradient(135deg, #667eea, #764ba2);
border-radius: 50%;
cursor: pointer;
border: 1px solid rgba(255, 255, 255, 0.3);
box-shadow: 0 1px 4px rgba(102, 126, 234, 0.4);
transition: all 0.3s ease;
}
/* Enhanced Playlist Panel - Matching Homepage Theme */
.playlist-panel {
position: fixed;
bottom: 120px;
right: 2rem;
width: 450px;
max-height: 600px;
background: linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 50%, #0a0a0a 100%);
border: 2px solid;
border-image: linear-gradient(135deg, #667eea, #764ba2) 1;
border-radius: 20px;
backdrop-filter: blur(25px);
z-index: 1001;
display: none;
box-shadow: 0 25px 80px rgba(0, 0, 0, 0.7);
position: relative;
overflow: hidden;
}
.playlist-panel::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="grid" width="10" height="10" patternUnits="userSpaceOnUse"><path d="M 10 0 L 0 0 0 10" fill="none" stroke="rgba(102,126,234,0.1)" stroke-width="0.5"/></pattern></defs><rect width="100" height="100" fill="url(%23grid)"/></svg>');
opacity: 0.2;
pointer-events: none;
}
.playlist-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 2rem 2.5rem;
border-bottom: 1px solid rgba(102, 126, 234, 0.2);
position: relative;
z-index: 2;
background: linear-gradient(135deg, rgba(102, 126, 234, 0.1), rgba(118, 75, 162, 0.1));
}
.playlist-header h3 {
color: white;
font-size: 2rem;
font-weight: 700;
background: linear-gradient(135deg, #ffffff, #667eea, #764ba2);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.close-btn {
background: linear-gradient(135deg, rgba(102, 126, 234, 0.2), rgba(118, 75, 162, 0.2));
border: 2px solid rgba(102, 126, 234, 0.3);
color: white;
font-size: 1.6rem;
cursor: pointer;
padding: 0.8rem;
border-radius: 12px;
transition: all 0.3s ease;
backdrop-filter: blur(10px);
}
.close-btn:hover {
background: linear-gradient(135deg, rgba(102, 126, 234, 0.4), rgba(118, 75, 162, 0.4));
border-color: rgba(102, 126, 234, 0.6);
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3);
}
.playlist-content {
max-height: 450px;
overflow-y: auto;
padding: 1.5rem;
position: relative;
z-index: 2;
}
.playlist-content::-webkit-scrollbar {
width: 6px;
}
.playlist-content::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.05);
border-radius: 3px;
}
.playlist-content::-webkit-scrollbar-thumb {
background: linear-gradient(135deg, #667eea, #764ba2);
border-radius: 3px;
}
.playlist-item {
display: flex;
align-items: center;
gap: 1.2rem;
padding: 1.2rem 1.5rem;
border-radius: 12px;
cursor: pointer;
transition: all 0.3s ease;
margin-bottom: 0.8rem;
border: 1px solid transparent;
background: rgba(255, 255, 255, 0.03);
backdrop-filter: blur(10px);
}
.playlist-item:hover {
background: linear-gradient(135deg, rgba(102, 126, 234, 0.1), rgba(118, 75, 162, 0.1));
border-color: rgba(102, 126, 234, 0.3);
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.2);
}
.playlist-item.active {
background: linear-gradient(135deg, rgba(102, 126, 234, 0.2), rgba(118, 75, 162, 0.2));
border: 2px solid rgba(102, 126, 234, 0.5);
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3);
}
.playlist-item-info {
flex: 1;
}
.playlist-item-title {
color: white;
font-weight: 600;
font-size: 1.5rem;
margin-bottom: 0.3rem;
background: linear-gradient(135deg, #ffffff, #667eea);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.playlist-item-artist {
color: #a0aec0;
font-size: 1.3rem;
font-weight: 500;
}
.playlist-item-duration {
color: #667eea;
font-size: 1.2rem;
font-weight: 600;
background: linear-gradient(135deg, rgba(102, 126, 234, 0.2), rgba(118, 75, 162, 0.2));
padding: 0.3rem 0.8rem;
border-radius: 8px;
border: 1px solid rgba(102, 126, 234, 0.3);
}
/* Responsive */
@media (max-width: 768px) {
.music-player {
padding: 1rem;
position: fixed !important;
bottom: 0 !important;
left: 0 !important;
right: 0 !important;
width: 100vw !important;
z-index: 9999 !important;
}
.player-header {
flex-direction: column;
gap: 1rem;
align-items: flex-start;
}
.player-body {
flex-direction: column;
gap: 1rem;
}
.playlist-panel {
width: calc(100vw - 2rem);
right: 1rem;
left: 1rem;
}
body {
padding-bottom: 140px; /* More space on mobile */
}
}
/* Global player is handled by global_player.php */
</style>
</div>
</div>
<!-- Story Hint Section -->
<section style="background: linear-gradient(135deg, rgba(102, 126, 234, 0.05) 0%, rgba(240, 147, 251, 0.05) 100%); padding: 4rem 0; text-align: center; color: #cccccc;">
<div class="container">
<p style="font-size: 1.2rem; line-height: 1.6; max-width: 600px; margin: 0 auto;">
"Music has been my passion since childhood. I've fought hard to bring you this platform where creativity meets technology,
where dreams become melodies, and where love spreads through every note.
<a href="/about.php" style="color: #667eea; text-decoration: none; font-weight: 600;">Discover our story</a> and join us in making music accessible to everyone."
</p>
</div>
</section>
<script>
// Homepage functionality using global player
// Removed duplicate/conflicting initialization - handled by earlier script section
// This prevents interference with currently playing music during AJAX navigation
// Play track function for any audio elements on homepage
async function playTrack(audioUrl, title, artist) {
console.log('🎵 Homepage playTrack called:', { audioUrl, title, artist });
// Use the enhanced global player function
try {
if (typeof window.enhancedGlobalPlayer !== 'undefined' && typeof window.enhancedGlobalPlayer.playTrack === 'function') {
window.enhancedGlobalPlayer.playTrack(audioUrl, title, artist);
console.log('🎵 Enhanced Global player playTrack call successful');
} else {
console.error('🎵 Enhanced Global player not available');
// Fallback to basic audio
const audio = new Audio(audioUrl);
audio.volume = 0.5;
audio.play().catch(error => {
console.error('🎵 Basic audio fallback failed:', error);
alert(`Failed to play: ${title} by ${artist}. Please try again.`);
});
}
} catch (error) {
console.error('🎵 Enhanced Global player failed:', error);
alert(`Failed to play: ${title} by ${artist}. Please try again.`);
}
}
</script>
<?php
// Include footer only for full page loads
// Include footer (AJAX navigation removed - always include footer)
include 'includes/footer.php';
include 'includes/advanced_functions_modal.php';
?>