refactor: simplify Teknopark KDV box by removing interactive toggle and update markdown table rendering to include responsive overflow wrappers

This commit is contained in:
Ümit Tunç
2026-08-12 15:31:47 +03:00
parent 113019812d
commit bad7089e89
+60 -94
View File
@@ -74,65 +74,55 @@
box-shadow: 0 0 8px var(--accent-color-glow); box-shadow: 0 0 8px var(--accent-color-glow);
} }
/* Rendered Markdown Styling */ /* Rendered Markdown Styling & Responsive Overflow Control */
.proposal-content h1 { .proposal-content {
font-family: 'Outfit', sans-serif; word-break: break-word;
font-size: 2.25rem; overflow-wrap: anywhere;
font-weight: 800;
color: #0f172a;
margin-top: 2rem;
margin-bottom: 1rem;
line-height: 1.2;
}
.dark .proposal-content h1 { color: #f8fafc; }
.proposal-content h2 {
font-family: 'Outfit', sans-serif;
font-size: 1.6rem;
font-weight: 700;
color: #1e293b;
margin-top: 2.5rem;
margin-bottom: 1rem;
padding-bottom: 0.5rem;
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
line-height: 1.3;
}
.dark .proposal-content h2 {
color: #f1f5f9;
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
} }
.proposal-content h3 { .proposal-content img {
font-family: 'Outfit', sans-serif; max-width: 100%;
font-size: 1.25rem; height: auto;
font-weight: 600; border-radius: 12px;
color: #334155;
margin-top: 1.8rem;
margin-bottom: 0.75rem;
} }
.dark .proposal-content h3 { color: #e2e8f0; }
.proposal-content p { .proposal-content pre {
font-size: 1rem; max-width: 100%;
line-height: 1.7; overflow-x: auto;
color: #475569; border-radius: 12px;
margin-bottom: 1.25rem; white-space: pre-wrap;
word-break: break-word;
}
.proposal-content code {
word-break: break-word;
}
/* Responsive Table Wrapper */
.table-responsive {
width: 100%;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
margin: 1.5rem 0;
border-radius: 12px;
border: 1px solid rgba(0, 0, 0, 0.06);
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.03);
}
.dark .table-responsive {
border: 1px solid rgba(255, 255, 255, 0.06);
box-shadow: none;
} }
.dark .proposal-content p { color: #94a3b8; }
/* Tables inside Markdown styling */
.proposal-content table { .proposal-content table {
width: 100%; width: 100%;
margin: 2rem 0; min-width: 600px;
margin: 0;
border-collapse: collapse; border-collapse: collapse;
font-size: 0.925rem; font-size: 0.9rem;
border-radius: 12px; border: none;
overflow: hidden;
border: 1px solid rgba(0, 0, 0, 0.05);
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);
} }
.dark .proposal-content table { .dark .proposal-content table {
border: 1px solid rgba(255, 255, 255, 0.05); border: none;
box-shadow: none; box-shadow: none;
} }
@@ -706,8 +696,8 @@
</article> </article>
<!-- Interactive pricing & Gaziantep Teknopark %0 KDV muafiyeti box --> <!-- Fixed Gaziantep Teknopark %0 KDV muafiyeti & Net Fiyat box -->
@if($proposal->total_price && ($proposal->meta['show_calculator'] ?? true)) @if($proposal->total_price)
<section class="p-6 sm:p-8 rounded-2xl bg-white dark:bg-slate-800 border border-slate-200/60 dark:border-slate-700/50 shadow-sm relative overflow-hidden transition-all duration-300"> <section class="p-6 sm:p-8 rounded-2xl bg-white dark:bg-slate-800 border border-slate-200/60 dark:border-slate-700/50 shadow-sm relative overflow-hidden transition-all duration-300">
<div class="absolute top-0 left-0 w-full h-1 bg-gradient-to-r {{ $gradient }}"></div> <div class="absolute top-0 left-0 w-full h-1 bg-gradient-to-r {{ $gradient }}"></div>
@@ -719,39 +709,29 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" class="w-4 h-4"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor" class="w-4 h-4">
<path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75L11.25 15 15 9.75M21 12c0 1.268-.63 2.39-1.593 3.068a3.745 3.745 0 01-1.043 3.296 3.745 3.745 0 01-3.296 1.043A3.745 3.745 0 0112 21c-1.268 0-2.39-.63-3.068-1.593a3.746 3.746 0 01-3.296-1.043 3.745 3.745 0 01-1.043-3.296A3.745 3.745 0 013 12c0-1.268.63-2.39 1.593-3.068a3.745 3.745 0 011.043-3.296 3.746 3.746 0 013.296-1.043A3.746 3.746 0 0112 3c1.268 0 2.39.63 3.068 1.593a3.746 3.746 0 013.296 1.043 3.746 3.746 0 011.043 3.296A3.745 3.745 0 0121 12z" /> <path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75L11.25 15 15 9.75M21 12c0 1.268-.63 2.39-1.593 3.068a3.745 3.745 0 01-1.043 3.296 3.745 3.745 0 01-3.296 1.043A3.745 3.745 0 0112 21c-1.268 0-2.39-.63-3.068-1.593a3.746 3.746 0 01-3.296-1.043 3.745 3.745 0 01-1.043-3.296A3.745 3.745 0 013 12c0-1.268.63-2.39 1.593-3.068a3.745 3.745 0 011.043-3.296 3.746 3.746 0 013.296-1.043A3.746 3.746 0 0112 3c1.268 0 2.39.63 3.068 1.593a3.746 3.746 0 013.296 1.043 3.746 3.746 0 011.043 3.296A3.745 3.745 0 0121 12z" />
</svg> </svg>
<span>Teknopark KDV Muafiyeti Avantajı</span> <span>Teknopark KDV Muafiyeti (%0 KDV)</span>
</div> </div>
<h3 class="text-xl font-display font-bold text-slate-900 dark:text-white mb-2"> <h3 class="text-xl font-display font-bold text-slate-900 dark:text-white mb-2">
4691 Sayılı Kanun KDV Muafiyeti 4691 Sayılı Kanun KDV Muafiyetli Net Fiyat
</h3> </h3>
<p class="text-sm text-slate-500 dark:text-slate-400 leading-relaxed mb-0"> <p class="text-sm text-slate-500 dark:text-slate-400 leading-relaxed mb-0">
Trunçgil Teknoloji, Gaziantep Üniversitesi Teknoparkı bünyesinde AR-GE yürüten tescilli bir kuruluştur. Kanun kapsamında geliştirdiğimiz yazılım çözümleri KDV'den (%0 KDV) istisnadır. Bu sayede maliyetlerinizde doğrudan avantaj sağlarsınız. Trunçgil Teknoloji, Gaziantep Üniversitesi Teknoparkı bünyesinde AR-GE yürüten tescilli bir kuruluştur. 4691 Sayılı Kanun kapsamında geliştirdiğimiz yazılım çözümleri KDV'den (%0 KDV) istisnadır.
</p> </p>
</div> </div>
<!-- Interactive Box with Toggle Switch --> <!-- Price Summary Box (Fixed Net Price, Non-Optional) -->
<div class="w-full md:w-80 shrink-0 p-5 rounded-2xl bg-slate-50 dark:bg-slate-900 border border-slate-100 dark:border-slate-800 flex flex-col gap-4"> <div class="w-full md:w-80 shrink-0 p-5 rounded-2xl bg-slate-50 dark:bg-slate-900 border border-slate-100 dark:border-slate-800 flex flex-col gap-4">
<div class="flex items-center justify-between"> <div>
<span class="text-xs text-slate-400 dark:text-slate-500 font-bold uppercase">KDV Muafiyeti Göster</span> <div class="text-xs text-slate-400 dark:text-slate-500 font-semibold mb-1">Teknopark Muafiyetli Net Fiyat (%0 KDV)</div>
<div class="text-2xl font-display font-extrabold text-slate-900 dark:text-white">
<!-- Toggle Switch -->
<label class="relative inline-flex items-center cursor-pointer">
<input type="checkbox" id="kdv-toggle" class="sr-only peer" checked>
<div class="w-11 h-6 bg-slate-200 peer-focus:outline-none rounded-full peer dark:bg-slate-700 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-slate-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-slate-600 peer-checked:bg-emerald-500"></div>
</label>
</div>
<div class="border-t border-slate-200/50 dark:border-slate-800/80 pt-3">
<div class="text-xs text-slate-400 dark:text-slate-500 font-semibold mb-1" id="kdv-label">Teknopark Avantajlı Fiyat (%0 KDV)</div>
<div class="text-2xl font-display font-extrabold text-slate-900 dark:text-white" id="kdv-price">
{{ number_format($proposal->total_price, 2, ',', '.') }} {{ $proposal->currency === 'USD' ? 'USD' : ($proposal->currency === 'EUR' ? 'EUR' : 'TL') }} {{ number_format($proposal->total_price, 2, ',', '.') }} {{ $proposal->currency === 'USD' ? 'USD' : ($proposal->currency === 'EUR' ? 'EUR' : 'TL') }}
</div> </div>
</div> </div>
<div class="p-2.5 rounded-lg bg-emerald-50 dark:bg-emerald-950/20 text-emerald-800 dark:text-emerald-400 border border-emerald-200/20 text-xs font-semibold leading-relaxed flex items-start gap-2" id="kdv-benefit-box"> <div class="p-2.5 rounded-lg bg-emerald-50 dark:bg-emerald-950/20 text-emerald-800 dark:text-emerald-400 border border-emerald-200/20 text-xs font-semibold leading-relaxed flex items-start gap-2">
<i data-lucide="sparkles" class="w-4 h-4 shrink-0 text-emerald-500"></i> <i data-lucide="sparkles" class="w-4 h-4 shrink-0 text-emerald-500"></i>
<span> <span>
%20 standart KDV oranına kıyasla toplamda <strong id="kdv-benefit-amount">{{ number_format($proposal->total_price * 0.20, 2, ',', '.') }}</strong> kazanç sağladınız. %20 standart KDV oranına kıyasla toplamda <strong>{{ number_format($proposal->total_price * 0.20, 2, ',', '.') }} {{ $proposal->currency === 'USD' ? 'USD' : ($proposal->currency === 'EUR' ? 'EUR' : 'TL') }}</strong> net KDV tasarrufu sağlandı.
</span> </span>
</div> </div>
</div> </div>
@@ -1024,6 +1004,16 @@
const preprocessedText = parseGithubAlerts(rawMarkdown); const preprocessedText = parseGithubAlerts(rawMarkdown);
contentDiv.innerHTML = marked.parse(preprocessedText); contentDiv.innerHTML = marked.parse(preprocessedText);
// Auto-wrap markdown tables in responsive overflow wrapper to prevent design overflow
contentDiv.querySelectorAll('table').forEach(table => {
if (!table.parentElement.classList.contains('table-responsive')) {
const wrapper = document.createElement('div');
wrapper.className = 'table-responsive';
table.parentNode.insertBefore(wrapper, table);
wrapper.appendChild(table);
}
});
// Render Mermaid Diagrams // Render Mermaid Diagrams
const isDark = document.documentElement.classList.contains('dark'); const isDark = document.documentElement.classList.contains('dark');
mermaid.initialize({ mermaid.initialize({
@@ -1495,31 +1485,7 @@
}); });
}); });
// 4. KDV Switch Calculator Logic // 4. Client Interaction Actions & Tabs switching
const kdvToggle = document.getElementById('kdv-toggle');
const kdvLabel = document.getElementById('kdv-label');
const kdvPrice = document.getElementById('kdv-price');
const kdvBenefitBox = document.getElementById('kdv-benefit-box');
if (kdvToggle) {
const totalPrice = parseFloat('{{ $proposal->total_price }}');
const currencySymbol = '{{ $proposal->currency === 'USD' ? 'USD' : ($proposal->currency === 'EUR' ? 'EUR' : 'TL') }}';
kdvToggle.addEventListener('change', function() {
if (this.checked) {
// %0 KDV selected (Teknopark exemption)
kdvLabel.textContent = 'Teknopark Avantajlı Fiyat (%0 KDV)';
kdvPrice.textContent = new Intl.NumberFormat('tr-TR', { minimumFractionDigits: 2 }).format(totalPrice) + ' ' + currencySymbol;
kdvBenefitBox.classList.remove('hidden');
} else {
// %20 standard KDV added
const priceWithVat = totalPrice * 1.20;
kdvLabel.textContent = 'Standart Fiyat (+%20 KDV)';
kdvPrice.textContent = new Intl.NumberFormat('tr-TR', { minimumFractionDigits: 2 }).format(priceWithVat) + ' ' + currencySymbol;
kdvBenefitBox.classList.add('hidden');
}
});
}
// 5. Client Interaction Actions & Tabs switching // 5. Client Interaction Actions & Tabs switching
function switchTab(tab) { function switchTab(tab) {