Initial commit: Animexe Laravel platform

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-14 00:01:48 +03:00
co-authored by Claude Opus 4.8
commit a63515cfc6
366 changed files with 74773 additions and 0 deletions
@@ -0,0 +1,129 @@
@extends('frontend.layouts.app')
@section('title', 'Aktivasyon Kodu Gir — Animexe Premium')
@push('styles')
<style>
#pg{background:#06060d;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:80px 20px 60px}
.act-card{
width:100%;max-width:480px;
background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.09);
border-radius:24px;padding:44px 40px 40px;position:relative;overflow:hidden;
}
.act-card::before{
content:'';position:absolute;top:-80px;left:50%;transform:translateX(-50%);
width:280px;height:200px;border-radius:50%;
background:radial-gradient(rgba(0,245,255,.1),transparent 70%);
pointer-events:none;
}
.act-icon{
width:64px;height:64px;border-radius:18px;margin:0 auto 20px;
background:linear-gradient(135deg,rgba(0,245,255,.15),rgba(184,77,255,.12));
border:1px solid rgba(0,245,255,.2);
display:flex;align-items:center;justify-content:center;font-size:1.8rem;color:#00f5ff;
position:relative;z-index:1;
}
.act-title{font-size:1.4rem;font-weight:900;color:#fff;text-align:center;margin-bottom:6px;position:relative;z-index:1}
.act-sub{font-size:.85rem;color:rgba(255,255,255,.4);text-align:center;margin-bottom:32px;line-height:1.6;position:relative;z-index:1}
.act-label{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:rgba(255,255,255,.4);margin-bottom:8px}
.act-input{
width:100%;background:rgba(255,255,255,.06);border:1.5px solid rgba(0,245,255,.2);
border-radius:14px;padding:16px 20px;color:#fff;font-size:1.1rem;font-weight:800;
letter-spacing:.18em;text-align:center;text-transform:uppercase;outline:none;
font-family:inherit;transition:border-color .2s,box-shadow .2s;box-sizing:border-box;
}
.act-input::placeholder{letter-spacing:.05em;font-weight:400;text-transform:none;font-size:.9rem;color:rgba(255,255,255,.25)}
.act-input:focus{border-color:#00f5ff;box-shadow:0 0 0 4px rgba(0,245,255,.1)}
.act-input.is-invalid{border-color:#ff2d7d!important;box-shadow:0 0 0 4px rgba(255,45,125,.1)!important}
.act-error{
display:flex;align-items:center;gap:7px;
padding:11px 14px;border-radius:10px;margin-top:10px;
background:rgba(255,45,125,.08);border:1px solid rgba(255,45,125,.2);
font-size:.82rem;color:#ff2d7d;font-weight:600;
}
.act-btn{
width:100%;padding:15px;border-radius:14px;border:none;cursor:pointer;font-family:inherit;
font-size:.95rem;font-weight:800;letter-spacing:.03em;margin-top:18px;
background:linear-gradient(135deg,#00f5ff 0%,#0080ff 60%,#b84dff 100%);
color:#06060d;box-shadow:0 0 30px rgba(0,245,255,.2),0 6px 20px rgba(0,0,0,.4);
transition:transform .15s,box-shadow .15s;
}
.act-btn:hover{transform:translateY(-2px);box-shadow:0 0 40px rgba(0,245,255,.35),0 8px 28px rgba(0,0,0,.5)}
.act-divider{display:flex;align-items:center;gap:12px;margin:22px 0;color:rgba(255,255,255,.18);font-size:.75rem}
.act-divider::before,.act-divider::after{content:'';flex:1;height:1px;background:rgba(255,255,255,.08)}
.act-back{
display:flex;align-items:center;justify-content:center;gap:7px;
padding:12px;border-radius:12px;border:1px solid rgba(255,255,255,.1);
background:rgba(255,255,255,.04);color:rgba(255,255,255,.5);
font-size:.84rem;font-weight:700;text-decoration:none;transition:all .15s;
}
.act-back:hover{border-color:rgba(255,255,255,.2);color:#fff;background:rgba(255,255,255,.08)}
.act-hint{
margin-top:20px;padding:12px 16px;border-radius:10px;
background:rgba(0,245,255,.04);border:1px solid rgba(0,245,255,.1);
font-size:.76rem;color:rgba(255,255,255,.35);line-height:1.55;text-align:center;
}
.act-hint strong{color:rgba(0,245,255,.7)}
</style>
@endpush
@section('content')
<div id="pg">
<div class="act-card">
<div class="act-icon"><i class="bi bi-key-fill"></i></div>
<h1 class="act-title">Aktivasyon Kodu Gir</h1>
<p class="act-sub">Satın alma sonrası aldığın kodu girerek Premium üyeliğini hemen aktifleştir.</p>
@guest
<div style="text-align:center;padding:8px 0 16px">
<a href="{{ route('frontend.login') }}?next={{ urlencode(route('premium.activate')) }}"
style="display:inline-flex;align-items:center;gap:8px;padding:13px 28px;border-radius:12px;background:linear-gradient(135deg,#00f5ff,#b84dff);color:#06060d;font-weight:800;font-size:.9rem;text-decoration:none">
<i class="bi bi-box-arrow-in-right"></i> Giriş Yap
</a>
<div style="margin-top:12px;font-size:.78rem;color:rgba(255,255,255,.3)">
Hesabın yoksa <a href="{{ route('frontend.register') }}" style="color:#00f5ff;font-weight:700">kayıt ol</a>
</div>
</div>
@else
<form method="POST" action="{{ route('premium.activate.redeem') }}">
@csrf
<div class="act-label">Aktivasyon Kodu</div>
<input type="text" name="code" id="act-inp"
class="act-input {{ $errors->has('code') ? 'is-invalid' : '' }}"
placeholder="XXXX-XXXX-XXXX"
value="{{ old('code') }}"
maxlength="32" autocomplete="off" autocapitalize="characters" spellcheck="false"
autofocus>
@if($errors->has('code'))
<div class="act-error"><i class="bi bi-exclamation-circle-fill"></i> {{ $errors->first('code') }}</div>
@endif
<button type="submit" class="act-btn">
<i class="bi bi-lightning-charge-fill me-1"></i> Aktifleştir
</button>
</form>
<div class="act-hint">
Kod formatı: <strong>XXXX-XXXX-XXXX</strong> (büyük harf + tire)<br>
Kodu doğru girdiğinden emin ol. Büyük/küçük harf fark etmez.
</div>
@endguest
<div class="act-divider">veya</div>
<a href="{{ route('premium.plans') }}" class="act-back">
<i class="bi bi-arrow-left"></i> Premium Planlarına Dön
</a>
</div>
</div>
@auth
<script>
(function(){
const inp = document.getElementById('act-inp');
if(!inp) return;
inp.addEventListener('input', function(){
let v = this.value.replace(/[^A-Za-z0-9]/g,'').toUpperCase();
const parts = v.match(/.{1,4}/g) || [];
this.value = parts.join('-').slice(0, 14);
});
})();
</script>
@endauth
@endsection
@@ -0,0 +1,662 @@
@extends('frontend.layouts.app')
@section('title', 'Animexe Premium — Anime Deneyimini Zirveye Taşı')
@section('meta_description', 'Animexe Premium ile reklamsız izle, özel kozmotikler kazan, erken erişim fırsatlarından yararlan.')
@push('styles')
<style>
:root{--prm-cyan:#00f5ff;--prm-pink:#ff2d7d;--prm-purple:#b84dff;--prm-gold:#ffd60a;--prm-bg:#06060d}
/* ── Genel ── */
#pg{background:var(--prm-bg);min-height:100vh}
.prm-wrap{max-width:1160px;margin:0 auto;padding:0 20px 80px}
/* ── Hero ── */
.prm-hero{
position:relative;text-align:center;
padding:100px 20px 80px;overflow:hidden;
}
.prm-hero-bg{
position:absolute;inset:0;z-index:0;
background:radial-gradient(ellipse 80% 60% at 50% 0%,rgba(0,245,255,.09) 0%,transparent 70%),
radial-gradient(ellipse 50% 40% at 80% 30%,rgba(184,77,255,.07) 0%,transparent 60%),
radial-gradient(ellipse 40% 30% at 20% 60%,rgba(255,45,125,.06) 0%,transparent 60%);
}
/* Yıldız parçacıkları */
.prm-stars{position:absolute;inset:0;z-index:0;pointer-events:none}
.prm-stars span{
position:absolute;width:2px;height:2px;border-radius:50%;
background:#fff;animation:twinkle var(--d,3s) ease-in-out infinite var(--delay,0s);
opacity:0;
}
@keyframes twinkle{0%,100%{opacity:0;transform:scale(1)}50%{opacity:.7;transform:scale(1.4)}}
.prm-hero-inner{position:relative;z-index:1}
.prm-hero-badge{
display:inline-flex;align-items:center;gap:7px;
padding:6px 16px;border-radius:30px;
background:rgba(0,245,255,.08);border:1px solid rgba(0,245,255,.25);
font-size:.75rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
color:var(--prm-cyan);margin-bottom:24px;
}
.prm-hero-badge i{font-size:.85rem}
.prm-hero-title{
font-size:clamp(2.2rem,5vw,3.8rem);font-weight:900;line-height:1.15;
margin-bottom:16px;letter-spacing:-.02em;
}
.prm-hero-title .grad{
background:linear-gradient(120deg,var(--prm-cyan) 0%,var(--prm-purple) 50%,var(--prm-pink) 100%);
-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
}
.prm-hero-sub{font-size:1.08rem;color:rgba(255,255,255,.5);max-width:560px;margin:0 auto 40px;line-height:1.65}
.prm-hero-stats{display:flex;gap:32px;justify-content:center;flex-wrap:wrap;margin-bottom:8px}
.prm-stat{display:flex;flex-direction:column;align-items:center;gap:2px}
.prm-stat-val{font-size:1.5rem;font-weight:900;color:#fff;line-height:1}
.prm-stat-lbl{font-size:.7rem;color:rgba(255,255,255,.35);text-transform:uppercase;letter-spacing:.08em}
/* ── Aktivasyon başarı banner ── */
.prm-success-banner{
display:flex;align-items:center;gap:14px;
padding:16px 22px;border-radius:14px;margin-bottom:32px;
background:rgba(50,220,100,.08);border:1px solid rgba(50,220,100,.3);
animation:slideDown .4s ease;
}
@keyframes slideDown{from{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:none}}
.prm-success-banner i{font-size:1.6rem;color:#32dc64;flex-shrink:0}
.prm-success-banner strong{color:#32dc64;font-size:.95rem;display:block;margin-bottom:2px}
.prm-success-banner span{font-size:.8rem;color:rgba(255,255,255,.5)}
/* ── Planlar grid ── */
.prm-section-lbl{
text-align:center;margin-bottom:48px;
}
.prm-section-lbl h2{font-size:1.6rem;font-weight:800;color:#fff;margin-bottom:8px}
.prm-section-lbl p{font-size:.9rem;color:rgba(255,255,255,.4)}
.prm-plans{
display:grid;grid-template-columns:repeat(3,1fr);gap:18px;
margin-bottom:72px;
}
@media(max-width:900px){.prm-plans{grid-template-columns:1fr}}
.prm-card{
position:relative;border-radius:20px;padding:32px 26px 28px;
background:rgba(255,255,255,.03);
border:1px solid rgba(255,255,255,.08);
transition:transform .2s ease,border-color .2s ease,box-shadow .2s ease;
display:flex;flex-direction:column;
}
.prm-card:hover{transform:translateY(-4px);border-color:rgba(255,255,255,.15);box-shadow:0 20px 60px rgba(0,0,0,.4)}
.prm-card.featured{
background:linear-gradient(145deg,rgba(0,245,255,.06) 0%,rgba(184,77,255,.05) 60%,rgba(255,45,125,.05) 100%);
border-color:rgba(0,245,255,.3);
box-shadow:0 0 0 1px rgba(0,245,255,.1),0 20px 60px rgba(0,245,255,.08);
}
.prm-card.featured:hover{box-shadow:0 0 0 1px rgba(0,245,255,.2),0 28px 70px rgba(0,245,255,.14)}
/* Badge */
.prm-card-badge{
position:absolute;top:-13px;left:50%;transform:translateX(-50%);
padding:4px 18px;border-radius:20px;font-size:.7rem;font-weight:800;
letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;
background:linear-gradient(90deg,var(--prm-cyan),var(--prm-purple));
color:#06060d;box-shadow:0 0 20px rgba(0,245,255,.3);
}
.prm-card-badge.gold{background:linear-gradient(90deg,#ffd60a,#ff9f0a);box-shadow:0 0 20px rgba(255,214,10,.3)}
.prm-card-badge.pink{background:linear-gradient(90deg,var(--prm-pink),var(--prm-purple));box-shadow:0 0 20px rgba(255,45,125,.3)}
/* Plan içerik */
.prm-plan-name{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:rgba(255,255,255,.4);margin-bottom:10px}
.prm-plan-price-wrap{margin-bottom:6px;line-height:1}
.prm-plan-price{font-size:2.8rem;font-weight:900;color:#fff;letter-spacing:-.04em}
.prm-plan-currency{font-size:1.2rem;font-weight:700;color:rgba(255,255,255,.6);vertical-align:top;margin-top:8px;display:inline-block}
.prm-plan-period{font-size:.8rem;color:rgba(255,255,255,.35);margin-top:4px}
.prm-plan-per-day{font-size:.72rem;color:rgba(255,255,255,.25);margin-bottom:4px}
.prm-plan-trial{
display:inline-flex;align-items:center;gap:5px;
padding:3px 10px;border-radius:10px;
background:rgba(255,214,10,.1);border:1px solid rgba(255,214,10,.25);
font-size:.7rem;font-weight:700;color:#ffd60a;margin-bottom:18px;
}
.prm-divider{height:1px;background:rgba(255,255,255,.07);margin:18px 0}
/* Feature list */
.prm-features{list-style:none;padding:0;margin:0 0 24px;display:flex;flex-direction:column;gap:9px;flex:1}
.prm-features li{display:flex;align-items:flex-start;gap:9px;font-size:.83rem;color:rgba(255,255,255,.65);line-height:1.4}
.prm-features li i.bi-check-circle-fill{color:var(--prm-cyan);font-size:.85rem;flex-shrink:0;margin-top:1px}
.prm-features li i.bi-x-circle{color:rgba(255,255,255,.15);font-size:.85rem;flex-shrink:0;margin-top:1px}
.prm-features li.dim{color:rgba(255,255,255,.2)}
/* CTA Buton */
.prm-btn-buy{
display:flex;align-items:center;justify-content:center;gap:8px;
width:100%;padding:13px;border-radius:12px;border:none;
font-size:.9rem;font-weight:800;cursor:pointer;font-family:inherit;
text-decoration:none;letter-spacing:.02em;
transition:transform .15s,box-shadow .15s,opacity .15s;
margin-top:auto;
}
.prm-btn-buy:hover{transform:translateY(-2px)}
.prm-btn-buy.primary{
background:linear-gradient(135deg,var(--prm-cyan) 0%,#0080ff 60%,var(--prm-purple) 100%);
color:#06060d;box-shadow:0 0 30px rgba(0,245,255,.25),0 6px 20px rgba(0,0,0,.4);
}
.prm-btn-buy.primary:hover{box-shadow:0 0 40px rgba(0,245,255,.4),0 8px 28px rgba(0,0,0,.5)}
.prm-btn-buy.outline{
background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);
color:rgba(255,255,255,.75);
}
.prm-btn-buy.outline:hover{background:rgba(255,255,255,.09);border-color:rgba(255,255,255,.25);color:#fff}
.prm-btn-buy.active-plan{
background:rgba(50,220,100,.08);border:1px solid rgba(50,220,100,.3);
color:#32dc64;cursor:default;
}
.prm-btn-buy.active-plan:hover{transform:none}
.prm-btn-buy.disabled{
background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.07);
color:rgba(255,255,255,.2);cursor:not-allowed;
}
.prm-btn-buy.disabled:hover{transform:none}
/* ── Nasıl Çalışır ── */
.prm-how{
display:grid;grid-template-columns:repeat(3,1fr);gap:2px;
margin-bottom:72px;background:rgba(255,255,255,.04);
border:1px solid rgba(255,255,255,.07);border-radius:20px;overflow:hidden;
}
@media(max-width:700px){.prm-how{grid-template-columns:1fr}}
.prm-how-step{
padding:32px 28px;position:relative;
background:rgba(6,6,13,.6);
}
.prm-how-step:not(:last-child)::after{
content:'';position:absolute;right:0;top:20%;bottom:20%;
width:1px;background:rgba(255,255,255,.07);
}
@media(max-width:700px){.prm-how-step:not(:last-child)::after{display:none}}
.prm-how-num{
width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;
font-size:1.1rem;font-weight:900;margin-bottom:16px;
}
.prm-how-num.c1{background:rgba(0,245,255,.12);color:var(--prm-cyan)}
.prm-how-num.c2{background:rgba(184,77,255,.12);color:var(--prm-purple)}
.prm-how-num.c3{background:rgba(50,220,100,.12);color:#32dc64}
.prm-how-step h3{font-size:.95rem;font-weight:800;color:#fff;margin-bottom:8px}
.prm-how-step p{font-size:.8rem;color:rgba(255,255,255,.4);line-height:1.6;margin:0}
/* ── Aktivasyon Kutusu ── */
.prm-activate-box{
border-radius:20px;padding:44px 36px;margin-bottom:72px;
background:linear-gradient(135deg,rgba(0,245,255,.04),rgba(184,77,255,.03));
border:1px solid rgba(0,245,255,.15);
text-align:center;position:relative;overflow:hidden;
}
.prm-activate-box::before{
content:'';position:absolute;top:-60px;left:50%;transform:translateX(-50%);
width:300px;height:200px;border-radius:50%;
background:radial-gradient(rgba(0,245,255,.08),transparent 70%);
pointer-events:none;
}
.prm-activate-box h2{font-size:1.45rem;font-weight:800;color:#fff;margin-bottom:8px}
.prm-activate-box p{font-size:.88rem;color:rgba(255,255,255,.4);margin-bottom:28px;line-height:1.6}
.prm-code-form{display:flex;gap:10px;max-width:500px;margin:0 auto;flex-wrap:wrap;justify-content:center}
.prm-code-input{
flex:1;min-width:220px;
background:rgba(255,255,255,.06);border:1px solid rgba(0,245,255,.25);
border-radius:12px;padding:14px 18px;color:#fff;font-size:1rem;font-weight:700;
letter-spacing:.12em;text-align:center;text-transform:uppercase;outline:none;
font-family:inherit;transition:border-color .2s,box-shadow .2s;
}
.prm-code-input::placeholder{letter-spacing:.05em;font-weight:400;text-transform:none;font-size:.88rem;color:rgba(255,255,255,.3)}
.prm-code-input:focus{border-color:var(--prm-cyan);box-shadow:0 0 0 3px rgba(0,245,255,.12)}
.prm-code-input.is-invalid{border-color:var(--prm-pink)!important;box-shadow:0 0 0 3px rgba(255,45,125,.1)!important}
.prm-code-btn{
padding:14px 28px;border-radius:12px;border:none;cursor:pointer;font-family:inherit;
font-size:.9rem;font-weight:800;letter-spacing:.03em;
background:linear-gradient(135deg,var(--prm-cyan),var(--prm-purple));
color:#06060d;box-shadow:0 0 24px rgba(0,245,255,.2);
transition:transform .15s,box-shadow .15s;
}
.prm-code-btn:hover{transform:translateY(-2px);box-shadow:0 0 36px rgba(0,245,255,.35)}
.prm-code-error{
width:100%;text-align:center;font-size:.8rem;color:var(--prm-pink);
margin-top:8px;font-weight:600;
}
.prm-activate-login-note{
margin-top:14px;font-size:.78rem;color:rgba(255,255,255,.3);
}
.prm-activate-login-note a{color:var(--prm-cyan);text-decoration:none;font-weight:700}
.prm-activate-login-note a:hover{text-decoration:underline}
/* ── Özellik Showcase ── */
.prm-features-grid{
display:grid;grid-template-columns:repeat(2,1fr);gap:32px;margin-bottom:72px;
}
@media(max-width:700px){.prm-features-grid{grid-template-columns:1fr}}
.prm-feat-cat{
background:rgba(255,255,255,.025);border:1px solid rgba(255,255,255,.07);
border-radius:16px;padding:24px;
}
.prm-feat-cat-hdr{
display:flex;align-items:center;gap:10px;margin-bottom:18px;padding-bottom:14px;
border-bottom:1px solid rgba(255,255,255,.06);
}
.prm-feat-cat-icon{
width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;
font-size:1rem;flex-shrink:0;
}
.prm-feat-cat-hdr h3{font-size:.9rem;font-weight:800;color:#fff;margin:0}
.prm-feat-list{display:flex;flex-direction:column;gap:10px}
.prm-feat-item{display:flex;align-items:flex-start;gap:10px}
.prm-feat-item-icon{
width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;
font-size:.75rem;flex-shrink:0;margin-top:1px;
}
.prm-feat-item-body{flex:1;min-width:0}
.prm-feat-item-name{font-size:.82rem;font-weight:700;color:rgba(255,255,255,.8);margin-bottom:2px}
.prm-feat-item-desc{font-size:.72rem;color:rgba(255,255,255,.35);line-height:1.45}
/* Kozmetik Preview */
.prm-cosmetics{
margin-bottom:72px;text-align:center;
}
.prm-cosmetics-title{font-size:1.35rem;font-weight:800;color:#fff;margin-bottom:8px}
.prm-cosmetics-sub{font-size:.85rem;color:rgba(255,255,255,.35);margin-bottom:36px}
.prm-cosmetics-grid{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-bottom:28px}
/* Username color chips */
.uc-chip{
padding:5px 16px;border-radius:20px;font-size:.82rem;font-weight:700;
background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);
cursor:default;white-space:nowrap;
}
/* Frame badges */
.frame-badge{
width:52px;height:52px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;
font-size:1.2rem;font-weight:800;color:#fff;position:relative;
}
.frame-badge::before{
content:'';position:absolute;inset:-3px;border-radius:50%;
animation:frame-spin 3s linear infinite;
}
@keyframes frame-spin{to{transform:rotate(360deg)}}
.frame-badge.fr-neon::before{background:conic-gradient(#00f5ff,#b84dff,#00f5ff)}
.frame-badge.fr-fire::before{background:conic-gradient(#ff6b35,#ff2d7d,#ff8c00,#ff6b35)}
.frame-badge.fr-galaxy::before{background:conic-gradient(#7c3aed,#b84dff,#4a1d96,#7c3aed)}
.frame-badge.fr-gold::before{background:conic-gradient(#ffd700,#ff8c00,#ffd700)}
.frame-badge.fr-sakura::before{background:conic-gradient(#ff9ec4,#ff2d7d,#ffd6e7,#ff9ec4)}
.frame-badge.fr-rainbow::before{background:conic-gradient(#f00,#ff8c00,#ffd700,#0c0,#08f,#8b00ff,#f08,#f00)}
.frame-badge.fr-ice::before{background:conic-gradient(#a8edff,#60cfff,#a8edff)}
.frame-badge-inner{position:relative;z-index:1;width:44px;height:44px;border-radius:50%;background:#111;display:flex;align-items:center;justify-content:center;font-size:.65rem;text-align:center;padding:2px;color:rgba(255,255,255,.7)}
/* Comment bg preview */
.cb-preview{
padding:10px 16px;border-radius:10px;font-size:.8rem;color:#fff;font-weight:600;
white-space:nowrap;position:relative;overflow:hidden;
}
.cb-preview::before{content:'';position:absolute;inset:0;opacity:.7}
.cb-fire::before{background:linear-gradient(135deg,#ff6b35,#ff2d7d)}
.cb-aurora::before{background:linear-gradient(135deg,#00c8d4,#b84dff)}
.cb-stars::before{background:linear-gradient(135deg,#1a1a3a,#4a1d96)}
.cb-sakura::before{background:linear-gradient(135deg,#ff9ec4,#ff2d7d)}
.cb-neon::before{background:linear-gradient(135deg,#00f5ff,#0040ff)}
.cb-galaxy::before{background:linear-gradient(135deg,#0a0020,#7c3aed)}
.cb-ice::before{background:linear-gradient(135deg,#a8edff,#006fbf)}
.cb-preview span{position:relative;z-index:1}
/* ── FAQ ── */
.prm-faq{margin-bottom:48px}
.prm-faq h2{font-size:1.35rem;font-weight:800;color:#fff;margin-bottom:28px;text-align:center}
.prm-faq-item{
border-bottom:1px solid rgba(255,255,255,.06);overflow:hidden;
}
.prm-faq-q{
display:flex;align-items:center;justify-content:space-between;
padding:16px 4px;cursor:pointer;font-size:.9rem;font-weight:700;color:rgba(255,255,255,.75);
transition:color .15s;user-select:none;
background:none;border:none;width:100%;text-align:left;font-family:inherit;
gap:12px;
}
.prm-faq-q:hover{color:#fff}
.prm-faq-q i{flex-shrink:0;transition:transform .25s ease;color:rgba(255,255,255,.3)}
.prm-faq-item.open .prm-faq-q i{transform:rotate(45deg);color:var(--prm-cyan)}
.prm-faq-a{
max-height:0;overflow:hidden;
transition:max-height .3s ease,padding .3s ease;
font-size:.84rem;color:rgba(255,255,255,.45);line-height:1.7;padding:0 4px;
}
.prm-faq-item.open .prm-faq-a{max-height:200px;padding-bottom:16px}
/* ── Mevcut Plan Banner ── */
.prm-active-banner{
display:flex;align-items:center;gap:16px;padding:18px 24px;border-radius:14px;
background:rgba(0,245,255,.06);border:1px solid rgba(0,245,255,.2);margin-bottom:36px;
flex-wrap:wrap;
}
.prm-active-banner i{font-size:1.8rem;color:var(--prm-cyan);flex-shrink:0}
.prm-active-banner-body{flex:1;min-width:0}
.prm-active-banner-title{font-size:.95rem;font-weight:800;color:#fff;margin-bottom:2px}
.prm-active-banner-sub{font-size:.78rem;color:rgba(255,255,255,.4)}
.prm-active-banner-action{flex-shrink:0}
.prm-active-banner-action a{
padding:9px 20px;border-radius:10px;border:1px solid rgba(0,245,255,.3);
background:rgba(0,245,255,.07);color:var(--prm-cyan);font-size:.8rem;font-weight:700;
text-decoration:none;transition:all .15s;white-space:nowrap;display:inline-block;
}
.prm-active-banner-action a:hover{background:rgba(0,245,255,.14);border-color:var(--prm-cyan)}
@media(max-width:600px){
.prm-hero{padding:72px 16px 56px}
.prm-activate-box{padding:32px 20px}
.prm-how-step{padding:24px 20px}
.prm-card{padding:26px 20px 22px}
}
</style>
@endpush
@section('content')
<div id="pg">
<div class="prm-hero">
<div class="prm-hero-bg"></div>
<div class="prm-stars" id="prm-stars"></div>
<div class="prm-hero-inner">
<div class="prm-hero-badge"><i class="bi bi-stars"></i> Animexe Premium</div>
<h1 class="prm-hero-title">
Anime deneyimini<br><span class="grad">zirveye taşı</span>
</h1>
<p class="prm-hero-sub">
Reklamsız izleme, özel profil kozmetikleri, erken bölüm erişimi ve daha fazlası hepsi tek bir Premium üyelikte.
</p>
<div class="prm-hero-stats">
<div class="prm-stat"><span class="prm-stat-val"></span><span class="prm-stat-lbl">İçerik</span></div>
<div class="prm-stat"><span class="prm-stat-val">{{ count($featureGroups ?? []) > 0 ? array_sum(array_map(fn($g) => count($g['perks']), $featureGroups)) : '20+' }}</span><span class="prm-stat-lbl">Özel Özellik</span></div>
<div class="prm-stat"><span class="prm-stat-val">7/24</span><span class="prm-stat-lbl">Destek</span></div>
</div>
</div>
</div>
<div class="prm-wrap">
{{-- Aktivasyon başarı mesajı --}}
@if(session('activation_success'))
<div class="prm-success-banner">
<i class="bi bi-patch-check-fill"></i>
<div>
<strong>Premium aktif! 🎉 {{ session('activation_success.plan') }} planına hoş geldin.</strong>
<span>Üyeliğin {{ session('activation_success.expires_at') }} tarihine kadar geçerli.</span>
</div>
</div>
@endif
{{-- Mevcut premium kullanıcı banner --}}
@auth
@if(auth()->user()->isPremium())
<div class="prm-active-banner">
<i class="bi bi-shield-fill-check"></i>
<div class="prm-active-banner-body">
<div class="prm-active-banner-title">Premium üyeliğin aktif 🎉</div>
<div class="prm-active-banner-sub">
Bitiş tarihi: {{ auth()->user()->premium_expires_at?->format('d MMMM Y') ?? auth()->user()->premium_expires_at?->format('d.m.Y') }}
&nbsp;·&nbsp; Süre uzatmak için aşağıdan yeni bir plan satın alabilirsin.
</div>
</div>
<div class="prm-active-banner-action">
<a href="{{ route('profile') }}"><i class="bi bi-person-circle me-1"></i>Profili Gör</a>
</div>
</div>
@endif
@endauth
{{-- Planlar --}}
@if(count($plans ?? []) > 0)
<div class="prm-section-lbl">
<h2>Planını Seç</h2>
<p>Tüm planlar aynı özellikleri içerir süre ne kadar uzunsa o kadar tasarruf edersin.</p>
</div>
<div class="prm-plans">
@foreach($plans as $idx => $plan)
@php
$isFeatured = $plan->badge_label && $idx == 1 || ($plan->badge_label && str_contains(strtolower($plan->badge_label), 'popül'));
$isActive = auth()->check() && auth()->user()->subscriptions()->where('plan_id', $plan->id)->where('status','active')->exists();
$perDay = $plan->duration_days > 0 ? round($plan->price / $plan->duration_days, 2) : 0;
$accentCls = $isFeatured ? 'featured' : '';
@endphp
<div class="prm-card {{ $accentCls }}">
@if($plan->badge_label)
@php
$badgeCls = match(true) {
str_contains(strtolower($plan->badge_label), 'değer') => 'gold',
str_contains(strtolower($plan->badge_label), 'popül') => '',
default => 'pink',
};
@endphp
<div class="prm-card-badge {{ $badgeCls }}">{{ $plan->badge_label }}</div>
@endif
<div class="prm-plan-name">{{ $plan->name }}</div>
<div class="prm-plan-price-wrap">
<span class="prm-plan-currency"></span><span class="prm-plan-price">{{ number_format($plan->price, 0, ',', '.') }}</span>
</div>
<div class="prm-plan-period">
@if($plan->duration_days >= 365)
{{ intdiv($plan->duration_days, 365) }} yıl
@elseif($plan->duration_days >= 30)
{{ intdiv($plan->duration_days, 30) }} ay
@else
{{ $plan->duration_days }} gün
@endif
&nbsp;·&nbsp; Günde {{ $perDay }}
</div>
@if($plan->trial_days)
<div class="prm-plan-trial"><i class="bi bi-gift-fill"></i> İlk {{ $plan->trial_days }} gün ücretsiz!</div>
@endif
<div class="prm-divider"></div>
@if(count($plan->features ?? []) > 0)
<ul class="prm-features">
@foreach($plan->features as $feat)
<li><i class="bi bi-check-circle-fill"></i> {{ $feat }}</li>
@endforeach
</ul>
@endif
@if($isActive)
<a class="prm-btn-buy active-plan"><i class="bi bi-check-circle-fill"></i> Mevcut Planın</a>
@elseif($plan->purchase_link)
<a href="{{ $plan->purchase_link }}" target="_blank" rel="noopener" class="prm-btn-buy {{ $isFeatured ? 'primary' : 'outline' }}">
<i class="bi bi-bag-fill"></i> Satın Al
</a>
@else
<span class="prm-btn-buy disabled"><i class="bi bi-clock"></i> Yakında</span>
@endif
</div>
@endforeach
</div>
@endif
{{-- Nasıl Çalışır --}}
<div class="prm-section-lbl">
<h2>Nasıl Çalışır?</h2>
<p>Üç adımda premium üyeliğini aktifleştir.</p>
</div>
<div class="prm-how">
<div class="prm-how-step">
<div class="prm-how-num c1"><i class="bi bi-1-circle-fill"></i></div>
<h3>Paket Seç & Öde</h3>
<p>Yukarıdaki planlardan birini seç, "Satın Al" butonuna tıkla ve güvenli ödeme sayfasına yönlendir. Ödemeyi tamamla.</p>
</div>
<div class="prm-how-step">
<div class="prm-how-num c2"><i class="bi bi-2-circle-fill"></i></div>
<h3>Aktivasyon Kodunu Al</h3>
<p>Ödemen onaylandıktan sonra sana özel bir aktivasyon kodu gönderilir. Bu kodu saklaman yeterli.</p>
</div>
<div class="prm-how-step">
<div class="prm-how-num c3"><i class="bi bi-3-circle-fill"></i></div>
<h3>Kodu Gir, Keyfini Çıkar</h3>
<p>Aşağıdaki kutuya aktivasyon kodunu gir. Anında aktif olur, tüm premium ayrıcalıklar hesabına yüklenir!</p>
</div>
</div>
{{-- Aktivasyon Kutusu --}}
<div class="prm-activate-box" id="activate">
<h2>Aktivasyon Kodun Var mı?</h2>
<p>Satın alma sonrası aldığın kodu girerek Premium üyeliğini hemen aktifleştir.</p>
@auth
<form method="POST" action="{{ route('premium.activate.redeem') }}" class="prm-code-form">
@csrf
<input type="text" name="code" id="prm-code-inp" class="prm-code-input {{ $errors->has('code') ? 'is-invalid' : '' }}"
placeholder="XXXX-XXXX-XXXX" maxlength="32" autocomplete="off" autocapitalize="characters"
value="{{ old('code') }}" spellcheck="false">
<button type="submit" class="prm-code-btn"><i class="bi bi-lightning-fill me-1"></i>Aktifleştir</button>
@if($errors->has('code'))
<div class="prm-code-error"><i class="bi bi-exclamation-circle me-1"></i>{{ $errors->first('code') }}</div>
@endif
</form>
@else
<form class="prm-code-form">
<input type="text" class="prm-code-input" placeholder="XXXX-XXXX-XXXX" disabled>
<button type="button" onclick="window.location.href='{{ route('frontend.register') }}?next={{ urlencode(route('premium.activate')) }}'" class="prm-code-btn">
<i class="bi bi-person-plus-fill me-1"></i>Giriş Yap & Aktifleştir
</button>
</form>
<div class="prm-activate-login-note">
Aktivasyon kodu kullanmak için <a href="{{ route('frontend.register') }}">üye olman</a> veya <a href="{{ route('frontend.login') }}">giriş yapman</a> gerekiyor.
</div>
@endauth
</div>
{{-- Özellikler Showcase --}}
@if(count($featureGroups ?? []) > 0)
<div class="prm-section-lbl">
<h2>Premium Ayrıcalıklar</h2>
<p>Premium üyeliğinle birlikte gelen tüm özellikler.</p>
</div>
<div class="prm-features-grid">
@foreach($featureGroups as $group)
@php
$colors = [
'Profil' => ['bg'=>'rgba(184,77,255,.12)','color'=>'#b84dff','icon'=>'bi-person-circle'],
'İzleme' => ['bg'=>'rgba(0,245,255,.12)','color'=>'#00f5ff','icon'=>'bi-play-circle-fill'],
'Sosyal' => ['bg'=>'rgba(255,45,125,.12)','color'=>'#ff2d7d','icon'=>'bi-chat-heart-fill'],
'Hesap' => ['bg'=>'rgba(255,214,10,.12)','color'=>'#ffd60a','icon'=>'bi-shield-fill-check'],
];
$c = $colors[$group['label']] ?? ['bg'=>'rgba(255,255,255,.08)','color'=>'#fff','icon'=>'bi-star-fill'];
@endphp
<div class="prm-feat-cat">
<div class="prm-feat-cat-hdr">
<div class="prm-feat-cat-icon" style="background:{{ $c['bg'] }};color:{{ $c['color'] }}">
<i class="bi {{ $c['icon'] }}"></i>
</div>
<h3>{{ $group['label'] }}</h3>
</div>
<div class="prm-feat-list">
@foreach(array_slice($group['perks'], 0, 6) as $perk)
<div class="prm-feat-item">
<div class="prm-feat-item-icon" style="background:{{ $c['bg'] }};color:{{ $c['color'] }}">
<i class="bi {{ $perk['icon'] ?? 'bi-check' }}"></i>
</div>
<div class="prm-feat-item-body">
<div class="prm-feat-item-name">{{ $perk['name'] }}</div>
@if(!empty($perk['desc']))<div class="prm-feat-item-desc">{{ $perk['desc'] }}</div>@endif
</div>
</div>
@endforeach
</div>
</div>
@endforeach
</div>
@endif
{{-- Kozmetik Preview --}}
<div class="prm-cosmetics">
<div class="prm-cosmetics-title">Profilini Kişiselleştir</div>
<div class="prm-cosmetics-sub">Premium üyeler için özel görsel özelleştirmeler</div>
<div style="display:flex;flex-wrap:wrap;gap:32px;justify-content:center;margin-bottom:36px">
<div style="text-align:center">
<div style="font-size:.7rem;text-transform:uppercase;letter-spacing:.1em;color:rgba(255,255,255,.3);margin-bottom:14px">Profil Çerçeveleri</div>
<div style="display:flex;gap:14px;flex-wrap:wrap;justify-content:center">
@foreach(['neon','fire','galaxy','gold','sakura','rainbow','ice'] as $fr)
<div class="frame-badge fr-{{ $fr }}">
<div class="frame-badge-inner">{{ Str::upper(substr($fr,0,2)) }}</div>
</div>
@endforeach
</div>
</div>
<div style="text-align:center">
<div style="font-size:.7rem;text-transform:uppercase;letter-spacing:.1em;color:rgba(255,255,255,.3);margin-bottom:14px">Yorum Arka Planları</div>
<div style="display:flex;gap:8px;flex-wrap:wrap;justify-content:center">
@foreach(['fire'=>'Ateş','aurora'=>'Aurora','stars'=>'Yıldız','sakura'=>'Sakura','neon'=>'Neon','galaxy'=>'Galaksi','ice'=>'Buz'] as $bg => $lbl)
<div class="cb-preview cb-{{ $bg }}"><span>{{ $lbl }}</span></div>
@endforeach
</div>
</div>
</div>
<div style="text-align:center">
<div style="font-size:.7rem;text-transform:uppercase;letter-spacing:.1em;color:rgba(255,255,255,.3);margin-bottom:14px">Kullanıcı Adı Renkleri</div>
<div style="display:flex;gap:8px;flex-wrap:wrap;justify-content:center">
@foreach([
['gradient'=>'linear-gradient(90deg,#00f5ff,#0080ff)','name'=>'Okyanus'],
['gradient'=>'linear-gradient(90deg,#ff2d7d,#b84dff)','name'=>'Galaksi'],
['gradient'=>'linear-gradient(90deg,#ffd700,#ff8c00)','name'=>'Altın'],
['gradient'=>'linear-gradient(90deg,#32dc64,#00c8d4)','name'=>'Orman'],
['gradient'=>'linear-gradient(90deg,#ff6b35,#ff2d7d)','name'=>'Ateş'],
['gradient'=>'linear-gradient(90deg,#a8edff,#006fbf)','name'=>'Buz'],
['gradient'=>'linear-gradient(90deg,#b84dff,#7c3aed)','name'=>'Mor'],
] as $uc)
<span class="uc-chip" style="background:{{ $uc['gradient'] }};-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;border-color:rgba(255,255,255,.12)">{{ $uc['name'] }}</span>
@endforeach
</div>
</div>
</div>
{{-- FAQ --}}
<div class="prm-faq">
<h2>Sık Sorulan Sorular</h2>
@foreach([
['s'=>'Ödeme yaptıktan sonra nasıl aktifleştiririm?','c'=>'Ödemen onaylandıktan sonra sana aktivasyon kodu gönderilir. Bu sayfadaki "Aktivasyon Kodun Var mı?" kısmına kodu girip "Aktifleştir" butonuna tıklaman yeterli.'],
['s'=>'Mevcut Premium üyeliğim varken başka bir kod girebilir miyim?','c'=>'Evet! Mevcut üyelik süren bitmeden kod girersen süreler üst üste eklenir (stack). Hiç süre kaybetmezsin.'],
['s'=>'Aktivasyon kodum çalışmıyorsa ne yapmalıyım?','c'=>'Kodu büyük harflerle ve tire işaretleriyle birlikte girdiğinden emin ol (XXXX-XXXX-XXXX). Sorun devam ederse destek hattına başvur.'],
['s'=>'Premium üyeliğimi iptal edebilir miyim?','c'=>'Premium üyeliğin süre tabanlıdır; otomatik yenileme yoktur. Süre dolunca normal hesabına dönersin.'],
['s'=>'Premium özellikler hangi cihazlarda çalışır?','c'=>'Tüm cihazlarda (bilgisayar, tablet, telefon) çalışır. Hesabına giriş yaptığın her yerde premium ayrıcalıklarını kullanabilirsin.'],
] as $faq)
<div class="prm-faq-item">
<button class="prm-faq-q" onclick="this.closest('.prm-faq-item').classList.toggle('open')">
<span>{{ $faq['s'] }}</span>
<i class="bi bi-plus-lg"></i>
</button>
<div class="prm-faq-a">{{ $faq['c'] }}</div>
</div>
@endforeach
</div>
</div>{{-- /prm-wrap --}}
</div>{{-- /pg --}}
<script>
// Yıldız parçacıkları
(function(){
const c = document.getElementById('prm-stars');
if(!c) return;
for(let i=0;i<60;i++){
const s = document.createElement('span');
s.style.cssText = `left:${Math.random()*100}%;top:${Math.random()*100}%;--d:${2+Math.random()*4}s;--delay:-${Math.random()*4}s`;
c.appendChild(s);
}
})();
// Kod input: otomatik büyük harf + tire formatı
(function(){
const inp = document.getElementById('prm-code-inp');
if(!inp) return;
inp.addEventListener('input', function(){
let v = this.value.replace(/[^A-Za-z0-9]/g,'').toUpperCase();
const parts = v.match(/.{1,4}/g) || [];
this.value = parts.join('-').slice(0, 14);
});
})();
</script>
@endsection