fix: sobre, contato, faq, etc.

This commit is contained in:
Ricardo Carneiro 2025-08-12 15:51:01 -03:00
parent 3feddbea11
commit 83e46a5782
9 changed files with 4074 additions and 39 deletions

View File

@ -87,6 +87,70 @@ namespace QRRapidoApp.Controllers
return View();
}
public IActionResult About()
{
var userId = User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;
ViewBag.ShowAds = _adDisplayService.ShouldShowAds(userId).Result;
ViewBag.IsPremium = _adDisplayService.HasValidPremiumSubscription(userId ?? "").Result;
ViewBag.IsAuthenticated = User.Identity?.IsAuthenticated ?? false;
ViewBag.UserName = User.Identity?.Name ?? "";
ViewBag.Title = _localizer["AboutPageTitle"];
ViewBag.Description = _localizer["AboutPageDescription"];
_adDisplayService.SetViewBagAds(ViewBag);
return View();
}
public IActionResult Contact()
{
var userId = User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;
ViewBag.ShowAds = _adDisplayService.ShouldShowAds(userId).Result;
ViewBag.IsPremium = _adDisplayService.HasValidPremiumSubscription(userId ?? "").Result;
ViewBag.IsAuthenticated = User.Identity?.IsAuthenticated ?? false;
ViewBag.UserName = User.Identity?.Name ?? "";
ViewBag.Title = _localizer["ContactPageTitle"];
ViewBag.Description = _localizer["ContactPageDescription"];
_adDisplayService.SetViewBagAds(ViewBag);
return View();
}
public IActionResult FAQ()
{
var userId = User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;
ViewBag.ShowAds = _adDisplayService.ShouldShowAds(userId).Result;
ViewBag.IsPremium = _adDisplayService.HasValidPremiumSubscription(userId ?? "").Result;
ViewBag.IsAuthenticated = User.Identity?.IsAuthenticated ?? false;
ViewBag.UserName = User.Identity?.Name ?? "";
ViewBag.Title = _localizer["FAQPageTitle"];
ViewBag.Description = _localizer["FAQPageDescription"];
_adDisplayService.SetViewBagAds(ViewBag);
return View();
}
public IActionResult HowToUse()
{
var userId = User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;
ViewBag.ShowAds = _adDisplayService.ShouldShowAds(userId).Result;
ViewBag.IsPremium = _adDisplayService.HasValidPremiumSubscription(userId ?? "").Result;
ViewBag.IsAuthenticated = User.Identity?.IsAuthenticated ?? false;
ViewBag.UserName = User.Identity?.Name ?? "";
ViewBag.Title = _localizer["HowToUsePageTitle"];
ViewBag.Description = _localizer["HowToUsePageDescription"];
_adDisplayService.SetViewBagAds(ViewBag);
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
@ -141,6 +205,54 @@ namespace QRRapidoApp.Controllers
<changefreq>daily</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://qrrapido.site/pt-BR/About</loc>
<lastmod>{DateTime.UtcNow:yyyy-MM-dd}</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://qrrapido.site/es-PY/About</loc>
<lastmod>{DateTime.UtcNow:yyyy-MM-dd}</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://qrrapido.site/pt-BR/Contact</loc>
<lastmod>{DateTime.UtcNow:yyyy-MM-dd}</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://qrrapido.site/es-PY/Contact</loc>
<lastmod>{DateTime.UtcNow:yyyy-MM-dd}</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://qrrapido.site/pt-BR/FAQ</loc>
<lastmod>{DateTime.UtcNow:yyyy-MM-dd}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://qrrapido.site/es-PY/FAQ</loc>
<lastmod>{DateTime.UtcNow:yyyy-MM-dd}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://qrrapido.site/pt-BR/HowToUse</loc>
<lastmod>{DateTime.UtcNow:yyyy-MM-dd}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://qrrapido.site/es-PY/HowToUse</loc>
<lastmod>{DateTime.UtcNow:yyyy-MM-dd}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://qrrapido.site/Premium/Upgrade</loc>
<lastmod>{DateTime.UtcNow:yyyy-MM-dd}</lastmod>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

261
Views/Home/About.cshtml Normal file
View File

@ -0,0 +1,261 @@
@using QRRapidoApp.Services
@using Microsoft.Extensions.Localization
@inject AdDisplayService AdService
@inject IStringLocalizer<QRRapidoApp.Resources.SharedResource> Localizer
@{
ViewData["Title"] = Localizer["About"];
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="container py-5">
<!-- Hero Section -->
<div class="row justify-content-center">
<div class="col-lg-8 text-center">
<div class="mb-5">
<h1 class="display-5 fw-bold text-primary mb-3">
<i class="fas fa-code me-3"></i>@Localizer["AboutQRRapido"]
</h1>
<p class="lead text-muted">@Localizer["AboutSubtitle"]</p>
</div>
</div>
</div>
<!-- Developer Info -->
<div class="row justify-content-center mb-5">
<div class="col-lg-10">
<div class="card shadow-lg border-0">
<div class="card-body p-5">
<div class="row align-items-center">
<div class="col-lg-8">
<h2 class="h3 text-primary mb-4">
<i class="fas fa-user-tie me-2"></i>@Localizer["AboutDeveloper"]
</h2>
<p class="mb-3">@Localizer["DeveloperDescription1"]</p>
<p class="mb-4">@Localizer["DeveloperDescription2"]</p>
<div class="row">
<div class="col-md-6">
<div class="d-flex align-items-center mb-3">
<i class="fas fa-map-marker-alt text-primary me-3"></i>
<div>
<strong>@Localizer["Location"]</strong><br>
<small class="text-muted">@Localizer["LocationDetail"]</small>
</div>
</div>
</div>
<div class="col-md-6">
<div class="d-flex align-items-center mb-3">
<i class="fas fa-code text-primary me-3"></i>
<div>
<strong>@Localizer["Specialization"]</strong><br>
<small class="text-muted">@Localizer["SpecializationDetail"]</small>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-4 text-center">
<div class="bg-light rounded p-4">
<i class="fas fa-laptop-code fa-4x text-primary mb-3"></i>
<h5 class="text-primary">@Localizer["EnterpriseExpert"]</h5>
<p class="small text-muted mb-0">@Localizer["EnterpriseExpertDesc"]</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Mission & Vision -->
<div class="row mb-5">
<div class="col-lg-6 mb-4">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body p-4">
<div class="text-center mb-3">
<i class="fas fa-bullseye fa-3x text-primary"></i>
</div>
<h4 class="text-center text-primary mb-3">@Localizer["OurMission"]</h4>
<p class="text-center">@Localizer["MissionDescription"]</p>
</div>
</div>
</div>
<div class="col-lg-6 mb-4">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body p-4">
<div class="text-center mb-3">
<i class="fas fa-lightbulb fa-3x text-warning"></i>
</div>
<h4 class="text-center text-primary mb-3">@Localizer["WhyWeCreated"]</h4>
<p class="text-center">@Localizer["WhyCreatedDescription"]</p>
</div>
</div>
</div>
</div>
<!-- Technology Stack -->
<div class="row mb-5">
<div class="col-12">
<div class="card border-0 shadow-sm">
<div class="card-body p-5">
<h3 class="text-center text-primary mb-4">
<i class="fas fa-cogs me-2"></i>@Localizer["TechnologyStack"]
</h3>
<p class="text-center text-muted mb-4">@Localizer["TechStackDescription"]</p>
<div class="row text-center">
<div class="col-md-3 mb-3">
<div class="tech-item p-3">
<i class="fab fa-microsoft fa-3x text-primary mb-2"></i>
<h6>ASP.NET Core</h6>
<small class="text-muted">@Localizer["TechBackend"]</small>
</div>
</div>
<div class="col-md-3 mb-3">
<div class="tech-item p-3">
<i class="fas fa-leaf fa-3x text-success mb-2"></i>
<h6>MongoDB</h6>
<small class="text-muted">@Localizer["TechDatabase"]</small>
</div>
</div>
<div class="col-md-3 mb-3">
<div class="tech-item p-3">
<i class="fab fa-bootstrap fa-3x text-purple mb-2"></i>
<h6>Bootstrap 5</h6>
<small class="text-muted">@Localizer["TechFrontend"]</small>
</div>
</div>
<div class="col-md-3 mb-3">
<div class="tech-item p-3">
<i class="fas fa-tachometer-alt fa-3x text-warning mb-2"></i>
<h6>@Localizer["HighPerformance"]</h6>
<small class="text-muted">@Localizer["TechPerformance"]</small>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Why QR Rapido -->
<div class="row mb-5">
<div class="col-12">
<div class="card border-primary">
<div class="card-header bg-primary text-white text-center">
<h4 class="mb-0">
<i class="fas fa-star me-2"></i>@Localizer["WhyChooseQRRapido"]
</h4>
</div>
<div class="card-body p-4">
<div class="row">
<div class="col-lg-6">
<div class="feature-list">
<div class="d-flex align-items-start mb-3">
<i class="fas fa-bolt text-warning me-3 mt-1"></i>
<div>
<h6>@Localizer["LightningFast"]</h6>
<small class="text-muted">@Localizer["FastDescription"]</small>
</div>
</div>
<div class="d-flex align-items-start mb-3">
<i class="fas fa-shield-alt text-success me-3 mt-1"></i>
<div>
<h6>@Localizer["SecureReliable"]</h6>
<small class="text-muted">@Localizer["SecureDescription"]</small>
</div>
</div>
<div class="d-flex align-items-start mb-3">
<i class="fas fa-mobile-alt text-info me-3 mt-1"></i>
<div>
<h6>@Localizer["MobileFriendly"]</h6>
<small class="text-muted">@Localizer["MobileDescription"]</small>
</div>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="feature-list">
<div class="d-flex align-items-start mb-3">
<i class="fas fa-language text-primary me-3 mt-1"></i>
<div>
<h6>@Localizer["Multilingual"]</h6>
<small class="text-muted">@Localizer["MultilingualDescription"]</small>
</div>
</div>
<div class="d-flex align-items-start mb-3">
<i class="fas fa-user-shield text-secondary me-3 mt-1"></i>
<div>
<h6>@Localizer["PrivacyFirst"]</h6>
<small class="text-muted">@Localizer["PrivacyDescription"]</small>
</div>
</div>
<div class="d-flex align-items-start mb-3">
<i class="fas fa-heart text-danger me-3 mt-1"></i>
<div>
<h6>@Localizer["MadeWithLove"]</h6>
<small class="text-muted">@Localizer["LoveDescription"]</small>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Professional Services CTA -->
<div class="row">
<div class="col-12">
<div class="card bg-dark text-white">
<div class="card-body p-5 text-center">
<h4 class="mb-3">@Localizer["NeedCustomDevelopment"]</h4>
<p class="mb-4">@Localizer["CustomDevelopmentDescription"]</p>
<div class="row justify-content-center">
<div class="col-md-8">
<div class="d-flex justify-content-center flex-wrap gap-3">
<span class="badge bg-primary p-2">C# / .NET</span>
<span class="badge bg-success p-2">RAG Systems</span>
<span class="badge bg-info p-2">@Localizer["EnterpriseAI"]</span>
<span class="badge bg-warning p-2">@Localizer["ScalableSystems"]</span>
</div>
<div class="mt-4">
<a href="https://jobmaker.com.br" target="_blank" class="btn btn-light btn-lg">
<i class="fas fa-external-link-alt me-2"></i>@Localizer["VisitJobMaker"]
</a>
<p class="small mt-2 text-light">@Localizer["JobMakerDescription"]</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Ad Space Footer (conditional) -->
@await Html.PartialAsync("_AdSpace", new { position = "footer" })
<style>
.tech-item {
transition: transform 0.3s ease;
}
.tech-item:hover {
transform: translateY(-5px);
}
.feature-list .fas {
font-size: 1.2em;
}
.card {
transition: box-shadow 0.3s ease;
}
.card:hover {
box-shadow: 0 8px 25px rgba(0,0,0,0.1) !important;
}
</style>

239
Views/Home/Contact.cshtml Normal file
View File

@ -0,0 +1,239 @@
@using QRRapidoApp.Services
@using Microsoft.Extensions.Localization
@inject AdDisplayService AdService
@inject IStringLocalizer<QRRapidoApp.Resources.SharedResource> Localizer
@{
ViewData["Title"] = Localizer["Contact"];
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="container py-5">
<!-- Hero Section -->
<div class="row justify-content-center">
<div class="col-lg-8 text-center">
<div class="mb-5">
<h1 class="display-5 fw-bold text-primary mb-3">
<i class="fas fa-envelope me-3"></i>@Localizer["ContactUs"]
</h1>
<p class="lead text-muted">@Localizer["ContactSubtitle"]</p>
</div>
</div>
</div>
<div class="row">
<!-- Contact Information -->
<div class="col-lg-8 mb-5">
<div class="row">
<!-- QR Rapido Support -->
<div class="col-md-6 mb-4">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body p-4">
<div class="text-center mb-3">
<i class="fas fa-qrcode fa-3x text-primary"></i>
</div>
<h4 class="text-center text-primary mb-3">@Localizer["QRRapidoSupport"]</h4>
<div class="text-center">
<div class="mb-3">
<i class="fas fa-envelope text-primary me-2"></i>
<strong>@Localizer["SupportEmail"]</strong>
</div>
<a href="mailto:contato@qrrapido.site" class="btn btn-primary btn-lg w-100">
<i class="fas fa-paper-plane me-2"></i>contato@qrrapido.site
</a>
<div class="mt-3">
<small class="text-muted">
<i class="fas fa-clock me-1"></i>@Localizer["ResponseTime24-48h"]
</small>
</div>
</div>
</div>
</div>
</div>
<!-- Professional Development -->
<div class="col-md-6 mb-4">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body p-4">
<div class="text-center mb-3">
<i class="fas fa-laptop-code fa-3x text-success"></i>
</div>
<h4 class="text-center text-primary mb-3">@Localizer["ProfessionalProjects"]</h4>
<div class="text-center">
<div class="mb-3">
<strong class="text-success">@Localizer["CustomDevelopment"]</strong>
</div>
<p class="small text-muted mb-3">@Localizer["ProfessionalServicesDesc"]</p>
<a href="https://jobmaker.com.br" target="_blank" class="btn btn-success btn-lg w-100">
<i class="fas fa-external-link-alt me-2"></i>jobmaker.com.br
</a>
<div class="mt-3">
<small class="text-muted">@Localizer["ConsultJobMaker"]</small>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Contact Types -->
<div class="row mt-4">
<div class="col-12">
<div class="card border-primary">
<div class="card-header bg-primary text-white">
<h5 class="mb-0">
<i class="fas fa-question-circle me-2"></i>@Localizer["WhatCanWeHelpWith"]
</h5>
</div>
<div class="card-body p-4">
<div class="row">
<div class="col-lg-6">
<h6 class="text-primary mb-3">
<i class="fas fa-qrcode me-2"></i>QR Rapido @Localizer["Support"]
</h6>
<ul class="list-unstyled">
<li class="mb-2">
<i class="fas fa-check text-success me-2"></i>@Localizer["TechnicalQuestions"]
</li>
<li class="mb-2">
<i class="fas fa-check text-success me-2"></i>@Localizer["BugReports"]
</li>
<li class="mb-2">
<i class="fas fa-check text-success me-2"></i>@Localizer["FeatureRequests"]
</li>
<li class="mb-2">
<i class="fas fa-check text-success me-2"></i>@Localizer["PremiumSupport"]
</li>
</ul>
</div>
<div class="col-lg-6">
<h6 class="text-primary mb-3">
<i class="fas fa-briefcase me-2"></i>@Localizer["ProfessionalServices"]
</h6>
<ul class="list-unstyled">
<li class="mb-2">
<i class="fas fa-check text-success me-2"></i>@Localizer["CustomSystems"]
</li>
<li class="mb-2">
<i class="fas fa-check text-success me-2"></i>@Localizer["AIIntegration"]
</li>
<li class="mb-2">
<i class="fas fa-check text-success me-2"></i>@Localizer["EnterpriseConsulting"]
</li>
<li class="mb-2">
<i class="fas fa-check text-success me-2"></i>@Localizer["TechnicalAudits"]
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Sidebar -->
<div class="col-lg-4">
<!-- Location Card -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-body p-4 text-center">
<i class="fas fa-map-marker-alt fa-3x text-primary mb-3"></i>
<h5 class="text-primary">@Localizer["OurLocation"]</h5>
<p class="text-muted mb-3">@Localizer["LocationDetail"]</p>
<div class="bg-light rounded p-3">
<i class="fas fa-map text-primary me-2"></i>
<small class="text-muted">@Localizer["SaoBernardoLocation"]</small>
</div>
</div>
</div>
<!-- Response Time -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-body p-4 text-center">
<i class="fas fa-clock fa-3x text-success mb-3"></i>
<h5 class="text-primary">@Localizer["ResponseTimes"]</h5>
<div class="list-unstyled">
<div class="d-flex justify-content-between align-items-center mb-2">
<span class="text-muted">@Localizer["TechnicalQuestions"]</span>
<span class="badge bg-success">24-48h</span>
</div>
<div class="d-flex justify-content-between align-items-center mb-2">
<span class="text-muted">@Localizer["CustomProjects"]</span>
<span class="badge bg-primary">@Localizer["ConsultWebsite"]</span>
</div>
<div class="d-flex justify-content-between align-items-center">
<span class="text-muted">@Localizer["PremiumSupport"]</span>
<span class="badge bg-warning">@Localizer["Priority"]</span>
</div>
</div>
</div>
</div>
<!-- Quick Links -->
<div class="card border-0 shadow-sm">
<div class="card-body p-4">
<h6 class="text-primary mb-3">
<i class="fas fa-link me-2"></i>@Localizer["QuickLinks"]
</h6>
<div class="d-grid gap-2">
<a href="@Url.Action("FAQ", "Home")" class="btn btn-outline-primary btn-sm">
<i class="fas fa-question-circle me-2"></i>FAQ
</a>
<a href="@Url.Action("HowToUse", "Home")" class="btn btn-outline-primary btn-sm">
<i class="fas fa-book me-2"></i>@Localizer["HowToUse"]
</a>
<a href="@Url.Action("Upgrade", "Premium")" class="btn btn-outline-warning btn-sm">
<i class="fas fa-crown me-2"></i>QR Rapido Premium
</a>
<a href="https://jobmaker.com.br" target="_blank" class="btn btn-outline-success btn-sm">
<i class="fas fa-external-link-alt me-2"></i>JobMaker
</a>
</div>
</div>
</div>
</div>
</div>
<!-- Additional Info -->
<div class="row mt-5">
<div class="col-12">
<div class="alert alert-info border-0">
<div class="row align-items-center">
<div class="col-md-8">
<h6 class="alert-heading">
<i class="fas fa-info-circle me-2"></i>@Localizer["BeforeContacting"]
</h6>
<p class="mb-0">@Localizer["BeforeContactingDescription"]</p>
</div>
<div class="col-md-4 text-center">
<a href="@Url.Action("FAQ", "Home")" class="btn btn-info">
<i class="fas fa-search me-2"></i>@Localizer["CheckFAQ"]
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Ad Space Footer (conditional) -->
@await Html.PartialAsync("_AdSpace", new { position = "footer" })
<style>
.card {
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.card:hover {
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(0,0,0,0.15) !important;
}
.btn {
transition: all 0.3s ease;
}
.btn:hover {
transform: translateY(-1px);
}
</style>

638
Views/Home/FAQ.cshtml Normal file
View File

@ -0,0 +1,638 @@
@using QRRapidoApp.Services
@using Microsoft.Extensions.Localization
@inject AdDisplayService AdService
@inject IStringLocalizer<QRRapidoApp.Resources.SharedResource> Localizer
@{
ViewData["Title"] = "FAQ";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="container py-5">
<!-- Hero Section -->
<div class="row justify-content-center">
<div class="col-lg-8 text-center">
<div class="mb-5">
<h1 class="display-5 fw-bold text-primary mb-3">
<i class="fas fa-question-circle me-3"></i>@Localizer["FrequentlyAskedQuestions"]
</h1>
<p class="lead text-muted">@Localizer["FAQSubtitle"]</p>
</div>
</div>
</div>
<!-- Search FAQ -->
<div class="row justify-content-center mb-5">
<div class="col-lg-8">
<div class="card shadow-sm">
<div class="card-body">
<div class="input-group">
<span class="input-group-text">
<i class="fas fa-search"></i>
</span>
<input type="text" id="faq-search" class="form-control form-control-lg" placeholder="@Localizer["SearchFAQ"]">
<button class="btn btn-outline-secondary" type="button" id="clear-search" title="Limpar busca">
<i class="fas fa-times"></i>
</button>
</div>
<div class="d-flex justify-content-between mt-2">
<small class="text-muted">@Localizer["SearchFAQHint"]</small>
<small id="search-results" class="text-primary fw-bold" style="display: none;"></small>
</div>
</div>
</div>
</div>
</div>
<!-- FAQ Categories -->
<div class="row">
<div class="col-12">
<div class="accordion" id="faqAccordion">
<!-- General Questions -->
<div class="mb-4">
<h3 class="text-primary mb-3">
<i class="fas fa-info-circle me-2"></i>@Localizer["GeneralQuestions"]
</h3>
<!-- QR Codes Expire? -->
<div class="accordion-item faq-item" data-search="qr code expira expiram validade tempo duracao permanente">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq1">
<i class="fas fa-calendar-times text-warning me-2"></i>
<strong>@Localizer["FAQ_DoQRCodesExpire"]</strong>
</button>
</h2>
<div id="faq1" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p><strong>@Localizer["FAQ_QRExpireAnswer1"]</strong></p>
<p>@Localizer["FAQ_QRExpireAnswer2"]</p>
<div class="alert alert-info">
<i class="fas fa-lightbulb me-2"></i>@Localizer["FAQ_QRExpireTip"]
</div>
</div>
</div>
</div>
<!-- Ideal Size for Printing -->
<div class="accordion-item faq-item" data-search="tamanho ideal impressao imprimir qualidade resolucao dpi">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq2">
<i class="fas fa-print text-primary me-2"></i>
<strong>@Localizer["FAQ_IdealPrintSize"]</strong>
</button>
</h2>
<div id="faq2" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>@Localizer["FAQ_PrintSizeAnswer1"]</p>
<ul class="mb-3">
<li><strong>@Localizer["FAQ_PrintSizeSmall"]</strong> @Localizer["FAQ_PrintSizeSmallDesc"]</li>
<li><strong>@Localizer["FAQ_PrintSizeMedium"]</strong> @Localizer["FAQ_PrintSizeMediumDesc"]</li>
<li><strong>@Localizer["FAQ_PrintSizeLarge"]</strong> @Localizer["FAQ_PrintSizeLargeDesc"]</li>
</ul>
<div class="alert alert-success">
<i class="fas fa-check me-2"></i>@Localizer["FAQ_PrintSizeTip"]
</div>
</div>
</div>
</div>
<!-- How to Test QR Codes -->
<div class="accordion-item faq-item" data-search="testar qr code funciona scanner leitor app aplicativo">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq3">
<i class="fas fa-mobile-alt text-success me-2"></i>
<strong>@Localizer["FAQ_HowToTestQR"]</strong>
</button>
</h2>
<div id="faq3" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>@Localizer["FAQ_TestQRAnswer1"]</p>
<div class="row">
<div class="col-md-6">
<h6><i class="fab fa-android text-success me-2"></i>Android:</h6>
<ul>
<li>@Localizer["FAQ_AndroidCamera"]</li>
<li>@Localizer["FAQ_AndroidGoogleLens"]</li>
<li>@Localizer["FAQ_AndroidQRApps"]</li>
</ul>
</div>
<div class="col-md-6">
<h6><i class="fab fa-apple text-secondary me-2"></i>iOS:</h6>
<ul>
<li>@Localizer["FAQ_iOSCamera"]</li>
<li>@Localizer["FAQ_iOSControlCenter"]</li>
<li>@Localizer["FAQ_iOSQRApps"]</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- QR Code Security -->
<div class="accordion-item faq-item" data-search="seguro seguranca malware virus perigoso confiavel">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq4">
<i class="fas fa-shield-alt text-success me-2"></i>
<strong>@Localizer["FAQ_QRSecurity"]</strong>
</button>
</h2>
<div id="faq4" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>@Localizer["FAQ_SecurityAnswer1"]</p>
<p>@Localizer["FAQ_SecurityAnswer2"]</p>
<div class="alert alert-warning">
<h6><i class="fas fa-exclamation-triangle me-2"></i>@Localizer["FAQ_SecurityTips"]</h6>
<ul class="mb-0">
<li>@Localizer["FAQ_SecurityTip1"]</li>
<li>@Localizer["FAQ_SecurityTip2"]</li>
<li>@Localizer["FAQ_SecurityTip3"]</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- Technical Questions -->
<div class="mb-4">
<h3 class="text-primary mb-3">
<i class="fas fa-cogs me-2"></i>@Localizer["TechnicalQuestions"]
</h3>
<!-- Static vs Dynamic -->
<div class="accordion-item faq-item" data-search="estatico dinamico diferenca tracking rastreamento analytics">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq5">
<i class="fas fa-exchange-alt text-primary me-2"></i>
<strong>@Localizer["FAQ_StaticVsDynamic"]</strong>
</button>
</h2>
<div id="faq5" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<div class="row">
<div class="col-md-6">
<h6 class="text-success"><i class="fas fa-circle me-2"></i>@Localizer["FAQ_StaticQR"]</h6>
<ul class="small">
<li>@Localizer["FAQ_StaticFeature1"]</li>
<li>@Localizer["FAQ_StaticFeature2"]</li>
<li>@Localizer["FAQ_StaticFeature3"]</li>
<li>@Localizer["FAQ_StaticFeature4"]</li>
</ul>
</div>
<div class="col-md-6">
<h6 class="text-warning"><i class="fas fa-crown me-2"></i>@Localizer["FAQ_DynamicQR"]</h6>
<ul class="small">
<li>@Localizer["FAQ_DynamicFeature1"]</li>
<li>@Localizer["FAQ_DynamicFeature2"]</li>
<li>@Localizer["FAQ_DynamicFeature3"]</li>
<li>@Localizer["FAQ_DynamicFeature4"]</li>
</ul>
</div>
</div>
<div class="alert alert-info mt-3">
<i class="fas fa-info-circle me-2"></i>@Localizer["FAQ_DynamicQRNote"]
</div>
</div>
</div>
</div>
<!-- Customization -->
<div class="accordion-item faq-item" data-search="personalizar cores logo design estilo customizar">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq6">
<i class="fas fa-palette text-warning me-2"></i>
<strong>@Localizer["FAQ_Customization"]</strong>
</button>
</h2>
<div id="faq6" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>@Localizer["FAQ_CustomizationAnswer1"]</p>
<div class="row">
<div class="col-md-6">
<h6 class="text-success"><i class="fas fa-check me-2"></i>@Localizer["FAQ_FreeCustomization"]</h6>
<ul class="small">
<li>@Localizer["FAQ_FreeFeature1"]</li>
<li>@Localizer["FAQ_FreeFeature2"]</li>
<li>@Localizer["FAQ_FreeFeature3"]</li>
</ul>
</div>
<div class="col-md-6">
<h6 class="text-warning"><i class="fas fa-crown me-2"></i>@Localizer["FAQ_PremiumCustomization"]</h6>
<ul class="small">
<li>@Localizer["FAQ_PremiumFeature1"]</li>
<li>@Localizer["FAQ_PremiumFeature2"]</li>
<li>@Localizer["FAQ_PremiumFeature3"]</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- Offline Usage -->
<div class="accordion-item faq-item" data-search="offline internet conexao funciona sem wifi">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq7">
<i class="fas fa-wifi-slash text-secondary me-2"></i>
<strong>@Localizer["FAQ_OfflineUsage"]</strong>
</button>
</h2>
<div id="faq7" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>@Localizer["FAQ_OfflineAnswer1"]</p>
<div class="row">
<div class="col-md-6">
<h6 class="text-success"><i class="fas fa-check me-2"></i>@Localizer["FAQ_WorksOffline"]</h6>
<ul class="small">
<li>@Localizer["FAQ_OfflineType1"]</li>
<li>@Localizer["FAQ_OfflineType2"]</li>
<li>@Localizer["FAQ_OfflineType3"]</li>
</ul>
</div>
<div class="col-md-6">
<h6 class="text-warning"><i class="fas fa-wifi me-2"></i>@Localizer["FAQ_NeedsInternet"]</h6>
<ul class="small">
<li>@Localizer["FAQ_OnlineType1"]</li>
<li>@Localizer["FAQ_OnlineType2"]</li>
<li>@Localizer["FAQ_OnlineType3"]</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Usage Questions -->
<div class="mb-4">
<h3 class="text-primary mb-3">
<i class="fas fa-user me-2"></i>@Localizer["UsageQuestions"]
</h3>
<!-- Color Choice -->
<div class="accordion-item faq-item" data-search="cores escolher melhor contraste legibilidade visibility">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq8">
<i class="fas fa-eye text-info me-2"></i>
<strong>@Localizer["FAQ_ColorChoice"]</strong>
</button>
</h2>
<div id="faq8" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>@Localizer["FAQ_ColorAnswer1"]</p>
<div class="row">
<div class="col-md-6">
<h6 class="text-success"><i class="fas fa-check me-2"></i>@Localizer["FAQ_GoodColors"]</h6>
<ul class="small">
<li>@Localizer["FAQ_ColorGood1"]</li>
<li>@Localizer["FAQ_ColorGood2"]</li>
<li>@Localizer["FAQ_ColorGood3"]</li>
</ul>
</div>
<div class="col-md-6">
<h6 class="text-danger"><i class="fas fa-times me-2"></i>@Localizer["FAQ_AvoidColors"]</h6>
<ul class="small">
<li>@Localizer["FAQ_ColorBad1"]</li>
<li>@Localizer["FAQ_ColorBad2"]</li>
<li>@Localizer["FAQ_ColorBad3"]</li>
</ul>
</div>
</div>
<div class="alert alert-success">
<i class="fas fa-lightbulb me-2"></i>@Localizer["FAQ_ColorTip"]
</div>
</div>
</div>
</div>
<!-- Daily Limits -->
<div class="accordion-item faq-item" data-search="limite diario quantos qr codes por dia restricao premium">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq9">
<i class="fas fa-chart-line text-primary me-2"></i>
<strong>@Localizer["FAQ_DailyLimits"]</strong>
</button>
</h2>
<div id="faq9" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<div class="row">
<div class="col-md-4">
<div class="text-center p-3 border rounded">
<h6 class="text-muted">@Localizer["FAQ_AnonymousUsers"]</h6>
<div class="display-6 text-secondary">@Localizer["FAQ_AnonymousLimit"]</div>
<small>@Localizer["FAQ_AnonymousNote"]</small>
</div>
</div>
<div class="col-md-4">
<div class="text-center p-3 border rounded border-primary">
<h6 class="text-primary">@Localizer["FAQ_RegisteredUsers"]</h6>
<div class="display-6 text-primary">@Localizer["FAQ_RegisteredLimit"]</div>
<small>@Localizer["FAQ_RegisteredNote"]</small>
</div>
</div>
<div class="col-md-4">
<div class="text-center p-3 border rounded border-warning">
<h6 class="text-warning"><i class="fas fa-crown me-1"></i>Premium</h6>
<div class="display-6 text-warning">∞</div>
<small>@Localizer["FAQ_PremiumNote"]</small>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Premium Questions -->
<div class="mb-4">
<h3 class="text-primary mb-3">
<i class="fas fa-crown me-2"></i>@Localizer["PremiumQuestions"]
</h3>
<!-- Premium Benefits -->
<div class="accordion-item faq-item" data-search="premium beneficios vantagens preco custo plano assinatura">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq10">
<i class="fas fa-star text-warning me-2"></i>
<strong>@Localizer["FAQ_PremiumBenefits"]</strong>
</button>
</h2>
<div id="faq10" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>@Localizer["FAQ_PremiumAnswer1"]</p>
<div class="row">
<div class="col-md-6">
<h6 class="text-primary"><i class="fas fa-rocket me-2"></i>@Localizer["FAQ_PerformanceBenefits"]</h6>
<ul class="small">
<li>@Localizer["FAQ_PremiumPerf1"]</li>
<li>@Localizer["FAQ_PremiumPerf2"]</li>
<li>@Localizer["FAQ_PremiumPerf3"]</li>
</ul>
</div>
<div class="col-md-6">
<h6 class="text-warning"><i class="fas fa-magic me-2"></i>@Localizer["FAQ_FeatureBenefits"]</h6>
<ul class="small">
<li>@Localizer["FAQ_PremiumFeat1"]</li>
<li>@Localizer["FAQ_PremiumFeat2"]</li>
<li>@Localizer["FAQ_PremiumFeat3"]</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Contact CTA -->
<div class="row mt-5">
<div class="col-12">
<div class="card bg-primary text-white">
<div class="card-body p-4 text-center">
<h4 class="mb-3">@Localizer["FAQ_NotFoundAnswer"]</h4>
<p class="mb-4">@Localizer["FAQ_ContactUsDesc"]</p>
<a href="@Url.Action("Contact", "Home")" class="btn btn-light btn-lg">
<i class="fas fa-envelope me-2"></i>@Localizer["ContactUs"]
</a>
</div>
</div>
</div>
</div>
</div>
<!-- Ad Space Footer (conditional) -->
@await Html.PartialAsync("_AdSpace", new { position = "footer" })
<script>
// FAQ Search functionality - Enhanced
document.addEventListener('DOMContentLoaded', function() {
const searchInput = document.getElementById('faq-search');
const clearButton = document.getElementById('clear-search');
const searchResults = document.getElementById('search-results');
const faqItems = document.querySelectorAll('.faq-item');
const categoryHeaders = document.querySelectorAll('h3.text-primary');
// Search functionality
function performSearch() {
const searchTerm = searchInput.value.toLowerCase().trim();
let visibleCount = 0;
let totalItems = faqItems.length;
// If search is empty, show all items
if (searchTerm === '') {
faqItems.forEach(item => {
item.style.display = 'block';
// Remove any highlight
removeHighlight(item);
});
categoryHeaders.forEach(header => {
header.style.display = 'block';
});
searchResults.style.display = 'none';
clearButton.style.display = 'none';
return;
}
// Show clear button when there's text
clearButton.style.display = 'block';
// Search through items
faqItems.forEach(function(item) {
const searchData = item.getAttribute('data-search')?.toLowerCase() || '';
const questionText = item.querySelector('button strong')?.textContent.toLowerCase() || '';
const answerText = item.querySelector('.accordion-body')?.textContent.toLowerCase() || '';
// Check if search term matches
if (searchData.includes(searchTerm) ||
questionText.includes(searchTerm) ||
answerText.includes(searchTerm)) {
item.style.display = 'block';
visibleCount++;
// Highlight matching terms
highlightText(item, searchTerm);
} else {
item.style.display = 'none';
removeHighlight(item);
}
});
// Update category headers visibility
updateCategoryVisibility();
// Show search results count
if (visibleCount === 0) {
searchResults.innerHTML = `<i class="fas fa-search me-1"></i>Nenhum resultado encontrado para "${searchTerm}"`;
searchResults.className = 'text-warning fw-bold';
} else if (visibleCount === totalItems) {
searchResults.innerHTML = `<i class="fas fa-check me-1"></i>Mostrando todas as ${totalItems} perguntas`;
searchResults.className = 'text-success fw-bold';
} else {
searchResults.innerHTML = `<i class="fas fa-search me-1"></i>${visibleCount} de ${totalItems} perguntas encontradas`;
searchResults.className = 'text-primary fw-bold';
}
searchResults.style.display = 'block';
}
// Update category header visibility based on visible items
function updateCategoryVisibility() {
categoryHeaders.forEach(header => {
const nextSibling = header.nextElementSibling;
let hasVisibleItems = false;
// Check if any FAQ items in this category are visible
let currentElement = nextSibling;
while (currentElement && !currentElement.querySelector('h3.text-primary')) {
if (currentElement.classList.contains('faq-item') &&
currentElement.style.display !== 'none') {
hasVisibleItems = true;
break;
}
currentElement = currentElement.nextElementSibling;
}
header.style.display = hasVisibleItems ? 'block' : 'none';
});
}
// Highlight search terms in text
function highlightText(item, searchTerm) {
const questionElement = item.querySelector('button strong');
if (questionElement) {
const originalText = questionElement.textContent;
const regex = new RegExp(`(${escapeRegex(searchTerm)})`, 'gi');
const highlightedText = originalText.replace(regex, '<mark class="bg-warning">$1</mark>');
questionElement.innerHTML = highlightedText;
}
}
// Remove highlights
function removeHighlight(item) {
const questionElement = item.querySelector('button strong');
if (questionElement) {
const text = questionElement.textContent;
questionElement.innerHTML = text;
}
}
// Escape special regex characters
function escapeRegex(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
// Clear search function
function clearSearch() {
searchInput.value = '';
performSearch();
searchInput.focus();
}
// Event listeners
searchInput.addEventListener('input', performSearch);
searchInput.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
clearSearch();
}
});
clearButton.addEventListener('click', clearSearch);
// Initialize
clearButton.style.display = 'none';
});
</script>
<style>
.faq-item {
transition: all 0.3s ease;
border-left: 4px solid transparent;
}
.faq-item:hover {
border-left-color: var(--bs-primary);
}
.accordion-button:not(.collapsed) {
background-color: var(--bs-primary);
color: white;
}
.accordion-button:focus {
box-shadow: none;
border-color: var(--bs-primary);
}
#faq-search {
transition: all 0.3s ease;
}
#faq-search:focus {
transform: scale(1.02);
box-shadow: 0 0 20px rgba(0,123,255,0.25);
}
/* Search highlight styles */
mark.bg-warning {
background-color: #fff3cd !important;
color: #856404;
padding: 2px 4px;
border-radius: 3px;
font-weight: 600;
}
/* Clear button animation */
#clear-search {
transition: all 0.3s ease;
}
#clear-search:hover {
background-color: #dc3545;
border-color: #dc3545;
color: white;
}
/* Search results animation */
#search-results {
transition: all 0.3s ease;
font-size: 0.875rem;
}
/* Category headers fade when hidden */
h3.text-primary {
transition: opacity 0.3s ease;
}
/* Improved FAQ item visibility transition */
.faq-item[style*="display: none"] {
opacity: 0;
transform: translateY(-10px);
}
.faq-item[style*="display: block"] {
opacity: 1;
transform: translateY(0);
}
/* Search input enhancements */
.input-group:focus-within .input-group-text {
border-color: var(--bs-primary);
box-shadow: 0 0 0 0.2rem rgba(0,123,255,0.25);
}
/* Responsive search results */
@@media (max-width: 768px) {
#search-results {
font-size: 0.8rem;
text-align: center;
margin-top: 0.5rem;
}
.d-flex.justify-content-between {
flex-direction: column;
align-items: center;
}
}
</style>

