<!doctype html>
<html lang="fi">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Työpäivädata — avoin data | Viikko Nro</title>
    <meta name="description" content="Kuukausittaiset työ- ja viikonloppupäivien määrät vuosille 2020–2035 sekä vuosikohtaiset yhteissummat. Saatavilla JSON-, CSV- ja XML-muodossa." />
    <link rel="canonical" href="https://viikkonro.fi/data/working-days" />
    <meta property="og:type" content="website" />
    <meta property="og:locale" content="fi_FI" />
    <meta property="og:title" content="Työpäivädata — avoin data | Viikko Nro" />
    <meta property="og:description" content="Kuukausittaiset työ- ja viikonloppupäivien määrät vuosille 2020–2035 sekä vuosikohtaiset yhteissummat. Saatavilla JSON-, CSV- ja XML-muodossa." />
    <meta property="og:url" content="https://viikkonro.fi/data/working-days" />
    <meta property="og:site_name" content="Viikko Nro" />
    <meta property="og:image" content="https://viikkonro.fi/og.png" />
    <meta property="og:image:type" content="image/png" />
    <meta property="og:image:width" content="1200" />
    <meta property="og:image:height" content="630" />
    <meta property="og:image:alt" content="Viikko Nro – kuluva viikkonumero" />
    <meta name="theme-color" content="#15211F" />
    <meta name="author" content="Viikko Nro" />
    <meta name="format-detection" content="telephone=no" />
    <meta
      name="robots"
      content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1"
    />
    <meta name="twitter:card" content="summary_large_image" />
    <meta name="twitter:image" content="https://viikkonro.fi/og.png" />
    <meta name="twitter:title" content="Työpäivädata — avoin data | Viikko Nro" />
    <meta name="twitter:description" content="Kuukausittaiset työ- ja viikonloppupäivien määrät vuosille 2020–2035 sekä vuosikohtaiset yhteissummat. Saatavilla JSON-, CSV- ja XML-muodossa." />

    <!-- GEO / structured data (schema.org). AI + search crawlers read this even
         without running JavaScript. Keep the FAQ entries in sync with
         src/data/faqs.js. -->
    

    <!-- Fonts are self-hosted (src/fonts.css, bundled into the site
         stylesheet and inlined per-page by prerender.js) — no Google Fonts
         round trip, so no preconnect/preload-then-flip stylesheet hack is
         needed here. Only the two above-the-fold families (the hero <h1>/
         week digit in Bricolage Grotesque, body/lead text in Inter) are
         preloaded as fonts directly; IBM Plex Mono is used for smaller
         secondary text in the same hero card and can load in without one. -->
    <link
      rel="preload"
      as="font"
      type="font/woff2"
      href="/fonts/bricolage-grotesque-variable-latin.a79fdb52.woff2"
      crossorigin
    />
    <link
      rel="preload"
      as="font"
      type="font/woff2"
      href="/fonts/inter-variable-latin.3100e775.woff2"
      crossorigin
    />

    <!-- Microsoft Clarity (project y5lf3vwo97). Consent V2 defaults to denied
         before the asynchronous tracker loads. A supported CMP can update
         these signals after the visitor makes analytics/advertising choices. -->
    <script>
      (function(c,l,a,r,i,t,y){
        c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
        c[a]("consentv2",{ad_Storage:"denied",analytics_Storage:"denied"});
        t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i+"?ref=bwt";
        y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
      })(window,document,"clarity","script","y5lf3vwo97");
    </script>
    <script type="module" crossorigin src="/assets/index-D1DXlo5s.js"></script>
    <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-Bh1tDfsg.js">
    <link rel="modulepreload" crossorigin href="/assets/react-DX-SfrI3.js">
    <link rel="modulepreload" crossorigin href="/assets/vendor-Cz0sABhh.js">
    <link rel="modulepreload" crossorigin href="/assets/router-Ck6zp43C.js">
    <style>@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:200 800;font-optical-sizing:auto;font-display:swap;src:url(/fonts/bricolage-grotesque-variable-latin.a79fdb52.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/fonts/inter-variable-latin.3100e775.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/ibm-plex-mono-400-latin.08949f72.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-mono-500-latin.01d28544.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/ibm-plex-mono-600-latin.0d1f0b8d.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/ibm-plex-mono-700-latin.4f84d86c.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Bricolage Grotesque Fallback;src:local(Arial);size-adjust:112.82%;ascent-override:82.43%;descent-override:23.93%;line-gap-override:0%}@font-face{font-family:Inter Fallback;src:local(Arial);size-adjust:138.27%;ascent-override:70.06%;descent-override:17.44%;line-gap-override:0%}@font-face{font-family:IBM Plex Mono Fallback;src:local(Courier New);size-adjust:99.98%;ascent-override:102.52%;descent-override:27.5%;line-gap-override:0%}:root{--paper:#e7eceb;--card:#f5f8f7;--ink:#15211f;--ink-soft:#56655f;--line:#15211f1f;--accent:#1f7a5c;--accent-deep:#16573f;--accent-soft:#1f7a5c1f;--amber:#e0a23b;--footer-bg:#0f2a21;--footer-heading:#fff;--footer-text:#fff;--footer-link:#ffffffd9;--footer-link-hover:#fff;--footer-muted:#fff;--radius:16px;--maxw:1000px}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;height:100%}body{background:radial-gradient(1100px 560px at 85% -12%, #1f7a5c17, transparent 60%), var(--paper);min-height:100%;color:var(--ink);-webkit-font-smoothing:antialiased;margin:0;font-family:Inter,Inter Fallback,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;line-height:1.55;overflow-x:hidden}#root{flex-direction:column;min-height:100vh;display:flex}#root>main{flex:1 0 auto}a{color:inherit}img{max-width:100%}.wrap{max-width:var(--maxw);margin:0 auto;padding:0}.mono{font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace}.app{max-width:var(--maxw);margin:0 auto;padding:0 22px}.nav{z-index:20;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);background:#e7ecebd1;position:sticky;top:0}.nav .row{justify-content:space-between;align-items:center;gap:9px;height:62px;padding:0 20px;display:flex}.brand{align-items:center;height:100%;padding:.5rem 0;text-decoration:none;transition:opacity .2s ease-in-out;display:inline-flex}.brand:hover{opacity:.85}.brand img{width:auto;height:34px;display:block;transform:translateY(4px)}.nav .nav-links{flex-wrap:nowrap;gap:2px;margin-left:auto;display:flex}.nav .nav-links a{white-space:nowrap;color:var(--ink-soft);border-radius:9px;flex:none;padding:7px 9px;font-size:13.5px;text-decoration:none;transition:all .2s}.nav .nav-links a:hover{color:var(--ink);background:#15211f0d}.nav .badge{color:#fff;background:var(--accent-deep);z-index:21;border-radius:8px;padding:5px 10px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:12.5px;font-weight:600;text-decoration:none}.menu-toggle{cursor:pointer;z-index:21;background:0 0;border:none;flex-direction:column;justify-content:space-between;width:22px;height:16px;padding:0;display:none}.menu-toggle .bar{background-color:var(--ink);border-radius:2px;width:100%;height:2px;transition:all .2s ease-in-out}@media (max-width:900px){.menu-toggle{order:1;display:flex}.brand{order:2;margin:0 auto}.badge{order:3;margin-left:0!important;margin-right:0!important}.menu-toggle.is-open .bar:first-child{transform:translateY(7px)rotate(45deg)}.menu-toggle.is-open .bar:nth-child(2){opacity:0}.menu-toggle.is-open .bar:nth-child(3){transform:translateY(-7px)rotate(-45deg)}.nav .nav-links{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--line);opacity:0;visibility:hidden;z-index:20;background:#e7ecebfa;flex-direction:column;gap:12px;margin-left:0;padding:20px;transition:all .2s ease-in-out;position:absolute;top:62px;left:0;right:0;transform:translateY(-10px)}.nav .nav-links.mobile-open{opacity:1;visibility:visible;transform:translateY(0)}.nav .nav-links a{box-sizing:border-box;width:100%;padding:12px 16px}}.breadcrumb{color:var(--ink-soft);margin:26px 0 6px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:12.5px}.breadcrumb a{color:var(--accent-deep);text-decoration:none}.breadcrumb a:hover{text-decoration:underline}h1{letter-spacing:-.02em;margin:.1em 0 .3em;font-family:Bricolage Grotesque,Bricolage Grotesque Fallback,sans-serif;font-size:clamp(30px,6vw,54px);font-weight:800;line-height:1.03}h2{letter-spacing:-.015em;margin:34px 0 14px;font-family:Bricolage Grotesque,Bricolage Grotesque Fallback,sans-serif;font-size:clamp(21px,3.4vw,29px);font-weight:700}.eyebrow{letter-spacing:.16em;text-transform:uppercase;color:var(--accent-deep);align-items:center;gap:10px;margin-top:24px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:12px;display:flex}.eyebrow:before{content:"";background:var(--accent);width:24px;height:2px}.lead{color:#243430;max-width:680px;font-size:17px}section{padding:8px 0}.hero-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);grid-template-columns:1.05fr .95fr;align-items:center;gap:28px;margin-top:8px;padding:clamp(22px,4vw,38px);display:grid}.now-label{letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:6px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:12.5px}.week-big{letter-spacing:-.04em;align-items:baseline;gap:.12em;font-family:Bricolage Grotesque,Bricolage Grotesque Fallback,sans-serif;font-size:clamp(66px,16vw,140px);font-weight:800;line-height:.82;display:flex}.week-big .vk{color:var(--accent-deep);letter-spacing:.02em;font-size:.33em;font-weight:700}.meta .date{margin-top:16px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:clamp(15px,2.6vw,18px);font-weight:500}.meta .range{color:var(--ink-soft);margin-top:4px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:14px}.progress-block{border-left:1px solid var(--line);padding-left:28px}.progress-head{color:var(--ink-soft);justify-content:space-between;margin-bottom:13px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:12.5px;display:flex}.progress-head b{color:var(--ink);font-weight:600}.comb{align-items:flex-end;gap:3px;height:58px;display:flex}.comb i{background:#15211f24;border-radius:2px;flex:1;height:38%;transition:height .5s,background .5s}.comb i.past{background:var(--accent);height:60%}.comb i.now{background:var(--amber);height:100%}.comb-foot{color:var(--ink-soft);justify-content:space-between;margin-top:11px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:12.5px;display:flex}.panel{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:clamp(20px,3.4vw,30px)}label.fld{letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:10px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:12.5px;display:block}.days{gap:8px;margin-top:6px;display:grid}.day{background:var(--card);border:1px solid var(--line);border-radius:11px;justify-content:space-between;align-items:flex-start;gap:16px;padding:13px 16px;display:flex}.day-head{flex-direction:column;flex:none;gap:2px;display:flex}.day .wd{font-weight:600}.day .dt{color:var(--ink-soft);white-space:nowrap;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:13px}.day .day-extra{flex:auto;min-width:0}.day.weekend{background:#1f7a5c0f}.pill.active{background:var(--accent-deep);color:#fff;border-color:var(--accent-deep)}.prevnext{justify-content:space-between;gap:12px;margin:26px 0;display:flex}.prevnext a{background:var(--card);border:1px solid var(--line);border-radius:12px;flex:1;padding:14px 16px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:13.5px;text-decoration:none}.prevnext a:hover{border-color:var(--accent)}.prevnext .lbl{letter-spacing:.1em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:3px;font-size:11px;display:block}.prevnext .nx{text-align:right}.btn{background:var(--accent-deep);color:#fff;cursor:pointer;border:0;border-radius:11px;align-items:center;gap:8px;padding:12px 20px;font-family:inherit;font-size:15px;font-weight:600;text-decoration:none;display:inline-flex}.btn:hover{background:#11432f}.prose ul{margin:0 0 16px;padding-left:20px}.prose li{margin:6px 0}.quick-facts dl{margin:0 0 16px;padding:0}.quick-facts .qf-row{gap:4px;margin:6px 0;display:flex}.quick-facts dt,.quick-facts dd{margin:0}.quick-facts dt:after{content:":"}#mh,.mh{padding-top:30px}.sec-head{letter-spacing:.16em;text-transform:uppercase;color:var(--accent-deep);margin-bottom:14px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:12.5px}h2{letter-spacing:-.015em;color:var(--ink);text-align:start;margin:0 0 18px;font-family:Bricolage Grotesque,Bricolage Grotesque Fallback,sans-serif;font-size:clamp(24px,4vw,34px);font-weight:700}.lookup{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:clamp(22px,3.5vw,34px)}.lookup label{letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:10px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:12.5px;display:block}input[type=date]{color:var(--ink);border:1px solid var(--line);background:#fff;border-radius:12px;width:100%;max-width:280px;padding:13px 15px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:17px}input[type=date]:focus-visible{outline-offset:2px;outline:3px solid #1f7a5c66}.result{border-top:1px solid var(--line);margin-top:22px;padding-top:22px;font-size:clamp(17px,3vw,21px)}.result .num{color:var(--accent-deep);font-family:Bricolage Grotesque,Bricolage Grotesque Fallback,sans-serif;font-size:1.35em;font-weight:800}.result .sub{color:var(--ink-soft);margin-top:6px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:14px}.month-list{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;display:grid}.wk{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px}.pills{flex-wrap:wrap;gap:7px;margin:14px 0;display:flex}.pill{border:1px solid var(--line);color:var(--ink-soft);border-radius:999px;padding:6px 12px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:13px;text-decoration:none}.pill:hover{border-color:var(--accent);color:var(--ink)}.active{background:var(--accent-deep);color:#fff;border-color:var(--accent-deep)}.active:hover{color:#fff}.quicklinks{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;margin-top:6px;display:grid}.ql{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 18px;text-decoration:none;display:block}.ql:hover{border-color:var(--accent)}.ql b{margin-bottom:3px;font-family:Bricolage Grotesque,Bricolage Grotesque Fallback,sans-serif;font-size:17px;font-weight:700;display:block}.ql span{color:var(--ink-soft);font-size:13.5px}.grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:11px;display:grid}.wk{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:13px 15px;text-decoration:none;transition:border-color .15s,transform .15s;display:block}.wk:hover{border-color:var(--accent);transform:translateY(-2px)}.wk .n{font-family:Bricolage Grotesque,Bricolage Grotesque Fallback,sans-serif;font-size:22px;font-weight:700}.wk .r{color:var(--ink-soft);margin-top:2px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:13px}.wk.current{border-color:var(--amber);background:#e0a23b1a}.wk.current .n{color:var(--accent-deep)}.ptable{border-collapse:collapse;width:100%;margin-top:8px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:14px}.ptable th,.ptable td{text-align:left;border-bottom:1px solid var(--line);padding:8px 12px}.ptable th{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft);font-size:12px}.ptable tr.now td{background:#e0a23b24}.prose{color:#243430;max-width:680px;font-size:16.5px}.prose p{margin:0 0 16px}.prose strong{color:var(--ink)}details{border-top:1px solid var(--line);padding:18px 0}details:last-of-type{border-bottom:1px solid var(--line)}summary{cursor:pointer;justify-content:space-between;gap:16px;font-family:Bricolage Grotesque,Bricolage Grotesque Fallback,sans-serif;font-size:18px;font-weight:600;list-style:none;display:flex}summary::-webkit-details-marker{display:none}summary:after{content:"+";color:var(--accent);font-size:22px;font-weight:700;line-height:1}details[open] summary:after{content:"–"}details p{color:#243430;max-width:640px;margin:14px 0 0}.faq-group{margin-top:34px}.faq-group:first-of-type{margin-top:12px}.faq-more{margin-top:26px;font-weight:600}.contact-container{max-width:800px;margin:15px auto;padding:0 20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}.contact-card{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:32px;box-shadow:0 4px 12px #00000005}.contact-card h1{color:var(--accent-deep);margin:0 0 8px;font-size:24px;font-weight:700}.contact-subtitle{color:var(--ink-soft);margin:0 0 28px;font-size:16px;line-height:1.5}.contact-form{flex-direction:column;gap:24px;display:flex}.form-group{flex-direction:column;gap:8px;display:flex}.form-group label{color:var(--accent-deep);text-transform:uppercase;letter-spacing:.05em;font-size:14px;font-weight:600}.form-group input,.form-group textarea{border:1px solid var(--line);color:var(--ink);background-color:#fff;border-radius:6px;outline:none;padding:12px 14px;font-size:15px;transition:all .15s ease-in-out}.form-group input:focus,.form-group textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);background-color:#fff}.form-group textarea{resize:vertical}.submit-btn{background-color:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:6px;align-self:flex-start;padding:14px 24px;font-size:15px;font-weight:600;transition:all .15s}.submit-btn:hover{background-color:var(--accent-deep);transform:translateY(-1px)}.submit-btn:active{background-color:#0f2a21;transform:translateY(0)}.submit-btn:disabled{opacity:.6;cursor:not-allowed;transform:none}.status-banner{border-radius:6px;margin-bottom:24px;padding:14px 16px;font-size:15px;line-height:1.4}.status-banner.success{color:#166534;background-color:#f0fdf4;border:1px solid #bbf7d0}.status-banner.error{color:#991b1b;background-color:#fef2f2;border:1px solid #fca5a5}footer{margin-top:0;padding:0}.site-footer{background-color:var(--footer-bg);border-top:1px solid #f0fdf426;margin-top:80px;padding:32px 24px 20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}.footer-container{max-width:var(--maxw);flex-flow:wrap;justify-content:space-between;gap:40px;margin:0 auto;display:flex}.footer-brand-col{flex:2 340px}.footer-logo{color:var(--footer-heading);letter-spacing:-.02em;align-items:center;gap:8px;margin-bottom:16px;font-size:20px;font-weight:700;display:flex}.brand-dark{align-items:center;height:auto;padding:6px 0;text-decoration:none;display:inline-flex}.brand-dark img{object-fit:contain;width:auto;max-width:100%;height:40px;display:block}.footer-desc{color:var(--footer-text);opacity:1;margin:0;font-size:14px;line-height:1.6}.footer-social{flex-wrap:wrap;gap:8px 18px;margin:18px 0 0;padding:0;list-style:none;display:flex}.social-links{flex-wrap:wrap;gap:8px 18px;margin:4px 0 0;padding:0;list-style:none;display:flex}.social-links a{color:var(--accent-deep);font-weight:600;text-decoration:none}.social-links a:hover{text-decoration:underline}.contact-social{border-top:1px solid var(--line);color:var(--ink-soft);margin-top:20px;padding-top:16px;font-size:14px}.contact-social p{margin:0 0 8px}.footer-social a{color:var(--footer-link);font-size:14px;text-decoration:none;transition:color .2s}.footer-social a:hover{color:var(--footer-link-hover)}.footer-links-col{flex:160px}.footer-links-col h3{color:var(--footer-heading);text-transform:uppercase;letter-spacing:.08em;margin:0 0 20px;font-size:12px;font-weight:600}.footer-links-col ul{flex-direction:column;gap:12px;margin:0;padding:0;list-style:none;display:flex}.footer-links-col a{color:var(--footer-link);font-size:14px;text-decoration:none;transition:color .2s,transform .2s;display:inline-block}.footer-links-col a:hover{color:var(--footer-link-hover)}.footer-divider{max-width:var(--maxw);border:0;border-top:1px solid #f0fdf41a;margin:48px auto 24px}.footer-baseline{max-width:var(--maxw);color:var(--footer-muted);opacity:.8;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin:0 auto;font-size:13px;display:flex}.footer-baseline p{margin:0}.footer-tz{text-transform:uppercase;letter-spacing:.04em;font-weight:500}.footer-data-attribution{color:#ffffffb8;text-align:center;max-width:1200px;margin:12px auto 0;padding:0 24px;font-size:12px}.footer-data-attribution a{color:inherit;text-decoration:underline}.ad-slot{width:100%;min-height:120px;color:var(--ink-soft);text-align:center;background:#f5f8f7b8;border:1px dashed #1f7a5c7a;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:4px;margin:28px 0;display:flex}.ad-slot--rectangle{width:min(100%,360px);min-height:280px;margin-inline-start:auto;margin-inline-end:auto}.ad-slot__label,.ad-slot__name{font-family:IBM Plex Mono,IBM Plex Mono Fallback,monospace;font-size:12px}.ad-slot__label{text-transform:uppercase;letter-spacing:.09em}.ad-slot__name{opacity:.76}.ad-slot__mount{width:1px;height:1px}@media (max-width:768px){.site-footer{margin-top:56px;padding:40px 20px 32px}.footer-container{flex-direction:column;gap:30px}.footer-brand-col,.footer-links-col{flex:initial}.footer-links-col h3{margin-bottom:14px}.footer-links-col ul{gap:10px}.footer-divider{margin:30px auto 20px}.footer-baseline{flex-direction:column;align-items:flex-start;gap:8px}}@media (max-width:720px){.hero-card{grid-template-columns:1fr;gap:26px}.progress-block{border-left:0;border-top:1px solid var(--line);padding-top:24px;padding-left:0}}@media (max-width:600px){.app{padding:0 18px}.prevnext{flex-direction:column;margin:22px 0}.prevnext .nx{text-align:left}.ptable th,.ptable td{padding:8px;font-size:12.5px}.contact-card{padding:22px 18px}.lead{font-size:16px}.ad-slot,.ad-slot--rectangle{width:min(100%,336px);min-height:280px;margin:24px auto}}@media (prefers-reduced-motion:reduce){.comb i{transition:none}}@media print{.nav,footer,.breadcrumb,.noprint,.print-support,.cal-page .pills,.cal-page .cal-nimi,.cal-page .cal-seealso{display:none!important}body{background:#fff}.ptable th,.ptable td{border-color:#bbb}a{color:#000;text-decoration:none}.cal-page h1{white-space:nowrap;font-size:16px}.cal-page .cal-grid,.cal-page .cal-grid-half{gap:4px;grid-template-columns:repeat(6,1fr)!important}.cal-page .cal-month{break-inside:avoid;background:#fff;border-color:#999;padding:5px}.cal-page .cal-day{font-size:9px;background:0 0!important}.cal-page .cal-day.sun,.cal-page .cal-day.hol{border-top:1px solid #000;border-bottom:1px solid #000}.cal-page .cal-day.today{font-weight:700;text-decoration:underline;background:0 0!important}.cal-page .cal-wk{border:1px solid #000;color:#000!important;background:#fff!important}}@page{size:A4 landscape;margin:8mm}.cal-print .breadcrumb,.cal-print .pills,.cal-print .cal-nimi,.cal-print .noprint,.cal-print .cal-seealso{display:none}body:has(.cal-print) header{display:none}body:has(.cal-print) footer{display:none}.cal-print h1{white-space:nowrap;margin:4px 0 8px;font-size:20px}.cal-print .cal-grid,.cal-print .cal-grid-half{grid-template-columns:repeat(6,1fr);gap:6px}.cal-print .cal-month{background:#fff;border-color:#999;padding:6px}.cal-print .cal-day{background:0 0}.cal-print .cal-day.sun,.cal-print .cal-day.hol{border-top:1px solid #000;border-bottom:1px solid #000}.cal-print .cal-day.today{background:0 0;font-weight:700;text-decoration:underline}.cal-print .cal-wk{color:#000;background:#fff;border:1px solid #000}.print-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.table-wrap{border:1px solid var(--line);border-radius:var(--radius);background:var(--card);-webkit-overflow-scrolling:touch;margin:20px 0;overflow-x:auto}.data-table{border-collapse:collapse;width:100%;min-width:480px;font-size:15px}.data-table th,.data-table td{text-align:left;border-bottom:1px solid var(--line);padding:12px 16px}.code-block{border:1px solid var(--line);border-radius:var(--radius);background:var(--card);color:var(--ink);-webkit-overflow-scrolling:touch;margin:20px 0;padding:16px 20px;font-family:IBM Plex Mono,ui-monospace,Menlo,Consolas,monospace;font-size:13px;line-height:1.6;overflow-x:auto}.data-table thead th{text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft);background:var(--paper);font-size:12px;font-weight:700}.data-table tbody tr:last-child td{border-bottom:0}.data-table td.num,.data-table th.num{text-align:right;font-variant-numeric:tabular-nums}.data-table a{color:var(--accent);font-weight:600;text-decoration:none}.data-table a:hover{text-decoration:underline}.tag{background:var(--accent-soft);color:var(--accent-deep);white-space:nowrap;border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600;display:inline-block}.tag.observed{color:#8a6414;background:#e0a23b29}.confidence-badge{white-space:nowrap;border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600;display:inline-block}.confidence-confirmed{color:#276b45;background:#3a916029}.confidence-estimated{color:#8a6414;background:#e0a23b29}.confidence-unknown{color:#5a5a5a;background:#78787824}.stat-row{flex-wrap:wrap;gap:12px;margin:20px 0;display:flex}.stat-box{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);flex:150px;padding:16px 18px}.stat-box .n{color:var(--accent-deep);font-variant-numeric:tabular-nums;font-size:34px;font-weight:700;line-height:1}.stat-box .l{color:var(--ink-soft);margin-top:5px;font-size:13px}.note-soft{color:var(--ink-soft);font-size:14px}.two-fields{flex-wrap:wrap;gap:12px;display:flex}.two-fields>div{flex-direction:column;flex:140px;display:flex}.tool-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin:22px 0;display:grid}.tool-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;gap:6px;padding:18px 20px;text-decoration:none;display:flex}.tool-card:hover{border-color:var(--accent)}.tool-name{color:var(--ink);font-size:16px;font-weight:700}.tool-desc{color:var(--ink-soft);font-size:14px}.cal-page{max-width:min(1500px,96vw)}.cal-halves{margin-top:8px;margin-bottom:18px}.cal-grid{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin:18px 0;display:grid}@media (max-width:430px){.cal-grid{grid-template-columns:1fr;gap:8px}}.cal-month{background:var(--card);border:1px solid var(--line);border-radius:12px;min-width:160px;padding:12px}.cal-month-h{color:var(--ink);border-bottom:1px solid var(--line);margin-bottom:6px;padding-bottom:4px;font-family:Bricolage Grotesque,Bricolage Grotesque Fallback,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:15px;font-weight:700;text-decoration:none;display:block}.cal-month-h:hover{color:var(--accent-deep)}.cal-days{flex-direction:column;display:flex}.cal-day{border-radius:4px;align-items:center;gap:6px;min-height:20px;padding:1px 4px;font-family:IBM Plex Mono,IBM Plex Mono Fallback,ui-monospace,monospace;font-size:12px;line-height:1.5;display:flex}.cal-wi{text-align:center;width:1.1em;color:var(--ink);opacity:.4;flex:none}.cal-dn{text-align:right;min-width:2ch;color:var(--ink);flex:none;font-weight:700}.cal-wk{background:var(--accent);color:#fff;border-radius:6px;flex:none;padding:2px 6px;font:500 11px IBM Plex Mono,IBM Plex Mono Fallback,ui-monospace,monospace;text-decoration:none}.cal-wk:hover{background:var(--accent-deep)}.cal-hol{color:var(--accent-deep);white-space:nowrap;text-overflow:ellipsis;font-family:Inter,Inter Fallback,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:12px;font-weight:500;overflow:hidden}.cal-flag{flex:none;font-size:11px;line-height:1}.cal-day.sun{background:#e0a23b14}.cal-day.sat{background:#15211f08}.cal-day.hol{background:#e0a23b14}.cal-day.hol .cal-dn{font-weight:700}.cal-day.today{background:#e0a23b4d;background:color-mix(in srgb, var(--amber) 30%, transparent);font-weight:700}.cal-day.current-week{background:var(--accent-soft);border-left:2px solid var(--accent);border-right:2px solid var(--accent);border-radius:0;padding-left:2px;padding-right:2px}.cal-day.current-week-start{border-top:2px solid var(--accent);border-radius:6px 6px 0 0;padding-top:0}.cal-day.current-week-end{border-bottom:2px solid var(--accent);border-radius:0 0 6px 6px;padding-bottom:0}.cal-day.current-week-start.current-week-end{border-radius:6px}.cal-day.current-week.today{background:color-mix(in srgb, var(--accent) 16%, var(--amber) 30%)}.cal-current-label{color:var(--accent-deep);letter-spacing:.08em;text-transform:uppercase;margin-left:auto;font:700 9px Inter,Inter Fallback,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}.cal-nimi{margin:16px 0;font-size:15px}.cal-seealso{margin-top:26px}.related{border-top:1px solid var(--line);margin-top:30px;padding-top:20px}.related h2{margin:0 0 12px;font-size:18px}.related h3{text-transform:uppercase;letter-spacing:.04em;color:var(--ink-soft);margin:20px 0 10px;font-size:13px;font-weight:600}.related ul.links{flex-wrap:wrap;gap:8px 22px;margin:0;padding:0;list-style:none;display:flex}.related ul.links a{color:var(--accent-deep);font-size:14px;text-decoration:none}.related ul.links a:hover{text-decoration:underline}.dir-h{color:var(--ink-soft);margin:20px 0 8px;font-size:13px;font-weight:600}
</style>
  <script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://viikkonro.fi/#website",
      "url": "https://viikkonro.fi/",
      "name": "Viikko Nro",
      "description": "Ilmainen viikkolaskuri, joka näyttää kuluvan viikkonumeron ja laskee minkä tahansa päivän viikon ISO 8601 -standardin mukaan.",
      "inLanguage": "fi-FI",
      "publisher": {
        "@id": "https://viikkonro.fi/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://viikkonro.fi/#organization",
      "name": "Viikko Nro",
      "alternateName": "Viikkonro.fi",
      "url": "https://viikkonro.fi/",
      "description": "Suomalainen verkkopalvelu ISO 8601 -viikkonumeroiden, kalenteriviikkojen ja päivämäärien tarkistamiseen.",
      "logo": "https://viikkonro.fi/logo-horizontal.svg",
      "sameAs": [
        "https://www.linkedin.com/company/viikkonro",
        "https://www.instagram.com/viikkonro/",
        "https://www.pinterest.com/viikkonro/",
        "https://bsky.app/profile/viikkonro.bsky.social"
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://viikkonro.fi/#app",
      "name": "Viikko Nro – viikkolaskuri",
      "url": "https://viikkonro.fi/",
      "publisher": {
        "@id": "https://viikkonro.fi/#organization"
      },
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "All",
      "inLanguage": "fi-FI",
      "browserRequirements": "Requires JavaScript",
      "description": "Näyttää kuluvan viikkonumeron ja laskee minkä tahansa päivän viikon, viikonpäivät ja ajanjakson ISO 8601 -standardin mukaan.",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "EUR"
      }
    },
    {
      "@type": "WebPage",
      "@id": "https://viikkonro.fi/data/working-days#webpage",
      "url": "https://viikkonro.fi/data/working-days",
      "name": "Työpäivädata — avoin data",
      "isPartOf": {
        "@id": "https://viikkonro.fi/#website"
      },
      "publisher": {
        "@id": "https://viikkonro.fi/#organization"
      },
      "inLanguage": "fi-FI",
      "breadcrumb": {
        "@id": "https://viikkonro.fi/data/working-days#breadcrumb"
      },
      "description": "Kuukausittaiset työ- ja viikonloppupäivien määrät vuosille 2020–2035 sekä vuosikohtaiset yhteissummat. Saatavilla JSON-, CSV- ja XML-muodossa."
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://viikkonro.fi/data/working-days#breadcrumb",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Etusivu",
          "item": "https://viikkonro.fi/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Avoin data",
          "item": "https://viikkonro.fi/avoin-data"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Työpäivädata",
          "item": "https://viikkonro.fi/data/working-days"
        }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://viikkonro.fi/data/working-days#faq",
      "inLanguage": "fi-FI",
      "dateModified": "2026-09-04",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Onko työpäivädata ilmaista käyttää?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Kyllä. Kaikki tiedostot ovat julkisesti saatavilla ilman kirjautumista, API-avainta tai pyyntörajoja. Käyttö edellyttää vain maininnan lähteestä (Viikko Nro, viikkonro.fi)."
          }
        },
        {
          "@type": "Question",
          "name": "Missä muodoissa data on saatavilla?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "JSON, CSV ja XML. JSON on saatavilla yhtenä tietueena kerrallaan; CSV ja XML sisältävät koko vuoden datan yhdessä tiedostossa."
          }
        },
        {
          "@type": "Question",
          "name": "Kuinka usein data päivittyy?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Kaikki tiedostot generoidaan uudelleen jokaisessa julkaisussa ja lisäksi kerran vuorokaudessa automaattisen yöllisen julkaisun yhteydessä."
          }
        }
      ]
    }
  ]
}
    </script>
  </head>
  <body>
    <div id="root"><link rel="preload" as="image" href="/logo-horizontal-cropped.svg"/><link rel="preload" as="image" href="/logo-horizontal-dark-cropped.svg"/><header class="nav"><div class="wrap row"><a class="brand" href="/" data-discover="true"><img src="/logo-horizontal-cropped.svg" alt="Viikko Nro" width="592" height="122"/></a><button class="menu-toggle " aria-label="Avaa navigointivalikko"><span class="bar"></span><span class="bar"></span><span class="bar"></span></button><nav class="nav-links "><a id="navYear" href="/vuosi-2026" data-discover="true">Viikot <!-- -->2026</a><a id="navPrint" href="/tulosta-2026" data-discover="true">Viikkolista <!-- -->2026</a><a id="navCalendar" href="/kalenteri-2026" data-discover="true">Kalenteri <!-- -->2026</a><a href="/laskurit" data-discover="true">Laskurit</a><a href="/mika-on-viikkonumero" data-discover="true">Tietoa viikoista</a></nav><a class="badge" id="navBadge" href="/vuosi-2026" data-discover="true">Vk <!-- -->36</a></div></header><main id="main"><section class="app"><div class="breadcrumb"><a href="/" data-discover="true">Etusivu</a> / <a href="/avoin-data" data-discover="true">Avoin data</a> <!-- -->/ <!-- -->Työpäivädata</div><h1>Työpäivädata</h1><div class="prose"><p class="lead"><span class="answer-sentence">Kuukausikohtainen työpäivädata jokaiselle vuodelle 2020–2035: työpäivien ja viikonloppupäivien määrä kuukausittain, sekä koko vuoden yhteissumma. Julkinen nimi tälle sivulle — taustalla oleva JSON-data on osoitteessa /data/monthly-working-days/, joka pysyy muuttumattomana.</span></p><p class="note-soft">Sisältö päivitetty <!-- -->21. elokuuta 2026<!-- -->.</p><h2>Formaatit</h2></div><div class="table-wrap"><table class="data-table"><thead><tr><th>Formaatti</th><th>URL-kaava</th><th>Esimerkki</th><th>Muoto</th></tr></thead><tbody><tr><td>JSON</td><td><code>/data/monthly-working-days/{vuosi}/{kuukausi}.json</code></td><td><a href="/data/monthly-working-days/2026/8.json">/data/monthly-working-days/2026/8.json</a></td><td>Yksi tietue per kuukausi</td></tr><tr><td>CSV</td><td><code>/data/working-days/{vuosi}.csv</code></td><td><a href="/data/working-days/2026.csv">/data/working-days/2026.csv</a></td><td>12 kuukausiriviä + 1 TOTAL-rivi</td></tr><tr><td>XML</td><td><code>/data/working-days/{vuosi}.xml</code></td><td><a href="/data/working-days/2026.xml">/data/working-days/2026.xml</a></td><td>12 &lt;month&gt;-elementtiä + &lt;total&gt;</td></tr></tbody></table></div><div class="prose"><h2>Kentät</h2></div><div class="table-wrap"><table class="data-table"><thead><tr><th>Kenttä</th><th>Kuvaus</th></tr></thead><tbody><tr><td><code>month</code></td><td>Kuukausi (1–12)</td></tr><tr><td><code>monthName</code></td><td>Kuukauden nimi</td></tr><tr><td><code>workingDays</code></td><td>Työpäivien määrä</td></tr><tr><td><code>weekendDays</code></td><td>Viikonloppupäivien määrä</td></tr><tr><td><code>officialHolidaysInMonth</code></td><td>Kuukaudelle osuvien virallisten pyhäpäivien määrä</td></tr></tbody></table></div><p class="note-soft">CSV-sarakkeet: <code>month,monthName,workingDays,weekendDays,officialHolidaysInMonth (+ TOTAL-rivi)</code></p><div class="prose"><h2>Lataa vuosittain</h2><p>CSV ja XML sisältävät koko vuoden datan yhdessä tiedostossa:</p></div><div class="pills"><a class="pill" href="/data/working-days/2020.csv">2020</a><a class="pill" href="/data/working-days/2021.csv">2021</a><a class="pill" href="/data/working-days/2022.csv">2022</a><a class="pill" href="/data/working-days/2023.csv">2023</a><a class="pill" href="/data/working-days/2024.csv">2024</a><a class="pill" href="/data/working-days/2025.csv">2025</a><a class="pill" href="/data/working-days/2026.csv">2026</a><a class="pill" href="/data/working-days/2027.csv">2027</a><a class="pill" href="/data/working-days/2028.csv">2028</a><a class="pill" href="/data/working-days/2029.csv">2029</a><a class="pill" href="/data/working-days/2030.csv">2030</a><a class="pill" href="/data/working-days/2031.csv">2031</a><a class="pill" href="/data/working-days/2032.csv">2032</a><a class="pill" href="/data/working-days/2033.csv">2033</a><a class="pill" href="/data/working-days/2034.csv">2034</a><a class="pill" href="/data/working-days/2035.csv">2035</a></div><div class="prose"><h2>Usein kysyttyä</h2><div class="faq-list"><details open=""><summary>Onko työpäivädata ilmaista käyttää?</summary><p>Kyllä. Kaikki tiedostot ovat julkisesti saatavilla ilman kirjautumista, API-avainta tai pyyntörajoja. Käyttö edellyttää vain maininnan lähteestä (Viikko Nro, viikkonro.fi).</p></details><details><summary>Missä muodoissa data on saatavilla?</summary><p>JSON, CSV ja XML. JSON on saatavilla yhtenä tietueena kerrallaan; CSV ja XML sisältävät koko vuoden datan yhdessä tiedostossa.</p></details><details><summary>Kuinka usein data päivittyy?</summary><p>Kaikki tiedostot generoidaan uudelleen jokaisessa julkaisussa ja lisäksi kerran vuorokaudessa automaattisen yöllisen julkaisun yhteydessä.</p></details></div><h2>Aiheeseen liittyviä sivuja</h2><div class="quicklinks"><a class="ql" href="/avoin-data" data-discover="true"><b>Avoin data</b><span>Kaikkien datasettien dokumentaatio yhdellä sivulla</span></a><a class="ql" href="/api-playground" data-discover="true"><b>API Playground</b><span>Kokeile rajapintaa selaimessa</span></a><a class="ql" href="/tietolahteet" data-discover="true"><b>Tietolähteet</b><span>Mihin tämä data perustuu</span></a></div></div></section></main><footer class="site-footer"><div class="footer-container"><div class="footer-brand-col"><div class="brand-dark"><img src="/logo-horizontal-dark-cropped.svg" alt="Viikko Nro" width="592" height="122"/></div><p class="footer-desc">Selkeä ja tarkka työkalu ISO 8601 -viikkonumeroihin ja vuosien kalenteriaikatauluihin. Laskelmat perustuvat aina ISO 8601 -standardiin.</p><ul class="footer-social" aria-label="Seuraa meitä"><li><a href="https://www.linkedin.com/company/viikkonro" target="_blank" rel="me noopener">LinkedIn</a></li><li><a href="https://www.instagram.com/viikkonro/" target="_blank" rel="me noopener">Instagram</a></li><li><a href="https://www.pinterest.com/viikkonro/" target="_blank" rel="me noopener">Pinterest</a></li><li><a href="https://bsky.app/profile/viikkonro.bsky.social" target="_blank" rel="me noopener">Bluesky</a></li></ul></div><div class="footer-links-col"><h3>Palvelu</h3><ul><li><a href="/" data-discover="true">Etusivu<!-- --> </a></li><li><a href="/kuinka-monta-viikkoa-vuodessa" data-discover="true">Viikkoja vuodessa</a></li><li><a href="/mika-on-viikkonumero" data-discover="true">Mikä on viikkonumero?</a></li><li><a href="/avoin-data" data-discover="true">Avoin data</a></li><li><a href="/ajanhallinta" data-discover="true">Ajanhallinta</a></li><li><a lang="en" href="/en" data-discover="true">English</a></li><li><a href="/menetelma" data-discover="true">Menetelmä</a></li><li><a href="/tietolahteet" data-discover="true">Tietolähteet</a></li></ul></div><div class="footer-links-col"><h3>Yritys</h3><ul><li><a href="/tietoa-meista" data-discover="true">Tietoa meistä</a></li><li><a href="/toimitusperiaatteet" data-discover="true">Toimitusperiaatteet</a></li><li><a href="/ota-yhteytta" data-discover="true">Yhteystiedot</a></li><li><a href="/kayttoehdot" data-discover="true">Käyttöehdot</a></li><li><a href="/tietosuoja" data-discover="true">Tietosuojaseloste</a></li></ul></div></div><hr class="footer-divider"/><div class="footer-baseline"><p>© <!-- -->2026<!-- --> Viikko Nro. Kaikki oikeudet pidätetään.</p><p class="footer-tz">Kansainvälisen ISO 8601 -standardin mukaan</p></div></footer></div>
  </body>
</html>
