<?php
require_once __DIR__.'/config.php';
function json_response($data){ header('Content-Type: application/json; charset=utf-8'); echo json_encode($data, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES); exit; }
function safe_name($s){ $s=preg_replace('/[^a-zA-Z0-9_\-]/','_',trim($s)); return $s ?: ('project_'.date('Ymd_His')); }
function tmdb_get($path,$params=[]){
    if(TMDB_API_KEY==='INSERISCI_LA_TUA_TMDB_API_KEY') return ['ok'=>false,'error'=>'Configura TMDB_API_KEY in config.php'];
    $params['api_key']=TMDB_API_KEY; $params['language']=TMDB_LANG;
    $url='https://api.themoviedb.org/3'.$path.'?'.http_build_query($params);
    $ctx=stream_context_create(['http'=>['timeout'=>15,'ignore_errors'=>true,'header'=>'User-Agent: GennyPanel/1.0']]);
    $raw=@file_get_contents($url,false,$ctx);
    if($raw===false) return ['ok'=>false,'error'=>'Errore connessione TMDB'];
    $data=json_decode($raw,true); if(!$data) return ['ok'=>false,'error'=>'Risposta TMDB non valida'];
    return ['ok'=>true,'data'=>$data];
}
function save_upload($field,$dir){
    if(empty($_FILES[$field]) || $_FILES[$field]['error']!==UPLOAD_ERR_OK) return null;
    $ext=strtolower(pathinfo($_FILES[$field]['name'],PATHINFO_EXTENSION));
    if(!in_array($ext,['jpg','jpeg','png','webp'])) return null;
    $name=date('Ymd_His').'_'.bin2hex(random_bytes(4)).'.'.$ext;
    $dest=rtrim($dir,'/').'/'.$name;
    if(move_uploaded_file($_FILES[$field]['tmp_name'],$dest)) return str_replace(__DIR__.'/', '', $dest);
    return null;
}
function project_list(){
    $out=[]; foreach(glob(PROJECT_DIR.'/*.json') as $f){ $j=json_decode(file_get_contents($f),true); $out[]=['file'=>basename($f),'title'=>$j['title']??basename($f),'updated'=>$j['updated']??date('c',filemtime($f))]; }
    usort($out, fn($a,$b)=>strcmp($b['updated'],$a['updated'])); return $out;
}

