/*
Theme Name: ottosolala
Theme URI: https://ottosolala.fi
Author: Otto Solala
Description: Avaimet käteen -verkkosivut yrittäjille. Kevyt oma teema, jossa etusivu on yksi scroll-ohjattu tarina.
Version: 1.8.6
Requires at least: 6.0
Tested up to: 6.6
Requires PHP: 7.4
License: GNU General Public License v2 or later
Text Domain: ottosolala
*/

/* ---------- Omalta palvelimelta ladattavat fontit ----------
   Fontit on karsittu sisältämään vain ne merkit joita sivusto käyttää:
   1,1 Mt -> 104 kt. Ei kolmannen osapuolen pyyntöjä, ei IP-osoitteiden
   luovutusta Googlelle, ja sivu latautuu nopeammin. */
@font-face{
  font-family:'Space Grotesk';
  src:url('assets/fonts/SpaceGrotesk-Bold.woff') format('woff');
  font-weight:700;font-style:normal;font-display:swap;
}
@font-face{
  font-family:'Inter';
  src:url('assets/fonts/Inter-Regular.woff') format('woff');
  font-weight:400;font-style:normal;font-display:swap;
}
@font-face{
  font-family:'Inter';
  src:url('assets/fonts/Inter-SemiBold.woff') format('woff');
  font-weight:600;font-style:normal;font-display:swap;
}
@font-face{
  font-family:'Inter';
  src:url('assets/fonts/Inter-Bold.woff') format('woff');
  font-weight:700;font-style:normal;font-display:swap;
}

