{"id":6,"date":"2026-08-21T21:44:51","date_gmt":"2026-08-21T21:44:51","guid":{"rendered":"https:\/\/konesaliyhtiot.fi\/?page_id=6"},"modified":"2026-08-21T22:41:32","modified_gmt":"2026-08-21T22:41:32","slug":"etusivu","status":"publish","type":"page","link":"https:\/\/konesaliyhtiot.fi\/","title":{"rendered":"Etusivu"},"content":{"rendered":"\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Big+Shoulders+Display:wght@600;700;800&#038;family=IBM+Plex+Sans:wght@400;500;600;700&#038;family=IBM+Plex+Mono:wght@400;500&#038;display=swap\" rel=\"stylesheet\">\n<style>\n  @media (prefers-reduced-motion: reduce) {\n    *, *::before, *::after { animation-duration: 0.001ms !important; animation-iteration-count: 1 !important; transition-duration: 0.001ms !important; scroll-behavior: auto !important; }\n  }\n\n  :root {\n    --bg: #0A0D0B;\n    --bg-raise: #10140F;\n    --surface: #141810;\n    --surface-2: #1B211A;\n    --text: #ECF2ED;\n    --text-muted: #93A199;\n    --text-faint: #647065;\n    --border: rgba(236, 242, 237, 0.09);\n    --border-strong: rgba(236, 242, 237, 0.20);\n    --accent: #34D399;\n    --accent-strong: #7CEFC0;\n    --accent-soft: rgba(52, 211, 153, 0.16);\n    --accent-on: #06251A;\n    --led-on: #4ADE94;\n    --led-off: rgba(236, 242, 237, 0.09);\n    --shadow: 0 24px 60px -20px rgba(0, 0, 0, 0.65);\n    --focus: #7CEFC0;\n  }\n\n  .konesali-page * { box-sizing: border-box; }\n\n  .konesali-page {\n    display: block;\n    width: 100%;\n    margin: 0;\n    scroll-behavior: smooth;\n    background: var(--bg);\n    color: var(--text);\n    font-family: \"IBM Plex Sans\", \"Segoe UI\", system-ui, sans-serif;\n    font-size: 16px;\n    line-height: 1.6;\n    -webkit-font-smoothing: antialiased;\n  }\n\n  .konesali-page a { color: inherit; }\n\n  .konesali-page .mono {\n    font-family: \"IBM Plex Mono\", ui-monospace, \"SF Mono\", monospace;\n    font-variant-numeric: tabular-nums;\n  }\n\n  .konesali-page h1, .konesali-page h2, .konesali-page h3 {\n    font-family: \"Big Shoulders Display\", \"Arial Narrow\", sans-serif;\n    font-weight: 800;\n    text-transform: uppercase;\n    letter-spacing: 0.01em;\n    line-height: 0.95;\n    text-wrap: balance;\n    margin: 0;\n  }\n\n  .konesali-page .eyebrow {\n    font-family: \"IBM Plex Mono\", ui-monospace, monospace;\n    font-size: 0.78rem;\n    letter-spacing: 0.16em;\n    text-transform: uppercase;\n    color: var(--accent);\n    display: flex;\n    align-items: center;\n    gap: 0.6em;\n    margin: 0 0 0.9em;\n  }\n\n  .konesali-page .eyebrow::before {\n    content: \"\";\n    width: 7px;\n    height: 7px;\n    border-radius: 50%;\n    background: var(--led-on);\n    box-shadow: 0 0 0 3px var(--accent-soft);\n    flex: none;\n  }\n\n  .konesali-page .wrap {\n    max-width: 1180px;\n    margin: 0 auto;\n    padding: 0 clamp(1.25rem, 4vw, 3rem);\n  }\n\n  .konesali-page header.site {\n    position: sticky;\n    top: 0;\n    z-index: 40;\n    background: color-mix(in srgb, var(--bg) 88%, transparent);\n    backdrop-filter: blur(10px);\n    border-bottom: 1px solid var(--border);\n  }\n\n  .konesali-page .nav-row {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 1.5rem;\n    padding: 1.05rem clamp(1.25rem, 4vw, 3rem);\n    max-width: 1180px;\n    margin: 0 auto;\n  }\n\n  .konesali-page .brand {\n    display: flex;\n    align-items: center;\n    gap: 0.6rem;\n    font-family: \"Big Shoulders Display\", sans-serif;\n    font-weight: 800;\n    font-size: 1.35rem;\n    text-transform: uppercase;\n    letter-spacing: 0.01em;\n    text-decoration: none;\n    color: var(--text);\n    white-space: nowrap;\n  }\n\n  .konesali-page .brand .led {\n    width: 10px;\n    height: 10px;\n    border-radius: 2px;\n    background: var(--led-on);\n    box-shadow: 0 0 10px 1px var(--accent-soft);\n    animation: blink 2.6s ease-in-out infinite;\n    flex: none;\n  }\n\n  .konesali-page nav.primary {\n    display: flex;\n    gap: clamp(1rem, 2.5vw, 2.1rem);\n  }\n\n  .konesali-page nav.primary a {\n    text-decoration: none;\n    font-size: 0.94rem;\n    font-weight: 500;\n    color: var(--text-muted);\n    padding: 0.3rem 0.1rem;\n    border-bottom: 2px solid transparent;\n    transition: color 0.15s ease, border-color 0.15s ease;\n  }\n\n  .konesali-page nav.primary a:hover { color: var(--text); border-color: var(--border-strong); }\n\n  .konesali-page .nav-actions { display: flex; align-items: center; gap: 1rem; }\n\n  .konesali-page .btn {\n    display: inline-flex;\n    align-items: center;\n    gap: 0.5em;\n    font-weight: 600;\n    font-size: 0.94rem;\n    text-decoration: none;\n    padding: 0.68em 1.35em;\n    border-radius: 3px;\n    border: 1px solid transparent;\n    cursor: pointer;\n    transition: transform 0.15s ease, background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;\n  }\n  .konesali-page .btn:active { transform: translateY(1px); }\n  .konesali-page .btn:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }\n\n  .konesali-page .btn-primary {\n    background: var(--accent);\n    color: var(--accent-on);\n    box-shadow: 0 8px 24px -10px var(--accent-soft);\n  }\n  .konesali-page .btn-primary:hover { background: var(--accent-strong); }\n\n  .konesali-page .btn-ghost {\n    background: transparent;\n    color: var(--text);\n    border-color: var(--border-strong);\n  }\n  .konesali-page .btn-ghost:hover { border-color: var(--accent); color: var(--accent); }\n\n  .konesali-page .nav-toggle {\n    display: none;\n    background: none;\n    border: 1px solid var(--border-strong);\n    border-radius: 3px;\n    color: var(--text);\n    width: 40px;\n    height: 40px;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n  }\n\n  .konesali-page .hero {\n    position: relative;\n    overflow: hidden;\n    padding: clamp(3.5rem, 9vw, 7rem) 0 clamp(3rem, 8vw, 5.5rem);\n    background:\n      radial-gradient(ellipse 900px 500px at 85% -10%, var(--accent-soft), transparent 60%),\n      repeating-linear-gradient(180deg, var(--border) 0px, var(--border) 1px, transparent 1px, transparent 34px);\n  }\n\n  .konesali-page .hero .wrap {\n    display: grid;\n    grid-template-columns: 1.15fr 0.85fr;\n    gap: clamp(2rem, 5vw, 4rem);\n    align-items: center;\n  }\n\n  .konesali-page .hero h1 {\n    font-size: clamp(2.6rem, 5.6vw, 4.4rem);\n    margin-bottom: 0.42em;\n  }\n\n  .konesali-page .hero h1 em {\n    font-style: normal;\n    color: var(--accent);\n  }\n\n  .konesali-page .hero p.lede {\n    font-size: 1.14rem;\n    color: var(--text-muted);\n    max-width: 46ch;\n    margin: 0 0 2rem;\n  }\n\n  .konesali-page .hero-ctas { display: flex; gap: 1rem; flex-wrap: wrap; margin-bottom: 2.4rem; }\n\n  .konesali-page .hero-facts {\n    display: flex;\n    gap: clamp(1.5rem, 4vw, 2.6rem);\n    flex-wrap: wrap;\n  }\n\n  .konesali-page .hero-facts .fact .num {\n    font-family: \"Big Shoulders Display\", sans-serif;\n    font-weight: 700;\n    font-size: 1.9rem;\n    color: var(--text);\n    display: block;\n  }\n  .konesali-page .hero-facts .fact .lbl {\n    font-family: \"IBM Plex Mono\", monospace;\n    font-size: 0.72rem;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: var(--text-faint);\n  }\n\n  .konesali-page .visual {\n    background: var(--surface);\n    border: 1px solid var(--border);\n    border-radius: 8px;\n    box-shadow: var(--shadow);\n    padding: 1.25rem;\n    aspect-ratio: 4 \/ 5;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    overflow: hidden;\n    position: relative;\n  }\n\n  .konesali-page .visual canvas {\n    width: 100%;\n    height: 100%;\n    display: block;\n  }\n\n  @keyframes blink {\n    0%, 100% { opacity: 1; }\n    50% { opacity: 0.25; }\n  }\n\n  .konesali-page section { padding: clamp(3.5rem, 8vw, 6rem) 0; }\n  .konesali-page section.alt { background: var(--surface); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }\n\n  .konesali-page .section-head {\n    max-width: 62ch;\n    margin-bottom: clamp(2rem, 5vw, 3rem);\n  }\n  .konesali-page .section-head h2 { font-size: clamp(1.9rem, 3.6vw, 2.6rem); }\n  .konesali-page .section-head p { color: var(--text-muted); font-size: 1.05rem; margin: 0.6em 0 0; }\n\n  .konesali-page .reveal {\n    opacity: 0;\n    transform: translateY(14px);\n    transition: opacity 0.6s ease, transform 0.6s ease;\n  }\n  .konesali-page .reveal.in { opacity: 1; transform: none; }\n\n  .konesali-page .services-grid {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 1.4rem;\n  }\n\n  .konesali-page .service-card {\n    background: var(--bg-raise);\n    border: 1px solid var(--border);\n    border-radius: 8px;\n    padding: 1.9rem 1.7rem 1.7rem;\n    display: flex;\n    flex-direction: column;\n    gap: 1rem;\n    transition: border-color 0.2s ease, transform 0.2s ease;\n  }\n  .konesali-page .service-card:hover { border-color: var(--border-strong); transform: translateY(-3px); }\n\n  .konesali-page .service-card .tag {\n    font-family: \"IBM Plex Mono\", monospace;\n    font-size: 0.7rem;\n    color: var(--accent);\n    letter-spacing: 0.08em;\n  }\n\n  .konesali-page .service-card h3 {\n    font-size: 1.5rem;\n    letter-spacing: 0;\n  }\n\n  .konesali-page .service-card p { color: var(--text-muted); margin: 0; font-size: 0.98rem; }\n\n  .konesali-page .service-card .spec {\n    margin-top: auto;\n    padding-top: 0.9rem;\n    border-top: 1px solid var(--border);\n    font-family: \"IBM Plex Mono\", monospace;\n    font-size: 0.72rem;\n    color: var(--text-faint);\n    letter-spacing: 0.02em;\n  }\n\n  .konesali-page .about-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: clamp(2rem, 5vw, 4rem);\n    align-items: start;\n  }\n\n  .konesali-page .about-grid p { color: var(--text-muted); font-size: 1.04rem; max-width: 58ch; }\n  .konesali-page .about-grid p + p { margin-top: 1.1em; }\n\n  .konesali-page .stat-list { display: flex; flex-direction: column; gap: 1.1rem; }\n  .konesali-page .stat-list .stat {\n    display: flex;\n    align-items: baseline;\n    gap: 1rem;\n    padding-bottom: 1.1rem;\n    border-bottom: 1px solid var(--border);\n  }\n  .konesali-page .stat-list .stat:last-child { border-bottom: none; }\n  .konesali-page .stat-list .stat .num {\n    font-family: \"Big Shoulders Display\", sans-serif;\n    font-weight: 800;\n    font-size: 2.1rem;\n    color: var(--accent);\n    flex: none;\n    width: 2.4em;\n  }\n  .konesali-page .stat-list .stat .txt { color: var(--text-muted); font-size: 0.96rem; }\n  .konesali-page .stat-list .stat .txt strong { color: var(--text); display: block; font-weight: 600; font-size: 1rem; }\n\n  .konesali-page .contact-grid {\n    display: grid;\n    grid-template-columns: 0.9fr 1.1fr;\n    gap: clamp(2rem, 5vw, 3.5rem);\n  }\n\n  .konesali-page .spec-sheet {\n    background: var(--bg-raise);\n    border: 1px solid var(--border);\n    border-radius: 8px;\n    padding: 1.8rem;\n  }\n  .konesali-page .spec-sheet dl { margin: 0; }\n  .konesali-page .spec-sheet .row {\n    display: flex;\n    justify-content: space-between;\n    gap: 1rem;\n    padding: 0.85rem 0;\n    border-bottom: 1px dashed var(--border);\n  }\n  .konesali-page .spec-sheet .row:last-child { border-bottom: none; }\n  .konesali-page .spec-sheet dt {\n    font-family: \"IBM Plex Mono\", monospace;\n    font-size: 0.72rem;\n    letter-spacing: 0.06em;\n    color: var(--text-faint);\n    text-transform: uppercase;\n  }\n  .konesali-page .spec-sheet dd { margin: 0; text-align: right; font-size: 0.95rem; }\n\n  .konesali-page form.contact-form {\n    display: flex;\n    flex-direction: column;\n    gap: 1.1rem;\n  }\n\n  .konesali-page form.contact-form input[type=\"submit\"] {\n    align-self: flex-start;\n  }\n  .konesali-page .field { display: flex; flex-direction: column; gap: 0.4rem; }\n  .konesali-page .field label {\n    font-family: \"IBM Plex Mono\", monospace;\n    font-size: 0.72rem;\n    letter-spacing: 0.06em;\n    text-transform: uppercase;\n    color: var(--text-faint);\n  }\n  .konesali-page .field input, .konesali-page .field textarea {\n    font: inherit;\n    font-size: 0.98rem;\n    color: var(--text);\n    background: var(--bg-raise);\n    border: 1px solid var(--border-strong);\n    border-radius: 4px;\n    padding: 0.72em 0.85em;\n    resize: vertical;\n  }\n  .konesali-page .field input:focus, .konesali-page .field textarea:focus {\n    outline: 2px solid var(--focus);\n    outline-offset: 1px;\n    border-color: var(--accent);\n  }\n  .konesali-page .field textarea { min-height: 8.5em; }\n  .konesali-page .form-note { font-size: 0.86rem; color: var(--text-faint); margin: -0.3rem 0 0; }\n\n  .konesali-page footer.site {\n    border-top: 1px solid var(--border);\n    padding: 2.6rem 0;\n  }\n  .konesali-page .footer-row {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    flex-wrap: wrap;\n    gap: 1rem;\n  }\n  .konesali-page .footer-legal {\n    font-family: \"IBM Plex Mono\", monospace;\n    font-size: 0.78rem;\n    color: var(--text-faint);\n    line-height: 1.7;\n  }\n  .konesali-page .footer-nav { display: flex; gap: 1.4rem; }\n  .konesali-page .footer-nav a { text-decoration: none; color: var(--text-muted); font-size: 0.88rem; }\n  .konesali-page .footer-nav a:hover { color: var(--accent); }\n\n  @media (max-width: 880px) {\n    .konesali-page nav.primary, .konesali-page .nav-actions .btn-ghost { display: none; }\n    .konesali-page .nav-toggle { display: flex; }\n    .konesali-page .hero .wrap { grid-template-columns: 1fr; }\n    .konesali-page .services-grid { grid-template-columns: 1fr; }\n    .konesali-page .about-grid { grid-template-columns: 1fr; }\n    .konesali-page .contact-grid { grid-template-columns: 1fr; }\n    .konesali-page .footer-row { flex-direction: column; align-items: flex-start; }\n  }\n<\/style>\n\n<div class=\"konesali-page\">\n<header class=\"site\">\n  <div class=\"nav-row\">\n    <a class=\"brand\" href=\"#etusivu\"><span class=\"led\" aria-hidden=\"true\"><\/span>Konesaliyhti\u00f6t<\/a>\n    <nav class=\"primary\" aria-label=\"P\u00e4\u00e4valikko\">\n      <a href=\"#etusivu\">Etusivu<\/a>\n      <a href=\"#palvelut\">Palvelut<\/a>\n      <a href=\"#meista\">Tietoa meist\u00e4<\/a>\n      <a href=\"#yhteystiedot\">Yhteystiedot<\/a>\n    <\/nav>\n    <div class=\"nav-actions\">\n      <a class=\"btn btn-ghost\" href=\"#palvelut\">Katso palvelut<\/a>\n      <a class=\"btn btn-primary\" href=\"#yhteystiedot\">Ota yhteytt\u00e4<\/a>\n    <\/div>\n    <button class=\"nav-toggle\" aria-label=\"Avaa valikko\">\u2630<\/button>\n  <\/div>\n<\/header>\n\n<main>\n\n  <section class=\"hero\" id=\"etusivu\">\n    <div class=\"wrap\">\n      <div>\n        <p class=\"eyebrow\">JYV\u00c4SKYL\u00c4 \u00b7 VUODESTA 2013<\/p>\n        <h1>Pid\u00e4mme<br>palvelimesi<br><em>k\u00e4ynniss\u00e4.<\/em><\/h1>\n        <p class=\"lede\">Konesalipalvelut, co-location ja virtuaalipalvelimet yhdelt\u00e4 keskisuomalaiselta kumppanilta. Yksi konesali, koko infra.<\/p>\n        <div class=\"hero-ctas\">\n          <a class=\"btn btn-primary\" href=\"#yhteystiedot\">Ota yhteytt\u00e4<\/a>\n          <a class=\"btn btn-ghost\" href=\"#palvelut\">Katso palvelut<\/a>\n        <\/div>\n        <div class=\"hero-facts\">\n          <div class=\"fact\"><span class=\"num\">2013<\/span><span class=\"lbl\">Perustettu<\/span><\/div>\n          <div class=\"fact\"><span class=\"num\">24\/7<\/span><span class=\"lbl\">Valvonta<\/span><\/div>\n          <div class=\"fact\"><span class=\"num\">99,98%<\/span><span class=\"lbl\">K\u00e4ytett\u00e4vyys<\/span><\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"visual\" role=\"img\" aria-label=\"Generatiivinen kuvitus, joka symboloi konesalin jatkuvaa toimintaa ja verkkoyhteytt\u00e4\">\n              <canvas id=\"signal-canvas\" aria-hidden=\"true\"><\/canvas>\n            <\/div>\n    <\/div>\n  <\/section>\n\n  <section id=\"palvelut\">\n    <div class=\"wrap\">\n      <div class=\"section-head reveal\">\n        <p class=\"eyebrow\">Palvelut<\/p>\n        <h2>Kaikki mit\u00e4 konesali vaatii, yhdelt\u00e4 toimijalta.<\/h2>\n        <p>Valitse valmis palvelinsalitila, sijoita omat laitteesi tai skaalaa pilvess\u00e4 \u2014 tuki on aina suomeksi ja saman katon alta.<\/p>\n      <\/div>\n      <div class=\"services-grid\">\n        <article class=\"service-card reveal\">\n          <span class=\"tag mono\">01 \u00b7 KONESALIPALVELUT<\/span>\n          <h3>Konesalipalvelut<\/h3>\n          <p>Valvottu ja varmistettu konesalitila IT-infrallesi. Varavoima, j\u00e4\u00e4hdytys ja paloturva pit\u00e4v\u00e4t j\u00e4rjestelm\u00e4si k\u00e4ynniss\u00e4 ymp\u00e4ri vuorokauden.<\/p>\n          <div class=\"spec mono\">24\/7 VALVONTA \u00b7 VARAVOIMA \u00b7 PALOTURVA<\/div>\n        <\/article>\n        <article class=\"service-card reveal\">\n          <span class=\"tag mono\">02 \u00b7 CO-LOCATION<\/span>\n          <h3>Co-location<\/h3>\n          <p>Sijoita omat palvelimesi ammattimaiseen konesaliin. Joustavat tilaratkaisut yhdest\u00e4 rack-yksik\u00f6st\u00e4 kokonaiseen telineeseen.<\/p>\n          <div class=\"spec mono\">1U\u201342U \u00b7 REDUNDANTTI KAISTA \u00b7 OMA LUKITUS<\/div>\n        <\/article>\n        <article class=\"service-card reveal\">\n          <span class=\"tag mono\">03 \u00b7 VIRTUAALIPALVELIMET<\/span>\n          <h3>Virtuaalipalvelimet<\/h3>\n          <p>Skaalautuvat VPS-ratkaisut ilman laitteistoinvestointeja. Nopea k\u00e4ytt\u00f6\u00f6notto ja apua aina, kun sit\u00e4 tarvitset.<\/p>\n          <div class=\"spec mono\">NOPEA K\u00c4YTT\u00d6\u00d6NOTTO \u00b7 SKAALAUTUVA \u00b7 SUOMALAINEN TUKI<\/div>\n        <\/article>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"alt\" id=\"meista\">\n    <div class=\"wrap\">\n      <div class=\"section-head reveal\">\n        <p class=\"eyebrow\">Tietoa meist\u00e4<\/p>\n        <h2>Jyv\u00e4skyl\u00e4l\u00e4inen konesalikumppani vuodesta 2013.<\/h2>\n      <\/div>\n      <div class=\"about-grid\">\n        <div class=\"reveal\">\n          <p>Konesali Yhti\u00f6t Jyv\u00e4skyl\u00e4 Oy on keskisuomalainen IT-infrastruktuurin asiantuntija. Olemme tarjonneet konesali-, co-location- ja palvelinpalveluita alueen yrityksille jo yli vuosikymmenen ajan.<\/p>\n          <p>Tunnemme asiakkaidemme j\u00e4rjestelm\u00e4t ja pid\u00e4mme niist\u00e4 huolta kuin ne olisivat omiamme \u2014 l\u00e4pin\u00e4kyv\u00e4sti, tavoitettavasti ja ilman turhaa mutkikkuutta.<\/p>\n        <\/div>\n        <div class=\"stat-list reveal\">\n          <div class=\"stat\"><span class=\"num\">13<\/span><span class=\"txt\"><strong>Vuotta alalla<\/strong>Toiminnassa vuodesta 2013 l\u00e4htien.<\/span><\/div>\n          <div class=\"stat\"><span class=\"num\">JKL<\/span><span class=\"txt\"><strong>Kotipaikka Jyv\u00e4skyl\u00e4<\/strong>Palvelemme koko Keski-Suomea.<\/span><\/div>\n          <div class=\"stat\"><span class=\"num\">3<\/span><span class=\"txt\"><strong>Palvelua saman katon alta<\/strong>Konesali, co-location ja VPS.<\/span><\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <section id=\"yhteystiedot\">\n    <div class=\"wrap\">\n      <div class=\"section-head reveal\">\n        <p class=\"eyebrow\">Yhteystiedot<\/p>\n        <h2>Kerro tarpeestasi, katsotaan sopiva ratkaisu.<\/h2>\n        <p>T\u00e4yt\u00e4 lomake, niin olemme sinuun yhteydess\u00e4.<\/p>\n      <\/div>\n      <div class=\"contact-grid\">\n        <div class=\"spec-sheet reveal\">\n          <dl>\n            <div class=\"row\"><dt>Yritys<\/dt><dd>Konesali Yhti\u00f6t<br>Jyv\u00e4skyl\u00e4 Oy<\/dd><\/div>\n            <div class=\"row\"><dt>K\u00e4yntiosoite<\/dt><dd>Kilpisenkatu 12 D<br>40100 Jyv\u00e4skyl\u00e4<\/dd><\/div>\n            <div class=\"row\"><dt>Y-tunnus<\/dt><dd class=\"mono\">2578299-3<\/dd><\/div>\n            <div class=\"row\"><dt>Perustettu<\/dt><dd class=\"mono\">22.10.2013<\/dd><\/div>\n          <\/dl>\n        <\/div>\n        \n<div class=\"wpcf7 no-js\" id=\"wpcf7-f18-o1\" lang=\"fi\" dir=\"ltr\" data-wpcf7-id=\"18\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F6#wpcf7-f18-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Yhteydenottolomake\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"18\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.7\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"fi\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f18-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/>\n<\/fieldset>\n<div class=\"field\">\n\t<p><label for=\"f-name\">Nimi<\/label><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-name\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" id=\"f-name\" autocomplete=\"name\" aria-required=\"true\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"your-name\" \/><\/span>\n\t<\/p>\n<\/div>\n<div class=\"field\">\n\t<p><label for=\"f-email\">S\u00e4hk\u00f6posti<\/label><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" id=\"f-email\" autocomplete=\"email\" aria-required=\"true\" aria-invalid=\"false\" value=\"\" type=\"email\" name=\"email\" \/><\/span>\n\t<\/p>\n<\/div>\n<div class=\"field\">\n\t<p><label for=\"f-message\">Viesti<\/label><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"message\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea\" id=\"f-message\" aria-invalid=\"false\" name=\"message\"><\/textarea><\/span>\n\t<\/p>\n<\/div>\n<p class=\"form-note\">Vastaamme viesteihin arkisin. Kiireellisiss\u00e4 asioissa mainitse se viestiss\u00e4.\n<\/p>\n<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner btn btn-primary\" type=\"submit\" value=\"L\u00e4het\u00e4 viesti\" \/>\n<\/p><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n\n      <\/div>\n    <\/div>\n  <\/section>\n\n<\/main>\n\n<footer class=\"site\">\n  <div class=\"wrap footer-row\">\n    <div class=\"footer-legal\">\n      Konesali Yhti\u00f6t Jyv\u00e4skyl\u00e4 Oy \u00b7 Y-tunnus 2578299-3<br>\n      Kilpisenkatu 12 D, 40100 Jyv\u00e4skyl\u00e4 \u00b7 \u00a9 <span id=\"year\"><\/span>\n    <\/div>\n    <nav class=\"footer-nav\" aria-label=\"Alatunnisteen valikko\">\n      <a href=\"#etusivu\">Etusivu<\/a>\n      <a href=\"#palvelut\">Palvelut<\/a>\n      <a href=\"#meista\">Tietoa meist\u00e4<\/a>\n      <a href=\"#yhteystiedot\">Yhteystiedot<\/a>\n    <\/nav>\n  <\/div>\n<\/footer>\n<\/div>\n\n<script>\n  (function () {\n    document.getElementById('year').textContent = new Date().getFullYear();\n\n    var toggle = document.querySelector('.nav-toggle');\n    var nav = document.querySelector('nav.primary');\n    if (toggle && nav) {\n      toggle.addEventListener('click', function () {\n        var open = nav.style.display === 'flex';\n        nav.style.display = open ? 'none' : 'flex';\n        nav.style.flexDirection = 'column';\n        nav.style.position = 'absolute';\n        nav.style.top = '100%';\n        nav.style.left = '0';\n        nav.style.right = '0';\n        nav.style.background = 'var(--bg)';\n        nav.style.padding = '1rem 1.25rem';\n        nav.style.borderBottom = '1px solid var(--border)';\n      });\n    }\n\n    var reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n    if (!reduceMotion && 'IntersectionObserver' in window) {\n      var io = new IntersectionObserver(function (entries) {\n        entries.forEach(function (e) {\n          if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); }\n        });\n      }, { threshold: 0.15 });\n      document.querySelectorAll('.reveal').forEach(function (el) { io.observe(el); });\n    } else {\n      document.querySelectorAll('.reveal').forEach(function (el) { el.classList.add('in'); });\n    }\n\n    var __signalCanvas = document.getElementById('signal-canvas');\n    function drawSignal(t) {\n      if (!__signalCanvas) return;\n      var ctx = __signalCanvas.getContext('2d');\n      var parent = __signalCanvas.parentElement;\n      var rect = parent.getBoundingClientRect();\n      var dpr = window.devicePixelRatio || 1;\n      var w = rect.width, h = rect.height;\n      if (w === 0 || h === 0) return;\n      if (__signalCanvas.width !== Math.round(w * dpr) || __signalCanvas.height !== Math.round(h * dpr)) {\n        __signalCanvas.width = Math.round(w * dpr);\n        __signalCanvas.height = Math.round(h * dpr);\n      }\n      ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n      ctx.clearRect(0, 0, w, h);\n\n      var rootStyles = getComputedStyle(document.querySelector('.konesali-page') || document.documentElement);\n      var accent = (rootStyles.getPropertyValue('--accent') || '#34D399').trim();\n      var accentStrong = (rootStyles.getPropertyValue('--accent-strong') || '#7CEFC0').trim();\n\n      function hexToRgba(hex, alpha) {\n        var m = hex.replace('#', '');\n        if (m.length === 3) { m = m.split('').map(function (ch) { return ch + ch; }).join(''); }\n        var r = parseInt(m.substring(0, 2), 16);\n        var g = parseInt(m.substring(2, 4), 16);\n        var bl = parseInt(m.substring(4, 6), 16);\n        return 'rgba(' + r + ',' + g + ',' + bl + ',' + alpha + ')';\n      }\n\n      var cx = w \/ 2, cy = h \/ 2;\n      var maxR = Math.min(w, h) * 0.42;\n\n      var glow = ctx.createRadialGradient(cx, cy, 0, cx, cy, maxR * 1.4);\n      glow.addColorStop(0, hexToRgba(accent, 0.22));\n      glow.addColorStop(1, hexToRgba(accent, 0));\n      ctx.fillStyle = glow;\n      ctx.fillRect(0, 0, w, h);\n\n      for (var ring = 3; ring >= 1; ring--) {\n        ctx.beginPath();\n        ctx.arc(cx, cy, maxR * (ring \/ 3), 0, Math.PI * 2);\n        ctx.strokeStyle = hexToRgba(accent, 0.08 + ring * 0.02);\n        ctx.lineWidth = 1;\n        ctx.stroke();\n      }\n\n      var spokes = 16;\n      for (var i = 0; i < spokes; i++) {\n        var a = (i \/ spokes) * Math.PI * 2;\n        var r1 = maxR * 0.42;\n        var r2 = maxR * 0.98;\n        ctx.beginPath();\n        ctx.moveTo(cx + Math.cos(a) * r1, cy + Math.sin(a) * r1);\n        ctx.lineTo(cx + Math.cos(a) * r2, cy + Math.sin(a) * r2);\n        ctx.strokeStyle = hexToRgba(accent, 0.14);\n        ctx.lineWidth = 1;\n        ctx.stroke();\n      }\n\n      ctx.beginPath();\n      var points = 96;\n      for (var p = 0; p <= points; p++) {\n        var ang = (p \/ points) * Math.PI * 2;\n        var r = maxR * 0.62\n          + Math.sin(ang * 3 + t) * maxR * 0.62 * 0.06\n          + Math.sin(ang * 5 - t * 1.3) * maxR * 0.62 * 0.035\n          + Math.cos(ang * 2 + t * 0.7) * maxR * 0.62 * 0.045;\n        var x = cx + Math.cos(ang) * r;\n        var y = cy + Math.sin(ang) * r;\n        if (p === 0) { ctx.moveTo(x, y); } else { ctx.lineTo(x, y); }\n      }\n      ctx.closePath();\n      var fillGrad = ctx.createRadialGradient(cx, cy, 0, cx, cy, maxR * 0.62);\n      fillGrad.addColorStop(0, hexToRgba(accentStrong, 0.30));\n      fillGrad.addColorStop(1, hexToRgba(accent, 0.03));\n      ctx.fillStyle = fillGrad;\n      ctx.fill();\n      ctx.strokeStyle = hexToRgba(accentStrong, 0.55);\n      ctx.lineWidth = 1.4;\n      ctx.stroke();\n\n      var pulse = 3 + Math.sin(t * 2) * 1.4;\n      ctx.beginPath();\n      ctx.arc(cx, cy, 5 + pulse, 0, Math.PI * 2);\n      ctx.fillStyle = hexToRgba(accentStrong, 0.9);\n      ctx.shadowColor = hexToRgba(accentStrong, 0.8);\n      ctx.shadowBlur = 14;\n      ctx.fill();\n      ctx.shadowBlur = 0;\n    }\n\n    window.addEventListener('resize', function () {\n      if (reduceMotion) { drawSignal(0); }\n    });\n\n    if (!reduceMotion) {\n      var startTs = null;\n      function frame(ts) {\n        if (startTs === null) { startTs = ts; }\n        drawSignal((ts - startTs) \/ 1000);\n        requestAnimationFrame(frame);\n      }\n      requestAnimationFrame(frame);\n    } else {\n      drawSignal(0);\n    }\n  })();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Konesaliyhti\u00f6t Etusivu Palvelut Tietoa meist\u00e4 Yhteystiedot Katso palvelut Ota yhteytt\u00e4 \u2630 JYV\u00c4SKYL\u00c4 \u00b7 VUODESTA 2013 Pid\u00e4mmepalvelimesik\u00e4ynniss\u00e4. Konesalipalvelut, co-location ja virtuaalipalvelimet yhdelt\u00e4 keskisuomalaiselta kumppanilta. Yksi konesali, koko infra. Ota yhteytt\u00e4 Katso palvelut 2013Perustettu 24\/7Valvonta 99,98%K\u00e4ytett\u00e4vyys Palvelut Kaikki mit\u00e4 konesali vaatii, yhdelt\u00e4 toimijalta. Valitse valmis palvelinsalitila, sijoita omat laitteesi tai skaalaa pilvess\u00e4 \u2014 tuki on aina suomeksi [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-no-title","meta":{"footnotes":""},"class_list":["post-6","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/konesaliyhtiot.fi\/index.php?rest_route=\/wp\/v2\/pages\/6","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/konesaliyhtiot.fi\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/konesaliyhtiot.fi\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/konesaliyhtiot.fi\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/konesaliyhtiot.fi\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6"}],"version-history":[{"count":5,"href":"https:\/\/konesaliyhtiot.fi\/index.php?rest_route=\/wp\/v2\/pages\/6\/revisions"}],"predecessor-version":[{"id":19,"href":"https:\/\/konesaliyhtiot.fi\/index.php?rest_route=\/wp\/v2\/pages\/6\/revisions\/19"}],"wp:attachment":[{"href":"https:\/\/konesaliyhtiot.fi\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}