Files
2026-07-14 00:01:48 +03:00

2983 lines
111 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@extends('frontend.layouts.app')
@section('title', \App\Models\Setting::get('seo_home_title', 'Animexe — Türkçe Anime İzle | Ücretsiz HD'))
@section('meta_description', \App\Models\Setting::get('seo_home_description', 'Animexe\'de binlerce anime dizisi ve filmini Türkçe altyazılı veya dublajlı, ücretsiz HD kalitede izleyin.'))
@section('meta_keywords', \App\Models\Setting::get('seo_home_keywords', 'anime izle, türkçe anime, anime dizi, anime film, ücretsiz anime izle, hd anime'))
@section('og_type', 'website')
@section('canonical', rtrim(\App\Models\Setting::get('seo_canonical_domain', config('app.url')), '/') . '/')
@section('preload')
@if(isset($featured) && $featured->isNotEmpty() && $featured->first()->bannerUrl)
<link rel="preload" as="image" href="{{ $featured->first()->bannerUrl }}" fetchpriority="high">
@endif
@endsection
@push('styles')
<style>
/* ═══════════════════════════════════════════════════════════════
ANIMEXE 3.0 — COMPLETE REDESIGN
Cinema Dark • Big Cards • Premium Layout
════════════════════════════════════════════════════════════════ */
/* ── HERO ──────────────────────────────────────────────────── */
.hero {
position: relative;
height: clamp(600px, 78vw, 900px);
overflow: hidden;
background: #020208;
}
#hero-canvas {
position: absolute;
inset: 0;
z-index: 1;
pointer-events: none;
opacity: .4;
}
.hero-slides { position: absolute; inset: 0; }
.hero-slide {
position: absolute;
inset: 0;
opacity: 0;
transition: opacity 1.2s ease;
background-size: cover;
background-position: center 15%;
}
.hero-slide.on { opacity: 1; }
.hero-slide::after {
content: '';
position: absolute;
inset: 0;
background:
linear-gradient(to right, rgba(6,6,13,.99) 0%, rgba(6,6,13,.88) 35%, rgba(6,6,13,.3) 65%, rgba(6,6,13,.15) 100%),
linear-gradient(to top, #06060d 0%, rgba(6,6,13,.7) 28%, transparent 60%),
linear-gradient(to bottom, rgba(6,6,13,.55) 0%, transparent 22%);
}
/* Hero content */
.hero-content {
position: absolute;
inset: 0;
z-index: 3;
display: flex;
flex-direction: column;
justify-content: flex-end;
padding: calc(var(--nav-h) + 16px) clamp(22px, 7vw, 96px) clamp(56px, 7vw, 100px);
max-width: min(740px, 56%);
}
.hero-tags {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 20px;
}
.hero-tag {
background: rgba(0,245,255,.1);
border: 1px solid rgba(0,245,255,.35);
color: var(--accent2);
font-size: .62rem;
font-weight: 800;
padding: 5px 13px;
border-radius: 999px;
text-transform: uppercase;
letter-spacing: .14em;
}
.hero-status-badge {
display: inline-flex;
align-items: center;
gap: 6px;
background: rgba(255,45,125,.12);
border: 1px solid rgba(255,45,125,.3);
color: #ff7eb3;
font-size: .62rem;
font-weight: 800;
padding: 5px 13px;
border-radius: 999px;
text-transform: uppercase;
letter-spacing: .1em;
}
.hero-status-badge::before {
content: '';
width: 6px;
height: 6px;
border-radius: 50%;
background: #ff2d7d;
box-shadow: 0 0 7px #ff2d7d;
animation: pulse-dot 1.8s ease infinite;
}
@keyframes pulse-dot {
0%, 100% { transform: scale(1); opacity: 1; }
50% { transform: scale(1.4); opacity: .6; }
}
/* TITLE — big & dramatic */
.hero-title {
font-family: var(--font-display);
font-size: clamp(2.1rem, 5.5vw, 4.4rem);
font-weight: 900;
line-height: 1.0;
letter-spacing: -.01em;
margin-bottom: 16px;
background: linear-gradient(130deg, #fff 0%, rgba(255,255,255,.95) 50%, rgba(200,220,255,.8) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
filter: drop-shadow(0 4px 32px rgba(255,255,255,.12));
animation: hero-in .75s cubic-bezier(.22,1,.36,1) .15s both;
}
@keyframes hero-in {
from { opacity: 0; transform: translateY(22px) scale(.97); filter: blur(4px) drop-shadow(0 0 0 transparent); }
to { opacity: 1; transform: none; }
}
.hero-tags { animation: hero-in .6s cubic-bezier(.22,1,.36,1) .0s both; }
.hero-meta { animation: hero-in .6s cubic-bezier(.22,1,.36,1) .3s both; }
.hero-desc { animation: hero-in .6s cubic-bezier(.22,1,.36,1) .42s both; }
.hero-btns { animation: hero-in .6s cubic-bezier(.22,1,.36,1) .54s both; }
.hero-meta {
display: flex;
align-items: center;
gap: 14px;
flex-wrap: wrap;
margin-bottom: 18px;
font-size: .92rem;
color: rgba(240,244,255,.6);
}
.hstar {
color: #ffd60a;
font-weight: 800;
display: flex;
align-items: center;
gap: 5px;
background: rgba(255,214,10,.1);
padding: 4px 10px;
border-radius: 7px;
border: 1px solid rgba(255,214,10,.2);
}
.hero-sep {
width: 3px;
height: 3px;
border-radius: 50%;
background: rgba(255,255,255,.25);
}
.hero-desc {
color: rgba(240,244,255,.7);
font-size: .95rem;
line-height: 1.75;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
margin-bottom: 30px;
max-width: 540px;
}
.hero-btns {
display: flex;
gap: 12px;
flex-wrap: wrap;
}
/* PLAY button — big + dramatic */
.h-play-btn {
display: inline-flex;
align-items: center;
gap: 10px;
padding: 16px 34px;
border-radius: 12px;
background: linear-gradient(135deg, var(--accent), var(--accent3));
color: #fff;
font-size: .96rem;
font-weight: 800;
border: none;
cursor: pointer;
text-decoration: none;
transition: transform .15s, box-shadow .2s;
box-shadow: 0 0 40px rgba(255,45,125,.5), 0 6px 24px rgba(0,0,0,.4);
letter-spacing: .03em;
position: relative;
overflow: hidden;
}
.h-play-btn::before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(135deg, transparent 40%, rgba(255,255,255,.12) 50%, transparent 60%);
transform: translateX(-100%) skewX(-15deg);
transition: transform .5s ease;
}
.h-play-btn:hover::before { transform: translateX(200%) skewX(-15deg); }
.h-play-btn:hover { transform: translateY(-3px); box-shadow: 0 0 56px rgba(255,45,125,.65), 0 10px 30px rgba(0,0,0,.45); }
.h-info-btn {
display: inline-flex;
align-items: center;
gap: 9px;
padding: 15px 24px;
border-radius: 12px;
background: rgba(255,255,255,.07);
backdrop-filter: blur(16px);
border: 1px solid rgba(255,255,255,.18);
color: rgba(240,244,255,.9);
font-size: .92rem;
font-weight: 600;
transition: all .17s;
text-decoration: none;
}
.h-info-btn:hover { background: rgba(255,255,255,.13); border-color: rgba(255,255,255,.32); }
/* Hero nav arrows */
.hero-nav {
position: absolute;
top: 50%;
transform: translateY(-50%);
z-index: 5;
width: 52px;
height: 52px;
border-radius: 50%;
border: 1px solid rgba(255,255,255,.15);
background: rgba(6,6,13,.65);
backdrop-filter: blur(16px);
color: #fff;
font-size: 1.1rem;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all .18s;
opacity: 0;
}
.hero:hover .hero-nav { opacity: 1; }
.hero-nav:hover { background: rgba(255,45,125,.6); border-color: rgba(255,45,125,.7); transform: translateY(-50%) scale(1.1); }
.hero-prev { left: 24px; }
.hero-next { right: 24px; }
/* Hero right poster */
.hero-poster-right {
position: absolute;
right: clamp(60px,8vw,130px);
bottom: clamp(40px,6vw,80px);
width: clamp(150px,12vw,220px);
z-index: 4;
border-radius: 14px;
overflow: hidden;
box-shadow: 0 40px 80px rgba(0,0,0,.9), 0 0 80px rgba(0,245,255,.07);
border: 1px solid rgba(255,255,255,.1);
transition: opacity .5s ease;
}
.hero-poster-right img { width: 100%; display: block; aspect-ratio: 2/3; object-fit: cover; }
/* Thumbnail strip */
.hero-thumbs {
position: absolute;
bottom: 28px;
left: 50%;
transform: translateX(-50%);
display: flex;
gap: 10px;
z-index: 5;
}
.h-thumb {
width: 48px;
height: 70px;
border-radius: 8px;
flex-shrink: 0;
background-size: cover;
background-position: center;
background-color: var(--surface2);
border: 2px solid rgba(255,255,255,.1);
cursor: pointer;
opacity: .42;
transition: all .25s;
padding: 0;
}
.h-thumb.on { border-color: var(--accent2); opacity: 1; transform: scale(1.13); box-shadow: 0 0 24px rgba(0,245,255,.5); }
.h-thumb:hover:not(.on) { opacity: .72; border-color: rgba(255,255,255,.3); }
/* ── TICKER ─────────────────────────────────────────────────── */
.ticker-strip {
background: linear-gradient(to right, rgba(6,6,13,.99), rgba(10,10,22,.99));
border-top: 1px solid rgba(255,255,255,.04);
border-bottom: 1px solid rgba(255,255,255,.04);
overflow: hidden;
position: relative;
display: flex;
align-items: stretch;
height: 44px;
}
.ticker-label {
flex-shrink: 0;
display: flex;
align-items: center;
gap: 8px;
padding: 0 18px 0 clamp(16px,4vw,48px);
background: linear-gradient(to right, rgba(255,45,125,.18), rgba(255,45,125,.04));
border-right: 1px solid rgba(255,45,125,.2);
font-size: .6rem;
font-weight: 900;
letter-spacing: .16em;
text-transform: uppercase;
color: #ff7eb3;
white-space: nowrap;
z-index: 2;
}
.ticker-dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: #ff2d7d;
flex-shrink: 0;
box-shadow: 0 0 8px #ff2d7d;
animation: pulse-dot 1.6s ease infinite;
}
.ticker-strip::after {
content: '';
position: absolute;
top: 0; right: 0; bottom: 0;
width: 80px;
background: linear-gradient(to left, rgba(6,6,13,.95), transparent);
pointer-events: none;
z-index: 1;
}
.ticker-track-wrap { flex: 1; overflow: hidden; display: flex; align-items: center; }
.ticker-track {
display: flex;
align-items: center;
width: max-content;
animation: ticker-scroll 40s linear infinite;
}
.ticker-track:hover { animation-play-state: paused; }
@keyframes ticker-scroll {
from { transform: translateX(0); }
to { transform: translateX(-50%); }
}
.ticker-item {
display: inline-flex;
align-items: center;
gap: 7px;
padding: 0 20px;
white-space: nowrap;
font-size: .72rem;
color: rgba(240,244,255,.55);
}
.ticker-item a {
color: rgba(240,244,255,.85);
font-weight: 600;
text-decoration: none;
transition: color .15s;
}
.ticker-item a:hover { color: var(--accent2); }
.ticker-item.feat { color: rgba(240,244,255,.42); }
.ticker-badge {
font-size: .57rem;
font-weight: 900;
padding: 2px 7px;
border-radius: 4px;
text-transform: uppercase;
letter-spacing: .08em;
flex-shrink: 0;
}
.ticker-badge.new { background: linear-gradient(135deg,#00f5ff,#0094ff); color: #06060d; box-shadow: 0 0 8px rgba(0,245,255,.35); }
.ticker-badge.hot { background: linear-gradient(135deg,#ff6b2b,#ff2d7d); color: #fff; }
.ticker-badge.feat-b { background: rgba(255,255,255,.07); border: 1px solid rgba(255,255,255,.14); color: rgba(240,244,255,.65); }
.ticker-sep { color: rgba(255,255,255,.1); font-size: .7rem; padding: 0 4px; }
/* ── SPOTLIGHT SECTION (NEW — 3 büyük kart) ─────────────────── */
.spot-section {
padding: clamp(32px,4vw,52px) 0 0;
max-width: 1800px;
margin: 0 auto;
}
.spot-inner {
padding: 0 clamp(16px,4vw,48px);
}
.spot-hdr {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 22px;
}
.spot-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: clamp(12px,1.8vw,22px);
}
.spot-card {
position: relative;
border-radius: 16px;
overflow: hidden;
cursor: pointer;
text-decoration: none;
color: inherit;
aspect-ratio: 16/9;
background: var(--surface2);
border: 1px solid rgba(255,255,255,.06);
transition: transform .22s, box-shadow .22s;
display: block;
}
.spot-card:hover { transform: translateY(-6px) scale(1.01); box-shadow: 0 24px 64px rgba(0,0,0,.7), 0 0 50px rgba(0,245,255,.06); }
.spot-card img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
transition: transform .4s;
}
.spot-card:hover img { transform: scale(1.05); }
.spot-card::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(to top, rgba(6,6,13,.97) 0%, rgba(6,6,13,.5) 45%, rgba(6,6,13,.1) 100%);
pointer-events: none;
}
.spot-info {
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 20px 18px;
z-index: 2;
}
.spot-badge {
display: inline-block;
font-size: .6rem;
font-weight: 900;
padding: 3px 10px;
border-radius: 4px;
text-transform: uppercase;
letter-spacing: .1em;
margin-bottom: 8px;
background: linear-gradient(135deg, var(--accent2), var(--accent));
color: #06060d;
}
.spot-title {
font-family: var(--font-display);
font-size: clamp(.88rem, 1.5vw, 1.15rem);
font-weight: 900;
color: #fff;
line-height: 1.2;
margin-bottom: 7px;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.spot-meta {
display: flex;
align-items: center;
gap: 10px;
font-size: .72rem;
color: rgba(240,244,255,.5);
}
.spot-rating {
display: flex;
align-items: center;
gap: 4px;
color: #ffd60a;
font-weight: 800;
}
.spot-play {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
width: 56px;
height: 56px;
border-radius: 50%;
background: rgba(255,255,255,.14);
backdrop-filter: blur(12px);
border: 2px solid rgba(255,255,255,.55);
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-size: 1.3rem;
z-index: 3;
opacity: 0;
transition: opacity .22s, transform .22s;
}
.spot-card:hover .spot-play { opacity: 1; transform: translate(-50%,-50%) scale(1.1); }
/* ── SECTION SYSTEM (new) ──────────────────────────────────── */
.home-section {
padding: clamp(36px,4.5vw,56px) 0 0;
position: relative;
}
.home-section + .home-section::before {
content: '';
display: block;
height: 1px;
background: linear-gradient(90deg, transparent, rgba(0,245,255,.07), rgba(255,45,125,.05), transparent);
margin: 0 clamp(16px,4vw,48px);
margin-bottom: 0;
}
.hs-inner {
padding: 0 clamp(16px,4vw,48px);
max-width: 1800px;
margin: 0 auto;
}
.hs-hdr {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 24px;
}
/* BIG section title */
.hs-title {
font-family: var(--font-display);
font-size: clamp(1.0rem, 1.8vw, 1.35rem);
font-weight: 900;
text-transform: uppercase;
letter-spacing: .07em;
color: var(--text);
display: flex;
align-items: center;
gap: 12px;
}
.hs-title::before {
content: '';
width: 4px;
height: 26px;
flex-shrink: 0;
background: linear-gradient(180deg, var(--accent2), var(--accent));
border-radius: 3px;
box-shadow: 0 0 14px rgba(0,245,255,.65), 0 0 22px rgba(255,45,125,.4);
}
.hs-title.fire::before { background: linear-gradient(180deg,#ff9c2b,#ff3d00); box-shadow: 0 0 14px rgba(255,87,0,.6); }
.hs-title.gold::before { background: linear-gradient(180deg,#ffd60a,#ff9800); box-shadow: 0 0 14px rgba(255,180,0,.6); }
.hs-title.purple::before{ background: linear-gradient(180deg,#c084fc,#7c3aed); box-shadow: 0 0 14px rgba(147,51,234,.6); }
.hs-more {
font-size: .78rem;
font-weight: 700;
color: var(--text3);
text-transform: uppercase;
letter-spacing: .07em;
transition: color .14s;
padding: 7px 14px;
border-radius: 8px;
white-space: nowrap;
border: 1px solid rgba(255,255,255,.08);
background: rgba(255,255,255,.03);
}
.hs-more:hover { color: var(--accent2); border-color: rgba(0,245,255,.28); background: rgba(0,245,255,.05); }
/* Horizontal scroll row */
.h-scroll {
display: flex;
gap: clamp(10px,1.4vw,16px);
overflow-x: auto;
padding: 6px 0 20px;
scrollbar-width: none;
mask-image: linear-gradient(to right, transparent 0, #000 14px, #000 calc(100% - 28px), transparent 100%);
-webkit-mask-image: linear-gradient(to right, transparent 0, #000 14px, #000 calc(100% - 28px), transparent 100%);
}
.h-scroll::-webkit-scrollbar { display: none; }
/* ── POSTER CARD (pc) — BIGGER ─────────────────────────────── */
.pc {
flex-shrink: 0;
width: clamp(150px, 17vw, 195px);
cursor: pointer;
text-decoration: none;
color: inherit;
transition: transform .22s;
}
.pc:hover { transform: translateY(-6px); }
.pc-poster {
position: relative;
aspect-ratio: 2/3;
border-radius: 12px;
overflow: hidden;
background: var(--surface2);
box-shadow: 0 8px 28px rgba(0,0,0,.55);
border: 1px solid rgba(255,255,255,.07);
}
.pc-poster img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .38s; }
.pc:hover .pc-poster img { transform: scale(1.09); }
.pc-poster-ph { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; color: var(--text3); font-size: 2.2rem; }
/* Shine sweep on hover */
.pc-poster::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(115deg, transparent 35%, rgba(255,255,255,.09) 50%, transparent 65%);
transform: translateX(-100%) skewX(-15deg);
transition: transform .65s ease;
pointer-events: none;
z-index: 3;
}
.pc:hover .pc-poster::after { transform: translateX(200%) skewX(-15deg); }
.pc-play {
position: absolute;
inset: 0;
background: linear-gradient(to top, rgba(0,0,0,.65) 0%, transparent 55%);
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
transition: opacity .22s;
border-radius: 12px;
}
.pc:hover .pc-play { opacity: 1; }
.pc-play-circle {
width: 50px;
height: 50px;
border-radius: 50%;
background: rgba(255,255,255,.14);
backdrop-filter: blur(10px);
border: 2px solid rgba(255,255,255,.55);
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-size: 1.1rem;
box-shadow: 0 0 30px rgba(0,0,0,.5);
}
.pc:hover .pc-play-circle {
animation: play-ring .65s ease-out infinite;
}
@keyframes play-ring {
to { box-shadow: 0 0 0 14px rgba(255,255,255,0); }
}
.pc-rating {
position: absolute;
top: 8px; right: 8px;
background: rgba(0,0,0,.78);
backdrop-filter: blur(7px);
color: #ffd60a;
font-size: .66rem;
font-weight: 800;
padding: 4px 8px;
border-radius: 6px;
display: flex;
align-items: center;
gap: 3px;
border: 1px solid rgba(255,214,10,.22);
}
.pc-badge {
position: absolute;
top: 8px; left: 8px;
background: linear-gradient(135deg, var(--accent), var(--accent3));
color: #fff;
font-size: .58rem;
font-weight: 900;
padding: 3px 9px;
border-radius: 5px;
text-transform: uppercase;
letter-spacing: .07em;
}
.pc-badge-new {
position: absolute;
top: 8px; left: 8px;
background: linear-gradient(135deg, #00f5ff, #0094ff);
color: #06060d;
font-size: .58rem;
font-weight: 900;
padding: 3px 9px;
border-radius: 5px;
text-transform: uppercase;
letter-spacing: .09em;
box-shadow: 0 0 12px rgba(0,245,255,.5);
}
.pc-info { padding: 12px 2px 0; }
.pc-title {
font-size: .84rem;
font-weight: 700;
color: var(--text);
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
line-height: 1.35;
margin-bottom: 4px;
}
.pc-meta { font-size: .7rem; color: var(--text3); }
/* ── TRENDING RANKED (tpc) — BIGGER ───────────────────────── */
.tpc {
flex-shrink: 0;
position: relative;
width: clamp(130px, 15vw, 185px);
cursor: pointer;
text-decoration: none;
color: inherit;
padding-left: clamp(28px,3vw,40px);
transition: transform .22s;
}
.tpc:hover { transform: translateY(-6px); }
.tpc-rank {
position: absolute;
left: -4px; bottom: -8px;
font-family: var(--font-display);
font-size: clamp(4rem,8vw,6.5rem);
font-weight: 900;
line-height: 1;
color: transparent;
-webkit-text-stroke: 2px rgba(255,255,255,.16);
z-index: 2;
user-select: none;
letter-spacing: -.05em;
}
.tpc:nth-child(1) .tpc-rank { -webkit-text-stroke: 2px rgba(255,214,10,.5); color: rgba(255,214,10,.06); text-shadow: 0 0 50px rgba(255,214,10,.25); }
.tpc:nth-child(2) .tpc-rank { -webkit-text-stroke: 2px rgba(192,192,192,.42); }
.tpc:nth-child(3) .tpc-rank { -webkit-text-stroke: 2px rgba(205,127,50,.42); }
.tpc-poster {
position: relative;
aspect-ratio: 2/3;
border-radius: 12px;
overflow: hidden;
background: var(--surface2);
box-shadow: 0 10px 32px rgba(0,0,0,.6);
border: 1px solid rgba(255,255,255,.07);
}
.tpc-poster img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .38s; }
.tpc:hover .tpc-poster img { transform: scale(1.09); }
/* Shine */
.tpc-poster::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(115deg, transparent 35%, rgba(255,255,255,.09) 50%, transparent 65%);
transform: translateX(-100%) skewX(-15deg);
transition: transform .65s ease;
pointer-events: none;
z-index: 3;
}
.tpc:hover .tpc-poster::after { transform: translateX(200%) skewX(-15deg); }
.tpc-play {
position: absolute;
inset: 0;
background: rgba(0,0,0,.5);
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
transition: opacity .22s;
}
.tpc:hover .tpc-play { opacity: 1; }
.tpc-rating {
position: absolute;
top: 8px; right: 8px;
background: rgba(0,0,0,.78);
backdrop-filter: blur(7px);
color: #ffd60a;
font-size: .64rem;
font-weight: 800;
padding: 3px 8px;
border-radius: 5px;
display: flex;
align-items: center;
gap: 3px;
border: 1px solid rgba(255,214,10,.22);
}
.tpc-info { padding: 12px 2px 0; }
.tpc-title {
font-size: .82rem;
font-weight: 700;
color: var(--text);
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
line-height: 1.35;
margin-bottom: 3px;
}
.tpc-meta { font-size: .68rem; color: var(--text3); }
/* ── CONTINUE WATCHING ──────────────────────────────────────── */
.cw-card {
flex-shrink: 0;
width: clamp(130px, 15vw, 175px);
cursor: pointer;
text-decoration: none;
color: inherit;
transition: transform .2s;
}
.cw-card:hover { transform: translateY(-5px); }
.cw-poster {
position: relative;
aspect-ratio: 2/3;
border-radius: 12px;
overflow: hidden;
background: var(--surface2);
box-shadow: 0 8px 24px rgba(0,0,0,.55);
}
.cw-poster img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .32s; }
.cw-card:hover .cw-poster img { transform: scale(1.07); }
/* Shine */
.cw-poster::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(115deg, transparent 35%, rgba(255,255,255,.08) 50%, transparent 65%);
transform: translateX(-100%) skewX(-15deg);
transition: transform .6s ease;
pointer-events: none;
z-index: 3;
}
.cw-card:hover .cw-poster::after { transform: translateX(200%) skewX(-15deg); }
.cw-prog { position: absolute; bottom: 0; left: 0; right: 0; height: 3px; background: rgba(0,0,0,.5); }
.cw-prog-fill { height: 100%; background: var(--accent); border-radius: 2px; }
.cw-pct { position: absolute; bottom: 10px; right: 9px; background: rgba(0,0,0,.76); color: rgba(255,255,255,.9); font-size: .62rem; font-weight: 700; padding: 2px 6px; border-radius: 4px; }
.cw-ep { position: absolute; top: 8px; left: 8px; background: rgba(184,77,255,.9); color: #fff; font-size: .6rem; font-weight: 800; padding: 3px 7px; border-radius: 4px; }
.cw-title { font-size: .75rem; font-weight: 600; color: var(--text); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; margin-top: 9px; line-height: 1.35; }
/* ── SPOTLIGHT EPISODES (wide landscape cards) ──────────────── */
.sl-scroll {
display: flex;
gap: clamp(12px,1.6vw,18px);
overflow-x: auto;
padding: 6px 0 20px;
scrollbar-width: none;
}
.sl-scroll::-webkit-scrollbar { display: none; }
.sl-card {
flex-shrink: 0;
width: clamp(300px,34vw,400px);
border-radius: 16px;
overflow: hidden;
position: relative;
cursor: pointer;
text-decoration: none;
color: inherit;
background: var(--surface2);
border: 1px solid rgba(255,255,255,.06);
transition: transform .22s, box-shadow .22s;
box-shadow: 0 10px 36px rgba(0,0,0,.5);
}
.sl-card:hover { transform: translateY(-6px); box-shadow: 0 20px 56px rgba(0,0,0,.65), 0 0 48px rgba(0,245,255,.05); }
.sl-thumb {
position: relative;
aspect-ratio: 16/9;
overflow: hidden;
}
.sl-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .38s; }
.sl-card:hover .sl-thumb img { transform: scale(1.06); }
.sl-thumb::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(to top, rgba(6,6,13,.95) 0%, rgba(6,6,13,.3) 50%, transparent 100%);
}
/* Shine */
.sl-thumb::before {
content: '';
position: absolute;
inset: 0;
z-index: 3;
background: linear-gradient(115deg, transparent 35%, rgba(255,255,255,.07) 50%, transparent 65%);
transform: translateX(-100%) skewX(-15deg);
transition: transform .65s ease;
pointer-events: none;
}
.sl-card:hover .sl-thumb::before { transform: translateX(220%) skewX(-15deg); }
.sl-play-overlay {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
z-index: 4;
opacity: 0;
transition: opacity .2s;
}
.sl-card:hover .sl-play-overlay { opacity: 1; }
.sl-play-circle {
width: 54px;
height: 54px;
border-radius: 50%;
background: rgba(255,255,255,.16);
backdrop-filter: blur(12px);
border: 2px solid rgba(255,255,255,.55);
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-size: 1.2rem;
}
.sl-ep-badge {
position: absolute;
bottom: 12px; left: 14px;
z-index: 5;
background: linear-gradient(135deg, var(--accent2), var(--accent));
color: #06060d;
font-size: .62rem;
font-weight: 900;
padding: 4px 11px;
border-radius: 6px;
}
.sl-body { padding: 16px 18px 18px; }
.sl-anime-name {
font-size: .72rem;
color: var(--accent2);
font-weight: 800;
margin-bottom: 5px;
letter-spacing: .05em;
text-transform: uppercase;
}
.sl-title { font-size: .95rem; font-weight: 800; color: var(--text); margin-bottom: 7px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sl-desc { font-size: .76rem; color: var(--text3); line-height: 1.55; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.sl-footer { display: flex; align-items: center; justify-content: space-between; margin-top: 11px; }
.sl-rating { display: flex; align-items: center; gap: 4px; color: #ffd60a; font-size: .74rem; font-weight: 800; }
.sl-time { font-size: .68rem; color: var(--text3); }
/* ── ONGOING — Bu Sezon ──────────────────────────────────────── */
.ongoing-card {
flex-shrink: 0;
width: clamp(170px,19vw,230px);
text-decoration: none;
color: inherit;
transition: transform .22s;
}
.ongoing-card:hover { transform: translateY(-5px); }
.ongoing-poster {
position: relative;
aspect-ratio: 2/3;
border-radius: 12px;
overflow: hidden;
background: var(--surface2);
box-shadow: 0 8px 28px rgba(0,0,0,.55), 0 0 0 1px rgba(255,45,125,.1);
border: 1px solid rgba(255,45,125,.15);
transition: box-shadow .25s;
}
.ongoing-card:hover .ongoing-poster {
box-shadow: 0 14px 44px rgba(0,0,0,.65), 0 0 36px rgba(255,45,125,.15), 0 0 0 1px rgba(255,45,125,.28);
}
.ongoing-poster img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .38s; }
.ongoing-card:hover .ongoing-poster img { transform: scale(1.07); }
/* Shine */
.ongoing-poster::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(115deg, transparent 35%, rgba(255,255,255,.08) 50%, transparent 65%);
transform: translateX(-100%) skewX(-15deg);
transition: transform .6s ease;
pointer-events: none;
z-index: 3;
}
.ongoing-card:hover .ongoing-poster::after { transform: translateX(200%) skewX(-15deg); }
.ongoing-pulse {
position: absolute;
top: 9px; left: 9px;
display: flex;
align-items: center;
gap: 5px;
background: rgba(255,45,125,.9);
color: #fff;
font-size: .56rem;
font-weight: 900;
padding: 4px 9px;
border-radius: 5px;
text-transform: uppercase;
letter-spacing: .09em;
z-index: 4;
}
.ongoing-pulse::before {
content: '';
width: 5px;
height: 5px;
border-radius: 50%;
background: #fff;
flex-shrink: 0;
animation: pulse-dot 1.6s ease infinite;
}
.ongoing-ep-count {
position: absolute;
bottom: 9px; right: 9px;
background: rgba(0,0,0,.78);
color: rgba(255,255,255,.85);
font-size: .62rem;
font-weight: 700;
padding: 3px 8px;
border-radius: 5px;
z-index: 4;
}
.ongoing-info { padding: 10px 2px 0; }
.ongoing-title { font-size: .84rem; font-weight: 700; color: var(--text); line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; margin-bottom: 3px; }
.ongoing-meta { font-size: .68rem; color: var(--text3); }
/* ── PROMO BANNER — redesigned ───────────────────────────────── */
.promo-banner {
padding: clamp(36px,4vw,52px) clamp(16px,4vw,48px) 0;
max-width: 1800px;
margin: 0 auto;
}
.promo-inner {
border-radius: 20px;
overflow: hidden;
background: linear-gradient(135deg, rgba(0,245,255,.08) 0%, rgba(255,45,125,.1) 50%, rgba(184,77,255,.08) 100%);
border: 1px solid rgba(255,255,255,.09);
padding: clamp(28px,3.5vw,48px) clamp(28px,5vw,64px);
display: flex;
align-items: center;
justify-content: space-between;
gap: 24px;
position: relative;
overflow: hidden;
}
.promo-inner::before {
content: '';
position: absolute;
inset: 0;
background:
radial-gradient(ellipse at 15% 50%, rgba(0,245,255,.1) 0%, transparent 60%),
radial-gradient(ellipse at 85% 50%, rgba(255,45,125,.08) 0%, transparent 60%),
radial-gradient(ellipse at 50% -20%, rgba(184,77,255,.07) 0%, transparent 55%);
pointer-events: none;
}
/* Animated glow orb */
.promo-inner::after {
content: '';
position: absolute;
width: 320px;
height: 320px;
border-radius: 50%;
background: radial-gradient(circle, rgba(0,245,255,.07), transparent);
top: -80px; right: 8%;
animation: promo-pulse 7s ease-in-out infinite;
pointer-events: none;
}
@keyframes promo-pulse {
0%, 100% { transform: translate(-10%,-20%) scale(1); opacity: .7; }
50% { transform: translate(15%,15%) scale(1.25); opacity: .25; }
}
.promo-text { position: relative; z-index: 1; }
.promo-label { font-size: .65rem; font-weight: 900; text-transform: uppercase; letter-spacing: .2em; color: var(--accent2); margin-bottom: 12px; }
.promo-title {
font-family: var(--font-display);
font-size: clamp(1.3rem,2.8vw,2rem);
font-weight: 900;
color: #fff;
margin-bottom: 10px;
line-height: 1.1;
background: linear-gradient(135deg,#fff 0%,var(--accent2) 60%,var(--accent) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.promo-sub { font-size: .88rem; color: rgba(240,244,255,.6); max-width: 440px; line-height: 1.6; }
.promo-cta {
position: relative;
z-index: 1;
display: inline-flex;
align-items: center;
gap: 9px;
flex-shrink: 0;
padding: 15px 30px;
border-radius: 12px;
background: linear-gradient(135deg, var(--accent2), var(--accent));
color: #06060d;
font-size: .9rem;
font-weight: 900;
text-decoration: none;
transition: transform .15s, box-shadow .18s;
box-shadow: 0 0 32px rgba(0,245,255,.35), 0 6px 24px rgba(0,0,0,.3);
white-space: nowrap;
letter-spacing: .03em;
}
.promo-cta:hover { transform: translateY(-3px); box-shadow: 0 0 48px rgba(0,245,255,.5), 0 8px 32px rgba(0,0,0,.4); }
/* ── MOVIES (mv-card) — wider, better ───────────────────────── */
.mv-card {
flex-shrink: 0;
width: clamp(220px,26vw,310px);
text-decoration: none;
color: inherit;
transition: transform .22s;
border-radius: 14px;
overflow: hidden;
background: var(--surface);
border: 1px solid rgba(255,255,255,.06);
box-shadow: 0 8px 28px rgba(0,0,0,.45);
}
.mv-card:hover { transform: translateY(-6px); box-shadow: 0 18px 48px rgba(0,0,0,.6); }
.mv-thumb { position: relative; aspect-ratio: 16/9; overflow: hidden; background: var(--surface2); }
.mv-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .38s; }
.mv-card:hover .mv-thumb img { transform: scale(1.07); }
.mv-thumb::after { content: ''; position: absolute; inset: 0; background: linear-gradient(to top, rgba(6,6,13,.9), transparent 55%); }
/* Shine */
.mv-thumb::before {
content: '';
position: absolute;
inset: 0;
z-index: 3;
background: linear-gradient(115deg, transparent 35%, rgba(255,255,255,.07) 50%, transparent 65%);
transform: translateX(-100%) skewX(-15deg);
transition: transform .65s ease;
pointer-events: none;
}
.mv-card:hover .mv-thumb::before { transform: translateX(220%) skewX(-15deg); }
.mv-badge { position: absolute; top: 9px; left: 9px; background: linear-gradient(135deg,var(--accent),var(--accent3)); color: #fff; font-size: .58rem; font-weight: 900; padding: 3px 9px; border-radius: 5px; text-transform: uppercase; letter-spacing: .06em; z-index: 2; }
.mv-rating { position: absolute; top: 9px; right: 9px; background: rgba(0,0,0,.76); color: #ffd60a; font-size: .65rem; font-weight: 800; padding: 4px 8px; border-radius: 5px; z-index: 2; display: flex; align-items: center; gap: 3px; border: 1px solid rgba(255,214,10,.22); }
.mv-play { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; z-index: 4; opacity: 0; transition: opacity .2s; }
.mv-card:hover .mv-play { opacity: 1; }
.mv-play-circle { width: 52px; height: 52px; border-radius: 50%; background: rgba(255,255,255,.16); backdrop-filter: blur(12px); border: 2px solid rgba(255,255,255,.55); display: flex; align-items: center; justify-content: center; color: #fff; font-size: 1.1rem; }
.mv-body { padding: 14px 16px 16px; border-top: 1px solid rgba(255,255,255,.04); }
.mv-title { font-size: .92rem; font-weight: 800; color: var(--text); margin-bottom: 5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mv-desc { font-size: .74rem; color: var(--text3); line-height: 1.55; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.mv-year { font-size: .68rem; color: var(--text3); margin-top: 7px; }
/* ── GENRE GRID — redesigned ────────────────────────────────── */
.genre-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(165px, 1fr));
gap: 14px;
}
.gc {
position: relative;
overflow: hidden;
display: flex;
align-items: center;
padding: 18px 16px;
border-radius: 14px;
min-height: 82px;
background: linear-gradient(145deg, rgba(17,17,31,.95), rgba(10,10,22,.98));
border: 1px solid rgba(255,255,255,.07);
color: #fff;
font-size: .88rem;
font-weight: 700;
text-decoration: none;
transition: all .22s;
gap: 13px;
}
.gc:hover {
border-color: rgba(0,245,255,.32);
transform: translateY(-4px);
box-shadow: 0 14px 40px rgba(0,0,0,.55), 0 0 28px rgba(0,245,255,.07);
}
/* Color glow on hover */
.gc::before {
content: '';
position: absolute;
inset: 0;
background: radial-gradient(ellipse at 10% 90%, var(--gc, #00f5ff) 0%, transparent 60%);
opacity: 0;
transition: opacity .28s;
}
.gc:hover::before { opacity: .09; }
.gc-icon {
width: 40px;
height: 40px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1rem;
flex-shrink: 0;
transition: background .18s, transform .18s;
}
.gc:hover .gc-icon { transform: scale(1.1) rotate(-5deg); }
.gc-name { line-height: 1.2; font-size: .88rem; }
.gc-count { font-size: .65rem; color: var(--text3); font-weight: 500; margin-top: 3px; }
/* ── KEŞFİYAT FEATURE SECTION ───────────────────────────────── */
.kf-section {
position: relative;
overflow: hidden;
padding: 0 20px 40px;
max-width: 1220px;
margin: 36px auto 0;
}
.kf-inner {
display: grid;
grid-template-columns: 1fr 340px;
gap: 48px;
align-items: center;
background: linear-gradient(125deg,
rgba(0,245,255,.055) 0%,
rgba(184,77,255,.05) 55%,
rgba(255,45,125,.045) 100%
);
border: 1px solid rgba(0,245,255,.14);
border-radius: 24px;
padding: 44px 44px 44px 52px;
position: relative;
overflow: hidden;
}
.kf-inner::before {
content: '';
position: absolute;
inset: 0;
background:
radial-gradient(ellipse 70% 90% at 95% 50%, rgba(0,245,255,.05) 0%, transparent 60%),
radial-gradient(ellipse 50% 70% at 5% 80%, rgba(184,77,255,.04) 0%, transparent 55%);
pointer-events: none;
}
/* Text side */
.kf-text { position: relative; z-index: 2; }
.kf-label {
display: inline-block;
font-size: .6rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: .18em;
color: var(--accent2);
background: rgba(0,245,255,.1);
border: 1px solid rgba(0,245,255,.22);
border-radius: 999px;
padding: 4px 14px;
margin-bottom: 14px;
}
.kf-title {
font-family: var(--font-display);
font-size: clamp(1.7rem, 4vw, 2.5rem);
font-weight: 900;
color: var(--text);
line-height: 1.12;
margin: 0 0 16px;
letter-spacing: -.01em;
}
.kf-title-grad {
background: linear-gradient(90deg, var(--accent2), var(--accent3));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.kf-desc {
font-size: .88rem;
color: var(--text2);
line-height: 1.65;
margin: 0 0 22px;
max-width: 400px;
}
.kf-pills {
display: flex;
gap: 10px;
flex-wrap: wrap;
margin-bottom: 28px;
}
.kf-pill {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: .72rem;
padding: 6px 14px;
border-radius: 999px;
background: var(--surface2);
border: 1px solid var(--border);
color: var(--text2);
font-weight: 500;
}
.kf-cta {
display: inline-flex;
align-items: center;
gap: 10px;
padding: 13px 28px;
border-radius: 999px;
background: linear-gradient(135deg, var(--accent2), rgba(0,245,255,.7));
color: #06060d;
font-weight: 800;
font-size: .88rem;
text-decoration: none;
letter-spacing: .04em;
transition: box-shadow .25s, transform .2s, gap .2s;
box-shadow: 0 0 28px rgba(0,245,255,.22), 0 4px 14px rgba(0,0,0,.25);
}
.kf-cta:hover {
box-shadow: 0 0 48px rgba(0,245,255,.36), 0 4px 14px rgba(0,0,0,.3);
transform: translateY(-2px);
gap: 14px;
color: #06060d;
}
.kf-cta-arrow { font-size: 1rem; }
/* Visual side */
.kf-visual {
position: relative;
height: 240px;
z-index: 2;
}
.kf-cards {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 160px;
height: 200px;
}
.kf-card {
position: absolute;
inset: 0;
border-radius: 18px;
overflow: hidden;
border: 1.5px solid rgba(255,255,255,.08);
transform-origin: center 110%;
}
.kf-c3 {
background: linear-gradient(145deg, #14142a, #1a1a30);
transform: rotate(-14deg) translateX(-18px) translateY(6px);
opacity: .35;
}
.kf-c2 {
background: linear-gradient(145deg, rgba(184,77,255,.15), rgba(0,245,255,.08));
border-color: rgba(184,77,255,.25);
transform: rotate(-6deg) translateX(-8px);
opacity: .7;
}
.kf-c1 {
background: linear-gradient(160deg, rgba(0,245,255,.14), rgba(0,245,255,.04));
border-color: rgba(0,245,255,.32);
transform: rotate(4deg) translateX(12px) translateY(-6px);
box-shadow: 0 12px 40px rgba(0,0,0,.5), 0 0 28px rgba(0,245,255,.1);
display: flex;
flex-direction: column;
justify-content: flex-end;
padding: 14px;
animation: kfFloat 3.8s ease-in-out infinite;
}
@keyframes kfFloat {
0%,100% { transform: rotate(4deg) translateX(12px) translateY(-6px); }
50% { transform: rotate(4deg) translateX(12px) translateY(-14px); }
}
.kf-card-shine {
position: absolute;
inset: 0;
background: linear-gradient(135deg, rgba(255,255,255,.06) 0%, transparent 50%);
pointer-events: none;
}
.kf-card-body-demo { position: relative; z-index: 2; }
.kf-card-tags {
display: flex;
gap: 5px;
margin-bottom: 8px;
}
.kf-card-tags span {
font-size: .52rem;
padding: 2px 8px;
border-radius: 999px;
background: rgba(0,245,255,.1);
border: 1px solid rgba(0,245,255,.2);
color: var(--accent2);
font-weight: 500;
}
.kf-card-title-demo {
font-size: .88rem;
font-weight: 800;
color: #fff;
margin-bottom: 5px;
letter-spacing: .08em;
}
.kf-card-meta-demo {
display: flex;
align-items: center;
gap: 5px;
font-size: .65rem;
color: rgba(240,244,255,.5);
}
.kf-like-stamp {
position: absolute;
top: 14px;
right: 14px;
width: 34px; height: 34px;
border-radius: 50%;
background: rgba(0,245,255,.15);
border: 1.5px solid rgba(0,245,255,.4);
display: flex;
align-items: center;
justify-content: center;
color: var(--accent2);
font-size: .85rem;
animation: kfHeartbeat 2s ease-in-out infinite;
}
@keyframes kfHeartbeat {
0%,100% { transform: scale(1); box-shadow: 0 0 0 rgba(0,245,255,0); }
50% { transform: scale(1.15); box-shadow: 0 0 16px rgba(0,245,255,.3); }
}
/* Floating like/skip badges */
.kf-badge {
position: absolute;
font-size: .68rem;
font-weight: 700;
padding: 6px 13px;
border-radius: 999px;
display: flex;
align-items: center;
gap: 5px;
letter-spacing: .04em;
backdrop-filter: blur(8px);
}
.kf-badge-like {
bottom: 18px;
right: 10px;
background: rgba(0,245,255,.12);
border: 1.5px solid rgba(0,245,255,.35);
color: var(--accent2);
animation: kfBadgeLike 3.8s ease-in-out infinite;
}
.kf-badge-skip {
top: 20px;
left: 4px;
background: rgba(255,45,125,.1);
border: 1.5px solid rgba(255,45,125,.3);
color: var(--accent);
animation: kfBadgeSkip 3.8s ease-in-out infinite;
}
@keyframes kfBadgeLike {
0%,100% { opacity: .5; transform: translateY(0); }
50% { opacity: 1; transform: translateY(-4px); }
}
@keyframes kfBadgeSkip {
0%,100% { opacity: .4; transform: translateY(0); }
50% { opacity: .9; transform: translateY(4px); }
}
@media (max-width: 900px) {
.kf-inner { grid-template-columns: 1fr; padding: 32px 28px; gap: 32px; }
.kf-visual { height: 200px; }
}
@media (max-width: 560px) {
.kf-section { padding: 0 12px 32px; margin-top: 24px; }
.kf-inner { padding: 26px 20px; }
.kf-title { font-size: 1.6rem; }
.kf-visual { height: 170px; }
}
/* ── REVEAL ANIMATIONS ──────────────────────────────────────── */
.home-section,.spot-section,.kf-section { opacity: 0; transform: translateY(28px); transition: opacity .65s cubic-bezier(.22,1,.36,1), transform .65s cubic-bezier(.22,1,.36,1); }
.home-section.visible,.home-section.reveal.visible,.spot-section.visible,.kf-section.visible { opacity: 1; transform: none; }
/* ── RESPONSIVE ─────────────────────────────────────────────── */
@media (max-width: 900px) {
.hero-poster-right { display: none; }
.spot-grid { grid-template-columns: repeat(2,1fr); }
.promo-inner { flex-direction: column; text-align: center; }
.promo-sub { max-width: 100%; }
}
@media (max-width: 768px) {
.hero { height: clamp(360px,82vw,520px); }
.hero-content { max-width: 100%; padding-right: clamp(20px,5vw,48px); }
.hero-title { font-size: clamp(1.5rem,5.5vw,2.2rem); }
.hero-desc { display: none; }
.hero-nav { display: none; }
.h-thumb { width: 38px; height: 56px; }
.hero-thumbs { gap: 6px; bottom: 16px; }
.pc { width: clamp(115px,31vw,155px); }
.tpc { width: clamp(100px,28vw,140px); padding-left: clamp(22px,2.5vw,32px); }
.tpc-rank { font-size: clamp(3.2rem,7vw,5rem); }
.sl-card { width: clamp(260px,75vw,340px); }
.ongoing-card { width: clamp(150px,40vw,200px); }
.mv-card { width: clamp(230px,65vw,300px); }
.hs-title { font-size: .92rem; }
.spot-grid { grid-template-columns: 1fr; }
.genre-grid { grid-template-columns: repeat(auto-fill,minmax(140px,1fr)); gap: 10px; }
}
@media (max-width: 480px) {
.hero-content { padding: calc(var(--nav-h) + 8px) 16px 30px; }
.hero-tags { display: none; }
.hero-title { font-size: 1.35rem; }
.hero-meta { font-size: .8rem; gap: 8px; }
.hero-thumbs { display: none; }
.pc { width: clamp(110px,30vw,145px); }
.tpc { width: clamp(95px,27vw,130px); padding-left: 24px; }
.tpc-rank { font-size: clamp(3rem,6.5vw,4.2rem); }
.cw-card { width: clamp(120px,33vw,155px); }
.ongoing-card { width: clamp(145px,38vw,180px); }
.hs-title { font-size: .88rem; }
.hs-inner { padding: 0 12px; }
.spot-inner { padding: 0 12px; }
.promo-banner { padding-left: 12px; padding-right: 12px; }
.ticker-strip { height: 40px; }
.ticker-label { padding: 0 12px; font-size: .58rem; }
.ticker-item { font-size: .68rem; padding: 0 14px; }
}
/* ── Home end spacer ────────────────────────────────────────── */
.home-end { height: 80px; }
/* ═══════════════════════════════════════════════════════════
ANIMEXE 3.1 — ENHANCED UI / UX
════════════════════════════════════════════════════════════ */
/* ── STRONGER SECTION HEADERS ─────────────────────────────── */
.hs-title {
font-size: clamp(1.15rem, 2.2vw, 1.52rem);
letter-spacing: .03em;
text-transform: none;
gap: 14px;
}
.hs-title::before {
width: 5px;
height: 30px;
border-radius: 4px;
box-shadow: 0 0 18px rgba(0,245,255,.75), 0 0 28px rgba(255,45,125,.45);
}
.hs-title.fire::before { box-shadow: 0 0 18px rgba(255,100,0,.75), 0 0 28px rgba(255,60,0,.3); }
.hs-title.gold::before { box-shadow: 0 0 18px rgba(255,210,0,.75), 0 0 28px rgba(255,150,0,.3); }
.hs-title.purple::before{ box-shadow: 0 0 18px rgba(192,132,252,.75), 0 0 28px rgba(124,58,237,.4); }
.hs-title i { filter: drop-shadow(0 0 5px currentColor); }
.hs-pill {
display: inline-flex; align-items: center; gap: 5px;
font-size: .58rem; font-weight: 800; padding: 3px 10px;
border-radius: 999px; letter-spacing: .1em; text-transform: uppercase;
}
.hs-pill-live {
background: rgba(255,45,125,.12); border: 1px solid rgba(255,45,125,.3); color: #ff7eb3;
}
.hs-pill-live::before {
content: ''; width: 5px; height: 5px; border-radius: 50%;
background: #ff2d7d; box-shadow: 0 0 6px #ff2d7d;
animation: pulse-dot 1.8s ease infinite;
}
.hs-pill-new {
background: rgba(0,245,255,.1); border: 1px solid rgba(0,245,255,.25); color: var(--accent2);
}
/* ── PLATFORM STATS STRIP ─────────────────────────────────── */
/* ── GENRE NAV STRIP ─────────────────────────────────────────── */
.gnav-strip {
padding: clamp(14px,2vw,22px) 0;
max-width: 1800px;
margin: 0 auto;
position: relative;
}
.gnav-inner {
display: flex;
gap: 8px;
overflow-x: auto;
padding: 4px clamp(16px,4vw,48px) 10px;
scrollbar-width: none;
mask-image: linear-gradient(to right, transparent 0, #000 40px, #000 calc(100% - 40px), transparent 100%);
-webkit-mask-image: linear-gradient(to right, transparent 0, #000 40px, #000 calc(100% - 40px), transparent 100%);
}
.gnav-inner::-webkit-scrollbar { display: none; }
.gnav-pill {
flex-shrink: 0;
display: inline-flex;
align-items: center;
gap: 7px;
padding: 9px 18px;
border-radius: 999px;
background: rgba(255,255,255,.05);
border: 1px solid rgba(255,255,255,.09);
color: rgba(240,244,255,.65);
font-size: .8rem;
font-weight: 600;
text-decoration: none;
transition: all .18s cubic-bezier(.22,1,.36,1);
white-space: nowrap;
letter-spacing: -.01em;
}
.gnav-pill:hover {
background: color-mix(in srgb, var(--gc, #00f5ff) 13%, rgba(255,255,255,.04));
border-color: color-mix(in srgb, var(--gc, #00f5ff) 38%, transparent);
color: #fff;
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(0,0,0,.3), 0 0 16px color-mix(in srgb, var(--gc, #00f5ff) 10%, transparent);
}
.gnav-pill i {
color: var(--gc, #00f5ff);
font-size: .82rem;
transition: transform .18s;
}
.gnav-pill:hover i { transform: scale(1.2); }
/* ── REDESIGNED GENRE TILES ───────────────────────────────── */
.genre-grid {
grid-template-columns: repeat(auto-fill, minmax(175px, 1fr));
gap: clamp(10px,1.4vw,16px);
}
.gc {
flex-direction: column;
align-items: flex-start;
padding: clamp(16px,2vw,22px) clamp(14px,1.8vw,20px) clamp(14px,1.8vw,18px);
min-height: 110px;
gap: 0;
border-radius: 16px;
}
.gc:hover {
transform: translateY(-5px);
box-shadow: 0 16px 48px rgba(0,0,0,.6), 0 0 32px rgba(0,245,255,.07);
}
.gc-icon {
width: 46px; height: 46px;
border-radius: 13px;
font-size: 1.1rem;
margin-bottom: 14px;
flex-shrink: 0;
transition: transform .22s;
}
.gc:hover .gc-icon { transform: scale(1.12) rotate(-6deg); }
.gc-name { font-size: .92rem; font-weight: 800; line-height: 1.2; letter-spacing: -.01em; }
.gc-count { font-size: .66rem; margin-top: 5px; }
.gc-arrow {
position: absolute; right: 14px; bottom: 14px;
font-size: .8rem; color: rgba(255,255,255,.15);
transition: color .2s, transform .22s;
font-style: normal; font-weight: 700; line-height: 1;
}
.gc:hover .gc-arrow { color: var(--gc,#00f5ff); transform: translateX(5px); }
@media (max-width:480px) {
.genre-grid { grid-template-columns: repeat(auto-fill, minmax(145px,1fr)); gap: 9px; }
.gc { min-height: 92px; padding: 14px 12px; }
.gc-icon { width: 38px; height: 38px; margin-bottom: 10px; }
}
/* ── HERO PROGRESS BAR ────────────────────────────────────── */
.hero-prog {
position: absolute; bottom: 0; left: 0; right: 0;
height: 2.5px; z-index: 8;
background: rgba(255,255,255,.07);
pointer-events: none;
}
.hero-prog-fill {
height: 100%;
background: linear-gradient(to right, var(--accent2), var(--accent));
box-shadow: 0 0 8px rgba(0,245,255,.5);
transition: width .12s linear;
width: 0%;
}
/* ── SCROLL ROW ARROW NAVIGATION ─────────────────────────── */
.scroll-row-wrap {
position: relative;
}
.scroll-row-wrap .sarr {
position: absolute;
top: calc(50% - 14px);
transform: translateY(-50%);
z-index: 5;
width: 40px; height: 40px;
border-radius: 50%;
border: 1px solid rgba(255,255,255,.16);
background: rgba(6,6,13,.82);
backdrop-filter: blur(12px);
color: rgba(255,255,255,.85);
font-size: .9rem;
cursor: pointer;
display: flex; align-items: center; justify-content: center;
transition: background .18s, border-color .18s, opacity .2s, transform .18s;
opacity: 0; pointer-events: none;
}
.scroll-row-wrap:hover .sarr { opacity: 1; pointer-events: auto; }
.scroll-row-wrap .sarr:hover {
background: rgba(255,45,125,.55);
border-color: rgba(255,45,125,.65);
transform: translateY(-50%) scale(1.1);
}
.scroll-row-wrap .sarr-prev { left: -4px; }
.scroll-row-wrap .sarr-next { right: -4px; }
/* ── IMPROVED POSTER CARD ─────────────────────────────────── */
.pc-info { padding: 12px 3px 0; }
.pc-title { font-size: .87rem; letter-spacing: -.01em; }
.pc-genre-strip {
display: flex; gap: 4px; flex-wrap: nowrap; overflow: hidden;
margin-top: 5px;
}
.pc-genre-pill {
font-size: .57rem; font-weight: 700;
padding: 2px 7px; border-radius: 999px;
background: rgba(255,255,255,.06);
border: 1px solid rgba(255,255,255,.1);
color: rgba(255,255,255,.38);
white-space: nowrap; letter-spacing: .04em;
flex-shrink: 0;
}
.pc-meta { font-size: .7rem; color: var(--text3); margin-top: 3px; }
/* ── BETTER EPISODE CARDS ─────────────────────────────────── */
.sl-card {
border-radius: 18px;
}
.sl-body {
background: linear-gradient(180deg, rgba(10,10,22,.8) 0%, rgba(6,6,13,.95) 100%);
}
.sl-anime-name { letter-spacing: .04em; }
.sl-title { font-size: .96rem; font-weight: 800; letter-spacing: -.01em; }
/* ── IMPROVED PROMO BANNER ────────────────────────────────── */
.promo-inner {
background: linear-gradient(135deg,
rgba(0,245,255,.06) 0%,
rgba(0,245,255,.02) 28%,
rgba(255,45,125,.08) 58%,
rgba(184,77,255,.06) 100%) !important;
border: 1px solid rgba(0,245,255,.2) !important;
box-shadow: 0 0 80px rgba(0,245,255,.04), 0 0 40px rgba(255,45,125,.03);
}
.promo-title {
font-size: clamp(1.45rem, 3vw, 2.1rem) !important;
}
/* ── TRENDING RANK GOLD GLOW ─────────────────────────────── */
.tpc:nth-child(1) .tpc-poster {
box-shadow: 0 10px 32px rgba(0,0,0,.65), 0 0 30px rgba(255,214,10,.12);
}
.tpc:nth-child(2) .tpc-poster {
box-shadow: 0 10px 32px rgba(0,0,0,.6), 0 0 20px rgba(192,192,192,.08);
}
/* ── BETTER ONGOING "CANLIYAYIN" ─────────────────────────── */
.ongoing-pulse {
background: linear-gradient(135deg, #ff2d7d, #ff6b2b);
box-shadow: 0 2px 12px rgba(255,45,125,.35);
}
/* ── SPOT CARD IMPROVEMENTS ───────────────────────────────── */
.spot-card {
border-radius: 18px;
}
.spot-card:hover {
transform: translateY(-7px) scale(1.01);
box-shadow: 0 28px 72px rgba(0,0,0,.75), 0 0 56px rgba(0,245,255,.07);
}
.spot-title { font-size: clamp(.92rem,1.6vw,1.2rem); }
/* ── HOME SECTION SEPARATOR ───────────────────────────────── */
.home-section + .home-section::before {
background: linear-gradient(90deg, transparent, rgba(0,245,255,.09), rgba(255,45,125,.06), transparent);
margin-bottom: 0;
}
/* ── SCROLL EDGE FADE (smoother) ─────────────────────────── */
.h-scroll {
mask-image: linear-gradient(to right, transparent 0, #000 22px, #000 calc(100% - 44px), transparent 100%);
-webkit-mask-image: linear-gradient(to right, transparent 0, #000 22px, #000 calc(100% - 44px), transparent 100%);
padding-left: 4px;
}
/* ═══════════════════════════════════════════════════════════════
ANIMEXE 4.0 — RADICAL VISUAL REDESIGN
Editorial Headers • Horizontal Genre Tiles • Featured #1
════════════════════════════════════════════════════════════════ */
/* ── EDITORIAL SECTION HEADERS ─────────────────────────────── */
.hs-title {
font-size: clamp(1.25rem, 2.1vw, 1.65rem);
text-transform: none;
letter-spacing: -.04em;
font-weight: 900;
line-height: 1;
color: #f0f4ff;
}
.hs-title::before { display: none !important; }
.hs-hdr {
margin-bottom: 28px;
padding-bottom: 16px;
border-bottom: 1px solid rgba(255,255,255,.058);
position: relative;
}
.hs-hdr::after {
content: '';
position: absolute;
bottom: -1px; left: 0;
height: 2px; width: 52px;
border-radius: 2px;
background: linear-gradient(90deg, rgba(0,245,255,.75), rgba(255,45,125,.55), transparent);
}
/* ── SECTION SUBTITLE ───────────────────────────────────────── */
.hs-sub {
display: block;
font-size: .77rem;
color: rgba(240,244,255,.34);
font-weight: 400;
letter-spacing: 0;
margin-top: 6px;
line-height: 1.3;
}
/* ── FEATURED #1 TRENDING CARD ──────────────────────────────── */
.tpc:first-child { width: clamp(178px, 21vw, 255px); }
.tpc:nth-child(1) .tpc-rank {
font-size: clamp(5.5rem, 11vw, 9rem);
-webkit-text-stroke-width: 3px;
}
.tpc:nth-child(1) .tpc-poster {
box-shadow: 0 18px 64px rgba(0,0,0,.75), 0 0 52px rgba(255,214,10,.15) !important;
border-color: rgba(255,214,10,.22) !important;
}
.tpc:nth-child(1) .tpc-title { font-size: .9rem; }
/* ── BIGGER POSTER + ONGOING CARDS ─────────────────────────── */
.pc { width: clamp(155px, 18vw, 210px); }
.pc-poster { border-radius: 14px; }
.ongoing-card { width: clamp(175px, 20vw, 245px); }
/* ── GENRE GRID — HORIZONTAL ROW TILES ─────────────────────── */
.genre-grid {
display: grid !important;
grid-template-columns: repeat(2, 1fr) !important;
gap: 9px !important;
}
@media (min-width: 560px) { .genre-grid { grid-template-columns: repeat(3, 1fr) !important; } }
@media (min-width: 900px) { .genre-grid { grid-template-columns: repeat(4, 1fr) !important; } }
@media (min-width: 1200px) { .genre-grid { grid-template-columns: repeat(5, 1fr) !important; } }
@media (min-width: 1600px) { .genre-grid { grid-template-columns: repeat(6, 1fr) !important; } }
.gc {
flex-direction: row !important;
align-items: center !important;
padding: 0 18px !important;
height: 80px !important;
min-height: unset !important;
gap: 13px !important;
border-radius: 14px !important;
background: linear-gradient(to right,
color-mix(in srgb, var(--gc, #00f5ff) 12%, rgba(11,11,28,1)),
rgba(7,7,18,1)
) !important;
border: 1px solid color-mix(in srgb, var(--gc, #00f5ff) 20%, transparent) !important;
}
.gc:hover {
transform: translateY(-3px) scale(1.018) !important;
border-color: color-mix(in srgb, var(--gc, #00f5ff) 46%, transparent) !important;
box-shadow: 0 12px 36px rgba(0,0,0,.5), 0 0 26px color-mix(in srgb, var(--gc, #00f5ff) 12%, transparent) !important;
}
.gc::before {
background: radial-gradient(ellipse at 5% 50%, var(--gc, #00f5ff) 0%, transparent 55%) !important;
opacity: 0;
transition: opacity .25s;
}
.gc:hover::before { opacity: .07 !important; }
.gc-icon {
width: 42px !important; height: 42px !important;
border-radius: 11px !important;
margin-bottom: 0 !important;
flex-shrink: 0;
font-size: 1.05rem !important;
background: color-mix(in srgb, var(--gc, #00f5ff) 16%, rgba(255,255,255,.04)) !important;
border: 1px solid color-mix(in srgb, var(--gc, #00f5ff) 22%, transparent) !important;
transition: transform .2s;
}
.gc:hover .gc-icon { transform: scale(1.15) rotate(-8deg) !important; }
.gc-text { flex: 1; min-width: 0; }
.gc-name { font-size: .9rem; font-weight: 800; line-height: 1.2; letter-spacing: -.01em; }
.gc-count { margin-top: 2px !important; font-size: .64rem; color: rgba(240,244,255,.38) !important; }
.gc-arrow {
position: static !important;
right: auto !important; bottom: auto !important;
margin-left: auto !important;
font-size: 1.2rem;
font-style: normal; font-weight: 700; line-height: 1;
color: color-mix(in srgb, var(--gc, #00f5ff) 55%, transparent);
opacity: 0;
transform: translateX(-6px);
transition: opacity .2s, transform .2s;
}
.gc:hover .gc-arrow { opacity: 1 !important; transform: translateX(2px) !important; }
/* ── SECTION SPACING ────────────────────────────────────────── */
.home-section { padding-top: clamp(44px, 5.5vw, 68px); }
/* ── SPOTLIGHT HEADER ───────────────────────────────────────── */
.spot-hdr .hs-title { font-size: clamp(1.25rem, 2.1vw, 1.65rem); text-transform: none; letter-spacing: -.04em; }
.spot-hdr .hs-title::before { display: none !important; }
.spot-hdr {
padding-bottom: 16px;
border-bottom: 1px solid rgba(255,255,255,.058);
margin-bottom: 28px;
position: relative;
}
.spot-hdr::after {
content: '';
position: absolute;
bottom: -1px; left: 0;
height: 2px; width: 52px;
border-radius: 2px;
background: linear-gradient(90deg, rgba(255,107,43,.8), rgba(255,214,10,.5), transparent);
}
/* ── MOBILE ADJUSTMENTS ─────────────────────────────────────── */
@media (max-width: 560px) {
.genre-grid { grid-template-columns: repeat(2, 1fr) !important; gap: 7px !important; }
.gc { height: 68px !important; padding: 0 12px !important; gap: 9px !important; }
.gc-icon { width: 34px !important; height: 34px !important; font-size: .85rem !important; }
.gc-name { font-size: .8rem !important; }
.gc-count { display: none !important; }
.hs-title { font-size: 1.12rem !important; }
.home-section { padding-top: 36px !important; }
}
</style>
@endpush
@section('content')
{{-- ═══ HERO ══════════════════════════════════════════════════════ --}}
@if($featured->count())
<section class="hero">
<canvas id="hero-canvas" aria-hidden="true"></canvas>
<div class="hero-slides" id="hero-slides">
@foreach($featured as $i=>$a)
<div class="hero-slide {{ $i===0?'on':'' }}"
style="background-image:url('{{ $a->bannerUrl ?: $a->coverUrl }}')"
data-idx="{{ $i }}"></div>
@endforeach
</div>
<div class="hero-content" id="hero-content">
@php $a0=$featured->first() @endphp
<div class="hero-tags" id="hero-tags">
@if($a0->status==='ongoing')
<span class="hero-status-badge">Devam Ediyor</span>
@elseif($a0->status==='upcoming')
<span class="hero-status-badge">Yakında</span>
@endif
@foreach(($a0->genres ?? collect())->take(3) as $g)
<span class="hero-tag">{{ $g->name }}</span>
@endforeach
</div>
<h1 class="hero-title" id="hero-title">{{ $a0->title }}</h1>
<div class="hero-meta" id="hero-meta">
@if($a0->rating)<span class="hstar"><i class="bi bi-star-fill" style="font-size:.72rem"></i>{{ number_format($a0->rating,1) }}</span><span class="hero-sep"></span>@endif
@if($a0->release_year)<span>{{ $a0->release_year }}</span>@endif
@if($a0->episode_count)<span class="hero-sep"></span><span>{{ $a0->episode_count }} Bölüm</span>@endif
@if($a0->studio)<span class="hero-sep"></span><span style="color:rgba(240,244,255,.42);font-size:.8rem">{{ $a0->studio }}</span>@endif
</div>
@if($a0->description)
<p class="hero-desc" id="hero-desc">{{ $a0->description }}</p>
@endif
<div class="hero-btns" id="hero-btns">
@php
$s0=$a0->seasons->sortBy('season_number')->first();
$e0=$s0?$a0->episodes->where('season_id',$s0->id)->where('is_published',true)->sortBy('episode_number')->first():null;
@endphp
@if($s0&&$e0)
<a href="{{ route('watch',[$a0->slug,$s0->season_number,$e0->episode_number]) }}" class="h-play-btn">
<i class="bi bi-play-fill" style="font-size:1.1rem"></i> İzlemeye Başla
</a>
@endif
<a href="{{ $a0->detailUrl }}" class="h-info-btn">
<i class="bi bi-info-circle"></i> Detaylar
</a>
</div>
</div>
@if($featured->count()>1)
<button class="hero-nav hero-prev" id="hero-prev" aria-label="Önceki"><i class="bi bi-chevron-left"></i></button>
<button class="hero-nav hero-next" id="hero-next" aria-label="Sonraki"><i class="bi bi-chevron-right"></i></button>
@endif
<div class="hero-poster-right" id="hero-poster-right">
@if($featured->first()?->coverUrl)
<img src="{{ $featured->first()->coverUrl }}" alt="{{ $featured->first()->title }}" id="hero-poster-img" fetchpriority="high">
@endif
</div>
@if($featured->count()>1)
<div class="hero-thumbs" id="hero-thumbs">
@foreach($featured as $i=>$a)
<button class="h-thumb {{ $i===0?'on':'' }}" data-idx="{{ $i }}"
style="background-image:url('{{ $a->coverUrl }}')"
aria-label="{{ $a->title }}"></button>
@endforeach
</div>
@endif
<div class="hero-prog"><div class="hero-prog-fill" id="hero-prog-fill"></div></div>
</section>
@endif
{{-- ═══ TICKER ══════════════════════════════════════════════════════ --}}
@php
$tickerEps = \App\Models\Episode::with(['anime','season'])
->where('is_published',true)
->latest()->take(16)->get()
->filter(fn($e) => $e->anime && $e->season);
$features = [
['icon'=>'check-circle-fill','color'=>'#4ade80','text'=>'Türkçe Altyazı'],
['icon'=>'stars','color'=>'#c084fc','text'=>'AI Anime Önerileri'],
['icon'=>'shield-fill-check','color'=>'#00f5ff','text'=>'Reklamsız İzle'],
['icon'=>'bell-fill','color'=>'#ffd60a','text'=>'Yeni Bölüm Bildirimi'],
['icon'=>'trophy-fill','color'=>'#fb923c','text'=>'Başarım Sistemi'],
['icon'=>'bookmark-heart-fill','color'=>'#f472b6','text'=>'Kişisel İzleme Listesi'],
['icon'=>'camera-video-fill','color'=>'#60a5fa','text'=>'HD Kalite'],
];
@endphp
<div class="ticker-strip">
<div class="ticker-label"><span class="ticker-dot"></span> Son Dakika</div>
<div class="ticker-track-wrap">
@for($pass=0;$pass<2;$pass++)
<div class="ticker-track">
@foreach($tickerEps as $i=>$ep)
<span class="ticker-item">
<span class="ticker-badge new">YENİ</span>
<a href="{{ route('watch',[$ep->anime->slug,$ep->season->season_number,$ep->episode_number]) }}">{{ $ep->anime->title }}</a>
<span style="color:rgba(255,255,255,.28);font-size:.65rem">S{{ str_pad($ep->season->season_number,2,'0',STR_PAD_LEFT) }}E{{ str_pad($ep->episode_number,2,'0',STR_PAD_LEFT) }}</span>
</span>
<span class="ticker-sep"></span>
@if($i % 3 === 2)
@php $feat = $features[$i % count($features)]; @endphp
<span class="ticker-item feat"><span class="ticker-badge feat-b"><i class="bi bi-{{ $feat['icon'] }}" style="color:{{ $feat['color'] }}"></i> {{ $feat['text'] }}</span></span>
<span class="ticker-sep"></span>
@endif
@endforeach
</div>
@endfor
</div>
</div>
{{-- ═══ GENRE NAV STRIP ════════════════════════════════════════════ --}}
@php
$_gNavColors = [
'Aksiyon'=>'#ff4d4d','Macera'=>'#00c6ff','Komedi'=>'#ffd60a','Drama'=>'#ff7eb3',
'Fantezi'=>'#c084fc','Korku'=>'#ff6b2b','Romantik'=>'#ff69b4','Bilim Kurgu'=>'#00f5ff',
'Spor'=>'#4ade80','Gerilim'=>'#f97316','Ecchi'=>'#fb7185','Slice of Life'=>'#86efac',
'Psikolojik'=>'#a78bfa','Doğaüstü'=>'#e879f9','Mecha'=>'#60a5fa','Müzik'=>'#f472b6',
'Tarih'=>'#fbbf24','Okul'=>'#34d399',
];
$_gNavIcons = [
'Aksiyon'=>'lightning-charge-fill','Macera'=>'compass-fill','Komedi'=>'emoji-laughing-fill',
'Drama'=>'heart-fill','Fantezi'=>'stars','Korku'=>'eye-fill','Romantik'=>'suit-heart-fill',
'Bilim Kurgu'=>'rocket-takeoff-fill','Spor'=>'trophy-fill','Gerilim'=>'exclamation-diamond-fill',
'Ecchi'=>'fire','Slice of Life'=>'sun-fill','Psikolojik'=>'person-fill','Doğaüstü'=>'magic',
'Mecha'=>'cpu-fill','Müzik'=>'music-note-beamed','Tarih'=>'hourglass-split','Okul'=>'book-fill',
];
@endphp
<div class="gnav-strip">
<div class="gnav-inner">
@foreach($genres as $g)
@php $gc = $_gNavColors[$g->name] ?? '#00f5ff'; $gi = $_gNavIcons[$g->name] ?? 'tag'; @endphp
<a href="{{ route('genre', $g->slug) }}" class="gnav-pill" style="--gc:{{ $gc }}">
<i class="bi bi-{{ $gi }}"></i>{{ $g->name }}
</a>
@endforeach
</div>
</div>
{{-- ═══ SPOTLIGHT 3 büyük öne çıkan kart (NEW) ════════════════ --}}
@if($trending->count() >= 3)
<div class="spot-section">
<div class="spot-inner">
<div class="spot-hdr">
<span class="hs-title fire"><i class="bi bi-fire" style="color:#ff6b2b;margin-right:6px"></i>Öne Çıkanlar</span>
</div>
<div class="spot-grid">
@foreach($trending->take(3) as $anime)
@php
$sSp=$anime->seasons->sortBy('season_number')->first();
$eSp=$sSp?$anime->episodes->where('season_id',$sSp->id)->where('is_published',true)->sortBy('episode_number')->first():null;
$urlSp=($sSp&&$eSp&&$anime->slug)?route('watch',[$anime->slug,$sSp->season_number,$eSp->episode_number]):$anime->detailUrl;
@endphp
<a href="{{ $urlSp }}" class="spot-card">
@if($anime->bannerUrl ?? $anime->coverUrl)
<img src="{{ $anime->bannerUrl ?: $anime->coverUrl }}" alt="{{ $anime->title }}" loading="lazy">
@endif
<div class="spot-play"><i class="bi bi-play-fill" style="margin-left:3px"></i></div>
<div class="spot-info">
@if($anime->status==='ongoing')<span class="spot-badge">Devam Ediyor</span>@elseif($anime->type==='movie')<span class="spot-badge" style="background:linear-gradient(135deg,var(--accent3),var(--accent))">Film</span>@endif
<div class="spot-title">{{ $anime->title }}</div>
<div class="spot-meta">
@if($anime->rating)<span class="spot-rating"><i class="bi bi-star-fill" style="font-size:.65rem"></i>{{ number_format($anime->rating,1) }}</span>@endif
@if($anime->release_year)<span>{{ $anime->release_year }}</span>@endif
@foreach(($anime->genres ?? collect())->take(2) as $g)<span>· {{ $g->name }}</span>@endforeach
</div>
</div>
</a>
@endforeach
</div>
</div>
</div>
@endif
{{-- ═══ 1. TREND (RANKED) ════════════════════════════════════════ --}}
@if($trending->count())
<div class="home-section">
<div class="hs-inner">
<div class="hs-hdr">
<div>
<span class="hs-title fire"><i class="bi bi-fire" style="color:#ff6b2b;margin-right:6px"></i>Şu An Trend <span class="hs-pill hs-pill-live" style="margin-left:4px">Canlı</span></span>
<span class="hs-sub">Platformun en çok izlenen animeleri</span>
</div>
</div>
<div class="scroll-row-wrap">
<button class="sarr sarr-prev" onclick="scrollRow(this,-1)" aria-label="Geri"><i class="bi bi-chevron-left"></i></button>
<div class="h-scroll" style="padding-bottom:26px">
@foreach($trending as $i=>$anime)
<a href="{{ $anime->detailUrl }}" class="tpc">
<span class="tpc-rank">{{ $i+1 }}</span>
<div class="tpc-poster">
@if($anime->coverUrl)<img src="{{ $anime->coverUrl }}" alt="{{ $anime->title }}" loading="lazy">
@else<div class="pc-poster-ph"><i class="bi bi-image"></i></div>@endif
<div class="tpc-play"><div class="pc-play-circle"><i class="bi bi-play-fill" style="font-size:.85rem"></i></div></div>
@if($anime->rating)<span class="tpc-rating"><i class="bi bi-star-fill" style="font-size:.6rem"></i>{{ number_format($anime->rating,1) }}</span>@endif
@if($anime->status==='ongoing')<span class="pc-badge-new" style="font-size:.5rem;padding:2px 6px">Devam</span>@endif
</div>
<div class="tpc-info">
<div class="tpc-title">{{ $anime->title }}</div>
<div class="tpc-meta">
{{ $anime->release_year }}@if($anime->episode_count) · {{ $anime->episode_count }} .@endif
@if($anime->studio)<br><span style="color:var(--text3);font-size:.6rem">{{ $anime->studio }}</span>@endif
</div>
</div>
</a>
@endforeach
</div>
<button class="sarr sarr-next" onclick="scrollRow(this,1)" aria-label="İleri"><i class="bi bi-chevron-right"></i></button>
</div>
</div>
</div>
@endif
{{-- ═══ TÜRKÇE DUBLAJ ═════════════════════════════════════════ --}}
@if(isset($dubbed) && $dubbed->count())
<div class="home-section">
<div class="hs-inner">
<div class="hs-hdr">
<span class="hs-title" style="--bar-color:#ffd60a"><i class="bi bi-mic-fill" style="color:#ffd60a;margin-right:6px"></i>Türkçe Dublaj</span>
</div>
<div class="h-scroll" style="padding-bottom:22px">
@foreach($dubbed as $anime)
<a href="{{ $anime->detailUrl }}" class="ongoing-card">
<div class="ongoing-poster">
@if($anime->coverUrl)<img src="{{ $anime->coverUrl }}" alt="{{ $anime->title }}" loading="lazy">
@else<div class="pc-poster-ph"><i class="bi bi-image"></i></div>@endif
<div class="pc-play"><div class="pc-play-circle"><i class="bi bi-play-fill" style="font-size:.85rem"></i></div></div>
<span style="position:absolute;top:8px;left:8px;background:linear-gradient(135deg,#ffd60a,#ff9500);color:#000;font-size:.55rem;font-weight:900;padding:3px 8px;border-radius:999px;letter-spacing:.08em">DUBLAJ</span>
@if($anime->episode_count)<span class="ongoing-ep-count">{{ $anime->episode_count }} .</span>@endif
@if($anime->rating)<span class="tpc-rating"><i class="bi bi-star-fill" style="font-size:.6rem"></i>{{ number_format($anime->rating,1) }}</span>@endif
</div>
<div class="ongoing-info">
<div class="ongoing-title">{{ $anime->title }}</div>
<div class="ongoing-meta">{{ $anime->release_year }}@if($anime->studio) · {{ $anime->studio }}@endif</div>
</div>
</a>
@endforeach
</div>
</div>
</div>
@endif
{{-- ── Banner Reklam (orta) ─────────────────────────────────────────────── --}}
@include('frontend.partials.ad-banner', ['ad' => $bannerAds['home_mid'] ?? null])
{{-- ── Instagram Follow Banner ──────────────────────────────────────────── --}}
<a href="https://instagram.com/animexecom" target="_blank" rel="noopener" class="ig-follow-wrap home-section">
<div class="ig-follow-inner">
<div class="ig-follow-left">
<div class="ig-icon-ring">
<svg class="ig-icon-svg" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="2" y="2" width="20" height="20" rx="5.5" stroke="url(#igGrad)" stroke-width="2"/>
<circle cx="12" cy="12" r="4.5" stroke="url(#igGrad)" stroke-width="2"/>
<circle cx="17.5" cy="6.5" r="1.2" fill="url(#igGrad)"/>
<defs>
<linearGradient id="igGrad" x1="2" y1="22" x2="22" y2="2" gradientUnits="userSpaceOnUse">
<stop offset="0%" stop-color="#f09433"/>
<stop offset="25%" stop-color="#e6683c"/>
<stop offset="50%" stop-color="#dc2743"/>
<stop offset="75%" stop-color="#cc2366"/>
<stop offset="100%" stop-color="#bc1888"/>
</linearGradient>
</defs>
</svg>
</div>
<div class="ig-follow-text">
<span class="ig-follow-eyebrow">Bizi Instagram'da Takip Et</span>
<span class="ig-follow-handle">@animexecom</span>
<span class="ig-follow-sub">Yeni animeler, duyurular ve daha fazlası</span>
</div>
</div>
<div class="ig-follow-btn">
<span class="ig-btn-text">Takip Et</span>
<svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor" style="opacity:.8"><path d="M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6z"/></svg>
</div>
<div class="ig-orb ig-orb-1" aria-hidden="true"></div>
<div class="ig-orb ig-orb-2" aria-hidden="true"></div>
</div>
</a>
{{-- ═══ DEVAM ET ════════════════════════════════════════════════ --}}
@if($continueWatching->count())
<div class="home-section">
<div class="hs-inner">
<div class="hs-hdr">
<span class="hs-title purple"><i class="bi bi-play-circle-fill" style="color:#c084fc;margin-right:6px"></i>Kaldığın Yerden Devam Et</span>
</div>
<div class="h-scroll">
@foreach($continueWatching as $cw)
@if($cw->anime)
<a href="{{ route('watch',[$cw->anime->slug,$cw->season_number,$cw->episode_number]) }}" class="cw-card">
<div class="cw-poster">
@if($cw->anime->cover_image)
<img src="{{ \App\Support\MediaUrl::fromStoragePath($cw->anime->cover_image) }}" alt="{{ $cw->anime->title }}" loading="lazy">
@else<div style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--text3)"><i class="bi bi-image"></i></div>@endif
<div class="pc-play"><div class="pc-play-circle"><i class="bi bi-play-fill" style="font-size:.85rem"></i></div></div>
<span class="cw-ep">S{{ str_pad($cw->season_number,2,'0',STR_PAD_LEFT) }}E{{ str_pad($cw->episode_number,2,'0',STR_PAD_LEFT) }}</span>
<span class="cw-pct">%{{ $cw->percent_complete }}</span>
<div class="cw-prog"><div class="cw-prog-fill" style="width:{{ $cw->percent_complete }}%"></div></div>
</div>
<div class="cw-title">{{ $cw->anime->title }}</div>
</a>
@endif
@endforeach
</div>
</div>
</div>
@endif
{{-- ═══ 2. EN YÜKSEK PUAN ════════════════════════════════════════ --}}
@if($topRated->count())
<div class="home-section">
<div class="hs-inner">
<div class="hs-hdr">
<div>
<span class="hs-title gold"><i class="bi bi-trophy-fill" style="color:#ffd60a;margin-right:6px"></i>En Yüksek Puan</span>
<span class="hs-sub">İzleyicilerin en beğendiği yapımlar</span>
</div>
<a href="{{ route('search') }}" class="hs-more">Tümünü Gör →</a>
</div>
<div class="h-scroll">
@foreach($topRated as $i=>$anime)
<a href="{{ $anime->detailUrl }}" class="pc">
<div class="pc-poster">
@if($anime->coverUrl)<img src="{{ $anime->coverUrl }}" alt="{{ $anime->title }}" loading="lazy">
@else<div class="pc-poster-ph"><i class="bi bi-image"></i></div>@endif
<div class="pc-play"><div class="pc-play-circle"><i class="bi bi-play-fill" style="font-size:.85rem"></i></div></div>
@if($anime->rating)<span class="pc-rating"><i class="bi bi-star-fill" style="font-size:.6rem"></i>{{ number_format($anime->rating,1) }}</span>@endif
@if($i < 3)<span class="pc-badge" style="background:{{ ['linear-gradient(135deg,#ffd60a,#ff9800)','linear-gradient(135deg,#b0b0b0,#777)','linear-gradient(135deg,#cd7f32,#a0522d)'][$i] }};color:{{ $i===0?'#1a1a00':'#fff' }}">{{ ['🥇','🥈','🥉'][$i] }}</span>@endif
</div>
<div class="pc-info">
<div class="pc-title">{{ $anime->title }}</div>
<div class="pc-meta">{{ $anime->release_year }}@if($anime->episode_count) · {{ $anime->episode_count }} .@endif</div>
</div>
</a>
@endforeach
</div>
</div>
</div>
@endif
{{-- ── Banner Reklam (alt) ──────────────────────────────────────────────── --}}
@include('frontend.partials.ad-banner', ['ad' => $bannerAds['home_bottom'] ?? null])
@if(!empty($bannerAds['home_mid']) || !empty($bannerAds['home_bottom']))
<script>
// Görünürlük (view) + tıklama (hit) beacon'ları — path/isimler nötr (adblocker)
(function () {
const seen = new Set();
function beacon(id, type) {
try { fetch(`/api/slot/${id}/${type}`, { method: 'POST', keepalive: true }).catch(() => {}); } catch {}
}
const els = document.querySelectorAll('.hp-feature-media[data-slot-id]');
if (!els.length) return;
const io = 'IntersectionObserver' in window ? new IntersectionObserver(entries => {
entries.forEach(e => {
const id = e.target.dataset.slotId;
if (e.isIntersecting && !seen.has(id)) {
seen.add(id);
beacon(id, 'view');
io.unobserve(e.target);
}
});
}, { threshold: 0.5 }) : null;
els.forEach(el => {
if (io) io.observe(el);
else if (!seen.has(el.dataset.slotId)) { seen.add(el.dataset.slotId); beacon(el.dataset.slotId, 'view'); }
el.addEventListener('click', () => beacon(el.dataset.slotId, 'hit'));
});
})();
</script>
@endif
{{-- ═══ KEŞFİYAT FEATURE SECTION ══════════════════════════════════ --}}
<section class="kf-section">
<div class="kf-inner">
{{-- Left: text --}}
<div class="kf-text">
<span class="kf-label">Yeni Özellik</span>
<h2 class="kf-title">
Anime <span class="kf-title-grad">Keşfet</span>
</h2>
<p class="kf-desc">Kaydır, beğen, listene ekle. Binlerce anime arasından sana uygun olanı saniyeler içinde bul yapay zeka açıklamalarıyla.</p>
<div class="kf-pills">
<span class="kf-pill"><i class="bi bi-hand-index-thumb-fill" style="color:var(--accent2)"></i> Swipe ile keşfet</span>
<span class="kf-pill"><i class="bi bi-stars" style="color:var(--accent3)"></i> AI tanıtımları</span>
<span class="kf-pill"><i class="bi bi-bookmark-heart-fill" style="color:var(--accent)"></i> Listene ekle</span>
</div>
<a href="{{ route('discover') }}" class="kf-cta">
<span>Hemen Dene</span>
<i class="bi bi-arrow-right kf-cta-arrow"></i>
</a>
</div>
{{-- Right: animated card stack --}}
<div class="kf-visual" aria-hidden="true">
<div class="kf-cards">
<div class="kf-card kf-c3"><div class="kf-card-shine"></div></div>
<div class="kf-card kf-c2"><div class="kf-card-shine"></div></div>
<div class="kf-card kf-c1">
<div class="kf-card-shine"></div>
<div class="kf-card-body-demo">
<div class="kf-card-tags"><span>Aksiyon</span><span>Shounen</span></div>
<div class="kf-card-title-demo">???</div>
<div class="kf-card-meta-demo">
<i class="bi bi-star-fill" style="color:#fbbf24;font-size:.62rem"></i>
<span>9.1</span><span>·</span><span>2024</span>
</div>
</div>
<div class="kf-like-stamp"><i class="bi bi-heart-fill"></i></div>
</div>
</div>
<div class="kf-badge kf-badge-like"><i class="bi bi-heart-fill"></i> Listeme Ekle</div>
<div class="kf-badge kf-badge-skip"><i class="bi bi-x-lg"></i> Geç</div>
</div>
</div>
</section>
{{-- ═══ SANA ÖZEL ════════════════════════════════════════════════ --}}
@if($recommended->count())
<div class="home-section">
<div class="hs-inner">
<div class="hs-hdr">
<span class="hs-title purple"><i class="bi bi-stars" style="color:#c084fc;margin-right:6px"></i>Sana Özel Seçilenler</span>
</div>
<div class="h-scroll">
@foreach($recommended as $anime)
<a href="{{ $anime->detailUrl }}" class="pc">
<div class="pc-poster">
@if($anime->coverUrl)<img src="{{ $anime->coverUrl }}" alt="{{ $anime->title }}" loading="lazy">
@else<div class="pc-poster-ph"><i class="bi bi-image"></i></div>@endif
<div class="pc-play"><div class="pc-play-circle"><i class="bi bi-play-fill" style="font-size:.85rem"></i></div></div>
@if($anime->rating)<span class="pc-rating"><i class="bi bi-star-fill" style="font-size:.6rem"></i>{{ number_format($anime->rating,1) }}</span>@endif
</div>
<div class="pc-info">
<div class="pc-title">{{ $anime->title }}</div>
<div class="pc-meta">{{ $anime->release_year }}</div>
</div>
</a>
@endforeach
</div>
</div>
</div>
@endif
{{-- ═══ 3. YENİ EKLENENLER ════════════════════════════════════════ --}}
@if($latest->count())
<div class="home-section">
<div class="hs-inner">
<div class="hs-hdr">
<span class="hs-title"><i class="bi bi-grid-1x2-fill" style="color:var(--accent2);margin-right:6px"></i>Yeni Eklenenler</span>
<a href="{{ route('search') }}" class="hs-more">Tümünü Gör </a>
</div>
<div class="h-scroll">
@foreach($latest as $anime)
<a href="{{ $anime->detailUrl }}" class="pc">
<div class="pc-poster">
@if($anime->coverUrl)<img src="{{ $anime->coverUrl }}" alt="{{ $anime->title }}" loading="lazy">
@else<div class="pc-poster-ph"><i class="bi bi-image"></i></div>@endif
<div class="pc-play"><div class="pc-play-circle"><i class="bi bi-play-fill" style="font-size:.85rem"></i></div></div>
<span class="pc-badge-new">Yeni</span>
@if($anime->type==='movie')<span class="pc-badge">Film</span>@endif
@if($anime->rating)<span class="pc-rating"><i class="bi bi-star-fill" style="font-size:.6rem"></i>{{ number_format($anime->rating,1) }}</span>@endif
</div>
<div class="pc-info">
<div class="pc-title">{{ $anime->title }}</div>
<div class="pc-meta">{{ $anime->release_year }}@if($anime->episode_count) · {{ $anime->episode_count }} .@endif</div>
</div>
</a>
@endforeach
</div>
</div>
</div>
@endif
{{-- ═══ 4. BU SEZON DEVAM EDİYOR ════════════════════════════════ --}}
@if($ongoing->count())
<div class="home-section">
<div class="hs-inner">
<div class="hs-hdr">
<span class="hs-title"><i class="bi bi-broadcast-pin" style="color:#ff2d7d;margin-right:6px"></i>Bu Sezon Devam Ediyor</span>
<a href="{{ route('search') }}?status=ongoing" class="hs-more">Tümü </a>
</div>
<div class="h-scroll" style="padding-bottom:22px">
@foreach($ongoing as $anime)
<a href="{{ $anime->detailUrl }}" class="ongoing-card">
<div class="ongoing-poster">
@if($anime->coverUrl)<img src="{{ $anime->coverUrl }}" alt="{{ $anime->title }}" loading="lazy">
@else<div class="pc-poster-ph"><i class="bi bi-image"></i></div>@endif
<div class="pc-play"><div class="pc-play-circle"><i class="bi bi-play-fill" style="font-size:.85rem"></i></div></div>
<span class="ongoing-pulse">Canlı</span>
@if($anime->episode_count)<span class="ongoing-ep-count">{{ $anime->episode_count }} .</span>@endif
@if($anime->rating)<span class="tpc-rating"><i class="bi bi-star-fill" style="font-size:.6rem"></i>{{ number_format($anime->rating,1) }}</span>@endif
</div>
<div class="ongoing-info">
<div class="ongoing-title">{{ $anime->title }}</div>
<div class="ongoing-meta">{{ $anime->release_year }}@if($anime->studio) · {{ $anime->studio }}@endif</div>
</div>
</a>
@endforeach
</div>
</div>
</div>
@endif
{{-- ═══ PROMO BANNER ════════════════════════════════════════════ --}}
@if(!auth()->check() || !auth()->user()->isPremium())
<div class="promo-banner">
<div class="promo-inner">
<div class="promo-text">
<div class="promo-label"> Animexe Premium</div>
<div class="promo-title">Her Zaman, Her Yerde<br>Türkçe Anime</div>
<div class="promo-sub">Binlerce anime, yüzlerce bölüm reklamsız, yüksek kalitede. Hemen keşfet.</div>
</div>
<a href="{{ route('search') }}" class="promo-cta">
<i class="bi bi-compass"></i> Keşfet
</a>
</div>
</div>
@endif
{{-- ═══ POPÜler FİLMLER ════════════════════════════════════════ --}}
@if($popularMovies->count())
<div class="home-section">
<div class="hs-inner">
<div class="hs-hdr">
<span class="hs-title gold"><i class="bi bi-film" style="color:#ffd60a;margin-right:6px"></i>Popüler Anime Filmleri</span>
<a href="{{ route('search') }}?type=movie" class="hs-more">Tümü </a>
</div>
<div class="h-scroll" style="padding-bottom:22px">
@foreach($popularMovies as $anime)
@php
$firstSeason = $anime->seasons()->orderBy('season_number')->first();
$firstEp = $firstSeason ? $firstSeason->episodes()->where('is_published',true)->orderBy('episode_number')->first() : null;
$watchUrl = ($firstSeason && $firstEp && $anime->slug) ? route('watch',[$anime->slug,$firstSeason->season_number,$firstEp->episode_number]) : $anime->detailUrl;
@endphp
<a href="{{ $watchUrl }}" class="mv-card">
<div class="mv-thumb">
@if($anime->bannerUrl ?? $anime->coverUrl)
<img src="{{ $anime->bannerUrl ?: $anime->coverUrl }}" alt="{{ $anime->title }}" loading="lazy">
@else<div style="width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--text3)"><i class="bi bi-film" style="font-size:2rem"></i></div>@endif
<span class="mv-badge">Film</span>
@if($anime->rating)<span class="mv-rating"><i class="bi bi-star-fill" style="font-size:.6rem"></i>{{ number_format($anime->rating,1) }}</span>@endif
<div class="mv-play"><div class="mv-play-circle"><i class="bi bi-play-fill" style="font-size:1rem;margin-left:2px"></i></div></div>
</div>
<div class="mv-body">
<div class="mv-title">{{ $anime->title }}</div>
@if($anime->description)<div class="mv-desc">{{ $anime->description }}</div>@endif
<div class="mv-year">{{ $anime->release_year }}@if($anime->studio) · {{ $anime->studio }}@endif</div>
</div>
</a>
@endforeach
</div>
</div>
</div>
@endif
{{-- ═══ TÜR SPOTLIGHT ══════════════════════════════════════════ --}}
@if($genreSpotlights->count())
@php
$spotColors=['Aksiyon'=>['#ff4d4d','fire'],'Fantezi'=>['#c084fc','stars'],'Romantik'=>['#f472b6','suit-heart-fill'],
'Psikolojik'=>['#a78bfa','person-bounding-box'],'Komedi'=>['#ffd60a','emoji-laughing-fill'],
'Spor'=>['#4ade80','trophy-fill'],'Macera'=>['#00c6ff','compass-fill'],'Drama'=>['#ff7eb3','heart-fill']];
@endphp
@foreach($genreSpotlights as $spot)
@php $g=$spot['genre']; $col=($spotColors[$g->name]??['#00f5ff','tag'])[0]; $ico=($spotColors[$g->name]??['#00f5ff','tag'])[1]; @endphp
<div class="home-section">
<div class="hs-inner">
<div class="hs-hdr">
<span class="hs-title" style="--bar-color:{{ $col }}">
<i class="bi bi-{{ $ico }}" style="color:{{ $col }};font-size:1rem;margin-right:4px"></i>
{{ $g->name }} Anime
</span>
<a href="{{ route('genre',$g->slug) }}" class="hs-more">Tümü </a>
</div>
<div class="h-scroll">
@foreach($spot['animes'] as $anime)
<a href="{{ $anime->detailUrl }}" class="pc">
<div class="pc-poster">
@if($anime->coverUrl)<img src="{{ $anime->coverUrl }}" alt="{{ $anime->title }}" loading="lazy">
@else<div class="pc-poster-ph"><i class="bi bi-image"></i></div>@endif
<div class="pc-play"><div class="pc-play-circle"><i class="bi bi-play-fill" style="font-size:.85rem"></i></div></div>
@if($anime->rating)<span class="pc-rating"><i class="bi bi-star-fill" style="font-size:.6rem"></i>{{ number_format($anime->rating,1) }}</span>@endif
@if($anime->status==='ongoing')<span class="pc-badge-new">Devam</span>@endif
</div>
<div class="pc-info">
<div class="pc-title">{{ $anime->title }}</div>
<div class="pc-meta">{{ $anime->release_year }}@if($anime->episode_count) · {{ $anime->episode_count }} .@endif</div>
</div>
</a>
@endforeach
</div>
</div>
</div>
@endforeach
@endif
{{-- ═══ YENİ EKLENEN BÖLÜMLER ════════════════════════════════════ --}}
@if($newEpisodes->count())
<div class="home-section">
<div class="hs-inner">
<div class="hs-hdr">
<div>
<span class="hs-title"><i class="bi bi-lightning-charge-fill" style="color:var(--accent2);margin-right:6px"></i>Yeni Eklenen Bölümler <span class="hs-pill hs-pill-new" style="margin-left:4px">Güncel</span></span>
<span class="hs-sub">En son yüklenen bölümler, hemen izle</span>
</div>
</div>
<div class="scroll-row-wrap">
<button class="sarr sarr-prev" onclick="scrollRow(this,-1)" aria-label="Geri"><i class="bi bi-chevron-left"></i></button>
<div class="sl-scroll">
@foreach($newEpisodes as $ep)
@php $an=$ep->anime; $sn=$ep->season; @endphp
@if($an&&$sn)
<a href="{{ route('watch',[$an->slug,$sn->season_number,$ep->episode_number]) }}" class="sl-card">
<div class="sl-thumb">
@if($ep->thumbnailUrl)<img src="{{ $ep->thumbnailUrl }}" alt="" loading="lazy">
@elseif($an->coverUrl)<img src="{{ $an->coverUrl }}" alt="" loading="lazy" style="object-position:top">
@else<div style="width:100%;height:100%;background:var(--surface2);display:flex;align-items:center;justify-content:center;color:var(--text3)"><i class="bi bi-film" style="font-size:2rem"></i></div>@endif
<div class="sl-play-overlay"><div class="sl-play-circle"><i class="bi bi-play-fill" style="font-size:1.1rem;margin-left:2px"></i></div></div>
<span class="sl-ep-badge">S{{ str_pad($sn->season_number,2,'0',STR_PAD_LEFT) }}E{{ str_pad($ep->episode_number,2,'0',STR_PAD_LEFT) }}</span>
</div>
<div class="sl-body">
<div class="sl-anime-name">{{ $an->title }}</div>
<div class="sl-title">{{ $ep->title ?: ($ep->episode_number.'. Bölüm') }}</div>
@if($an->description)<div class="sl-desc">{{ $an->description }}</div>@endif
<div class="sl-footer">
@if($an->rating)<div class="sl-rating"><i class="bi bi-star-fill" style="font-size:.65rem"></i>{{ number_format($an->rating,1) }}</div>@endif
<div class="sl-time">{{ $ep->created_at?->diffForHumans() }}</div>
</div>
</div>
</a>
@endif
@endforeach
</div>
<button class="sarr sarr-next" onclick="scrollRow(this,1)" aria-label="İleri"><i class="bi bi-chevron-right"></i></button>
</div>
</div>
</div>
@endif
{{-- ═══ TÜRLER ════════════════════════════════════════════════════ --}}
@if($genres->count())
<div class="home-section">
<div class="hs-inner">
<div class="hs-hdr">
<div>
<span class="hs-title"><i class="bi bi-compass-fill" style="color:var(--accent2);margin-right:6px"></i>Türe Göre Keşfet</span>
<span class="hs-sub">Sevdiğin türü seç, binlerce anime seni bekliyor</span>
</div>
</div>
@php
$genreIcons=[
'Aksiyon'=>'lightning-charge-fill','Macera'=>'compass-fill','Komedi'=>'emoji-laughing-fill',
'Drama'=>'heart-fill','Fantezi'=>'stars','Korku'=>'eye-fill','Romantik'=>'suit-heart-fill',
'Bilim Kurgu'=>'rocket-takeoff-fill','Spor'=>'trophy-fill','Gerilim'=>'exclamation-diamond-fill',
'Ecchi'=>'fire','Slice of Life'=>'sun-fill','Psikolojik'=>'person-fill','Doğaüstü'=>'magic',
'Mecha'=>'cpu-fill','Müzik'=>'music-note-beamed','Tarih'=>'hourglass-split','Okul'=>'book-fill',
];
$genreColors=[
'Aksiyon'=>'#ff4d4d','Macera'=>'#00c6ff','Komedi'=>'#ffd60a','Drama'=>'#ff7eb3',
'Fantezi'=>'#c084fc','Korku'=>'#ff6b2b','Romantik'=>'#ff69b4','Bilim Kurgu'=>'#00f5ff',
'Spor'=>'#4ade80','Gerilim'=>'#f97316','Ecchi'=>'#fb7185','Slice of Life'=>'#86efac',
'Psikolojik'=>'#a78bfa','Doğaüstü'=>'#e879f9','Mecha'=>'#60a5fa','Müzik'=>'#f472b6',
];
@endphp
<div class="genre-grid">
@foreach($genres as $g)
@php $icon=$genreIcons[$g->name]??'tag'; $col=$genreColors[$g->name]??'#00f5ff'; @endphp
<a href="{{ route('genre',$g->slug) }}" class="gc" style="--gc:{{ $col }}">
<div class="gc-icon" style="color:{{ $col }}">
<i class="bi bi-{{ $icon }}"></i>
</div>
<div class="gc-text">
<div class="gc-name">{{ $g->name }}</div>
@if($g->animes_count ?? null)<div class="gc-count">{{ $g->animes_count }} anime</div>@endif
</div>
<em class="gc-arrow"></em>
</a>
@endforeach
</div>
</div>
</div>
@endif
<div class="home-end"></div>
@if(!empty($apkUrl))
<div class="app-download-banner">
<div class="app-download-inner">
<div class="app-download-left">
<div class="app-download-icon">
<svg width="40" height="40" viewBox="0 0 24 24" fill="none">
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z" fill="url(#appGrad)"/>
<path d="M8 17l4-4 4 4M12 13V7" stroke="#fff" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/>
<defs><linearGradient id="appGrad" x1="2" y1="2" x2="22" y2="22" gradientUnits="userSpaceOnUse"><stop stop-color="#7C3AED"/><stop offset="1" stop-color="#00D2FF"/></linearGradient></defs>
</svg>
</div>
<div class="app-download-text">
<span class="app-download-title">Animexe Mobil Uygulaması</span>
<span class="app-download-sub">Reklamsız izle · Offline indir · NicoNico yorumlar · Watch Party</span>
</div>
</div>
<a href="{{ $apkUrl }}" class="app-download-btn" download>
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M5 20h14v-2H5v2zm7-18L5.33 9h3.84v6h5.66V9h3.84L12 2z"/></svg>
APK İndir
</a>
</div>
</div>
@endif
@endsection
@push('styles')
<style>
/* ── Instagram Follow Banner ─────────────────────────────────────────── */
.ig-follow-wrap {
display: block;
text-decoration: none;
max-width: 1400px;
margin: 0 auto 48px;
padding: 0 clamp(16px,4vw,48px);
}
.ig-follow-inner {
position: relative;
overflow: hidden;
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
padding: clamp(20px,3vw,28px) clamp(20px,3vw,36px);
border-radius: 20px;
background: linear-gradient(135deg,
rgba(240,148,51,.06) 0%,
rgba(188,24,136,.08) 50%,
rgba(220,39,67,.06) 100%);
border: 1px solid rgba(220,39,67,.2);
transition: border-color .25s, transform .22s cubic-bezier(.22,1,.36,1), box-shadow .25s;
}
.ig-follow-inner:hover {
border-color: rgba(220,39,67,.45);
transform: translateY(-2px);
box-shadow: 0 12px 40px rgba(188,24,136,.12), 0 4px 16px rgba(0,0,0,.2);
}
.ig-follow-left {
display: flex;
align-items: center;
gap: clamp(14px,2vw,22px);
min-width: 0;
}
.ig-icon-ring {
flex-shrink: 0;
width: clamp(48px,6vw,64px);
height: clamp(48px,6vw,64px);
border-radius: 18px;
background: linear-gradient(135deg, rgba(240,148,51,.12), rgba(188,24,136,.12));
border: 1px solid rgba(220,39,67,.25);
display: flex;
align-items: center;
justify-content: center;
transition: background .25s, border-color .25s;
}
.ig-follow-inner:hover .ig-icon-ring {
background: linear-gradient(135deg, rgba(240,148,51,.2), rgba(188,24,136,.2));
border-color: rgba(220,39,67,.5);
}
.ig-icon-svg {
width: clamp(26px,3.5vw,34px);
height: clamp(26px,3.5vw,34px);
}
.ig-follow-text {
display: flex;
flex-direction: column;
gap: 3px;
min-width: 0;
}
.ig-follow-eyebrow {
font-size: clamp(.67rem,.9vw,.78rem);
font-weight: 600;
text-transform: uppercase;
letter-spacing: .08em;
color: rgba(255,255,255,.38);
}
.ig-follow-handle {
font-size: clamp(1.05rem,1.8vw,1.35rem);
font-weight: 900;
letter-spacing: -.02em;
line-height: 1;
background: linear-gradient(90deg, #f09433, #e6683c, #dc2743, #cc2366, #bc1888);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
background-size: 200% auto;
animation: igHandleFlow 4s linear infinite;
}
.ig-follow-sub {
font-size: clamp(.7rem,.9vw,.8rem);
color: rgba(255,255,255,.38);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.ig-follow-btn {
flex-shrink: 0;
display: inline-flex;
align-items: center;
gap: 6px;
padding: clamp(9px,1.2vw,12px) clamp(18px,2.2vw,28px);
border-radius: 999px;
background: linear-gradient(135deg, #e6683c, #cc2366);
color: #fff;
font-size: clamp(.8rem,1vw,.9rem);
font-weight: 800;
letter-spacing: .02em;
box-shadow: 0 4px 18px rgba(220,39,67,.3);
transition: box-shadow .22s, transform .18s;
}
.ig-follow-inner:hover .ig-follow-btn {
box-shadow: 0 6px 28px rgba(220,39,67,.5);
transform: scale(1.04);
}
.ig-orb {
position: absolute;
border-radius: 50%;
pointer-events: none;
filter: blur(36px);
opacity: .18;
}
.ig-orb-1 {
width: 180px; height: 180px;
top: -60px; right: 8%;
background: radial-gradient(circle, #f09433, transparent 70%);
}
.ig-orb-2 {
width: 140px; height: 140px;
bottom: -50px; right: 22%;
background: radial-gradient(circle, #bc1888, transparent 70%);
}
@keyframes igHandleFlow {
from { background-position: 0% center; }
to { background-position: 200% center; }
}
@media (max-width: 480px) {
.ig-follow-sub { display: none; }
.ig-follow-btn .ig-btn-text { display: none; }
.ig-follow-btn { padding: 10px 12px; }
}
.app-download-banner{margin:0 auto 40px;max-width:1400px;padding:0 20px}
.app-download-inner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 24px;background:linear-gradient(135deg,rgba(124,58,237,.12) 0%,rgba(0,210,255,.06) 100%);border:1px solid rgba(124,58,237,.3);border-radius:16px;backdrop-filter:blur(8px)}
.app-download-left{display:flex;align-items:center;gap:16px}
.app-download-icon{width:52px;height:52px;border-radius:14px;background:linear-gradient(135deg,rgba(124,58,237,.2),rgba(0,210,255,.1));display:flex;align-items:center;justify-content:center;flex-shrink:0;border:1px solid rgba(124,58,237,.3)}
.app-download-text{display:flex;flex-direction:column;gap:4px}
.app-download-title{color:#fff;font-size:15px;font-weight:800}
.app-download-sub{color:rgba(255,255,255,.5);font-size:12px}
.app-download-btn{display:inline-flex;align-items:center;gap:7px;padding:10px 22px;background:linear-gradient(135deg,#7c3aed,#00d2ff);color:#fff;font-weight:800;font-size:13px;border-radius:10px;text-decoration:none;white-space:nowrap;transition:opacity .2s}
.app-download-btn:hover{opacity:.85;color:#fff}
@media(max-width:600px){.app-download-sub{display:none}.app-download-inner{flex-wrap:wrap}.app-download-btn{width:100%;justify-content:center}}
</style>
@endpush
@push('scripts')
<script>
// ── Scroll Row Arrow Navigation ───────────────────────────────────────────────
function scrollRow(btn, dir) {
const wrap = btn.closest('.scroll-row-wrap');
const row = wrap.querySelector('.h-scroll, .sl-scroll');
if (!row) return;
const step = Math.max(row.clientWidth * .72, 320);
row.scrollBy({ left: dir * step, behavior: 'smooth' });
}
// ── Hero Slider ────────────────────────────────────────────────────────────────
const SLIDES = @json($featuredSlider);
let cur = 0, timer = null;
function goSlide(idx) {
if (!SLIDES.length) return;
idx = ((idx % SLIDES.length) + SLIDES.length) % SLIDES.length;
document.querySelectorAll('.hero-slide').forEach((s, i) => s.classList.toggle('on', i === idx));
document.querySelectorAll('.h-thumb').forEach((t, i) => t.classList.toggle('on', i === idx));
const d = SLIDES[idx];
const slideEls = document.querySelectorAll('.hero-slide');
slideEls.forEach((s, i) => {
s.classList.toggle('on', i === idx);
if (i === idx && d.bannerUrl) s.style.backgroundImage = `url('${d.bannerUrl}')`;
});
const posterImg = document.getElementById('hero-poster-img');
if (posterImg && d.coverUrl) {
posterImg.style.opacity = '0';
setTimeout(() => { posterImg.src = d.coverUrl; posterImg.style.opacity = '1'; }, 200);
}
const titleEl = document.getElementById('hero-title');
if (titleEl) { titleEl.style.opacity='0'; setTimeout(()=>{ titleEl.textContent=d.title; titleEl.style.opacity='1'; },150); }
const descEl = document.getElementById('hero-desc');
if (descEl) descEl.textContent = d.description || '';
const metaEl = document.getElementById('hero-meta');
if (metaEl) {
let h = '';
if (d.rating) h += `<span class="hstar"><i class="bi bi-star-fill" style="font-size:.7rem"></i>${parseFloat(d.rating).toFixed(1)}</span><span class="hero-sep"></span>`;
if (d.year) h += `<span>${d.year}</span>`;
if (d.episodes) h += `<span class="hero-sep"></span><span>${d.episodes} Bölüm</span>`;
if (d.studio) h += `<span class="hero-sep"></span><span style="color:rgba(240,244,255,.42);font-size:.8rem">${d.studio}</span>`;
metaEl.innerHTML = h;
}
const tagsEl = document.getElementById('hero-tags');
if (tagsEl) {
let tagHtml = '';
if (d.statusLabel && d.status !== 'completed') tagHtml += `<span class="hero-status-badge">${d.statusLabel}</span>`;
tagHtml += d.genres.slice(0,3).map(g=>`<span class="hero-tag">${g}</span>`).join('');
tagsEl.innerHTML = tagHtml;
}
const btnsEl = document.getElementById('hero-btns');
if (btnsEl) {
let h = '';
if (d.watchUrl) h += `<a href="${d.watchUrl}" class="h-play-btn"><i class="bi bi-play-fill" style="font-size:1.1rem"></i> İzlemeye Başla</a>`;
h += `<a href="${d.detailUrl}" class="h-info-btn"><i class="bi bi-info-circle"></i> Detaylar</a>`;
btnsEl.innerHTML = h;
}
cur = idx;
}
document.querySelectorAll('.h-thumb').forEach(t => {
t.addEventListener('click', () => { clearInterval(timer); resetProg(); goSlide(+t.dataset.idx); startTimer(); });
});
document.getElementById('hero-prev')?.addEventListener('click', () => { clearInterval(timer); resetProg(); goSlide(cur-1); startTimer(); });
document.getElementById('hero-next')?.addEventListener('click', () => { clearInterval(timer); resetProg(); goSlide(cur+1); startTimer(); });
document.addEventListener('keydown', e => {
if (e.key==='ArrowLeft') { clearInterval(timer); goSlide(cur-1); startTimer(); }
if (e.key==='ArrowRight') { clearInterval(timer); goSlide(cur+1); startTimer(); }
});
(function(){
const hero = document.querySelector('.hero');
if (!hero) return;
let tx=0;
hero.addEventListener('touchstart', e => { tx=e.touches[0].clientX; }, {passive:true});
hero.addEventListener('touchend', e => {
const diff=tx-e.changedTouches[0].clientX;
if (Math.abs(diff)>48) { clearInterval(timer); goSlide(diff>0?cur+1:cur-1); startTimer(); }
}, {passive:true});
let mDown=false, mStartX=0;
hero.addEventListener('mousedown', e => { mDown=true; mStartX=e.clientX; });
hero.addEventListener('mouseup', e => {
if (!mDown) return; mDown=false;
const diff=mStartX-e.clientX;
if (Math.abs(diff)>60) { clearInterval(timer); goSlide(diff>0?cur+1:cur-1); startTimer(); }
});
hero.addEventListener('mouseleave', ()=>{ mDown=false; });
})();
// ── Hero progress bar ─────────────────────────────────────────────────────────
const SLIDE_DURATION = 7000;
let progRaf = null, progStart = 0;
function startProg() {
const fill = document.getElementById('hero-prog-fill');
if (!fill) return;
progStart = performance.now();
function tick(now) {
const pct = Math.min(100, ((now - progStart) / SLIDE_DURATION) * 100);
fill.style.width = pct + '%';
if (pct < 100) progRaf = requestAnimationFrame(tick);
}
if (progRaf) cancelAnimationFrame(progRaf);
fill.style.width = '0%';
progRaf = requestAnimationFrame(tick);
}
function resetProg() {
if (progRaf) { cancelAnimationFrame(progRaf); progRaf = null; }
const fill = document.getElementById('hero-prog-fill');
if (fill) fill.style.width = '0%';
}
function startTimer() {
if (SLIDES.length<2) return;
clearInterval(timer);
resetProg(); startProg();
timer=setInterval(()=>{ goSlide(cur+1); resetProg(); startProg(); }, SLIDE_DURATION);
}
startTimer();
const posterStyle=document.createElement('style');
posterStyle.textContent='#hero-poster-img{transition:opacity .3s ease}#hero-title{transition:opacity .2s ease}';
document.head.appendChild(posterStyle);
// ── Hero Canvas Particles ──────────────────────────────────────────────────────
(function(){
const canvas=document.getElementById('hero-canvas');
if (!canvas) return;
const ctx=canvas.getContext('2d');
let W,H,particles=[],raf,paused=false;
function resize(){ W=canvas.width=canvas.offsetWidth; H=canvas.height=canvas.offsetHeight; }
resize();
new ResizeObserver(resize).observe(canvas);
const COLORS=['rgba(0,245,255,','rgba(255,45,125,','rgba(184,77,255,'];
const COUNT=Math.min(55,Math.floor(window.innerWidth*window.innerHeight/16000));
for(let i=0;i<COUNT;i++) particles.push({
x:Math.random()*1000, y:Math.random()*1000,
r:Math.random()*1.4+.3, vx:(Math.random()-.5)*.35, vy:(Math.random()-.5)*.35,
a:Math.random()*.55+.1, c:COLORS[Math.floor(Math.random()*COLORS.length)]
});
function draw(){
if(paused){ raf=null; return; }
ctx.clearRect(0,0,W,H);
const sx=W/1000,sy=H/1000;
particles.forEach(p=>{
p.x+=p.vx; p.y+=p.vy;
if(p.x<-5)p.x=1005; if(p.x>1005)p.x=-5;
if(p.y<-5)p.y=1005; if(p.y>1005)p.y=-5;
ctx.beginPath();
ctx.arc(p.x*sx,p.y*sy,p.r,0,Math.PI*2);
ctx.fillStyle=p.c+p.a+')';
ctx.fill();
});
raf=requestAnimationFrame(draw);
}
const hero=document.querySelector('.hero');
if(hero){
new IntersectionObserver(([e])=>{
paused=!e.isIntersecting;
if(!paused&&!raf) draw();
},{threshold:0}).observe(hero);
}
draw();
})();
// ── Section scroll reveal ──────────────────────────────────────────────────────
(function(){
const obs=new IntersectionObserver((entries)=>{
entries.forEach(entry=>{
if(!entry.isIntersecting) return;
const section=entry.target;
section.classList.add('visible');
// Stagger cards
const cards=section.querySelectorAll('.pc,.tpc,.cw-card,.ongoing-card,.sl-card,.mv-card,.gc,.spot-card');
cards.forEach((card,i)=>{
if(card.dataset.animated) return;
card.dataset.animated='1';
card.style.opacity='0';
card.style.transform='translateY(18px) scale(.97)';
card.style.transition=`opacity .45s ease ${i*.06}s, transform .45s cubic-bezier(.22,1,.36,1) ${i*.06}s`;
requestAnimationFrame(()=>requestAnimationFrame(()=>{ card.style.opacity=''; card.style.transform=''; }));
});
obs.unobserve(section);
});
},{threshold:0.04});
document.querySelectorAll('.home-section,.spot-section,.kf-section').forEach(s=>obs.observe(s));
})();
// ── Drag to scroll ─────────────────────────────────────────────────────────────
document.querySelectorAll('.h-scroll,.sl-scroll').forEach(el=>{
let isDown=false,startX=0,scrollLeft=0,moved=false;
el.addEventListener('mousedown',e=>{isDown=true;moved=false;startX=e.pageX-el.offsetLeft;scrollLeft=el.scrollLeft;el.style.cursor='grabbing';});
el.addEventListener('mouseleave',()=>{isDown=false;el.style.cursor='';});
el.addEventListener('mouseup',()=>{isDown=false;el.style.cursor='';});
el.addEventListener('mousemove',e=>{
if(!isDown) return;
e.preventDefault();
const x=e.pageX-el.offsetLeft;
const walk=(x-startX)*1.6;
if(Math.abs(walk)>5) moved=true;
el.scrollLeft=scrollLeft-walk;
});
el.addEventListener('click',e=>{if(moved){e.preventDefault();moved=false;}});
});
</script>
@if(auth()->check() && $userWatchTitles)
<script>window.USER_WATCH_CTX = @json($userWatchTitles);</script>
@endif
@endpush