/* ---------- Muotoilun perusarvot (sivustosuunnitelman paletti) ---------- */
:root{
  --bg:#101114;
  --surface:#26282D;
  --accent:#9FCF72;
  --light:#F4F1EA;
  --text:#FFFFFF;
  --muted:#B4BAC2;

  --head:'Space Grotesk', system-ui, sans-serif;
  --body:'Inter', system-ui, -apple-system, sans-serif;

  --wrap:1200px;
  --gutter:clamp(1.25rem, 4vw, 3rem);
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;
  background:var(--bg);
  color:var(--text);
  transition:background-color .6s ease, color .6s ease;
  font-family:var(--body);
  font-size:clamp(1rem,.95rem + .25vw,1.125rem);
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
img{max-width:100%;height:auto;display:block}

/* ---------- Saavutettavuus: näkyvä fokus ja ohituslinkki ---------- */
:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
.skip-link{
  position:absolute;left:-9999px;top:0;z-index:999;
  background:var(--accent);color:var(--bg);padding:.75rem 1.25rem;
  font-weight:700;text-decoration:none;
}
.skip-link:focus{left:0}

/* ---------- Rakenne ---------- */
.wrap{width:min(100% - var(--gutter)*2, var(--wrap));margin-inline:auto}

.site-header{position:relative;z-index:10;padding-block:1.5rem}
.site-header .wrap{display:flex;align-items:center;gap:1rem;position:relative}
.brand{
  display:inline-flex;align-items:center;gap:.6rem;
  font-family:var(--head);font-weight:700;color:var(--accent);
  text-decoration:none;font-size:1.05rem;line-height:1;
}
.brand__merkki{width:1.6em;height:1.6em;flex:none}
.brand__pääte{color:var(--muted2);font-weight:500}
body.is-light .brand{color:#4A6B34}
body.is-light .brand__pääte{color:#6A6F78}
.site-nav{margin-left:auto}
.site-nav ul{display:flex;gap:1.75rem;list-style:none;margin:0;padding:0}
.site-nav a{color:var(--muted);text-decoration:none;font-size:.9rem}
.site-nav a:hover,.site-nav .current-menu-item a{color:var(--accent)}

/* ---------- Hero ---------- */
.hero{position:relative;min-height:88svh;display:flex;align-items:center;overflow:hidden}
.hero__inner{position:relative;z-index:2;max-width:44ch}
.hero h1{
  font-family:var(--head);font-weight:700;
  font-size:clamp(2.25rem,1.2rem + 5vw,4.5rem);
  line-height:1.08;letter-spacing:-.02em;margin:0;
}
.hero h1 .accent{color:var(--accent);display:block}
.hero p{color:var(--muted);margin:1.5rem 0 2rem;max-width:46ch}

.btn{
  display:inline-block;background:var(--accent);color:var(--bg);
  font-weight:700;letter-spacing:.04em;font-size:.9rem;
  padding:.9rem 1.75rem;border-radius:999px;text-decoration:none;
  transition:transform .2s ease;
}
.btn:hover{transform:translateY(-2px)}

/* Kehä — sivuston tunnusmerkki */
.ring{
  position:fixed;right:-10%;top:50%;translate:0 -50%;
  width:min(48vw,640px);aspect-ratio:1;z-index:0;pointer-events:none;
  /* SVG leikkaa piirron viewBoxin reunaan oletuksena. Ilman tätä kehä
     katoaa näkymättömään rajaan kesken ruudun. */
  overflow:visible;
}
.ring circle{fill:none;stroke:var(--accent);stroke-width:1.5}
.ring__inner{stroke:#4A5240}
body.is-light .ring__outer{stroke:#4A6B34}
body.is-light .ring__inner{stroke:#C3CDB6}

@media (max-width:900px){
  /* Kapealla ruudulla kehä on pelkkää tekstuuria, ei kilpaile tekstin kanssa. */
  .ring{right:-30%;opacity:.18}
}

/* ---------- Liike: kunnioita käyttäjän asetusta ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.001ms !important;
    transition-duration:.001ms !important;
    scroll-behavior:auto !important;
  }
}


/* ---------- Vaalea tila (tarinaosio) ---------- */
body.is-light{background:var(--light);color:#101114}
body.is-light .site-nav a{color:#5A6069}
body.is-light .site-nav a:hover{color:#4A6B34}
body.is-light .lead,
body.is-light .story__inner p{color:#454A52}
body.is-light .eyebrow{color:#4A6B34}

/* ---------- Tarinaosiot ---------- */
.story{
  position:relative;z-index:2;
  min-height:100svh;display:flex;align-items:center;
  padding-block:clamp(4rem,10vh,8rem);
}
.story__inner{max-width:56ch}
.story__inner--center{max-width:none;text-align:center;margin-inline:auto}

.eyebrow{
  font-size:.75rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--accent);margin:0 0 1rem;
}
.story h2{
  font-family:var(--head);font-weight:700;
  font-size:clamp(1.6rem,1rem + 2.6vw,2.75rem);
  line-height:1.18;letter-spacing:-.015em;margin:0 0 1.25rem;
}
.story p{color:var(--muted);margin:0 0 1rem;max-width:56ch}
.story--close .story__inner p{margin-inline:auto}

.promise{list-style:none;margin:1.5rem 0 0;padding:0;
  display:grid;grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:.5rem 2rem}
.promise li{position:relative;padding-left:1.5rem;color:var(--muted)}
.promise li::before{
  content:"";position:absolute;left:0;top:.65em;
  width:.4rem;height:.4rem;border-radius:50%;background:var(--accent);
}

.btn--lg{font-size:1rem;padding:1.1rem 2.25rem;margin-top:2rem}

.scroll-hint{
  position:absolute;left:var(--gutter);bottom:2rem;z-index:2;
  font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;color:#5F656D;margin:0;
}




/* ---------- Sivut ja artikkelit ---------- */
.page-wrap{position:relative;z-index:2;padding-block:clamp(3rem,8vh,6rem) clamp(4rem,10vh,7rem)}
.page-wrap--narrow{max-width:70ch}

.entry__header{margin-bottom:2.5rem}
.entry__title{
  font-family:var(--head);font-weight:700;
  font-size:clamp(1.9rem,1.2rem + 3vw,3.25rem);
  line-height:1.14;letter-spacing:-.02em;margin:0;
}
.entry__content{max-width:68ch}
.entry__content > * + *{margin-top:1.25rem}
.entry__content h2{font-family:var(--head);font-size:clamp(1.3rem,1rem + 1.2vw,1.75rem);line-height:1.25;margin-top:2.5rem}
.entry__content h3{font-family:var(--head);font-size:1.15rem;margin-top:2rem}
.entry__content a{color:var(--accent);text-underline-offset:.2em}
.entry__content ul,.entry__content ol{padding-left:1.25rem}
.entry__content li+li{margin-top:.4rem}
.entry__content blockquote{
  margin:2rem 0;padding-left:1.25rem;border-left:3px solid var(--accent);
  font-family:var(--head);font-size:1.15rem;line-height:1.4;
}

/* ---------- Blogilistaus ---------- */
.post-list{list-style:none;margin:0;padding:0;display:grid;gap:1px;background:#23262B;border-block:1px solid #23262B}
.post-card{
  display:grid;grid-template-columns:2rem minmax(0,1fr);gap:1.5rem;align-items:start;
  background:var(--bg);padding:2rem 0;
}
.post-card:has(.post-card__thumb){grid-template-columns:2rem minmax(0,1fr) 220px}
.post-card__body{min-width:0}
.post-card__num{
  font-family:var(--head);font-size:.8rem;font-weight:700;color:var(--accent);
  padding-top:.35rem;min-width:2rem;
}
.post-card__title{
  font-family:var(--head);font-weight:700;
  font-size:clamp(1.15rem,1rem + .8vw,1.6rem);line-height:1.25;margin:0;
}
.post-card__title a{color:var(--text);text-decoration:none}
.post-card__title a:hover{color:var(--accent)}
.post-card__meta{margin:.5rem 0 0;font-size:.78rem;color:#5F656D}
.post-card__excerpt{margin:.75rem 0 0;color:var(--muted);max-width:60ch}

.post-nav{display:flex;justify-content:space-between;gap:2rem;margin-top:3rem;
  padding-top:1.5rem;border-top:1px solid #23262B;font-size:.85rem}
.post-nav a{color:var(--muted);text-decoration:none}
.post-nav a:hover{color:var(--accent)}

.pagination{margin-top:2.5rem;font-size:.85rem}
.pagination a,.pagination .current{padding:.4rem .7rem;text-decoration:none;color:var(--muted)}
.pagination .current{color:var(--accent);font-weight:700}

/* Sisäsivuilla kehä on hillitympi, jotta se ei kilpaile tekstin kanssa. */
body:not(.home) .ring{opacity:.28}


/* ---------- Mobiilivalikko ----------
   Painike näkyy vain jos JavaScript on käytössä. Ilman sitä valikko
   on tavallinen linkkilista, joten navigaatio ei katoa keneltäkään. */
.nav-toggle{display:none}

@media (max-width:820px){
  .js .nav-toggle{
    display:inline-flex;align-items:center;gap:.6rem;margin-left:auto;
    background:none;border:1px solid #3A3E45;border-radius:999px;
    color:var(--text);font:inherit;font-size:.8rem;letter-spacing:.06em;
    padding:.55rem 1.1rem;cursor:pointer;
  }
  .js .nav-toggle:hover{border-color:var(--accent)}
  .nav-toggle__bars{position:relative;width:1rem;height:2px;background:currentColor;display:block}
  .nav-toggle__bars::before,.nav-toggle__bars::after{
    content:"";position:absolute;left:0;width:1rem;height:2px;background:currentColor;
  }
  .nav-toggle__bars::before{top:-5px}
  .nav-toggle__bars::after{top:5px}
  .js .nav-toggle[aria-expanded="true"] .nav-toggle__bars{background:transparent}
  .js .nav-toggle[aria-expanded="true"] .nav-toggle__bars::before{top:0;rotate:45deg}
  .js .nav-toggle[aria-expanded="true"] .nav-toggle__bars::after{top:0;rotate:-45deg}

  .js .site-nav{
    display:none;position:absolute;z-index:20;
    left:0;right:0;top:calc(100% + .75rem);
    background:var(--surface);border-radius:14px;
    padding:1.25rem 1.5rem;
  }
  .js .site-nav.is-open{display:block}
  .site-nav ul{flex-direction:column;gap:1.1rem}
  .site-nav a{font-size:1rem}
  body.is-light .js .site-nav{background:#EAE5D9}
}


/* ---------- Sivun sisällön typografia ---------- */
/* Ensimmäinen kappale toimii ingressinä ilman että sitä tarvitsee
   merkitä erikseen WordPressissä. */
.entry__content > p:first-of-type{
  font-size:clamp(1.05rem,1rem + .45vw,1.3rem);
  line-height:1.55;color:var(--text);
}
.entry__content h2{
  padding-top:1.75rem;border-top:1px solid #23262B;
}
.entry__content h2:first-child{padding-top:0;border-top:0}

/* Numeroitu lista prosessiaskelina */
.entry__content ol{list-style:none;padding-left:0;counter-reset:step;
  display:grid;gap:1rem;margin-top:1.75rem}
.entry__content ol > li{
  counter-increment:step;position:relative;
  padding:1.15rem 1.35rem 1.15rem 3.5rem;margin:0;
  background:#181A1E;border:1px solid #23262B;border-radius:12px;
}
.entry__content ol > li::before{
  content:counter(step);position:absolute;left:1.35rem;top:1.15rem;
  font-family:var(--head);font-weight:700;font-size:.85rem;color:var(--accent);
}
.entry__content ul{list-style:none;padding-left:0}
.entry__content ul > li{position:relative;padding-left:1.5rem}
.entry__content ul > li::before{
  content:"";position:absolute;left:0;top:.65em;
  width:.4rem;height:.4rem;border-radius:50%;background:var(--accent);
}

body.is-light .entry__content h2{border-color:#DCD7CB}
body.is-light .entry__content ol > li{background:#EAE5D9;border-color:#DCD7CB}

/* ---------- CTA-kaista sivujen lopussa ---------- */
.cta-band{
  position:relative;z-index:2;
  border-top:1px solid #23262B;
  padding-block:clamp(3.5rem,9vh,6rem);
  text-align:center;
}
.cta-band__inner{max-width:44ch;margin-inline:auto}
.cta-band h2{
  font-family:var(--head);font-weight:700;
  font-size:clamp(1.5rem,1.1rem + 1.8vw,2.25rem);
  line-height:1.2;margin:0;
}
.cta-band .accent{color:var(--accent)}

/* ---------- Alatunniste ---------- */
.site-footer{position:relative;z-index:2;border-top:1px solid #23262B;
  padding-block:2.5rem clamp(2.5rem,6vh,4rem)}
.site-footer__inner{display:flex;flex-wrap:wrap;gap:2rem 3rem;align-items:flex-start}
.site-footer p{margin:0;font-size:.82rem;color:#5F656D}
.site-footer__brand{font-family:var(--head);font-weight:700;color:var(--text)!important;font-size:.95rem!important}
.site-footer__tag{margin-top:.35rem!important}
.site-footer__nav{margin-left:auto}
.site-footer__nav ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:1.25rem}
.site-footer__nav a{color:var(--muted);text-decoration:none;font-size:.82rem}
.site-footer__nav a:hover{color:var(--accent)}
.site-footer__contact a{color:var(--accent);text-decoration:none;font-size:.82rem}
.site-footer__contact p{margin-top:.35rem}

body.is-light .site-footer,
body.is-light .cta-band,
body.is-light .entry__content ol > li{border-color:#DCD7CB}

@media (max-width:640px){
  .site-footer__nav{margin-left:0;width:100%}
}


/* ---------- Yhteydenottolomake ---------- */
.form{max-width:34rem;margin-top:2.5rem;display:grid;gap:1.5rem}
.field{display:grid;gap:.5rem}
.field label{font-size:.85rem;font-weight:600;color:var(--text)}
.field__req{font-weight:400;color:#6E747C}
.field input,.field textarea{
  width:100%;font:inherit;font-size:1rem;color:var(--text);
  background:#181A1E;border:1px solid #2C3037;border-radius:10px;
  padding:.85rem 1rem;transition:border-color .15s ease;
}
.field textarea{resize:vertical;min-height:9rem}
.field input::placeholder,.field textarea::placeholder{color:#5F656D}
.field input:hover,.field textarea:hover{border-color:#3C4048}
.field input:focus-visible,.field textarea:focus-visible{border-color:var(--accent)}
.field input[aria-invalid="true"],.field textarea[aria-invalid="true"]{border-color:#E06B5A}

.field__error{margin:0;font-size:.82rem;color:#F09383}

.field--check{grid-template-columns:auto 1fr;align-items:start;gap:.25rem .75rem}
.field--check input{width:1.15rem;height:1.15rem;margin-top:.15rem;accent-color:var(--accent);padding:0}
.field--check label{font-weight:400;color:var(--muted);font-size:.85rem;line-height:1.5}
.field--check .field__error{grid-column:1 / -1}

.form-errors{
  border:1px solid #7A3B31;background:#241A18;border-radius:12px;padding:1.1rem 1.35rem;
}
.form-errors p{margin:0 0 .5rem;font-weight:600;font-size:.9rem;color:#F09383}
.form-errors ul{margin:0;padding-left:1.1rem}
.form-errors li{font-size:.85rem;color:var(--muted)}
.form-errors a{color:#F09383}

.form-success{
  margin-top:2.5rem;max-width:34rem;
  border:1px solid var(--accent);background:#1B2416;border-radius:14px;padding:1.75rem;
}
.form-success__title{
  font-family:var(--head);font-weight:700;font-size:1.25rem;color:var(--accent);margin:0 0 .5rem;
}
.form-success p:last-child{margin:0;color:var(--muted);font-size:.95rem}

/* Hunajapurkki: pois näkyvistä mutta ei display:none,
   koska osa boteista ohittaa piilotetut kentät. */
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

body.is-light .field input,body.is-light .field textarea{
  background:#EAE5D9;border-color:#DCD7CB;color:#101114;
}

/* ---------- Yhteystietonosto ---------- */
.contact-lines{display:grid;gap:.4rem;margin-top:1.5rem}
.contact-lines a{color:var(--accent);text-decoration:none;font-size:1.05rem}
.contact-lines a:hover{text-decoration:underline}


/* Etusivun tarinaosioissa ei ole enää pieniä ylätunnisteita,
   joten otsikko kantaa osion yksin ja saa lisää tilaa ympärilleen. */
.story h2{max-width:20ch}
.story--close h2{max-width:none}
.story__inner > p:first-of-type{margin-top:1.5rem}

.field__hint{margin:0;font-size:.78rem;color:#6E747C;line-height:1.5}
body.is-light .field__hint{color:#6A6F78}

.form-errors:focus-visible{outline:3px solid var(--accent);outline-offset:3px}

.site-footer__privacy{color:var(--muted)!important;font-size:.78rem!important}
.site-footer__privacy:hover{color:var(--accent)!important}
.field--check label a{color:var(--accent);text-underline-offset:.2em}

.site-footer__brand{display:flex;align-items:center;gap:.55rem;color:var(--accent)!important}
.site-footer__brand .brand__merkki{width:1.3em;height:1.3em;flex:none}
.site-footer__brand span{color:var(--text)}
body.is-light .site-footer__brand{color:#4A6B34!important}
body.is-light .site-footer__brand span{color:#101114}


/* ---------- Tekstipalsta ei mene kehän päälle ----------
   .wrap keskittää sisällön. Kun sen päälle annetaan kapeampi max-width,
   palsta kelluu keskelle ja törmää kehään läppärikokoluokassa. Siksi
   palstat ankkuroidaan vasempaan reunaan ja rajataan myös suhteessa
   ruudun leveyteen. Valkoinen teksti vihreän viivan päällä on
   kontrastiongelma, ei tyylikysymys. */
@media (min-width:901px){
  /* Vasen reuna lukitaan samaan linjaan .wrapin kanssa (ja siten logon
     kanssa), jotta kapeampi palsta ei liu'u keskelle eikä kiinni ruudun
     reunaan. Oikea reuna jää kehälle. */
  .hero__inner,
  .story__inner,
  .cta-band__inner{
    margin-inline:max(var(--gutter), calc((100% - var(--wrap)) / 2)) auto;
  }
  .hero__inner{max-width:min(44ch, 42vw)}
  .story__inner{max-width:min(56ch, 44vw)}
  .story--close .story__inner{max-width:min(46ch, 42vw)}
  .cta-band__inner{max-width:min(44ch, 42vw)}
}

/* ---------- Artikkelikuvat ja termit ---------- */
.post-card__thumb{display:block;border-radius:10px;overflow:hidden;border:1px solid #23262B;
  background:#16181C;transition:border-color .2s ease,transform .2s ease}
.post-card__thumb img{display:block;width:100%;height:auto;aspect-ratio:16/10;object-fit:cover}
.post-card:hover .post-card__thumb{border-color:var(--accent);transform:translateY(-2px)}

.entry__media{margin:0 0 2.5rem;border-radius:14px;overflow:hidden;border:1px solid #23262B;background:#16181C}
.entry__media img{display:block;width:100%;height:auto}

.terms{display:flex;flex-wrap:wrap;gap:.4rem;margin:.85rem 0 0;padding:0}
.terms .term{
  font-family:var(--head);font-size:.68rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted);text-decoration:none;
  border:1px solid #2B3038;border-radius:999px;padding:.3rem .7rem;line-height:1;
  transition:color .15s ease,border-color .15s ease;
}
.terms .term:hover{color:var(--accent);border-color:var(--accent)}
.terms .term--cat{color:var(--accent);border-color:#3C4A31;background:rgba(159,207,114,.08)}
.entry__header .terms{margin-top:1.1rem}

body.is-light .post-card__thumb,
body.is-light .entry__media{border-color:#DCD7CB;background:#EAE5D9}
body.is-light .terms .term{color:#5A6170;border-color:#DCD7CB}
body.is-light .terms .term--cat{color:#4A6B34;border-color:#C3D6AC;background:rgba(159,207,114,.18)}

@media (max-width:820px){
  .post-card:has(.post-card__thumb){grid-template-columns:2rem minmax(0,1fr) 150px;gap:1rem}
}
@media (max-width:640px){
  .post-card:has(.post-card__thumb){grid-template-columns:2rem minmax(0,1fr)}
  .post-card__thumb{grid-column:2;order:-1;margin-bottom:.25rem}
  .entry__media{margin-bottom:1.75rem}
}

/* Artikkelin sisällä oleva CTA-painike: .entry__content a veisi tekstivärin */
.post-cta{margin-top:2.5rem}
.entry__content .btn,
.entry__content .btn:hover,
.entry__content .btn:focus{color:var(--bg);text-decoration:none}
body.is-light .entry__content .btn{color:#101114}

/* ---------- Arkistosivut (avainsana, kategoria) ---------- */
.archive__kuvaus{margin:1rem 0 0;color:var(--muted);max-width:60ch}
.archive__maara{margin:1rem 0 0;font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;color:#5F656D}
.archive__paluu{margin-top:3rem;padding-top:1.5rem;border-top:1px solid #23262B;font-size:.85rem}
.archive__paluu a{color:var(--muted);text-decoration:none}
.archive__paluu a:hover{color:var(--accent)}
body.is-light .archive__paluu{border-color:#DCD7CB}

/* ---------- Kasvokuva yhteystiedoissa ---------- */
.kuva-otto{margin:2rem 0 1.5rem;max-width:220px}
.kuva-otto img{display:block;width:100%;height:auto;border-radius:12px;border:1px solid #23262B}
body.is-light .kuva-otto img{border-color:#DCD7CB}