426
Views/Home/HowToUse.cshtml Normal file
View File

@ -0,0 +1,426 @@
@using QRRapidoApp.Services
@using Microsoft.Extensions.Localization
@inject AdDisplayService AdService
@inject IStringLocalizer<QRRapidoApp.Resources.SharedResource> Localizer
@{
ViewData["Title"] = Localizer["HowToUse"];
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="container py-5">
<!-- Hero Section -->
<div class="row justify-content-center">
<div class="col-lg-8 text-center">
<div class="mb-5">
<h1 class="display-5 fw-bold text-primary mb-3">
<i class="fas fa-book-open me-3"></i>@Localizer["HowToUseTitle"]
</h1>
<p class="lead text-muted">@Localizer["HowToUseSubtitle"]</p>
</div>
</div>
</div>
<!-- Quick Start Guide -->
<div class="row mb-5">
<div class="col-12">
<div class="card border-primary">
<div class="card-header bg-primary text-white text-center">
<h3 class="mb-0">
<i class="fas fa-rocket me-2"></i>@Localizer["QuickStartGuide"]
</h3>
</div>
<div class="card-body p-4">
<div class="row">
<div class="col-lg-3 col-md-6 mb-4">
<div class="text-center step-card h-100 p-3">
<div class="step-number bg-primary text-white rounded-circle mx-auto mb-3">1</div>
<i class="fas fa-list fa-2x text-primary mb-3"></i>
<h6 class="fw-bold">@Localizer["Step1Title"]</h6>
<p class="small text-muted">@Localizer["Step1Description"]</p>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<div class="text-center step-card h-100 p-3">
<div class="step-number bg-success text-white rounded-circle mx-auto mb-3">2</div>
<i class="fas fa-edit fa-2x text-success mb-3"></i>
<h6 class="fw-bold">@Localizer["Step2Title"]</h6>
<p class="small text-muted">@Localizer["Step2Description"]</p>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<div class="text-center step-card h-100 p-3">
<div class="step-number bg-warning text-dark rounded-circle mx-auto mb-3">3</div>
<i class="fas fa-bolt fa-2x text-warning mb-3"></i>
<h6 class="fw-bold">@Localizer["Step3Title"]</h6>
<p class="small text-muted">@Localizer["Step3Description"]</p>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<div class="text-center step-card h-100 p-3">
<div class="step-number bg-info text-white rounded-circle mx-auto mb-3">4</div>
<i class="fas fa-download fa-2x text-info mb-3"></i>
<h6 class="fw-bold">@Localizer["Step4Title"]</h6>
<p class="small text-muted">@Localizer["Step4Description"]</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Detailed Guides by QR Type -->
<div class="row">
<div class="col-12">
<h2 class="text-center text-primary mb-5">
<i class="fas fa-cogs me-2"></i>@Localizer["DetailedGuides"]
</h2>
</div>
</div>
<!-- URL/Link Guide -->
<div class="row mb-5">
<div class="col-lg-6 mb-4">
<div class="card h-100 border-0 shadow-sm">
<div class="card-header bg-light">
<h5 class="mb-0 text-primary">
<i class="fas fa-link me-2"></i>@Localizer["URLQRGuide"]
</h5>
</div>
<div class="card-body">
<p class="text-muted mb-3">@Localizer["URLQRGuideDesc"]</p>
<ol class="small">
<li>@Localizer["URLGuideStep1"]</li>
<li>@Localizer["URLGuideStep2"]</li>
<li>@Localizer["URLGuideStep3"]</li>
<li>@Localizer["URLGuideStep4"]</li>
</ol>
<div class="alert alert-info border-0 small">
<i class="fas fa-lightbulb me-1"></i><strong>@Localizer["Tips"]:</strong> @Localizer["URLGuideTips"]
</div>
</div>
</div>
</div>
<!-- WiFi Guide -->
<div class="col-lg-6 mb-4">
<div class="card h-100 border-0 shadow-sm">
<div class="card-header bg-light">
<h5 class="mb-0 text-primary">
<i class="fas fa-wifi me-2"></i>@Localizer["WiFiQRGuide"]
</h5>
</div>
<div class="card-body">
<p class="text-muted mb-3">@Localizer["WiFiQRGuideDesc"]</p>
<ol class="small">
<li>@Localizer["WiFiGuideStep1"]</li>
<li>@Localizer["WiFiGuideStep2"]</li>
<li>@Localizer["WiFiGuideStep3"]</li>
<li>@Localizer["WiFiGuideStep4"]</li>
</ol>
<div class="alert alert-warning border-0 small">
<i class="fas fa-shield-alt me-1"></i><strong>@Localizer["Security"]:</strong> @Localizer["WiFiGuideSecurity"]
</div>
</div>
</div>
</div>
<!-- vCard Guide -->
<div class="col-lg-6 mb-4">
<div class="card h-100 border-0 shadow-sm">
<div class="card-header bg-light">
<h5 class="mb-0 text-primary">
<i class="fas fa-address-card me-2"></i>@Localizer["VCardQRGuide"]
</h5>
</div>
<div class="card-body">
<p class="text-muted mb-3">@Localizer["VCardQRGuideDesc"]</p>
<ol class="small">
<li>@Localizer["VCardGuideStep1"]</li>
<li>@Localizer["VCardGuideStep2"]</li>
<li>@Localizer["VCardGuideStep3"]</li>
<li>@Localizer["VCardGuideStep4"]</li>
<li>@Localizer["VCardGuideStep5"]</li>
</ol>
<div class="alert alert-success border-0 small">
<i class="fas fa-mobile-alt me-1"></i><strong>@Localizer["Compatibility"]:</strong> @Localizer["VCardGuideCompat"]
</div>
</div>
</div>
</div>
<!-- WhatsApp Guide -->
<div class="col-lg-6 mb-4">
<div class="card h-100 border-0 shadow-sm">
<div class="card-header bg-light">
<h5 class="mb-0 text-primary">
<i class="fab fa-whatsapp me-2"></i>@Localizer["WhatsAppQRGuide"]
</h5>
</div>
<div class="card-body">
<p class="text-muted mb-3">@Localizer["WhatsAppQRGuideDesc"]</p>
<ol class="small">
<li>@Localizer["WhatsAppGuideStep1"]</li>
<li>@Localizer["WhatsAppGuideStep2"]</li>
<li>@Localizer["WhatsAppGuideStep3"]</li>
<li>@Localizer["WhatsAppGuideStep4"]</li>
</ol>
<div class="alert alert-info border-0 small">
<i class="fas fa-info-circle me-1"></i><strong>@Localizer["Note"]:</strong> @Localizer["WhatsAppGuideNote"]
</div>
</div>
</div>
</div>
</div>
<!-- Advanced Features -->
<div class="row mb-5">
<div class="col-12">
<div class="card border-warning">
<div class="card-header bg-warning text-dark">
<h4 class="mb-0">
<i class="fas fa-star me-2"></i>@Localizer["AdvancedFeatures"]
</h4>
</div>
<div class="card-body p-4">
<div class="row">
<div class="col-lg-4 mb-4">
<div class="feature-item text-center p-3">
<i class="fas fa-palette fa-3x text-primary mb-3"></i>
<h6 class="fw-bold">@Localizer["CustomDesign"]</h6>
<p class="small text-muted">@Localizer["CustomDesignDesc"]</p>
<ul class="small text-start">
<li>@Localizer["ChangeColors"]</li>
<li>@Localizer["AdjustSize"]</li>
<li>@Localizer["SetMargins"]</li>
</ul>
</div>
</div>
<div class="col-lg-4 mb-4">
<div class="feature-item text-center p-3">
<i class="fas fa-image fa-3x text-success mb-3"></i>
<h6 class="fw-bold">@Localizer["LogoIntegration"] <span class="badge bg-warning small">Premium</span></h6>
<p class="small text-muted">@Localizer["LogoIntegrationDesc"]</p>
<ul class="small text-start">
<li>@Localizer["UploadLogo"]</li>
<li>@Localizer["AdjustLogoSize"]</li>
<li>@Localizer["ColorMatching"]</li>
</ul>
</div>
</div>
<div class="col-lg-4 mb-4">
<div class="feature-item text-center p-3">
<i class="fas fa-download fa-3x text-info mb-3"></i>
<h6 class="fw-bold">@Localizer["MultipleFormats"]</h6>
<p class="small text-muted">@Localizer["MultipleFormatsDesc"]</p>
<ul class="small text-start">
<li>@Localizer["PNGFormat"]</li>
<li>@Localizer["SVGFormat"]</li>
<li>@Localizer["PDFFormat"]</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Best Practices -->
<div class="row mb-5">
<div class="col-12">
<div class="card bg-light border-0">
<div class="card-body p-5">
<h3 class="text-center text-primary mb-4">
<i class="fas fa-thumbs-up me-2"></i>@Localizer["BestPractices"]
</h3>
<div class="row">
<div class="col-lg-6">
<h6 class="text-success mb-3">
<i class="fas fa-check-circle me-2"></i>@Localizer["DoBest"]
</h6>
<ul class="list-unstyled">
<li class="mb-2">
<i class="fas fa-arrow-right text-success me-2"></i>@Localizer["BestPractice1"]
</li>
<li class="mb-2">
<i class="fas fa-arrow-right text-success me-2"></i>@Localizer["BestPractice2"]
</li>
<li class="mb-2">
<i class="fas fa-arrow-right text-success me-2"></i>@Localizer["BestPractice3"]
</li>
<li class="mb-2">
<i class="fas fa-arrow-right text-success me-2"></i>@Localizer["BestPractice4"]
</li>
</ul>
</div>
<div class="col-lg-6">
<h6 class="text-danger mb-3">
<i class="fas fa-times-circle me-2"></i>@Localizer["AvoidMistakes"]
</h6>
<ul class="list-unstyled">
<li class="mb-2">
<i class="fas fa-times text-danger me-2"></i>@Localizer["AvoidMistake1"]
</li>
<li class="mb-2">
<i class="fas fa-times text-danger me-2"></i>@Localizer["AvoidMistake2"]
</li>
<li class="mb-2">
<i class="fas fa-times text-danger me-2"></i>@Localizer["AvoidMistake3"]
</li>
<li class="mb-2">
<i class="fas fa-times text-danger me-2"></i>@Localizer["AvoidMistake4"]
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Troubleshooting -->
<div class="row mb-5">
<div class="col-12">
<div class="card border-secondary">
<div class="card-header bg-secondary text-white">
<h4 class="mb-0">
<i class="fas fa-tools me-2"></i>@Localizer["Troubleshooting"]
</h4>
</div>
<div class="card-body p-4">
<div class="accordion" id="troubleshootingAccordion">
<!-- QR Code not scanning -->
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#trouble1">
<i class="fas fa-exclamation-triangle text-warning me-2"></i>
<strong>@Localizer["TroubleQRNotScanning"]</strong>
</button>
</h2>
<div id="trouble1" class="accordion-collapse collapse" data-bs-parent="#troubleshootingAccordion">
<div class="accordion-body">
<h6>@Localizer["PossibleCauses"]:</h6>
<ul class="small">
<li>@Localizer["TroubleCause1"]</li>
<li>@Localizer["TroubleCause2"]</li>
<li>@Localizer["TroubleCause3"]</li>
</ul>
<h6>@Localizer["Solutions"]:</h6>
<ul class="small">
<li>@Localizer["TroubleSolution1"]</li>
<li>@Localizer["TroubleSolution2"]</li>
<li>@Localizer["TroubleSolution3"]</li>
</ul>
</div>
</div>
</div>
<!-- Generation is slow -->
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#trouble2">
<i class="fas fa-hourglass-half text-info me-2"></i>
<strong>@Localizer["TroubleSlowGeneration"]</strong>
</button>
</h2>
<div id="trouble2" class="accordion-collapse collapse" data-bs-parent="#troubleshootingAccordion">
<div class="accordion-body">
<h6>@Localizer["ImprovementTips"]:</h6>
<ul class="small">
<li>@Localizer["SpeedTip1"]</li>
<li>@Localizer["SpeedTip2"]</li>
<li>@Localizer["SpeedTip3"]</li>
<li>@Localizer["SpeedTip4"]</li>
</ul>
</div>
</div>
</div>
<!-- Download issues -->
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#trouble3">
<i class="fas fa-download text-success me-2"></i>
<strong>@Localizer["TroubleDownloadIssues"]</strong>
</button>
</h2>
<div id="trouble3" class="accordion-collapse collapse" data-bs-parent="#troubleshootingAccordion">
<div class="accordion-body">
<h6>@Localizer["CommonSolutions"]:</h6>
<ul class="small">
<li>@Localizer["DownloadSolution1"]</li>
<li>@Localizer["DownloadSolution2"]</li>
<li>@Localizer["DownloadSolution3"]</li>
<li>@Localizer["DownloadSolution4"]</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Get Started CTA -->
<div class="row">
<div class="col-12">
<div class="card bg-primary text-white text-center">
<div class="card-body p-5">
<h3 class="mb-3">@Localizer["ReadyToStart"]</h3>
<p class="mb-4">@Localizer["ReadyToStartDesc"]</p>
<a href="@Url.Action("Index", "Home")" class="btn btn-light btn-lg">
<i class="fas fa-rocket me-2"></i>@Localizer["StartGenerating"]
</a>
</div>
</div>
</div>
</div>
</div>
<!-- Ad Space Footer (conditional) -->
@await Html.PartialAsync("_AdSpace", new { position = "footer" })
<style>
.step-card {
transition: transform 0.3s ease;
border: 2px solid transparent;
}
.step-card:hover {
transform: translateY(-5px);
border-color: var(--bs-primary);
}
.step-number {
width: 50px;
height: 50px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2em;
font-weight: bold;
}
.feature-item {
transition: all 0.3s ease;
border: 1px solid transparent;
border-radius: 8px;
}
.feature-item:hover {
border-color: var(--bs-primary);
background-color: rgba(0,123,255,0.05);
}
.card {
transition: box-shadow 0.3s ease;
}
.card:hover {
box-shadow: 0 8px 25px rgba(0,0,0,0.1) !important;
}
</style>

View File

@ -748,6 +748,305 @@
</div>
</div>
<!-- QR Code Types Information Accordions -->
<div class="row mt-5">
<div class="col-12">
<h3 class="text-center mb-4">
<i class="fas fa-info-circle text-primary"></i> @Localizer["LearnQRTypes"]
</h3>
<div class="accordion" id="qrTypesAccordion">
<!-- URL/Link QR Code -->
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#urlQR">
<i class="fas fa-link text-primary me-2"></i>
<strong>@Localizer["URLLink"]</strong>
</button>
</h2>
<div id="urlQR" class="accordion-collapse collapse" data-bs-parent="#qrTypesAccordion">
<div class="accordion-body">
<div class="row">
<div class="col-md-6">
<h6><i class="fas fa-question-circle text-info"></i> @Localizer["WhatIsIt"]</h6>
<p>@Localizer["URLQRDescription"]</p>
<h6><i class="fas fa-play text-success"></i> @Localizer["HowToUse"]</h6>
<ol class="small">
<li>@Localizer["URLStep1"]</li>
<li>@Localizer["URLStep2"]</li>
<li>@Localizer["URLStep3"]</li>
<li>@Localizer["URLStep4"]</li>
</ol>
</div>
<div class="col-md-6">
<h6><i class="fas fa-lightbulb text-warning"></i> @Localizer["Tips"]</h6>
<ul class="small">
<li>@Localizer["URLTip1"]</li>
<li>@Localizer["URLTip2"]</li>
<li>@Localizer["URLTip3"]</li>
</ul>
<h6><i class="fas fa-users text-secondary"></i> @Localizer["UseCases"]</h6>
<ul class="small">
<li>@Localizer["URLUseCase1"]</li>
<li>@Localizer["URLUseCase2"]</li>
<li>@Localizer["URLUseCase3"]</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- Text QR Code -->
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#textQR">
<i class="fas fa-align-left text-primary me-2"></i>
<strong>@Localizer["SimpleText"]</strong>
</button>
</h2>
<div id="textQR" class="accordion-collapse collapse" data-bs-parent="#qrTypesAccordion">
<div class="accordion-body">
<div class="row">
<div class="col-md-6">
<h6><i class="fas fa-question-circle text-info"></i> @Localizer["WhatIsIt"]</h6>
<p>@Localizer["TextQRDescription"]</p>
<h6><i class="fas fa-play text-success"></i> @Localizer["HowToUse"]</h6>
<ol class="small">
<li>@Localizer["TextStep1"]</li>
<li>@Localizer["TextStep2"]</li>
<li>@Localizer["TextStep3"]</li>
</ol>
</div>
<div class="col-md-6">
<h6><i class="fas fa-lightbulb text-warning"></i> @Localizer["Tips"]</h6>
<ul class="small">
<li>@Localizer["TextTip1"]</li>
<li>@Localizer["TextTip2"]</li>
</ul>
<h6><i class="fas fa-users text-secondary"></i> @Localizer["UseCases"]</h6>
<ul class="small">
<li>@Localizer["TextUseCase1"]</li>
<li>@Localizer["TextUseCase2"]</li>
<li>@Localizer["TextUseCase3"]</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- WhatsApp QR Code -->
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#whatsappQR">
<i class="fab fa-whatsapp text-success me-2"></i>
<strong>WhatsApp</strong>
</button>
</h2>
<div id="whatsappQR" class="accordion-collapse collapse" data-bs-parent="#qrTypesAccordion">
<div class="accordion-body">
<div class="row">
<div class="col-md-6">
<h6><i class="fas fa-question-circle text-info"></i> @Localizer["WhatIsIt"]</h6>
<p>@Localizer["WhatsAppQRDescription"]</p>
<h6><i class="fas fa-play text-success"></i> @Localizer["HowToUse"]</h6>
<ol class="small">
<li>@Localizer["WhatsAppStep1"]</li>
<li>@Localizer["WhatsAppStep2"]</li>
<li>@Localizer["WhatsAppStep3"]</li>
</ol>
</div>
<div class="col-md-6">
<h6><i class="fas fa-lightbulb text-warning"></i> @Localizer["Tips"]</h6>
<ul class="small">
<li>@Localizer["WhatsAppTip1"]</li>
<li>@Localizer["WhatsAppTip2"]</li>
</ul>
<h6><i class="fas fa-users text-secondary"></i> @Localizer["UseCases"]</h6>
<ul class="small">
<li>@Localizer["WhatsAppUseCase1"]</li>
<li>@Localizer["WhatsAppUseCase2"]</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- Email QR Code -->
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#emailQR">
<i class="fas fa-envelope text-primary me-2"></i>
<strong>@Localizer["Email"]</strong>
</button>
</h2>
<div id="emailQR" class="accordion-collapse collapse" data-bs-parent="#qrTypesAccordion">
<div class="accordion-body">
<div class="row">
<div class="col-md-6">
<h6><i class="fas fa-question-circle text-info"></i> @Localizer["WhatIsIt"]</h6>
<p>@Localizer["EmailQRDescription"]</p>
<h6><i class="fas fa-play text-success"></i> @Localizer["HowToUse"]</h6>
<ol class="small">
<li>@Localizer["EmailStep1"]</li>
<li>@Localizer["EmailStep2"]</li>
<li>@Localizer["EmailStep3"]</li>
</ol>
</div>
<div class="col-md-6">
<h6><i class="fas fa-lightbulb text-warning"></i> @Localizer["Tips"]</h6>
<ul class="small">
<li>@Localizer["EmailTip1"]</li>
<li>@Localizer["EmailTip2"]</li>
</ul>
<h6><i class="fas fa-users text-secondary"></i> @Localizer["UseCases"]</h6>
<ul class="small">
<li>@Localizer["EmailUseCase1"]</li>
<li>@Localizer["EmailUseCase2"]</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- SMS QR Code -->
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#smsQR">
<i class="fas fa-sms text-primary me-2"></i>
<strong>@Localizer["SMS"]</strong>
</button>
</h2>
<div id="smsQR" class="accordion-collapse collapse" data-bs-parent="#qrTypesAccordion">
<div class="accordion-body">
<div class="row">
<div class="col-md-6">
<h6><i class="fas fa-question-circle text-info"></i> @Localizer["WhatIsIt"]</h6>
<p>@Localizer["SMSQRDescription"]</p>
<h6><i class="fas fa-play text-success"></i> @Localizer["HowToUse"]</h6>
<ol class="small">
<li>@Localizer["SMSStep1"]</li>
<li>@Localizer["SMSStep2"]</li>
<li>@Localizer["SMSStep3"]</li>
</ol>
</div>
<div class="col-md-6">
<h6><i class="fas fa-lightbulb text-warning"></i> @Localizer["Tips"]</h6>
<ul class="small">
<li>@Localizer["SMSTip1"]</li>
<li>@Localizer["SMSTip2"]</li>
</ul>
<h6><i class="fas fa-users text-secondary"></i> @Localizer["UseCases"]</h6>
<ul class="small">
<li>@Localizer["SMSUseCase1"]</li>
<li>@Localizer["SMSUseCase2"]</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- WiFi QR Code -->
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#wifiQR">
<i class="fas fa-wifi text-primary me-2"></i>
<strong>@Localizer["WiFi"]</strong>
</button>
</h2>
<div id="wifiQR" class="accordion-collapse collapse" data-bs-parent="#qrTypesAccordion">
<div class="accordion-body">
<div class="row">
<div class="col-md-6">
<h6><i class="fas fa-question-circle text-info"></i> @Localizer["WhatIsIt"]</h6>
<p>@Localizer["WiFiQRDescription"]</p>
<h6><i class="fas fa-play text-success"></i> @Localizer["HowToUse"]</h6>
<ol class="small">
<li>@Localizer["WiFiStep1"]</li>
<li>@Localizer["WiFiStep2"]</li>
<li>@Localizer["WiFiStep3"]</li>
</ol>
</div>
<div class="col-md-6">
<h6><i class="fas fa-lightbulb text-warning"></i> @Localizer["Tips"]</h6>
<ul class="small">
<li>@Localizer["WiFiTip1"]</li>
<li>@Localizer["WiFiTip2"]</li>
<li>@Localizer["WiFiTip3"]</li>
</ul>
<h6><i class="fas fa-users text-secondary"></i> @Localizer["UseCases"]</h6>
<ul class="small">
<li>@Localizer["WiFiUseCase1"]</li>
<li>@Localizer["WiFiUseCase2"]</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- vCard QR Code -->
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#vcardQR">
<i class="fas fa-address-card text-primary me-2"></i>
<strong>@Localizer["VCard"]</strong>
</button>
</h2>
<div id="vcardQR" class="accordion-collapse collapse" data-bs-parent="#qrTypesAccordion">
<div class="accordion-body">
<div class="row">
<div class="col-md-6">
<h6><i class="fas fa-question-circle text-info"></i> @Localizer["WhatIsIt"]</h6>
<p>@Localizer["VCardQRDescription"]</p>
<h6><i class="fas fa-play text-success"></i> @Localizer["HowToUse"]</h6>
<ol class="small">
<li>@Localizer["VCardStep1"]</li>
<li>@Localizer["VCardStep2"]</li>
<li>@Localizer["VCardStep3"]</li>
<li>@Localizer["VCardStep4"]</li>
</ol>
</div>
<div class="col-md-6">
<h6><i class="fas fa-lightbulb text-warning"></i> @Localizer["Tips"]</h6>
<ul class="small">
<li>@Localizer["VCardTip1"]</li>
<li>@Localizer["VCardTip2"]</li>
<li>@Localizer["VCardTip3"]</li>
</ul>
<h6><i class="fas fa-users text-secondary"></i> @Localizer["UseCases"]</h6>
<ul class="small">
<li>@Localizer["VCardUseCase1"]</li>
<li>@Localizer["VCardUseCase2"]</li>
<li>@Localizer["VCardUseCase3"]</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Ad Space Between Content (conditional) -->
@await Html.PartialAsync("_AdSpace", new { position = "content" })
</div>

View File

@ -190,8 +190,32 @@
<small class="text-muted" id="tagline">@Localizer["Tagline"]</small>
</div>
</a>
<div class="navbar-nav ms-auto d-flex flex-row align-items-center gap-3">
<!-- Main Menu Dropdown -->
<div class="dropdown">
<button class="btn btn-outline-primary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown">
<i class="fas fa-bars"></i> <span class="d-none d-md-inline ms-1">Menu</span>
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="@Url.Action("Index", "Home")">
<i class="fas fa-home me-2"></i>@Localizer["Home"]
</a></li>
<li><a class="dropdown-item" href="@Url.Action("HowToUse", "Home")">
<i class="fas fa-question-circle me-2"></i>@Localizer["HowToUse"]
</a></li>
<li><a class="dropdown-item" href="@Url.Action("FAQ", "Home")">
<i class="fas fa-comments me-2"></i>FAQ
</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="@Url.Action("About", "Home")">
<i class="fas fa-info-circle me-2"></i>@Localizer["About"]
</a></li>
<li><a class="dropdown-item" href="@Url.Action("Contact", "Home")">
<i class="fas fa-envelope me-2"></i>@Localizer["Contact"]
</a></li>
</ul>
</div>
<!-- Language selector -->
<div class="dropdown">
<button class="btn btn-outline-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown">
@ -310,14 +334,14 @@
<ul class="list-unstyled">
<li><a href="@Url.Action("Privacy", "Home")" class="text-light">@Localizer["Privacy"]</a></li>
<li><a href="@Url.Action("Terms", "Home")" class="text-light">@Localizer["TermsOfUse"]</a></li>
<li><a href="/Premium/Upgrade" class="text-warning">Premium</a></li>
<li><a href="@Url.Action("Upgrade", "Premium")" class="text-warning">Premium</a></li>
</ul>
</div>
<div class="col-md-3">
<h6>@Localizer["Support"]</h6>
<ul class="list-unstyled">
<li><a href="mailto:contato@qrrapido.site" class="text-light">Contato</a></li>
<li><a href="/Help" class="text-light">@Localizer["Help"]</a></li>
<li><a href="@Url.Action("FAQ", "Home")" class="text-light">@Localizer["Help"]</a></li>
</ul>
</div>
</div>