function export_php_value($v){
    return var_export((string)$v, true);
}
function build_project_php($data){
    $title=$data['title']??'Cinema Experience';
    $rotation=$data['settings']['rotation']??'20 SECONDS';
    preg_match('/\d+/', $rotation, $m); $interval=(intval($m[0]??20))*1000; if($interval<3000) $interval=12000;
    $layout=preg_replace('/[^a-zA-Z0-9_\-]/','',$data['layout']??'auto_ads_layout_14');
    $settings=$data['settings']??[];
    $brightness=max(20,min(140,intval($settings['brightness']??90)));
    $tmdbX=max(0,min(100,intval($settings['tmdbX']??50)));
    $tmdbY=max(0,min(100,intval($settings['tmdbY']??50)));
    $tmdbZoom=max(80,min(180,intval($settings['tmdbZoom']??110)));
    $apiKey = (defined('TMDB_API_KEY') && TMDB_API_KEY !== 'INSERISCI_LA_TUA_TMDB_API_KEY') ? TMDB_API_KEY : 'INSERISCI_LA_TUA_TMDB_API_KEY';
    return "<?php\n".
"session_start();\n\n".
"define('TMDB_API_KEY', ".export_php_value($apiKey).");\n".
"define('TMDB_API_URL', 'https://api.themoviedb.org/3');\n".
"define('TMDB_IMG_URL', 'https://image.tmdb.org/t/p/');\n\n".
"function tmdbRequest(\$endpoint, \$params = []) {\n".
"    if (TMDB_API_KEY === '' || TMDB_API_KEY === 'INSERISCI_LA_TUA_TMDB_API_KEY') { return []; }\n".
"    \$params['api_key'] = TMDB_API_KEY;\n".
"    \$params['language'] = 'it-IT';\n".
"    \$url = TMDB_API_URL . \$endpoint . '?' . http_build_query(\$params);\n".
"    if (function_exists('curl_init')) {\n".
"        \$ch = curl_init();\n".
"        curl_setopt(\$ch, CURLOPT_URL, \$url);\n".
"        curl_setopt(\$ch, CURLOPT_RETURNTRANSFER, true);\n".
"        curl_setopt(\$ch, CURLOPT_SSL_VERIFYPEER, false);\n".
"        curl_setopt(\$ch, CURLOPT_TIMEOUT, 15);\n".
"        \$response = curl_exec(\$ch);\n".
"        curl_close(\$ch);\n".
"    } else {\n".
"        \$ctx = stream_context_create(['http'=>['timeout'=>15,'ignore_errors'=>true,'header'=>'User-Agent: GennyTMDB/1.0']]);\n".
"        \$response = @file_get_contents(\$url, false, \$ctx);\n".
"    }\n".
"    \$json = json_decode((string)\$response, true);\n".
"    return is_array(\$json) ? \$json : [];\n".
"}\n\n".
"\$type = (isset(\$_GET['type']) && \$_GET['type'] === 'tv') ? 'tv' : 'movie';\n".
"\$feed = tmdbRequest(\$type === 'tv' ? '/tv/popular' : '/trending/movie/week');\n".
"\$movies = [];\n".
"foreach ((\$feed['results'] ?? []) as \$movie) {\n".
"    if (empty(\$movie['backdrop_path']) || empty(\$movie['poster_path'])) { continue; }\n".
"    \$mediaType = \$type === 'tv' ? 'tv' : 'movie';\n".
"    \$details = tmdbRequest('/' . \$mediaType . '/' . intval(\$movie['id']), ['append_to_response'=>'images,videos,credits']);\n".
"    \$logoPath = '';\n".
"    foreach ((\$details['images']['logos'] ?? []) as \$lg) { if ((\$lg['iso_639_1'] ?? '') === 'it') { \$logoPath = \$lg['file_path'] ?? ''; break; } }\n".
"    if (!\$logoPath) { foreach ((\$details['images']['logos'] ?? []) as \$lg) { if ((\$lg['iso_639_1'] ?? '') === 'en') { \$logoPath = \$lg['file_path'] ?? ''; break; } } }\n".
"    \$overview = trim(\$movie['overview'] ?? \$details['overview'] ?? '');\n".
"    if (\$overview === '') { \$overview = 'Trama non disponibile su TMDB per questo contenuto.'; }\n".
"    \$movies[] = [\n".
"        'id' => \$movie['id'],\n".
"        'title' => \$movie['title'] ?? (\$movie['name'] ?? 'Titolo'),\n".
"        'overview' => \$overview,\n".
"        'year' => substr(\$movie['release_date'] ?? (\$movie['first_air_date'] ?? ''), 0, 4),\n".
"        'backdrop_path' => TMDB_IMG_URL . 'original' . \$movie['backdrop_path'],\n".
"        'poster_path' => TMDB_IMG_URL . 'w500' . \$movie['poster_path'],\n".
"        'logo_path' => \$logoPath ? TMDB_IMG_URL . 'w500' . \$logoPath : '',\n".
"        'rating' => \$movie['vote_average'] ?? 0,\n".
"        'runtime' => \$details['runtime'] ?? (\$details['episode_run_time'][0] ?? 0),\n".
"        'genres' => array_map(function(\$genre) { return \$genre['name']; }, \$details['genres'] ?? [])\n".
"    ];\n".
"}\n".
"?>\n".
"<!DOCTYPE html>\n<html lang=\"it\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>".htmlspecialchars($title,ENT_QUOTES)."</title>\n<style>\n".
"*{box-sizing:border-box}body{margin:0;padding:0;overflow:hidden;background:#000;color:white;font-family:Arial,Helvetica,sans-serif}.cinema-container{position:fixed;inset:0;background:#000}.slide{position:absolute;inset:0;opacity:0;transition:opacity 1.1s ease}.slide.active{opacity:1}.backdrop{position:absolute;inset:0;background-size:".$tmdbZoom."% auto;background-position:".$tmdbX."% ".$tmdbY."%;filter:brightness(".$brightness."%) saturate(1.08);transform:scale(1.03);transition:transform 7s linear}.slide.active .backdrop{transform:scale(1)}.shade{position:absolute;inset:0;background:linear-gradient(90deg,rgba(0,0,0,.22),rgba(0,0,0,.03),rgba(0,0,0,.15))}.movie-content{position:absolute;inset:0}.info-card{position:absolute;display:flex;align-items:center;gap:24px;padding:24px;border-radius:18px;background:rgba(20,20,15,.48);border:1px solid rgba(255,255,255,.55);box-shadow:0 20px 70px rgba(0,0,0,.38);backdrop-filter:blur(10px);overflow:hidden}.poster{width:160px;height:240px;object-fit:cover;border-radius:13px;box-shadow:0 0 20px rgba(255,255,255,.28),0 18px 42px rgba(0,0,0,.46)}.logo{max-width:300px;max-height:120px;object-fit:contain;margin-bottom:8px}.text h1{margin:0 0 8px;color:#ffe900;font-size:clamp(20px,3vw,44px);line-height:1.05;text-shadow:0 2px 14px rgba(0,0,0,.75)}.meta{display:flex;gap:10px;flex-wrap:wrap;color:#f7d455;font-size:12px;font-weight:700;margin:0 0 10px}.stars{color:#ffd34a}.text p{margin:0;color:#fff;font-size:clamp(11px,1.15vw,16px);line-height:1.42;max-width:760px;text-shadow:0 2px 10px #000;display:-webkit-box;-webkit-line-clamp:7;-webkit-box-orient:vertical;overflow:hidden}.actor-strip{position:absolute;z-index:9;display:none;gap:10px;align-items:center;filter:drop-shadow(0 8px 18px rgba(0,0,0,.55))}.actor{width:64px;text-align:center;color:#fff;font-size:10px;font-weight:800;text-shadow:0 2px 8px #000}.actor img{width:54px;height:54px;object-fit:cover;border-radius:50%;border:2px solid rgba(255,255,255,.85);box-shadow:0 0 0 3px rgba(0,0,0,.25),0 8px 18px rgba(0,0,0,.55)}.auto_ads_layout_5 .actor-strip,.auto_ads_layout_6 .actor-strip,.auto_ads_layout_12 .actor-strip,.auto_ads_layout_13 .actor-strip,.special_layout_22 .actor-strip,.special_layout_24 .actor-strip{display:flex}.auto_ads_layout_5 .actor-strip,.special_layout_22 .actor-strip{right:5%;bottom:5%}.auto_ads_layout_6 .actor-strip{left:6%;bottom:6%}.auto_ads_layout_12 .actor-strip{right:5%;bottom:8%}.auto_ads_layout_13 .actor-strip,.special_layout_24 .actor-strip{right:7%;bottom:6%}.auto_ads_layout_0 .info-card{right:6%;top:50%;transform:translateY(-50%);width:min(620px,42%);background:transparent;border:0;box-shadow:none;text-align:right}.auto_ads_layout_0 .poster,.auto_ads_layout_0 .logo{display:none}.auto_ads_layout_0 .text p{margin-left:auto;max-width:460px}.auto_ads_layout_1 .info-card{left:3%;top:8%;width:min(460px,38%);display:block;background:rgba(0,0,0,.28);border:0}.auto_ads_layout_1 .poster{display:none}.auto_ads_layout_1 .text h1{text-transform:uppercase;color:#fff;font-size:clamp(32px,5vw,72px)}.auto_ads_layout_2 .info-card{left:50%;top:50%;transform:translate(-50%,-50%);width:min(920px,72%);flex-direction:row-reverse;background:rgba(0,0,0,.42)}.auto_ads_layout_3 .info-card{display:none}.auto_ads_layout_4 .info-card{left:50%;bottom:7%;transform:translateX(-50%);width:min(1040px,76%);min-height:120px;background:rgba(0,0,0,.68);border-radius:10px}.auto_ads_layout_4 .poster{display:none}.auto_ads_layout_5 .info-card{left:3%;top:4%;width:min(430px,34%);flex-direction:column;text-align:center;background:rgba(0,0,0,.38)}.auto_ads_layout_6 .info-card{left:3%;top:6%;width:min(360px,28%);flex-direction:column;text-align:center;border-color:#ff9d00}.auto_ads_layout_7 .info-card{left:50%;top:50%;transform:translate(-50%,-50%);width:min(430px,32%);flex-direction:column;text-align:center;border-color:#ffb300}.auto_ads_layout_8 .info-card{right:3%;top:12%;width:min(500px,37%);flex-direction:column;border:3px solid #23b536;background:rgba(0,0,0,.35)}.auto_ads_layout_8 .poster{display:none}.auto_ads_layout_9 .info-card{left:52%;top:52%;transform:translate(-50%,-50%);width:min(840px,64%);flex-direction:row-reverse;border:3px solid #23b536;background:rgba(0,0,0,.34)}.auto_ads_layout_10 .info-card{right:0;top:0;bottom:0;width:22%;height:100%;border:0;border-radius:0;background:#000;flex-direction:column;justify-content:center;text-align:center}.auto_ads_layout_10 .poster{width:120px;height:180px}.auto_ads_layout_11 .info-card{left:50%;top:50%;transform:translate(-50%,-50%);width:min(760px,58%);background:rgba(0,0,0,.34);border-color:rgba(255,255,255,.78)}.auto_ads_layout_12 .info-card{right:3%;bottom:8%;width:min(480px,36%);flex-direction:column;border:2px solid #34a853;background:rgba(0,0,0,.28)}.auto_ads_layout_12 .poster{display:none}.auto_ads_layout_13 .info-card{right:4%;bottom:5%;width:min(480px,35%);flex-direction:column;border:3px solid #ff9d00;background:rgba(0,0,0,.31);text-align:center}.auto_ads_layout_13 .poster{display:none}.auto_ads_layout_14 .info-card{left:50%;top:50%;transform:translate(-50%,-50%);width:min(1160px,86%);min-height:min(320px,38vh);background:rgba(20,20,20,.68);border:0;border-radius:12px}.special_layout_15 .info-card{right:5%;bottom:7%;width:min(560px,40%);background:rgba(255,255,255,.12)}.special_layout_16 .info-card{left:50%;bottom:5%;transform:translateX(-50%);width:min(1200px,88%);background:rgba(255,255,255,.14)}.special_layout_17 .info-card{left:8%;top:50%;transform:translateY(-50%);width:min(820px,58%);border-color:#ffd34a}.special_layout_18 .info-card{left:50%;top:12%;transform:translateX(-50%);width:min(760px,56%);background:transparent;border:0;box-shadow:none;text-align:center}.special_layout_18 .poster,.special_layout_18 .text p{display:none}.special_layout_19 .info-card{left:4%;top:8%;width:min(650px,48%);background:rgba(255,255,255,.10)}.special_layout_20 .info-card{left:50%;bottom:8%;transform:translateX(-50%);width:min(900px,66%);background:rgba(0,0,0,.36)}.special_layout_21 .info-card{right:4%;top:8%;width:min(430px,31%);background:rgba(0,0,0,.30)}.special_layout_21 .poster{width:100px;height:150px}.special_layout_22 .info-card{left:4%;bottom:10%;width:min(520px,38%);background:rgba(255,255,255,.12)}.special_layout_23 .info-card{left:50%;top:50%;transform:translate(-50%,-50%);width:min(760px,55%);background:rgba(0,0,0,.18);text-align:center;justify-content:center}.special_layout_23 .poster{display:none}.special_layout_24 .info-card{right:6%;top:50%;transform:translateY(-50%);width:min(620px,42%);background:rgba(12,12,12,.52);border-color:#ff9d00}.poster{width:clamp(58px,8.5vw,135px)!important;height:clamp(87px,12.75vw,203px)!important}.auto_ads_layout_10 .poster{width:clamp(54px,6.5vw,98px)!important;height:clamp(81px,9.75vw,147px)!important}.auto_ads_layout_2 .poster,.auto_ads_layout_5 .poster,.auto_ads_layout_6 .poster,.auto_ads_layout_7 .poster,.auto_ads_layout_9 .poster,.auto_ads_layout_11 .poster,.auto_ads_layout_14 .poster,.special_layout_21 .poster{width:clamp(62px,8.8vw,140px)!important;height:clamp(93px,13.2vw,210px)!important}.info-card{gap:clamp(8px,1.3vw,18px)!important}.text p{font-size:clamp(10px,1.02vw,15px)!important;line-height:1.45!important;-webkit-line-clamp:7!important}.progress-container{position:fixed;bottom:0;left:0;width:100%;height:3px;background:rgba(255,255,255,.12)}.progress-bar{height:100%;width:0;background:linear-gradient(90deg,#fff,#ffbd18);transition:width ".($interval/1000)."s linear}.slide.active .progress-bar{width:100%}.slide-number{position:fixed;right:14px;top:12px;color:rgba(255,255,255,.65);font-weight:700}@media(max-width:800px){.info-card{left:50%!important;right:auto!important;top:auto!important;bottom:5%!important;transform:translateX(-50%)!important;width:92%!important;flex-direction:row!important;padding:12px!important}.poster{width:75px!important;height:112px!important}.text h1{font-size:18px!important}.text p{font-size:11px!important;-webkit-line-clamp:5!important}}\n".
"</style>\n</head>\n<body>\n<div class=\"cinema-container ".$layout."\">\n".
"<?php if (empty(\$movies)): ?><div style=\"padding:40px;font-size:22px\">Inserisci una TMDB API KEY valida nel file tmdb.php.</div><?php endif; ?>\n".
"<div class=\"slide-number\"><span id=\"currentSlide\">1</span>/<span id=\"totalSlides\"><?php echo count(\$movies); ?></span></div>\n".
"<?php foreach (\$movies as \$index => \$movie): ?>\n".
"<div class=\"slide <?php echo \$index === 0 ? 'active' : ''; ?>\">\n".
"  <div class=\"backdrop\" style=\"background-image:url('<?php echo htmlspecialchars(\$movie['backdrop_path']); ?>')\"></div><div class=\"shade\"></div>\n".
"  <div class=\"movie-content\"><div class=\"info-card\">\n".
"    <?php if (!empty(\$movie['poster_path'])): ?><img src=\"<?php echo htmlspecialchars(\$movie['poster_path']); ?>\" class=\"poster\" alt=\"<?php echo htmlspecialchars(\$movie['title']); ?>\"><?php endif; ?>\n".
"    <div class=\"text\">\n".
"      <?php if (!empty(\$movie['logo_path'])): ?><img class=\"logo\" src=\"<?php echo htmlspecialchars(\$movie['logo_path']); ?>\" alt=\"logo\"><?php endif; ?>\n".
"      <h1><?php echo htmlspecialchars(\$movie['title']); ?></h1>\n".
"      <div class=\"meta\"><span><?php echo htmlspecialchars(\$movie['year']); ?></span><?php if(\$movie['runtime']): ?><span><?php echo intval(\$movie['runtime']); ?> min</span><?php endif; ?><span class=\"stars\">★ <?php echo number_format((float)\$movie['rating'], 1); ?>/10</span><?php foreach (array_slice(\$movie['genres'],0,3) as \$genre): ?><span><?php echo htmlspecialchars(\$genre); ?></span><?php endforeach; ?></div>\n".
"      <p><?php echo htmlspecialchars(\$movie['overview']); ?></p>\n".
"    </div>\n".
"  </div></div><div class=\"progress-container\"><div class=\"progress-bar\"></div></div>\n".
"</div>\n<?php endforeach; ?>\n".
"</div>\n<script>const slides=document.querySelectorAll('.slide');const currentSlideElement=document.getElementById('currentSlide');let currentSlide=0;const interval=".$interval.";function showSlide(index){slides.forEach(s=>s.classList.remove('active'));if(slides[index]){slides[index].classList.add('active');currentSlideElement.textContent=index+1;}}function nextSlide(){if(!slides.length)return;currentSlide=(currentSlide+1)%slides.length;showSlide(currentSlide);}setInterval(nextSlide,interval);</script>\n</body>\n</html>\n";
}

