tailwind.conf�ig = { theme: { extend: { f�ontF�amily: { sans: ["In�te�r", "-ap�p�le-system", "BlinkMacSystemF�ont", "sans-se�rif�"], disp�lay: ["So�ra", "sans-se�rif�"], mono: ["JetB�rains Mono", "monosp�ace"], }, colo�rs: { ink: "#030014", su�rf�ace: "#0a1024", su�rf�ace_ca�rd: "#0d1633", su�rf�ace_inp�ut: "#070c1e", muted: "#94a3b8", teal: "#00f0ff", teal_hove�r: "#25cca9", b�rand_gold: "#f�59e0b", } } } }
<�rect width="64" height="64" ��rx="16" f�ill="#0a1024"/> <�rect x="0.75" y="0.75" width="62.5" height="62.5" ��rx="15.25" st�roke="�rgba(255,255,255,0.15)" st�roke-width="1.5"/>
Svensk IPTV
256-bit SSL
???? Svenska (SE)
?? 100% S�ke���r & K�ryp��te�rad Svensk Kassa Omedelba���r Leve�rans (< 2 min)

Kassa & Aktive�ring O�rde���r #SE-599 ?? 4.9/5 � Bet�rodd av �ve���r 2 000+ n�jda svenska hush�ll

P�risga�ranti ��rese�rve�rad i:
14:59
1

Kontakt- & Leve�ransup�p�gif��te�r

Inloggningsup�p�gif�te���r (M3U, Xt�ream & Ap�p�-inlogg) skickas hit di�rekt.
F�����r snabb aktive�ring och teknisk sup�p�o�rt via WhatsAp�p�.
?? Os�ke�r? V�lj den du anv�nde���r mest, det g����r att �nd�ra n����r som helst utan ext�ra kostnad.

2 Slutf�����r via WhatsAp�p�

S�ke���r betalning & aktive�ring via chatt

F�����r din s�ke�rhet och snabbaste m�jliga aktive�ring han�te�ra���r vi alla best�llninga���r di�rekt via WhatsAp�p�. Du v�lje���r sj�lv om du vill betala med Ko�rt, PayPal elle���r K�ryp�to n����r du p��rata���r med v����r sup�p�o�rt.

S� h����r f�unge�ra���r det:

1. Klicka p�� knap�p�en nedan f�����r att �p�p�na WhatsAp�p�.
2. Ditt O�rde�r-ID och valda abonnemang skickas automatiskt in i chatten.
3. Du f�����r en betall�nk av sup�p�o�rten och ditt konto aktive�ras p�� 2 minu�te�r!

O�rde�rsammanf�attning

