Adds a quick address/postal code lookup that queries intra.cuitunet.fi API to show if fiber is available, directly in the contact section. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
406 lines
18 KiB
HTML
406 lines
18 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="fi">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Cuitunet – Nopeinta kaistaa verkkoon</title>
|
||
<meta name="description" content="Cuitunet tarjoaa symmetriset valokuituyhteydet yrityksille ja taloyhtiöille — jopa 100 Gbps. Turkulainen operaattori.">
|
||
<link rel="stylesheet" href="style.css">
|
||
</head>
|
||
<body>
|
||
|
||
<header class="header">
|
||
<div class="container header-inner">
|
||
<a href="/" class="logo">
|
||
<img src="images/logo_transparent.png" alt="Cuitunet">
|
||
</a>
|
||
<nav class="nav" id="nav">
|
||
<a href="#palvelut">Palvelut</a>
|
||
<a href="#miksi">Miksi Cuitunet</a>
|
||
<a href="#yhteystiedot">Yhteystiedot</a>
|
||
</nav>
|
||
<a href="#saatavuus" class="btn btn-sm header-cta">Tee saatavuuskysely</a>
|
||
<button class="nav-toggle" aria-label="Avaa valikko" onclick="document.getElementById('nav').classList.toggle('open')">
|
||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 12h18M3 6h18M3 18h18"/></svg>
|
||
</button>
|
||
</div>
|
||
</header>
|
||
|
||
<!-- Hero -->
|
||
<section class="hero" style="background-image: url('images/hero-fiber.jpg')">
|
||
<div class="hero-overlay"></div>
|
||
<div class="container hero-container">
|
||
<h1>Valokuitua <span class="highlight">koko Suomeen</span><br>— yhteydet jotka vain toimivat</h1>
|
||
<p class="hero-sub">Turkulainen operaattori joka rakentaa luotettavimmat valokuituyhteydet yrityksille, taloyhtiöille ja konesaleille — koko Suomeen, avaimet käteen.</p>
|
||
<div class="hero-actions">
|
||
<a href="#saatavuus" class="btn">Tee saatavuuskysely</a>
|
||
<a href="#palvelut" class="btn btn-outline-light">Tutustu palveluihin</a>
|
||
</div>
|
||
<div class="hero-stats">
|
||
<div class="hero-stat">
|
||
<strong>100 Gbps</strong>
|
||
<span>Nopeudet jopa</span>
|
||
</div>
|
||
<div class="hero-stat">
|
||
<strong>100%</strong>
|
||
<span>Valokuitua</span>
|
||
</div>
|
||
<div class="hero-stat">
|
||
<strong>Symmetrinen</strong>
|
||
<span>Lataus = lähetys</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Palvelut -->
|
||
<!-- Palvelut -->
|
||
<section id="palvelut" class="services">
|
||
<div class="container">
|
||
<div class="section-header">
|
||
<span class="overline">Palvelut</span>
|
||
<h2>Yhteydet joka tarpeeseen</h2>
|
||
<p>Toimitamme valokuituyhteydet avaimet käteen ‑periaatteella koko Suomeen.</p>
|
||
</div>
|
||
|
||
<div class="services-grid">
|
||
<div class="service-card">
|
||
<div class="service-card-img">
|
||
<img src="images/service-office.jpg" alt="Moderni toimisto">
|
||
</div>
|
||
<div class="service-card-body">
|
||
<h3>Yritysliittymät</h3>
|
||
<p>Luotettavat ja nopeat valokuituyhteydet kaikenkokoisille yrityksille. Kiinteä kaista ilman jaettua kapasiteettia — nopeus ei tipu ruuhka-aikaan.</p>
|
||
<ul class="service-card-features">
|
||
<li>Nopeudet 1–100 Gbps</li>
|
||
<li>SLA-palvelutasotakuu</li>
|
||
<li>Kiinteä ja taattu kaista</li>
|
||
<li>Henkilökohtainen tuki</li>
|
||
</ul>
|
||
<a href="#saatavuus" class="btn btn-sm">Pyydä tarjous</a>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="service-card">
|
||
<div class="service-card-img">
|
||
<img src="images/service-datacenter.jpg" alt="Konesali">
|
||
</div>
|
||
<div class="service-card-body">
|
||
<h3>Konesaliyhteydet</h3>
|
||
<p>Yhteydet omiin laitetiloihin ja kolmansien osapuolien konesaleihin. Skaalautuvat tarpeen mukaan aina 100 gigabittiin asti.</p>
|
||
<ul class="service-card-features">
|
||
<li>Jopa 100 Gbps</li>
|
||
<li>Varmennetut reitit</li>
|
||
<li>Cross-connect</li>
|
||
<li>Joustava skaalautuvuus</li>
|
||
</ul>
|
||
<a href="#saatavuus" class="btn btn-sm">Pyydä tarjous</a>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="service-card">
|
||
<div class="service-card-img">
|
||
<img src="images/service-building.jpg" alt="Kerrostalo">
|
||
</div>
|
||
<div class="service-card-body">
|
||
<h3>Kiinteistöliittymät</h3>
|
||
<p>Kuituyhteydet taloyhtiöille — etätyö, suoratoisto ja pelaaminen sujuvat ilman katkoja. Asennamme yhteydet avaimet käteen ‑periaatteella.</p>
|
||
<ul class="service-card-features">
|
||
<li>Symmetrinen nopeus</li>
|
||
<li>Koko kiinteistölle</li>
|
||
<li>Avaimet käteen</li>
|
||
<li>Kilpailukykyinen hinta</li>
|
||
</ul>
|
||
<a href="#saatavuus" class="btn btn-sm">Pyydä tarjous</a>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="service-card">
|
||
<div class="service-card-img">
|
||
<img src="images/service-network.jpg" alt="Verkko">
|
||
</div>
|
||
<div class="service-card-body">
|
||
<h3>IP-transit</h3>
|
||
<p>Suora Internet-yhteys omalla AS-numerolla tai jaetulla reitityksellä. BGP-peering ja monipuoliset reititysratkaisut.</p>
|
||
<ul class="service-card-features">
|
||
<li>BGP-peering</li>
|
||
<li>Oma tai jaettu AS</li>
|
||
<li>Monipuolinen reititys</li>
|
||
<li>Räätälöity kapasiteetti</li>
|
||
</ul>
|
||
<a href="#saatavuus" class="btn btn-sm">Pyydä tarjous</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Kuvakaistale -->
|
||
<section class="image-break" style="background-image: url('images/fiber-light.jpg')">
|
||
<div class="image-break-overlay"></div>
|
||
<div class="container image-break-content">
|
||
<div class="image-break-stat">
|
||
<strong>100 Gbps</strong>
|
||
<span>Nopeudet jopa</span>
|
||
</div>
|
||
<div class="image-break-stat">
|
||
<strong>Symmetrinen</strong>
|
||
<span>Sama nopeus molempiin suuntiin</span>
|
||
</div>
|
||
<div class="image-break-stat">
|
||
<strong>SLA</strong>
|
||
<span>Palvelutasotakuu</span>
|
||
</div>
|
||
<div class="image-break-stat">
|
||
<strong>Turku</strong>
|
||
<span>Paikallinen operaattori</span>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Miksi Cuitunet -->
|
||
<section id="miksi" class="why">
|
||
<div class="container">
|
||
<div class="why-inner">
|
||
<div class="why-content">
|
||
<span class="overline">Miksi Cuitunet</span>
|
||
<h2>Operaattori joka välittää</h2>
|
||
<p>Isot operaattorit kohtelevat sinua numerona. Meillä tunnet yhteyshenkilösi nimeltä. Kun ongelma ilmenee, emme piiloudu automaattisen palvelunumeron taakse — me vastaamme ja hoidamme asian.</p>
|
||
<p>Rakennamme jokaisen yhteyden huolella ja mitoitamme sen asiakkaan todellisen tarpeen mukaan. Ei ylimyyntiä, ei piilomaksuja — vain yhteys joka toimii.</p>
|
||
</div>
|
||
<div class="why-features">
|
||
<div class="feature">
|
||
<div class="feature-icon">
|
||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><polyline points="13 17 18 12 13 7"/><polyline points="6 17 11 12 6 7"/></svg>
|
||
</div>
|
||
<div>
|
||
<strong>Jopa 100 Gbps</strong>
|
||
<p>Skaalautuva kapasiteetti kasvun mukaan</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature">
|
||
<div class="feature-icon">
|
||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
|
||
</div>
|
||
<div>
|
||
<strong>Palvelutasotakuu</strong>
|
||
<p>SLA-sopimukset ja varmennetut yhteydet</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature">
|
||
<div class="feature-icon">
|
||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg>
|
||
</div>
|
||
<div>
|
||
<strong>Paikallinen toimija</strong>
|
||
<p>Turkulainen operaattori, nopea palvelu</p>
|
||
</div>
|
||
</div>
|
||
<div class="feature">
|
||
<div class="feature-icon">
|
||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22 6 12 13 2 6"/></svg>
|
||
</div>
|
||
<div>
|
||
<strong>Avaimet käteen</strong>
|
||
<p>Hoidamme asennuksen ja konfiguroinnin</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Kaupunki-kuvakaistale -->
|
||
<section class="image-break image-break-tall" style="background-image: url('images/city-network.jpg')">
|
||
<div class="image-break-overlay image-break-overlay-warm"></div>
|
||
<div class="container image-break-cta">
|
||
<h2>Kiinnostaako kuituliittymä?</h2>
|
||
<p>Selvitä valokuidun saatavuus osoitteessasi — vastaamme 1–2 arkipäivässä.</p>
|
||
<a href="#saatavuus" class="btn">Tee saatavuuskysely</a>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Saatavuuskysely -->
|
||
<section id="saatavuus" class="availability">
|
||
<div class="container">
|
||
<div class="availability-inner">
|
||
<div class="availability-text">
|
||
<span class="overline">Saatavuuskysely & yhteydenotto</span>
|
||
<h2>Ota yhteyttä tai tarkista saatavuus</h2>
|
||
<p>Tarkista heti onko kuituliittymä saatavilla osoitteessasi, tai täytä lomake niin otamme yhteyttä 1–2 arkipäivässä.</p>
|
||
|
||
<div class="availability-check">
|
||
<h3>Pikasaatavuustarkistus</h3>
|
||
<div class="availability-check-form">
|
||
<input type="text" id="check-address" placeholder="Osoite tai postinumero">
|
||
<button type="button" class="btn btn-sm" id="check-btn">Tarkista</button>
|
||
</div>
|
||
<div id="check-result" class="check-result" style="display:none;"></div>
|
||
</div>
|
||
</div>
|
||
<form class="form" id="availability-form">
|
||
<div style="position:absolute;left:-9999px;top:-9999px;">
|
||
<input type="text" name="website" tabindex="-1" autocomplete="off">
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="company">Yrityksen nimi</label>
|
||
<input type="text" id="company" name="company" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="email">Sähköposti</label>
|
||
<input type="email" id="email" name="email" required>
|
||
</div>
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label for="address">Katuosoite</label>
|
||
<input type="text" id="address" name="address" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="city">Kaupunki</label>
|
||
<input type="text" id="city" name="city" required>
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="message">Lisätiedot <span class="optional">(valinnainen)</span></label>
|
||
<textarea id="message" name="message" rows="3"></textarea>
|
||
</div>
|
||
<button type="submit" class="btn btn-full">Lähetä viesti</button>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Footer -->
|
||
<footer id="yhteystiedot" class="footer">
|
||
<div class="container">
|
||
<div class="footer-top">
|
||
<div class="footer-brand">
|
||
<img src="images/logo_transparent.png" alt="Cuitunet" class="footer-logo">
|
||
<p>Turkulainen valokuituoperaattori. Rakennamme nopeimmat yhteydet yrityksille ja taloyhtiöille.</p>
|
||
</div>
|
||
<div class="footer-links">
|
||
<h4>Palvelut</h4>
|
||
<a href="#palvelut">Yritysliittymät</a>
|
||
<a href="#palvelut">Konesaliyhteydet</a>
|
||
<a href="#palvelut">Kiinteistöliittymät</a>
|
||
<a href="#palvelut">IP-transit</a>
|
||
</div>
|
||
<div class="footer-links">
|
||
<h4>Yhteystiedot</h4>
|
||
<a href="mailto:asiakaspalvelu@cuitunet.fi">asiakaspalvelu@cuitunet.fi</a>
|
||
<a href="tel:0207780731">02 077 80731</a>
|
||
</div>
|
||
<div class="footer-links">
|
||
<h4>Toimisto</h4>
|
||
<p>Latokarinkatu 3</p>
|
||
<p>20200 Turku</p>
|
||
<p>ma–pe 8:00–17:00</p>
|
||
</div>
|
||
</div>
|
||
<div class="footer-bottom">
|
||
<p>© 2026 Cuitunet Oy. Kaikki oikeudet pidätetään.</p>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
<script>
|
||
// Mobiilinavigaatio
|
||
document.querySelector('.nav-toggle')?.addEventListener('click', function() {
|
||
document.querySelector('.nav')?.classList.toggle('open');
|
||
});
|
||
|
||
// Pikasaatavuustarkistus
|
||
(function() {
|
||
const API_URL = 'https://intra.cuitunet.fi/api.php';
|
||
const API_KEY = '3de64ed2a3ece1c0f497345e41e8e76d';
|
||
const checkInput = document.getElementById('check-address');
|
||
const checkBtn = document.getElementById('check-btn');
|
||
const checkResult = document.getElementById('check-result');
|
||
|
||
async function checkAvailability() {
|
||
const q = checkInput.value.trim();
|
||
if (!q) return;
|
||
|
||
checkResult.className = 'check-result loading';
|
||
checkResult.style.display = 'block';
|
||
checkResult.innerHTML = '<p>Tarkistetaan saatavuutta...</p>';
|
||
|
||
try {
|
||
const isZip = /^\d{5}$/.test(q);
|
||
const param = isZip ? 'postinumero=' + encodeURIComponent(q) : 'osoite=' + encodeURIComponent(q);
|
||
const res = await fetch(API_URL + '?action=saatavuus&key=' + encodeURIComponent(API_KEY) + '&' + param);
|
||
const data = await res.json();
|
||
|
||
if (data.error) {
|
||
checkResult.className = 'check-result nok';
|
||
checkResult.innerHTML = '<h4>Virhe</h4><p>' + data.error + '</p>';
|
||
return;
|
||
}
|
||
|
||
if (data.saatavilla) {
|
||
let html = '<h4>Kuituliittymä on saatavilla!</h4>';
|
||
html += '<p>Löysimme ' + data.maara + ' kohde' + (data.maara > 1 ? 'tta' : 'n') + ':</p>';
|
||
data.kohteet.forEach(function(k) {
|
||
html += '<div class="check-result-address">';
|
||
html += '<strong>' + k.osoite + '</strong>';
|
||
if (k.postinumero) html += ', ' + k.postinumero;
|
||
if (k.kaupunki) html += ' ' + k.kaupunki;
|
||
if (k.nopeus) html += ' — ' + k.nopeus;
|
||
html += '</div>';
|
||
});
|
||
checkResult.className = 'check-result ok';
|
||
checkResult.innerHTML = html;
|
||
} else {
|
||
checkResult.className = 'check-result nok';
|
||
checkResult.innerHTML = '<h4>Ei saatavuutta vielä</h4><p>Kuituliittymää ei löytynyt osoitteellasi, mutta verkkomme laajenee jatkuvasti. Täytä lomake niin kerromme kun kuitu tulee saataville!</p>';
|
||
}
|
||
} catch (e) {
|
||
checkResult.className = 'check-result nok';
|
||
checkResult.innerHTML = '<h4>Yhteysvirhe</h4><p>Tarkistusta ei voitu suorittaa. Yritä hetken kuluttua uudelleen.</p>';
|
||
}
|
||
}
|
||
|
||
checkBtn?.addEventListener('click', checkAvailability);
|
||
checkInput?.addEventListener('keydown', function(e) { if (e.key === 'Enter') checkAvailability(); });
|
||
})();
|
||
|
||
// Saatavuuskysely-lomake
|
||
document.getElementById('availability-form')?.addEventListener('submit', async function(e) {
|
||
e.preventDefault();
|
||
const btn = this.querySelector('button[type="submit"]');
|
||
const originalText = btn.textContent;
|
||
btn.disabled = true;
|
||
btn.textContent = 'Lähetetään...';
|
||
|
||
try {
|
||
const formData = new FormData(this);
|
||
const response = await fetch('send.php', {
|
||
method: 'POST',
|
||
body: formData
|
||
});
|
||
const data = await response.json();
|
||
|
||
if (data.success) {
|
||
btn.textContent = 'Lähetetty!';
|
||
btn.style.background = '#27ae60';
|
||
this.reset();
|
||
setTimeout(() => {
|
||
btn.textContent = originalText;
|
||
btn.style.background = '';
|
||
btn.disabled = false;
|
||
}, 4000);
|
||
} else {
|
||
alert(data.error || 'Jokin meni pieleen. Yritä uudelleen.');
|
||
btn.textContent = originalText;
|
||
btn.disabled = false;
|
||
}
|
||
} catch (err) {
|
||
alert('Yhteysvirhe. Tarkista verkkoyhteytesi ja yritä uudelleen.');
|
||
btn.textContent = originalText;
|
||
btn.disabled = false;
|
||
}
|
||
});
|
||
</script>
|
||
</body>
|
||
</html>
|