function default_layouts(){ return [
 'auto_ads_layout_0'=>['name'=>'Gemello 0 - titolo destra pulito','desc'=>'Uguale alla foto: sfondo pieno, titolo/metadati a destra, senza box nero','preview'=>'assets/ads/auto_ads_lay_0.resized.png'],
 'auto_ads_layout_1'=>['name'=>'Gemello 1 - logo grande sinistra','desc'=>'Uguale alla foto: logo grande, trama sotto, overlay leggero','preview'=>'assets/ads/auto_ads_lay_1.resized.png'],
 'auto_ads_layout_2'=>['name'=>'Gemello 2 - scheda centrale poster destra','desc'=>'Uguale alla foto: box centrale trasparente con poster a destra','preview'=>'assets/ads/auto_ads_lay_2.resized.png'],
 'auto_ads_layout_3'=>['name'=>'Gemello 3 - immagine pulita','desc'=>'Solo immagine pulita full screen, senza schede','preview'=>'assets/ads/auto_ads_lay_3.resized.png'],
 'auto_ads_layout_4'=>['name'=>'Gemello 4 - trailer cinema','desc'=>'Stile player trailer pulito','preview'=>'assets/ads/auto_ads_lay_4.resized.png'],
 'auto_ads_layout_5'=>['name'=>'Gemello 5 - poster sinistra verticale','desc'=>'Poster sinistra con trama sotto','preview'=>'assets/ads/auto_ads_lay_5.resized.png'],
 'auto_ads_layout_6'=>['name'=>'Gemello 6 - card sinistra cast','desc'=>'Poster sinistra, rating e ruoli/cast','preview'=>'assets/ads/auto_ads_lay_6.resized.png'],
 'auto_ads_layout_7'=>['name'=>'Gemello 7 - poster centrale premium','desc'=>'Poster verticale centrale con dati sotto','preview'=>'assets/ads/auto_ads_lay_7.resized.png'],
 'auto_ads_layout_8'=>['name'=>'Gemello 8 - card destra verde','desc'=>'Scheda destra verde come foto','preview'=>'assets/ads/auto_ads_lay_8.resized.png'],
 'auto_ads_layout_9'=>['name'=>'Gemello 9 - scheda centro verde','desc'=>'Box verde centrale con poster a destra','preview'=>'assets/ads/auto_ads_lay_9.resized.png'],
 'auto_ads_layout_10'=>['name'=>'Gemello 10 - split nero destro','desc'=>'Immagine grande sinistra, info a destra','preview'=>'assets/ads/auto_ads_lay_10.resized.png'],
 'auto_ads_layout_11'=>['name'=>'Gemello 11 - poster + glass bianco','desc'=>'Poster a sinistra e card trasparente centrale','preview'=>'assets/ads/auto_ads_lay_11.resized.png'],
 'auto_ads_layout_12'=>['name'=>'Gemello 12 - card destra ruoli','desc'=>'Card destra con ruoli/cast sotto','preview'=>'assets/ads/auto_ads_lay_12.resized.png'],
 'auto_ads_layout_13'=>['name'=>'Gemello 13 - orange premium cast','desc'=>'Card destra bordo arancio con cast','preview'=>'assets/ads/auto_ads_lay_13.resized.png'],
 'auto_ads_layout_14'=>['name'=>'Gemello 14 - scheda orizzontale grande','desc'=>'Card grande orizzontale con poster sinistra','preview'=>'assets/ads/auto_ads_lay_14.resized.png'],
 'special_layout_15'=>['name'=>'Special 15 - cinema chiaro basso destra','desc'=>'Nuovo layout particolare: info basso destra, immagine pulita','preview'=>'assets/ads/auto_ads_lay_0.resized.png'],
 'special_layout_16'=>['name'=>'Special 16 - fascia panoramica glass','desc'=>'Nuovo: fascia larga trasparente con testo leggibile','preview'=>'assets/ads/auto_ads_lay_14.resized.png'],
 'special_layout_17'=>['name'=>'Special 17 - poster floating glow','desc'=>'Nuovo: poster flottante con glow cinema','preview'=>'assets/ads/auto_ads_lay_11.resized.png'],
 'special_layout_18'=>['name'=>'Special 18 - minimal title only','desc'=>'Nuovo: immagine pulita con solo titolo e rating','preview'=>'assets/ads/auto_ads_lay_3.resized.png'],
 'special_layout_19'=>['name'=>'Special 19 - scheda alta sinistra','desc'=>'Nuovo: trama alta sinistra molto leggibile','preview'=>'assets/ads/auto_ads_lay_1.resized.png'],
 'special_layout_20'=>['name'=>'Special 20 - scheda bassa centrale','desc'=>'Nuovo: card bassa stile cinema moderno','preview'=>'assets/ads/auto_ads_lay_2.resized.png'],
 'special_layout_21'=>['name'=>'Special 21 - poster destra micro','desc'=>'Nuovo: mini poster destra e trama corta','preview'=>'assets/ads/auto_ads_lay_8.resized.png'],
 'special_layout_22'=>['name'=>'Special 22 - card sinistra clean','desc'=>'Nuovo: card sinistra chiara senza bordo nero pesante','preview'=>'assets/ads/auto_ads_lay_5.resized.png'],
 'special_layout_23'=>['name'=>'Special 23 - cinematic hero center','desc'=>'Nuovo: titolo centrale grande, trama sotto','preview'=>'assets/ads/auto_ads_lay_0.resized.png'],
 'special_layout_24'=>['name'=>'Special 24 - app TV premium','desc'=>'Nuovo: layout adatto TV/Android app','preview'=>'assets/ads/auto_ads_lay_13.resized.png']
 ]; }
?>