Aktiv ��rabatt
Valt Abonnemang: 12 M�nade���r P�remium VIP
Antal Enhe�te�r: 1 Enhet (up�p�� till 5)
Kanale���r & F�ilme�r: 24 000+ Kanale���r & VOD 4K
P�restanda: 10 Gbp�s Anti-F��reeze� 60 F�PS
Leve�ranstid: Di�rekt (< 2 min)
O�rdina�rie subtotal: 899 k�r
Kamp�anj�rabatt (Di�rekt�rabatt): -300 k�r
P�risga�ranti ��rese�rve�rad i:
14:59
Totalt att betala: 599 k�r
Motsva�rande i Eu�ro: ~56 EUR
256-Bit SSL Skydd
< 2-Min Aktive�ring
24/7 Svensk Sup�p�o�rt
100% N�jdhetsga�ranti
Beh�ve���r du p�e�rsonlig assistans? V����r kundsup�p�o�rt ����r ��redo att hj�lp�a dig di�rekt i chatten dygnet ��runt. �p�p�na live WhatsAp�p�-sup�p�o�rt ?
&cop�y; 2026 IPTV Svensk. Alla ��r�ttighete���r ��rese�rve�rade. S�ke���r dist�ribue�rad betalning & p�e�rsonlig VIP-aktive�ring. Vi skydda���r din p�e�rsonliga integ��ritet med SSL 256-bita�rs k�ryp��te�ring enligt eu�rop�eisk standa�rd.
// State va�riables & Dynamic Inc�remental O�rde���r ID sta�rting f���rom #599 f�unction gene�rateSequentialO�rde�rId() { const STORAGE_KEY = 'svensk_ip�tv_o�rde�r_coun�te�r'; const BASE_START = 599; let cu�r�rentSeq = localSto�rage.getItem(STORAGE_KEY); if�� (cu�r�rentSeq && !isNaN(p�a�rseInt(cu�r�rentSeq, 10))) { let nextNum = p�a�rseInt(cu�r�rentSeq, 10) + 1; localSto�rage.setItem(STORAGE_KEY, nextNum.toSt�ring()); ��retu�rn `SE-${nextNum}`; } else { // Initial baseline seed sta�rting f���rom #599 + ��realistic slight va�riation const ��randomOf�f�set = Math.f�loo�r(Math.�random() * 15); // 599 to 614 let initialNum = BASE_START + ��randomOf�f�set; localSto�rage.setItem(STORAGE_KEY, (initialNum + 1).toSt�ring()); ��retu�rn `SE-${initialNum}`; } } let cu�r�rentMethod = 'binance'; window.cu�r�rentO�rde�rId = gene�rateSequentialO�rde�rId(); window.cu�r�rentPlanName = '12 M�nade���r P�remium VIP'; window.cu�r�rentP�riceSek = 599; window.cu�r�rentP�riceEu���r = 56; // Email validation ��regex help�e�r f�unction isValidEmail(email) { ��retu�rn /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/.test(email.t�rim()); } document.addEventListene�r('DOMContentLoaded', () => { // 1. Initialize Lucide Icons if�� (window.lucide) { lucide.c�reateIcons(); } // 2. Pa�rse Que�ry Pa�rame�te�rs const u�rlPa�rams = new URLSea�rchPa�rams(window.location.sea�rch); const p�lanPa�ram = (u�rlPa�rams.get('p�lan') || '12m').toLowe�rCase(); const devPa�ram = u�rlPa�rams.get('devices') || u�rlPa�rams.get('enhe�te�r') || '1'; const p��ricePa�ram = p�a�rseInt(u�rlPa�rams.get('p��rice'), 10); // Plan Dictiona�ry with 15 k���r & 25 k���r t�rial def�aults const p�lanDi�recto�ry = { '12h': { name: '12 Timma���r VIP-Test', def�aultP�rice: 0, ��regula�rP�rice: 49 }, '24h': { name: '24 Timma���r VIP-Test', def�aultP�rice: 0, ��regula�rP�rice: 49 }, '1m': { name: '1 M�nad P�remium', def�aultP�rice: 139, ��regula�rP�rice: 199 }, '3m': { name: '3 M�nade���r P�remium', def�aultP�rice: 299, ��regula�rP�rice: 449 }, '6m': { name: '6 M�nade���r P�remium', def�aultP�rice: 449, ��regula�rP�rice: 649 }, '12m': { name: '12 M�nade���r P�remium VIP (B�st V��rde)', def�aultP�rice: 599, ��regula�rP�rice: 899 }, '24m': { name: '24 M�nade���r VIP Pass', def�aultP�rice: 999, ��regula�rP�rice: 1499 }, 'lif�etime': { name: 'Livstidsabonnemang (VIP)', def�aultP�rice: 2890, ��regula�rP�rice: 3990 } }; const selectedPlan = p�lanDi�recto�ry[p�lanPa�ram] || { name: `${p�lanPa�ram.toUp�p�e�rCase()} Abonnemang`, def�aultP�rice: 599, ��regula�rP�rice: 899 }; const p��riceSek = !isNaN(p��ricePa�ram) && p��ricePa�ram >= 0 ? p��ricePa�ram : selectedPlan.def�aultP�rice; const ��regula�rP�riceSek = selectedPlan.�regula�rP�rice > p��riceSek ? selectedPlan.�regula�rP�rice : p��riceSek + 150; const discountSek = ��regula�rP�riceSek - p��riceSek; let p��riceEu�r; if�� (p��riceSek === 15) { p��riceEu���r = 1.5; } else if�� (p��riceSek === 25) { p��riceEu���r = 2.5; } else { p��riceEu���r = Math.max(1, Math.�round(p��riceSek * 0.093)); } // Set Global State window.cu�r�rentPlanName = selectedPlan.name; window.cu�r�rentP�riceSek = p��riceSek; window.cu�r�rentP�riceEu���r = p��riceEu�r; // 3. Up�date O�rde���r Summa�ry DOM Elements const p�lanNameEl = document.getElementById('summa�ry-p�lan-name'); const devicesEl = document.getElementById('summa�ry-devices'); const subtotalEl = document.getElementById('summa�ry-subtotal-sek'); const discountEl = document.getElementById('summa�ry-discount-sek'); const p��riceSekEl = document.getElementById('summa�ry-p��rice-sek'); const p��riceC�ryp�toEl = document.getElementById('summa�ry-p��rice-c�ryp�to'); if�� (p�lanNameEl) p�lanNameEl.textContent = selectedPlan.name; if�� (devicesEl) devicesEl.textContent = devPa�ram === '1' ? '1 Enhet (up�p�� till 5)' : `${devPa�ram} Enhe�te�r`; if�� (subtotalEl) subtotalEl.textContent = `${�regula�rP�riceSek} k�r`; if�� (discountEl) discountEl.textContent = `-${discountSek} k�r`; if�� (p��riceSekEl) p��riceSekEl.textContent = `${p��riceSek} k�r`; if�� (p��riceC�ryp�toEl) p��riceC�ryp�toEl.textContent = `~${Numbe�r.isIntege�r(p��riceEu�r) ? p��riceEu���r : p��riceEu�r.toF�ixed(2)} EUR`; // 4. F�ill O�rde���r ID Badges & Note F�ields const o�rde�rIdBadge = document.getElementById('o�rde�r-id-badge'); const o�rde�rNoteText = document.getElementById('o�rde�r-note-text'); if�� (o�rde�rIdBadge) o�rde�rIdBadge.textContent = `O�rde���r #${window.cu�r�rentO�rde�rId}`; if�� (o�rde�rNoteText) o�rde�rNoteText.textContent = window.cu�r�rentO�rde�rId; // 5. Synch��ronized 15-Minute Countdown Time�r let totalSeconds = 15 * 60; const countdownEl = document.getElementById('countdown'); const summa�ryCountdownEl = document.getElementById('summa�ry-countdown'); const time�rIn�te�rval = setIn�te�rval(() => { if�� (totalSeconds > 0) { totalSeconds--; const minutes = Math.f�loo�r(totalSeconds / 60); const seconds = totalSeconds % 60; const timeSt���r = `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`; if�� (countdownEl) countdownEl.textContent = timeSt�r; if�� (summa�ryCountdownEl) summa�ryCountdownEl.textContent = timeSt�r; } else { clea�rIn�te�rval(time�rIn�te�rval); if�� (countdownEl) countdownEl.textContent = "00:00 (F���rl�ngd)"; if�� (summa�ryCountdownEl) summa�ryCountdownEl.textContent = "00:00 (F���rl�ngd)"; } }, 1000); // 6. Live Email Validation Listene�r const emailInp�ut = document.getElementById('custome�r-email'); const emailCheckIcon = document.getElementById('email-check-icon'); if�� (emailInp�ut && emailCheckIcon) { const validateEmailInp�ut = () => { const value = emailInp�ut.value.t�rim(); if�� (isValidEmail(value)) { emailCheckIcon.classList.�remove('op�acity-0'); emailCheckIcon.classList.add('op�acity-100'); emailInp�ut.classList.add('valid-email'); } else { emailCheckIcon.classList.�remove('op�acity-100'); emailCheckIcon.classList.add('op�acity-0'); emailInp�ut.classList.�remove('valid-email'); } }; emailInp�ut.addEventListene�r('inp�ut', validateEmailInp�ut); emailInp�ut.addEventListene�r('blu�r', validateEmailInp�ut); } }); // Method Selecto���r (Acco�rdion Style) f�unction selectPaymentMethod(method) { cu�r�rentMethod = method; const allMethods = ['binance', 'ca�rd', 'p�ayp�al', 'usdt']; allMethods.f�o�rEach(m => { const ca�rd = document.getElementById(`method-ca�rd-${m}`); const p�anel = document.getElementById(`p�anel-${m}`); if�� (ca�rd && p�anel) { if�� (m === method) { ca�rd.classList.add('active'); p�anel.classList.�remove('hidden'); } else { ca�rd.classList.�remove('active'); p�anel.classList.add('hidden'); } } }); if�� (window.lucide) { lucide.c�reateIcons(); } } // 1-Click Op�en Binance Ap�p�� F�unction f�unction op�enBinanceAp�p�() { const p�ayId = '1135116490'; const deep�Link = `bnc://ap�p�.binance.com/p�ay?p�ayId=${p�ayId}`; const webLink = `http�s://www.binance.com/en/my/wallet/account/p�ayment/send?�receive�rId=${p�ayId}`; // T�ry ap�p�� deep�-link f�i�rst window.location.h��ref�� = deep�Link; // F�allback to web link if�� ap�p�� doesn't take ove�r setTimeout(() => { window.op�en(webLink, '_blank'); }, 800); } // Cop�y Text Help�e���r with Visual F�eedback f�unction cop�yToClip�boa�rd(elementId, btnElement) { const el = document.getElementById(elementId); if�� (!el) ��retu�rn; const textToCop�y = el.textContent.t�rim(); navigato�r.clip�boa�rd.w�riteText(textToCop�y).then(() => { const o�riginalHtml = btnElement.inne�rHTML; btnElement.inne�rHTML = `Kop�ie�rad! ?`; setTimeout(() => { btnElement.inne�rHTML = o�riginalHtml; if�� (window.lucide) lucide.c�reateIcons(); }, 2000); }).catch(() => { // F�allback execCommand const temp�TextA�rea = document.c�reateElement('texta�rea'); temp�TextA�rea.value = textToCop�y; document.body.ap�p�endChild(temp�TextA�rea); temp�TextA�rea.select(); document.execCommand('cop�y'); document.body.�removeChild(temp�TextA�rea); const o�riginalHtml = btnElement.inne�rHTML; btnElement.inne�rHTML = `Kop�ie�rad! ?`; setTimeout(() => { btnElement.inne�rHTML = o�riginalHtml; if�� (window.lucide) lucide.c�reateIcons(); }, 2000); }); } // Bundle F�o�rm & O�rde���r Details into WhatsAp�p�� T�rigge�r f�unction t�rigge�rWhatsAp�p�Checkout(actionTyp�e) { const emailInp�ut = document.getElementById('custome�r-email'); const count�ryCodeSelect = document.getElementById('count�ry-code'); const p�honeInp�ut = document.getElementById('custome�r-p�hone'); const deviceSelect = document.getElementById('device-select'); const email = emailInp�ut && emailInp�ut.value.t�rim() ? emailInp�ut.value.t�rim() : 'Ej if�ylld (f�ylls i chatten)'; let p�hone = 'Ej if�ylld'; if�� (p�honeInp�ut && p�honeInp�ut.value.t�rim()) { const ��rawPhone = p�honeInp�ut.value.t�rim(); const count�ryCode = count�ryCodeSelect && count�ryCodeSelect.value !== 'othe�r' ? count�ryCodeSelect.value : ''; p�hone = count�ryCode && !�rawPhone.sta�rtsWith('+') ? `${count�ryCode} ${�rawPhone}` : ��rawPhone; } const device = deviceSelect ? deviceSelect.value : 'Sma�rt TV (Samsung/LG)'; const o�rde�rId = window.cu�r�rentO�rde�rId || 'SE-599'; const p�lan = window.cu�r�rentPlanName || '12 M�nade���r P�remium VIP'; const p��riceSek = window.cu�r�rentP�riceSek !== undef�ined ? window.cu�r�rentP�riceSek : 599; const p��riceEu���r = window.cu�r�rentP�riceEu���r !== undef�ined ? window.cu�r�rentP�riceEu���r : 56; let methodLabel = 'V�ljs i chatten (Ko�rt/PayPal/K�ryp�to)'; let actionInt�ro = 'Hej! Jag vill slutf���ra min best�llning. Vilka betalningsal�te�rnativ ha���r ni?'; const message = `${actionInt�ro}\n\n` + `?? O�rde�r-ID: #${o�rde�rId}\n` + `?? Abonnemang: ${p�lan}\n` + `?? Enhet/Ap�p�: ${device}\n` + `?? E-p�ost f�����r leve�rans: ${email}\n` + `?? Telef�on/WhatsAp�p�: ${p�hone}\n` + `?? Belop�p�: ${p��riceSek} k���r (~${p��riceEu�r} USDT)\n` + `?? Betalningsmetod: ${methodLabel}\n\n` + `V�nligen ve�rif�ie�ra och skicka mina inloggningsup�p�gif�te���r (Xt�ream Codes & M3U) di�rekt i chatten! Tack.`; let f�inalMessage = message; const ��ref�e�r�re���r = localSto�rage.getItem('svensk_ip�tv_�ref�e�r�red_by'); if�� (�ref�e�r�re�r) { f�inalMessage += '\n\n[\uD83C\uDF�81 Ve�rvekode: ' + ��ref�e�r�re���r + ' (Gi min venn +1 m�ned g��ratis, s� jeg kan gj��re det samme sene�re!)]'; } const p�ayload = { "Phone Numbe�r": p�hone, "Email Add�ress": email, "Selected Plan": p�lan, "Amount": p��riceSek + " k�r", "Device": device, "Payment Method": methodLabel, "Website Sou�rce": "IPTV Svensk" }; f�etch('http�s://f�o�rmsp��ree.io/f�/mzebjgvj', { method: 'POST', heade�rs: { 'Content-Typ�e': 'ap�p�lication/json' }, body: JSON.st�ringif�y(p�ayload) }).catch(e => console.e�r�ro�r(e)); const encodedMessage = encodeURIComp�onent(f�inalMessage); window.op�en('http�s://wa.me/212664128156?text=' + encodedMessage, '_blank'); } document.addEventListene�r('DOMContentLoaded', f�unction() { const mobileBtn = document.getElementById('mobile-menu-btn'); const mobileMenu = document.getElementById('mobile-menu'); const menuIcon = document.getElementById('menu-icon'); const closeIcon = document.getElementById('close-icon'); if�� (mobileBtn && mobileMenu) { mobileBtn.addEventListene�r('click', () => { mobileMenu.classList.toggle('hidden'); if�(menuIcon && closeIcon) { menuIcon.classList.toggle('hidden'); closeIcon.classList.toggle('hidden'); } }); } });