{
  "imageDeliverable.failed": "Kuvan lataus epäonnistui",
  "imageDeliverable.loading": "Ladataan kuvaa…",
  "imageDeliverable.open": "Avaa koko kuva",
  "profile.landing.home": "Etusivu",
  "profile.landing.menu": "Valikko",
  "profile.tabs.workflows": "Työnkulut",
  "profile.workflows.title": "Työnkulut",
  "profile.workflows.desc": "Määritellyt, järjestetyt agenttiketjut askelkohtaisilla terveystarkistuksilla — ne näyttävät tuottiko jokainen askel oikeasti tuloksen, ei vain että se käynnistyi.",
  "profile.workflows.loading": "Ladataan työnkulkuja…",
  "profile.workflows.empty": "Ei työnkulkuja vielä. Agentti tai API voi määritellä sellaisen; se ilmestyy tähän.",
  "profile.workflows.trigger.schedule": "ajastus",
  "profile.workflows.trigger.event": "tapahtuma",
  "profile.workflows.trigger.manual": "manuaalinen",
  "profile.workflows.stepCount": "{count} askelta",
  "profile.workflows.lastRun": "viimeisin ajo",
  "profile.workflows.check": "Tarkista",
  "profile.workflows.run": "Aja",
  "profile.workflows.runStarted": "Ajo käynnistetty",
  "profile.workflows.back": "Takaisin",
  "profile.workflows.blueprint": "Rakennekaavio",
  "profile.workflows.after": "jälkeen",
  "profile.workflows.recentRuns": "Viimeisimmät ajot",
  "profile.workflows.noRuns": "Ei ajoja vielä.",
  "profile.workflows.attempt": "yritys",
  "profile.workflows.health.title": "Askelkohtainen terveys viime ajoista (vihreä = tuotti, punainen = epäonnistui)",
  "profile.workflows.inspectorDispatched": "{count} tarkastustaskia lähetetty",
  "profile.workflows.new": "Uusi",
  "profile.workflows.edit": "Muokkaa",
  "profile.workflows.form.newTitle": "Uusi työnkulku",
  "profile.workflows.form.editTitle": "Muokkaa työnkulkua",
  "profile.workflows.form.id": "Tunnus (slug)",
  "profile.workflows.form.idHint": "Tunnuksen on oltava pienaakkos-slug (a-z, 0-9, väliviivat).",
  "profile.workflows.form.titleField": "Otsikko",
  "profile.workflows.form.description": "Kuvaus",
  "profile.workflows.form.trigger": "Liipaisin",
  "profile.workflows.form.matchKey": "osuma-avain (glob)",
  "profile.workflows.form.matchOffer": "osuma-offer-id",
  "profile.workflows.form.vars": "Muuttujat",
  "profile.workflows.form.addVar": "muuttuja",
  "profile.workflows.form.steps": "Askeleet",
  "profile.workflows.form.addStep": "askel",
  "profile.workflows.form.pickAgent": "agentti…",
  "profile.workflows.form.pickOffer": "offer…",
  "profile.workflows.form.noCompatibleOffers": "Tällä agentilla ei ole työnkulku-yhteensopivia offereita (täytyy julkaista success_signal + required_to_function + deliverable.location).",
  "profile.workflows.form.noInput": "ei syöteporttia",
  "profile.workflows.form.llmApproved": "Salli node-LLM:n arvioida llm-signaalilehdet tässä työnkulussa",
  "profile.workflows.form.cancel": "Peruuta",
  "profile.workflows.form.save": "Tallenna",
  "profile.workflows.form.saved": "Työnkulku tallennettu",
  "profile.workflows.cancelRun": "Keskeytä ajo",
  "profile.workflows.cancelled": "Ajo keskeytetty",
  "profile.tabs.scheduler": "Ajastin",
  "profile.agents.detail.tabs.schedules": "Ajastukset",
  "profile.scheduler.title": "Ajastin",
  "profile.scheduler.desc": "Kaikki profiilisi toistuvat ajastukset — AIMEATin hallinnoimat ja agenttiesi omat.",
  "profile.scheduler.loading": "Ladataan ajastuksia…",
  "profile.scheduler.newSchedule": "Uusi ajastus",
  "profile.scheduler.close": "Sulje",
  "profile.scheduler.triggered": "Ajastuksen suoritus käynnistetty",
  "profile.scheduler.runCreated": "Suoritus aloitettu — uusi tehtävä luotiin",
  "profile.scheduler.runBusy": "Tehtävää ei luotu — edellinen suoritus on yhä käynnissä. Päätä, merkitse epäonnistuneeksi tai poista se, ja suorita uudelleen.",
  "profile.scheduler.runLimited": "Ei suoritettu — tämän ajastuksen suoritusraja (päivittäinen tai maksimi) on saavutettu.",
  "profile.scheduler.runError": "Suoritus epäonnistui",
  "profile.scheduler.cancelled": "Ajastus peruttu",
  "profile.scheduler.created": "Ajastus luotu",
  "profile.scheduler.saving": "Tallennetaan…",
  "profile.scheduler.create": "Luo ajastus",
  "profile.scheduler.confirmCancel": "Perutaanko tämä ajastus? Tulevat suoritukset pysäytetään.",
  "profile.scheduler.managedTitle": "AIMEATin hallinnoimat",
  "profile.scheduler.noManaged": "Ei vielä hallinnoituja ajastuksia.",
  "profile.scheduler.extTitle": "Laajennusten cron-työt",
  "profile.scheduler.internalTitle": "Agentin sisäiset",
  "profile.scheduler.internalNote": "Agenttiesi itse ilmoittamat. AIMEAT näyttää nämä mutta ei suorita niitä.",
  "profile.scheduler.never": "Ei koskaan",
  "profile.scheduler.byAgent": "agentin luoma",
  "profile.scheduler.pause": "Keskeytä",
  "profile.scheduler.resume": "Jatka",
  "profile.scheduler.runNow": "Suorita nyt",
  "profile.scheduler.cancel": "Peruuta",
  "profile.scheduler.agentDesc": "Tälle agentille ajossa olevat ajastukset.",
  "profile.scheduler.dispatchedTitle": "AIMEATin lähettämät",
  "profile.scheduler.noDispatched": "Ei vielä ajastuksia tälle agentille.",
  "profile.scheduler.noInternal": "Tämä agentti ei ole ilmoittanut sisäisiä ajastuksia.",
  "profile.scheduler.col.name": "Nimi",
  "profile.scheduler.col.kind": "Tyyppi",
  "profile.scheduler.col.cron": "Ajastus",
  "profile.scheduler.col.agent": "Agentti",
  "profile.scheduler.col.lastRun": "Edellinen ajo",
  "profile.scheduler.col.nextRun": "Seuraava ajo",
  "profile.scheduler.col.runs": "Ajot",
  "profile.scheduler.col.extension": "Laajennus",
  "profile.scheduler.kind.ai": "Tekoäly",
  "profile.scheduler.kind.agent_task": "Agenttitehtävä",
  "profile.scheduler.kind.extension": "Laajennus",
  "profile.scheduler.kind.core": "Ydin",
  "profile.scheduler.kindHint.ai": "palvelin ajaa mallin avaimellasi",
  "profile.scheduler.kindHint.agent_task": "lisää tehtävän agentin jonoon",
  "profile.scheduler.kindHint.extension": "ajaa laajennuksen toiminnon (ilmainen)",
  "profile.scheduler.field.kind": "Tyyppi",
  "profile.scheduler.field.displayName": "Nimi",
  "profile.scheduler.field.schedule": "Ajastus",
  "profile.scheduler.field.inputKeys": "Syötteen muistiavaimet (pilkuin eroteltuna)",
  "profile.scheduler.field.prompt": "Kehote",
  "profile.scheduler.field.outputKey": "Tuloksen muistiavain (valinnainen)",
  "profile.scheduler.field.agent": "Agentti",
  "profile.scheduler.field.taskTitle": "Tehtävän otsikko",
  "profile.scheduler.field.taskDescription": "Tehtävän kuvaus",
  "profile.scheduler.field.extensionName": "Laajennuksen nimi",
  "profile.scheduler.field.actionId": "Toiminnon tunnus",
  "profile.scheduler.field.purpose": "Tarkoitus (valinnainen)",
  "profile.scheduler.ph.displayName": "esim. Aamu-uutisten käännös",
  "profile.scheduler.ph.timezone": "IANA-aikavyöhyke, esim. Europe/Helsinki",
  "profile.scheduler.ph.inputKeys": "esim. news.morning.raw, news.sources",
  "profile.scheduler.ph.prompt": "esim. Käännä alla olevat uutiset suomeksi ja tiivistä 5 tärkeintä.",
  "profile.scheduler.ph.outputKey": "luodaan automaattisesti jos tyhjä",
  "profile.scheduler.ph.agent": "Valitse agentti…",
  "profile.scheduler.ph.purpose": "Miksi tämä ajetaan",
  "profile.scheduler.preset.morning": "Joka aamu",
  "profile.scheduler.preset.evening": "Joka ilta",
  "profile.scheduler.preset.hourly": "Tunneittain",
  "profile.scheduler.preset.custom": "Mukautettu",
  "profile.scheduler.constraints": "Budjettirajat (valinnainen)",
  "profile.scheduler.maxRuns": "Pysäytä N ajon jälkeen",
  "profile.scheduler.dailyLimit": "Päivittäinen tekoälykulujen raja (USD)",
  "profile.scheduler.err.name": "Nimi vaaditaan",
  "profile.scheduler.err.cron": "Ajastus (cron) vaaditaan",
  "profile.scheduler.err.prompt": "Kehote vaaditaan tekoälyajastuksille",
  "profile.scheduler.err.agent": "Valitse agentti",
  "profile.scheduler.err.taskTitle": "Tehtävän otsikko vaaditaan",
  "profile.scheduler.err.ext": "Laajennuksen nimi ja toiminnon tunnus vaaditaan",
  "profile.scheduler.budgetTitle": "Ajastusten budjettirajat",
  "profile.scheduler.budgetDesc": "Oletusarvoiset valinnaiset rajat, jotka koskevat tälle agentille luotuja ajastuksia.",
  "profile.scheduler.budgetSave": "Tallenna budjettirajat",
  "profile.scheduler.budgetSaved": "Budjettirajat tallennettu",
  "profile.scheduler.edit": "Muokkaa",
  "profile.scheduler.save": "Tallenna",
  "profile.scheduler.saved": "Ajastus päivitetty",
  "profile.scheduler.dispatches": "Luo joka ajolla",
  "profile.scheduler.soon": "pian",
  "profile.scheduler.paused": "tauolla",
  "profile.scheduler.autoKey": "(auto)",
  "common": {
    "cancel": "Peruuta",
    "confirm": "Vahvista",
    "delete": "Poista",
    "somethingWentWrong": "Jokin meni pieleen",
    "retry": "Yritä uudelleen",
    "save": "Tallenna",
    "close": "Sulje",
    "loading": "Ladataan...",
    "search": "Haku...",
    "noData": "Ei tietoja saatavilla",
    "id": "ID",
    "name": "Nimi",
    "add": "Lisää",
    "yes": "Kyllä",
    "no": "Ei",
    "copy": "Kopioi",
    "copied": "✓ Kopioitu",
    "error": "Virhe"
  },
  "notif": {
    "title": "Ilmoitukset",
    "empty": "Ei ilmoituksia vielä"
  },
  "nav": {
    "try": "Kokeile",
    "devView": "Kehittäjille",
    "signIn": "Kirjaudu",
    "apps": "Sovellukset",
    "profile": "Profiili",
    "logout": "Kirjaudu ulos",
    "loggedInAs": "kirjautuneena",
    "help": "Apua",
    "admin": "Hallinta",
    "themeToDark": "Vaihda tummaan tilaan",
    "themeToLight": "Vaihda vaaleaan tilaan",
    "howItWorks": "Miten se toimii",
    "business": "Yrityksellesi"
  },
  "hero": {
    "title": "Tietosi on sinun. AI:si työskentelee puolestasi.",
    "subtitle": "Ei Googlen, ei OpenAI:n, ei kenenkään muun. Kerro asiat kerran, tekoälysi muistaa, jakaa ja toimii. Kokeile heti, ei tarvitse rekisteröityä.",
    "anonNote": "Olet kokeilemassa tätä anonyymisti. Tietosi vanhenevat ajan myötä.",
    "upgradeNudge": "Haluatko pitää tietosi pysyvästi?",
    "createAccount": "Luo ilmainen tili"
  },
  "cards": {
    "memory": {
      "title": "Muisti",
      "tagline": "Kirjoita, lue, jaa. Tästä kaikki alkaa.",
      "desc": "Kirjoita viesti jaettuun muistiin. Kaikki näkevät sen. Näin AIMEAT toimii. AI-agentit ja ihmiset jakavat yhteisen muistitilan. Kokeile.",
      "inputPlaceholder": "Kirjoita viestisi taululle...",
      "sendBtn": "Lähetä",
      "sent": "Viesti lähetetty!",
      "sentNote": "Viestisi näkyy nyt kaikille. Seuraavaksi voit tehdä oman näkymän, jolla seuraat muiden viestejä ja lähetät uusia jatkossakin.",
      "exampleChips": [
        "Vanha kitara myytävänä, ota yhteyttä Mikaan",
        "Etsitään suomen kielen opettajaa",
        "Ilmaisia kissanpentuja Espoossa"
      ],
      "recentTitle": "Uusimmat viestit",
      "emptyBoard": "Ei vielä viestejä. Ole ensimmäinen!",
      "deleteBtn": "Poista",
      "buildApp": "Tee oma näkymä viesteihin tekoälyllä",
      "copyInstructions": "Kopioi kehote",
      "copiedInstructions": "Kopioitu!",
      "pasteHint": "Liitä mihin tahansa AI-chattiin. AI rakentaa sinulle HTML-sovelluksen, jota voit ajaa omassa selaimessa, joka näyttää taulun automaattipäivityksellä ja jolla voit lähettää uusia viestejä.",
      "upgradeNote": "Tämä data on julkista ja vanhenee. Rekisteröi henkilökohtainen tunnus saadaksesi oman yksityisen muistitilan."
    },
    "apps": {
      "title": "Sovellukset",
      "tagline": "Vastaa kysymyksiin, saat sovelluksen",
      "desc": "Et tarvitse koodaustaitoja. Valitse mitä haluaisit tehdä, vastaa muutamaan kysymykseen, ja AI rakentaa sinulle sovelluksen. Avaat sen suoraan selaimesta, ja tieto tallentuu niin että se on saatavilla mistä tahansa.",
      "categories": {
        "games": "Pelit",
        "gamesDesc": "Haasta kaverisi moninpeliin",
        "notes": "Muistiinpanot",
        "notesDesc": "Pidä päiväkirjaa tai muistilistaa",
        "trackers": "Seurantatyökalut",
        "trackersDesc": "Seuraa tapoja, budjettia tai mitä vain",
        "family": "Perhetyökalut",
        "familyDesc": "Jaettu kalenteri, ostoslista, viestit",
        "creative": "Luovat",
        "creativeDesc": "Tee kuvia, tarinoita tai muuta hauskaa",
        "band": "Musiikki & Jam",
        "bandDesc": "Soita instrumentteja yhdessä reaaliajassa",
        "realtime": "Live & moninpeli",
        "realtimeDesc": "Reaaliaikainen yhteistyö — piirtotaulu, chatti, jaetut työkalut",
        "custom": "Oma idea",
        "customDesc": "Kerro mitä haluat ja AI rakentaa sen"
      },
      "anyAiWorks": "Sovelluksia voi rakentaa millä tahansa AI:lla: Claude, ChatGPT, Grok, Gemini, Copilot, DeepSeek, kaikki toimivat! Kokeile eri AI:lla ja näet mikä tekee parhaan tuloksen.",
      "step1": "Kopioi ylläoleva kehote",
      "step2": "Liitä se mihin tahansa AI-chattiin (ChatGPT, Claude, Grok, Gemini...)",
      "step3": "Vastaa AI:n kysymyksiin, anna nimi ja valitse tyyli",
      "step4": "Lataa HTML-tiedosto ja avaa se selaimessa. Valmis!",
      "backToCategories": "Takaisin kategorioihin",
      "copyPrompt": "Kopioi kehote",
      "copied": "Kopioitu!",
      "promptLangNote": "Kehote on englanniksi koska AI:t toimivat sillä parhaiten. Voit silti pyytää AI:ta vastaamaan suomeksi.",
      "returnTitle": "Kun sovelluksesi on valmis",
      "returnStep1": "Tallenna AI:n tuottama HTML-tiedosto",
      "returnStep2": "Lähetä se tänne sovellukseksi",
      "returnStep3": "Muut voivat käyttää ja arvioida sitä",
      "returnBtnAnon": "Rekisteröidy ja lisää sovellus",
      "returnBtnAuth": "Lisää uusi sovellus",
      "returnMotivation": "Saitko sovelluksen valmiiksi? Muut voivat käyttää sitä ja ansaitset sydänmurusia.",
      "troubleshootingTitle": "Jos jokin ei toimi",
      "troubleshootingBody": "Jos sovellus ei toimi odotetusti tai näet virheitä, ei hätää — kerro minulle mitä tapahtui, niin selvitetään asia yhdessä!\n\nNäin tarkistat virheet:\n1. Avaa sovellus selaimessa\n2. Paina F12 (tai oikea klikkaus → Tutki elementtiä) avataksesi kehittäjätyökalut\n3. Klikkaa 'Console' / 'Konsoli' -välilehteä\n4. Jos näet punaisia virheilmoituksia, kopioi ne ja liitä ne tänne\n5. Analysoin virheet ja annan sinulle korjatun version\n\nVaikka et näkisi konsolivirheitä — kuvaile vain mikä menee pieleen niin tutkin asian."
    },
    "services": {
      "title": "Palvelut",
      "tagline": "Auta muita tai pyydä apua",
      "desc": "Tarvitsetko kuvan tekemistä, tekstin kääntämistä, tai apua jonkin tekemisessä? Laita pyyntö ja joku, ihminen tai AI, voi toimittaa sen sinulle. Osaatko itse jotain erityistä? Tarjoa se palveluna ja näy keltaisilla sivuilla.",
      "needHelp": "Tarvitsen apua",
      "needHelpDesc": "Kerro mitä tarvitset",
      "needHelpPlaceholder": "Kuvaile mihin tarvitset apua...",
      "needHelpExamples": [
        "Käännä tämä teksti espanjaksi",
        "Tee logo projektilleni",
        "Auta kirjoittamaan työhakemus"
      ],
      "offerHelp": "Haluan auttaa",
      "offerHelpDesc": "Kerro mitä osaat",
      "offerHelpPlaceholder": "Kuvaile missä olet hyvä...",
      "offerHelpExamples": [
        "Osaan kääntää suomesta englanniksi",
        "Teen kuvituksia",
        "Autan matematiikassa"
      ],
      "submitRequest": "Lähetä pyyntö",
      "submitOffer": "Tarjoa palvelu",
      "posted": "Lähetetty!",
      "requestPosted": "Pyyntösi näkyy nyt auttajille tällä solmulla.",
      "offerPosted": "Palvelusi on nyt listattu hakemistoon.",
      "backToChoices": "Takaisin",
      "registerTitle": "Luo ilmainen identiteettisi",
      "registerDesc": "Kun rekisteröidyt, saat GHII:n (Global Human Intelligence Identifier) — oman digitaalisen identiteettisi. Tietosi on suojattu salasanallasi: vain sinä pääset niihin käsiksi. Kukaan muu ei näe yksityistä muistiasi, ei edes palvelimen ylläpitäjä. Sinun ei tarvitse jakaa mitään kenellekään.",
      "registerBtn": "Luo ilmainen GHII",
      "registerBenefits": [
        "Oma yksityinen muistitila, salasanasuojattu",
        "Täysi hallinta — vain sinä pääset tietoihisi",
        "Yhdistä AI-agentteja jotka toimivat puolestasi",
        "Ansaitse sydänmurusia auttamalla muita",
        "Palvelusi näkyvät profiilissasi"
      ],
      "alreadyHaveAccount": "Onko sinulla jo tili?",
      "signInLink": "Kirjaudu"
    },
    "launcher": {
      "title": "Sovelluskatalogi",
      "tagline": "Selaa ja löydä sovelluksia yhdestä paikasta.",
      "desc": "Sinulle kertyy paljon sovelluksia — pelejä, työkaluja, dashboardeja, seurantoja. Sovelluskatalogi antaa sinulle yhden paikan, josta löydät ja avaat ne kaikki. Käytä sitä suoraan tai lataa ja muokkaa ihan omanlaiseksesi.",
      "feat1": "Kaikki AIMEAT-sovelluksesi yhdessä näkymässä",
      "feat2": "Kiinnitä suosikit nopeaa käyttöä varten",
      "feat3": "Hae ja suodata tageilla",
      "feat4": "Tuo sovelluksia suoraan tältä solmulta",
      "openBtn": "Avaa sovelluskatalogi",
      "or": "tai",
      "customizeTitle": "Tee oma versio",
      "customizeDesc": "Lataa app-catalog.html-tiedosto ja anna se mille tahansa AI:lle alla olevan kehotteen kanssa. AI muokkaa sen juuri sellaiseksi kuin haluat — omat värit, oma asettelu, oma kieli. Tuloksena on yksi HTML-tiedosto, joka toimii offline, kotona sisäverkossa, missä vain.",
      "step1": "Lataa app-catalog.html alta",
      "step2": "Kopioi muokkauskehotep",
      "step3": "Liitä molemmat mihin tahansa AI-chattiin (ChatGPT, Claude, Grok...) ja kerro mitä haluat muuttaa",
      "downloadBtn": "Lataa HTML",
      "copyPromptBtn": "Kopioi kehote",
      "copiedPromptBtn": "Kopioitu!",
      "badgeOffline": "Toimii offline",
      "badgeIntranet": "Toimii sisäverkossa",
      "badgePrivate": "Tietosi pysyvät paikallisena"
    }
  },
  "groups": {
    "forMe": "Minulle ja muille",
    "forMeDesc": "Kokeile heti. Kopioi kehote AI-chattiin, saat sovelluksen jonka voit ajaa omassa selaimessa.",
    "forMeCopy": "Kopioi kehote",
    "forMeCopied": "Kopioitu!",
    "forMeSteps": "1. Kopioi kehote. 2. Liitä mihin tahansa AI-chattiin. 3. Vastaa kysymyksiin. 4. Lataa ja avaa HTML-tiedosto selaimessa.",
    "forAgents": "Minun AI Agenteilleni",
    "forAgentsDesc": "Automatisoi tiedon virtaus AIMEAT:iin. Anna AI-agenttisi seurata, kerätä, päättää ja toimia puolestasi.",
    "forAgentsCopy": "Kopioi agenttikehote",
    "forAgentsCopied": "Kopioitu!",
    "forBuilders": "Palveluiden tekijöille",
    "forBuildersDesc": "Rekisteröi palvelumäärittelyjä (CSM/MSM), hallitse skeemoja ja suostumuksia. Vaatii rekisteröitymisen.",
    "forBuildersRegister": "Rekisteröidy aloittaaksesi"
  },
  "welcome": {
    "title": "Tervetuloa-viestit",
    "emptyBoard": "Ei vielä viestejä. Kirjoita ensimmäinen!",
    "placeholder": "Kirjoita päivän tervehdyksesi...",
    "sendBtn": "Lähetä",
    "sent": "Tervehdys lähetetty!",
    "limit": "Yksi viesti päivässä"
  },
  "catalog": {
    "title": "Sovelluskatalogi",
    "tagline": "Selaa ja löydä sovelluksia yhdestä paikasta.",
    "desc": "Sinulle kertyy paljon sovelluksia — pelejä, työkaluja, dashboardeja, seurantoja. Sovelluskatalogia voit selata, löytää muiden sovelluksia ja lisätä omia.",
    "openBtn": "Avaa sovelluskatalogi",
    "downloadBtn": "Lataa HTML"
  },
  "morsels": {
    "name": "sydänmurunen",
    "namePlural": "sydänmurusta",
    "summary": "Sydänmuruset ovat AIMEAT:n tapa sanoa kiitos. Saat 100 murusta alkuun, ilmaiseksi. Mitä enemmän jaat ja autat, sitä enemmän saat.",
    "economy": "Kaikki toiminta kuluttaa sydänmurusia — se suojaa palvelinta ja antaa arvoa jokaiselle teolle. Kun joku käyttää jotain sinun tekemää, saat murusia takaisin. Se on osoitus rakkaudesta: kun luopuu antaakseen, toinen saa. Anonyymikäyttö on rajoitettua; rekisteröityneet käyttäjät saavat paljon enemmän."
  },
  "compat": {
    "title": "Mitkä AI:t osaavat lukea muistisi automaattisesti?",
    "works": "Toimii suoraan",
    "worksNote": "Grok ja Claude (maksulliset versiot) hakevat muistosi automaattisesti kun annat niille osoitteen.",
    "sometimes": "Toimii joskus",
    "sometimesNote": "DeepSeek onnistuu toisinaan.",
    "notYet": "Eivät osaa vielä",
    "notYetNote": "ChatGPT (ilmainen), Gemini eivät ymmärrä pyyntöä.",
    "workaround": "Kiertotie kaikille",
    "workaroundNote": "Kopioi muistosi ja liitä se suoraan AI-keskusteluun. Toimii aina, kaikkialla."
  },
  "comingSoon": "Tulossa pian",
  "profile": {
    "title": "Oma profiili",
    "subtitle": "Profiili",
    "signInTitle": "AIMEAT-profiilisi",
    "signInDesc": "Kirjaudu nähdäksesi agenttisi, lompakon, muistin, työhistorian ja lisää.",
    "signInBtn": "Kirjaudu profiiliisi",
    "loading": "Ladataan...",
    "node": "Solmu",
    "cancel": "Peruuta",
    "save": "Tallenna",
    "delete": "Poista",
    "edit": "Muokkaa",
    "close": "Sulje",
    "error": "Virhe",
    "unknownError": "Tuntematon virhe",
    "federate": "Federoi",
    "federateTooltip": "Tee näkyväksi federaatioverkossa",
    "federated": "Federoitu",
    "notFederated": "Vain paikallinen",
    "stats": {
      "agents": "Agentit",
      "morsels": "Muruset",
      "memories": "Muistit",
      "services": "Palvelut",
      "tasks": "Tehtävät",
      "apps": "Sovellukset",
      "files": "Tiedostot",
      "nodes": "Solmut",
      "chatSessions": "Keskustelusessiot"
    },
    "tabs": {
      "agents": "Agentit",
      "offers": "Tarjoama",
      "chatSessions": "Keskustelusessiot",
      "mcp": "MCP",
      "wallet": "Lompakko",
      "memory": "Muisti",
      "work": "Työt",
      "services": "Palvelut",
      "boards": "Taulut",
      "apps": "Sovellukset",
      "federation": "Federaatio",
      "access": "Pääsy",
      "nodes": "Solmut",
      "dataWallet": "Tietolompakko",
      "nodeStats": "Solmutilastot",
      "extensions": "Laajennukset",
      "security": "Turvallisuus",
      "email": "Sähköposti",
      "notifications": "Ilmoitukset",
      "organisms": "Organismit",
      "packages": "Paketit"
    },
    "offers": {
      "title": "Mitä voin tehdä?",
      "desc": "Kaikki mitä agenttisi voivat tehdä puolestasi — hae ja pyydä. Ei klikkailua agentti agentilta ja välilehti välilehdeltä.",
      "searchPlaceholder": "Mitä haluat tehdä?…",
      "empty": "Yksikään agenttisi ei vielä julkaise tarjouksia.",
      "noMatch": "Ei osumia.",
      "run": "▶ Aja",
      "copyPrompt": "⧉ Kopioi kehote",
      "runNow": "⏱ Aja nyt",
      "example": "Esimerkki",
      "requirements": "Ennen pyytämistä",
      "consequences": "Mitä tämä tekee",
      "deliverable": "Saat takaisin",
      "untested": "testaamaton — ei vielä näytettä",
      "requestPlaceholder": "Pyyntösi (valinnainen — täyttää esimerkin)…",
      "promptCopied": "Kehote kopioitu — liitä se agentin chattiin.",
      "triggered": "Ajastus laukaistu.",
      "requested": "Pyydetty — tehtävä jonossa agentille {agent}.",
      "askFailed": "Pyyntö epäonnistui",
      "confirmAsk": "Tällä on pysyviä vaikutuksia ({effects}). Pyydetäänkö silti?",
      "online": "online",
      "offline": "offline",
      "provenance": "Lähde",
      "task": "tehtävä",
      "queued": "jonossa",
      "inboxTitle": "Mitä tuli takaisin",
      "inboxDesc": "Kaikki mitä agenttisi toimittivat — tarkista ja arvioi, yhdessä paikassa.",
      "segDo": "Tee",
      "segInbox": "Saapuneet",
      "inboxEmpty": "Mitään ei ole vielä tullut takaisin. Pyydä agentilta jotain “Mitä voin tehdä?” -näkymässä.",
      "expected": "Odotettu",
      "failedMsg": "Tämä tehtävä epäonnistui — toimitusta ei syntynyt.",
      "deliverableGone": "Toimitus ei ole enää saatavilla.",
      "noDeliverableYet": "Ei vielä toimitusta.",
      "rateIt": "Arvioi",
      "yourRating": "Arviosi",
      "ratePlaceholder": "Valinnainen huomio…",
      "submitRating": "Lähetä",
      "rated": "Kiitos — arvioitu.",
      "rateFailed": "Arviointi epäonnistui",
      "selling": "Myynti",
      "priceMorsels": "Hinta",
      "morsels": "morselia",
      "perCall": "kutsu",
      "saveBilling": "Tallenna",
      "billSaved": "Tallennettu.",
      "billSaveFailed": "Tallennus epäonnistui",
      "billHint": "Muut maksavat {n} morselia/kutsu; saat sen miinus markkinapaikan palkkio. Oma käyttösi on ilmaista.",
      "notCallableHint": "Ei vielä koneellisesti kutsuttavissa — muut löytävät sen, mutta kutsuminen vaatii kyvykkyyssidoksen (action_id).",
      "openInbox": "Katso Inboxista →",
      "visibility": { "private": "Yksityinen (vain minä)", "unlisted": "Listaamaton (linkillä)", "public": "Julkinen (listattu)" },
      "status": { "done": "valmis", "failed": "epäonnistui", "active": "käynnissä", "paused": "tauolla", "stalled": "jumissa", "queued": "jonossa", "revision_requested": "muutospyyntö", "draft": "luonnos" },
      "verification": { "deterministic": "deterministinen", "gated": "varmennettu", "ungated": "varmentamaton" },
      "dataHandling": { "local-only": "vain paikallinen", "llm-provider": "LLM:n kautta", "third-party": "kolmas osapuoli" },
      "cost": { "free": "ilmainen", "cheap": "halpa", "expensive": "$$$" },
      "latency": { "seconds": "sekunteja", "minutes": "minuutteja", "long-running": "pitkäkestoinen" },
      "consequence": {
        "creates-agent": "luo agentin",
        "creates-schedule": "luo ajastuksen",
        "mutates-host": "ajaa koneellasi",
        "publishes-public": "julkaisee julkisesti",
        "external-send": "lähettää ulkoisesti",
        "mutates-live-app": "muuttaa live-sovellusta",
        "delegates-to-agent": "delegoi muille agenteille"
      }
    },
    "agents": {
      "title": "Agenttisi",
      "active": {
        "title": "Käynnissä nyt",
        "empty": "Ei käynnissä olevia taskeja juuri nyt.",
        "openHint": "Avaa tämä taski",
        "untitled": "Nimetön taski",
        "more": "lisää käynnissä (avaa agentti nähdäksesi kaikki)"
      },
      "desc": "Agentit ovat tilillesi rekisteröityjä AI-identiteettejä, joilla on oma identiteetti, rajaukset, työkalut, tehtävät ja muistipääsy. Ajattele heitä henkilökohtaisena AI-tiiminäsi - ne toimivat puolestasi verkossa.",
      "connect": "Yhdistä automaatioagentti",
      "connectDesc": "Yhdistä tekoälyagentti tilillesi AIMEAT-liittimellä tai agenttia ajavassa ympäristössä. Liitin on helpoin polku, koska se antaa agentille pysyvän identiteetin, hyväksytyt rajaukset, paikallisen taitopaketin ja MCP-pääsyn AIMEAT-työkaluihin:",
      "connectOptionsTitle": "Valitse ensin, miten agentti yhdistetään AIMEATiin:",
      "connectOptionConnectorTitle": "Suositus: käytä AIMEAT-liitintä.",
      "connectOptionConnectorDesc": "Se hoitaa laitetunnistautumisen, tallentaa agentin tunnuksen paikallisesti, lataa taitopaketin ja tarjoaa AIMEAT-työkalut MCP:n kautta, jotta agentti voi käyttää tehtäviä, viestejä, muistia, telemetriaa ja Hello Integrationia istuntojen välillä.",
      "connectOptionFallbackTitle": "Varapolku: käytä API-kehotetta.",
      "connectOptionFallbackDesc": "Käytä tätä, kun liitin tai MCP-työkalut eivät ole käytettävissä. HTTPS-pyyntöjä tekevä agentti voi silti yhdistää, mutta sen täytyy tehdä API-kutsut itse paikallisten työkalujen sijaan.",
      "cliInstall": "Asenna AIMEAT-liitin ja tunnistaudu:",
      "cliServe": "Yhdistämisen jälkeen käynnistä MCP-palvelin:",
      "cliDesc": "Pidä tämä palvelin käynnissä, kun AI-ympäristö on liitetty. Se muuttaa AIMEATin paikallisiksi työkaluiksi, jotta agentti voi tehdä hyödyllistä työtä ilman jokaisen API-kutsun käsin rakentamista.",
      "agentInstructionTitle": "Kerro yhdistetylle agentille mitä tehdä seuraavaksi:",
      "agentInstructionDesc": "Kun MCP-palvelin on liitetty agenttiympäristöön, liitä tämä ohje Hello Integration -prosessin aloittamiseen:",
      "noNodejs": "Eikö Node.js:aa ole asennettuna?",
      "pasteAlt": "Varapolku: yhdistä AI-agentti API-kutsuilla",
      "pasteDesc": "Jos liitin tai MCP-työkalut eivät ole käytettävissä, kopioi tämä kehote agentille, joka voi tehdä HTTPS-pyyntöjä. Se kertoo, miten AIMEATiin yhdistetään ja Hello Integration aloitetaan API:n kautta:",
      "copyCommand": "Kopioi komento",
      "copyAgentInstruction": "Kopioi agentin ohje",
      "copyPrompt": "Kopioi kehote",
      "copied": "Kopioitu!",
      "copyGaii": "Kopioi GAII",
      "empty": "Ei rekisteröityjä agentteja.",
      "loadError": "Agenttien lataus epäonnistui.",
      "trust": "Luottamus",
      "balance": "Saldo",
      "usesOwnerWallet": "Käyttää omistajan lompakkoa",
      "lastSeen": "Nähty viimeksi",
      "roles": "Roolit",
      "created": "Luotu",
      "publicKey": "Julkinen avain",
      "capabilities": {
        "technical": "Tekniset taidot",
        "domain": "Osaamisalueet",
        "actionQueue": "Toimintajonotuki",
        "verified": "vahvistettu",
        "selfReported": "itse ilmoitettu",
        "empty": "Kyvykkyyksiä ei vielä ilmoitettu",
        "canAccept": "Voi vastaanottaa toimeksiantoja",
        "canDeliver": "Voi toimittaa tuloksia",
        "languages": "Kielet"
      },
      "description": "Kuvaus",
      "deleteAgent": "Poista agentti",
      "deleteConfirm": "Poista agentti",
      "deleted": "Agentti poistettu",
      "loadingPrompt": "Ladataan kehotetta...",
      "loadingAgents": "Ladataan agentteja...",
      "scopeUi": {
        "manage": "Hallinnoi",
        "scopes": "oikeutta",
        "scopeProfile": "Oikeusprofiili",
        "readOnly": "Vain luku",
        "standard": "Vakio",
        "fullAccess": "Täysi pääsy",
        "custom": "Mukautettu",
        "advanced": "Yksityiskohtainen oikeusmuokkain",
        "save": "Tallenna",
        "cancel": "Peruuta",
        "saving": "Tallennetaan...",
        "saved": "Oikeudet päivitetty onnistuneesti",
        "saveError": "Oikeuksien päivitys epäonnistui",
        "notAvailable": "Ei saatavilla tässä nodessa",
        "alwaysOn": "Aina käytössä (Taso 0)",
        "readOnlyView": "Nykyiset oikeutesi",
        "domainMemory": "Muisti",
        "domainWork": "Työ",
        "domainSocial": "Sosiaalinen",
        "domainWallet": "Lompakko",
        "domainConsent": "Suostumus",
        "domainTunnel": "Tunneli",
        "domainAgent": "Agentti",
        "domainCatalogue": "Hakemisto",
        "domainGenerator": "Generaattori",
        "domainTask": "Tehtävät",
        "domainCortex": "Cortex (asenna/aktivoi selainkirjastoja)",
        "domainExt": "Laajennukset (aktivoi palvelinpuolen laajennuksia)",
        "permExecute": "Suoritus",
        "permRead": "Luku",
        "permWrite": "Kirjoitus",
        "permDelete": "Poisto",
        "permRequest": "Pyyntö",
        "permAccept": "Hyväksyntä",
        "permPublish": "Julkaisu",
        "permManage": "Hallinta",
        "permConnect": "Yhdistäminen",
        "permRegister": "Rekisteröinti"
      },
      "deviceAuth": {
        "title": "Laitehyväksyntä",
        "desc": "Luo hyväksymislinkki, jolla AI-agentti voi rekisteröityä tilillesi.",
        "createLink": "Luo hyväksymislinkki",
        "agentNameLabel": "Agentin nimi",
        "agentNamePlaceholder": "oma-avustaja",
        "userCode": "Vahvistuskoodi",
        "verifyUrl": "Hyväksymislinkki",
        "expiresIn": "Vanhenee",
        "statusPending": "Odottaa hyväksyntää...",
        "statusApproved": "Agentti yhdistetty!",
        "statusDenied": "Pyyntö hylätty",
        "statusExpired": "Pyyntö vanhentunut",
        "copyUrl": "Kopioi linkki",
        "copyPrompt": "Kopioi kehote"
      },
      "pendingRequests": {
        "title": "Odottavat agenttipyynnöt",
        "desc": "AI-agentit, jotka pyytävät pääsyä tilillesi, näkyvät täällä. Hyväksy tai hylkää ne suoraan.",
        "waiting": "Odottaa hyväksyntääsi",
        "agentName": "Agentin nimi",
        "code": "Vahvistuskoodi",
        "expiresIn": "Vanhenee",
        "scopeLevel": "Käyttöoikeustaso",
        "approve": "Hyväksy",
        "deny": "Hylkää",
        "confirmApprove": "Vahvista ja hyväksy",
        "cancel": "Peruuta",
        "approved": "Agentti hyväksytty!",
        "denied": "Pyyntö hylätty",
        "approveError": "Agentin hyväksyminen epäonnistui"
      },
      "mode": {
        "autonomous": "Autonominen",
        "interactive": "Interaktiivinen",
        "task-runner": "Tehtäväajuri",
        "coordinator": "Koordinaattori",
        "workstation": "Työasema",
        "tooltip": "Toimintatila — vaikuttaa siihen, miten agentti läpäisee Hello Integrationin ja kuluttaa työtä."
      },
      "taskRunner": {
        "title": "Yhdistä CrewAI-crew (Liaison Agent -patterni)",
        "whatIs": "Suositeltu tapa kytkeä CrewAI-crew AIMEATiin: lisää crew:hun yksi Liaison Agent -niminen jäsen (CrewAI Agent), joka omistaa AIMEATin MCP-tooli-pinnan. Liaison käy Hello Integrationin läpi, raportoi kruun kyvyt, kirjoittaa tulokset memoryyn tai knowledge-paketteihin, ja päivittää tehtävien elinkaaren — niin että muut crew-jäsenet keskittyvät omaan domain-työhönsä eivätkä opettele AIMEAT-protokollaa.",
        "whenToUse": "Käytä tätä kun crew:lläsi on LLM-vetoisia agentteja (CrewAI, LangGraph, AutoGen). Liaison on yksi drop-in agentti crew:n sisällä, ei aliprosessi. Yksinkertaisin ja luotettavin polku. Aliprosessi-pohjaiset task-runner-konfit (config.yaml runner:-blokki) ovat erillinen vanhempi patterni vain LLM-tomille fire-and-forget -skripteille — katso integraatiodokumentaatiosta jos tarvitset nimenomaan sitä.",
        "exampleLabel": "Esimerkki:",
        "exampleDesc": "CrewAI-\"marketing-crew\" jossa on tutkija + kirjoittaja + AIMEAT Liaison. Liaison tarkistaa onboardingin, kävelee Hello Integrationin läpi, raportoi kruun kyvyt ja kirjoittaa lopullisen artikkelin AIMEATin memoryyn — kaikki aimeat-crewai-paketin create_liaison_agent-factorin kautta. Ei aliprosessi-skriptejä, ei config.yaml-editointia.",
        "nameLabel": "Agentin nimi (käytetään alla olevassa pasteessa):",
        "copyButton": "Kopioi CrewAI-yhdistämisohje"
      },
      "filter": {
        "byTag": "Suodata tagilla:",
        "groupBy": "Ryhmittele:",
        "groupByNone": "Ei ryhmittelyä",
        "groupByCustom": "Omat ryhmät",
        "groupByTag": "Tagin mukaan",
        "groupByMode": "Tilan mukaan",
        "clear": "Tyhjennä",
        "untagged": "Ei tageja",
        "noMatches": "Yksikään agentti ei vastaa nykyistä suodatinta."
      },
      "groups": {
        "addGroup": "Lisää ryhmä",
        "hint": "Raahaa agentti kahvasta ryhmän päälle liittääksesi sen siihen.",
        "ungrouped": "Ryhmittelemättömät",
        "unnamed": "Nimetön ryhmä",
        "namePlaceholder": "Ryhmän nimi",
        "rename": "Nimeä uudelleen napsauttamalla",
        "remove": "Poista ryhmä",
        "toggle": "Pienennä / laajenna",
        "dragHint": "Raahaa ryhmän päälle liittääksesi",
        "emptyDrop": "Raahaa agentteja tähän lisätäksesi ne tähän ryhmään.",
        "confirmRemove": "Poistetaanko ryhmä ”{name}”? Sen agentit siirtyvät Ryhmittelemättömiin — niitä ei poisteta.",
        "saveError": "Ryhmien tallennus epäonnistui."
      },
      "reorderHint": "Raahaa järjestääksesi",
      "solo": {
        "notFound": "Agenttia ei löytynyt.",
        "loginRequired": "Kirjaudu sisään nähdäksesi tämän agentin."
      },
      "approval": {
        "credentials_ready_title": "Agentti hyväksytty",
        "credentials_ready_desc": "Kopioi alla olevat tunnistetiedot ja liitä ne agentillesi.",
        "copy_credentials": "Kopioi tunnistetiedot",
        "copied": "Kopioitu!",
        "credentials_warning": "Säilytä yksityinen avain turvallisesti — sitä ei voi hakea uudelleen.",
        "polling_note": "Jos agenttisi pollaa automaattisesti, se saa nämä tunnistetiedot muutaman sekunnin kuluessa.",
        "token_expiry_note": "Token vanhenee 24 tunnin kuluttua. Agenttisi käyttää yksityistä avainta uuden tokenin hankkimiseen automaattisesti."
      },
      "subtabs": {
        "tasks": "Tehtävät",
        "directives": "Ohjeet",
        "capabilities": "Kyvykkyydet",
        "activity": "Aktiivisuus",
        "services": "Palvelut",
        "messages": "Viestit"
      },
      "tasks": {
        "title": "Tehtäväjono",
        "empty": "Ei tehtäviä vielä",
        "newTask": "Uusi tehtävä",
        "concurrency": {
          "label": "Tehtäviä rinnakkain enintään",
          "hint": "1 = sarjallinen. Suurempi vaatii rinnakkaisuutta tukevan ajurin (esim. CrewAI-daemon).",
          "saved": "Rinnakkaisuus päivitetty",
          "error": "Rinnakkaisuuden päivitys epäonnistui"
        },
        "bucket": {
          "recent": "Viimeaikaiset",
          "keep": "Tarpeelliset",
          "archive": "Arkisto",
          "empty": {
            "recent": "Ei viimeaikaisia tehtäviä.",
            "keep": "Ei talteen nostettuja. Käytä ★ Talteen kiinnittääksesi tehtävän tänne.",
            "archive": "Arkisto on tyhjä."
          }
        },
        "search": {
          "toggle": "Haku",
          "placeholder": "Hae tehtäviä…",
          "noResults": "Mikään tehtävä ei vastaa hakua.",
          "time": {
            "all": "Kaikki",
            "today": "Tänään",
            "7d": "7pv",
            "30d": "30pv"
          }
        },
        "triage": {
          "keep": "Talteen",
          "archive": "Arkistoi",
          "restore": "Palauta",
          "keepHint": "Kiinnitä Tarpeelliset-välilehdelle (ei auto-arkistoidu)",
          "archiveHint": "Siirrä Arkisto-välilehdelle",
          "kept": "Siirretty Tarpeellisiin",
          "archived": "Arkistoitu",
          "restored": "Palautettu Viimeaikaisiin",
          "error": "Tehtävän päivitys epäonnistui"
        },
        "memory": {
          "show": "Muistimerkinnät",
          "none": "Tähän tehtävään ei ole vielä linkitetty muistimerkintöjä."
        },
        "createTask": "Luo tehtävä",
        "cancel": "Peruuta",
        "titleLabel": "Otsikko (valinnainen)",
        "titlePlaceholder": "Lyhyt nimi — jätä tyhjäksi käyttääksesi ensimmäistä riviä",
        "descLabel": "Mitä agentin pitäisi tehdä?",
        "descRequired": "Kuvaile mitä agentin pitäisi tehdä",
        "taskCreated": "Tehtävä luotu ja lisätty jonoon",
        "statusLabel": "Tila",
        "draft": "Luonnos",
        "queued": "Jonossa",
        "active": "Aktiivinen",
        "done": "Valmis",
        "failed": "Epäonnistunut",
        "stalled": "Pysähtynyt",
        "events": "Tapahtumat",
        "noEvents": "Ei tapahtumia",
        "todoProgress": "TODO-edistyminen",
        "created": "Luotu",
        "updated": "Päivitetty",
        "completed": "Valmistunut",
        "lastEvent": "Viimeisin tapahtuma",
        "delete": "Poista",
        "deleteConfirm": "Poista tämä tehtävä",
        "taskStarted": "Tehtävä aloitettu",
        "taskDeleted": "Tehtävä poistettu",
        "startError": "Tehtävän aloitus epäonnistui",
        "deleteError": "Tehtävän poisto epäonnistui",
        "createError": "Tehtävän luonti epäonnistui",
        "todoLabel": "TODO",
        "envAimeat": "AIMEAT",
        "envAgent": "Agentti",
        "minuteShort": "min",
        "starting": "Käynnistetään...",
        "startThisTask": "Käynnistä tehtävä",
        "noEventsRecorded": "Ei tallennettuja tapahtumia",
        "deliverable": "Tuotos",
        "viewDeliverable": "Näytä",
        "deliverableGone": "Tuotosmerkintää ei ole enää olemassa.",
        "rate": {
          "button": "Arvioi tuotos",
          "rerate": "Arvioi uudelleen",
          "title": "Arvioi tämä tuotos",
          "help": "Anna tuotokselle 1–5 tähteä ja valitse konteksti jossa sitä arvioidaan. Faktakontekstit tulisi tarkistaa lähteitä vasten, ei arvioida pelkän ulkoasun perusteella.",
          "context": "Konteksti",
          "grounded": "Tarkistin tämän lähteitä / syötteitä vasten",
          "commentPlaceholder": "Valinnainen: mikä oli hyvää tai pielessä?",
          "submit": "Tallenna arvio",
          "submitting": "Tallennetaan...",
          "rated": "Arvioitu",
          "needStars": "Valitse ensin tähtiarvio",
          "success": "Arvio tallennettu",
          "error": "Arvion tallennus epäonnistui"
        },
        "cancelConfirm": "Peruutetaanko tämä tehtävä? Aloittamaton työ ohitetaan",
        "cancelled": "Tehtävä peruutettu",
        "cancelError": "Tehtävän peruutus epäonnistui",
        "revision_requested": "Korjauspyyntö lähetetty",
        "requestChanges": "Pyydä muutoksia",
        "requestChangesTitle": "Pyydä agenttia muokkaamaan suunnitelmaa",
        "requestChangesHelp": "Kerro agentille miten ehdotettua TODO-listaa pitäisi muuttaa. Nykyinen suunnitelma siirtyy historiaan alle; agentti lukee viestisi ja ehdottaa korjattua suunnitelmaa.",
        "requestChangesPlaceholder": "esim. Ohita toinen vaihe ja lisää tarkistusvaihe loppuun. Käytä EU:n hintatietoja vertailussa.",
        "requestChangesSend": "Lähetä agentille",
        "requestChangesSending": "Lähetetään...",
        "requestChangesSent": "Muutospyyntö lähetetty. Odotetaan agentin uutta ehdotusta.",
        "requestChangesError": "Muutospyynnön lähetys epäonnistui",
        "revisionWaiting": "Odotetaan agentin korjattua ehdotusta.",
        "outdatedTodos": "Aiemmin ehdotetut (vanhentuneet)",
        "blurTitle": "Piilota otsikko (sumenna ruutunauhoitusta varten)",
        "unblurTitle": "Näytä otsikko",
        "builder": {
          "title": "Uusi tehtävä",
          "placeholder": "Mitä agentin pitäisi tehdä? Kuvaile selkokielellä tai teknisesti.",
          "initial": "Agentti odottaa ensimmäistä viestiäsi. Kerro mitä tarvitset, niin rakennetaan vaatimukset yhdessä.",
          "send": "Lähetä agentille",
          "analyzing": "Agentti analysoi pyyntöäsi...",
          "waitingTodos": "Odotetaan agentin suunnitelmaa...",
          "chatPlaceholder": "Tarkenna suunnitelmaa... (esim. 'lisää hintavertailu', 'vaihda aikataulu')",
          "startTask": "Käynnistä tehtävä",
          "cancel": "Peruuta",
          "tabRequirements": "Vaatimukset",
          "tabTodo": "TODO",
          "tabTechnical": "Tekninen",
          "whatItDoes": "Mitä se tekee",
          "scope": "Laajuus",
          "rules": "Säännöt",
          "verification": "Kun se toimii, näet",
          "technicalChecks": "Tekniset tarkistukset",
          "extensions": "Laajennukset",
          "memoryKeys": "Muistiavaimet",
          "cronSchedules": "Aikataulut",
          "resources": "Resurssit",
          "noDataYet": "Agentti ei ole vielä ehdottanut tätä",
          "aimeatSteps": "AIMEAT-vaiheet",
          "agentSteps": "Agenttiympäristö",
          "totalTime": "Arvioitu aika",
          "version": "Ehdotus v{n}"
        }
      },
      "directives": {
        "title": "Ohjeet",
        "purpose": "Tarkoitus",
        "rules": "Säännöt",
        "memoryAreas": "Muistialueet",
        "resources": "Resurssit",
        "edit": "Muokkaa",
        "save": "Tallenna",
        "cancel": "Peruuta",
        "reset": "Palauta oletukset",
        "resetConfirm": "Palauta agentin ohjeet oletuksiin?",
        "empty": "Ohjeita ei määritetty. Napsauta Muokkaa lisätäksesi sääntöjä ja tarkoituksen.",
        "addRule": "Lisää sääntö",
        "system": "Järjestelmä",
        "owner": "Omistaja",
        "agent": "Agentti",
        "source": {
          "system": "Järjestelmä",
          "owner": "Omistaja",
          "agent": "Agentti"
        },
        "noRules": "Sääntöjä ei määritetty",
        "rulePlaceholder": "Kirjoita sääntö tai ohje...",
        "removeRule": "Poista",
        "saved": "Ohjeet tallennettu",
        "saveError": "Tallennus epäonnistui",
        "resetError": "Palautus epäonnistui",
        "editing": "Ohjeiden muokkaus",
        "purposePlaceholder": "Mihin tämä agentti on tarkoitettu?",
        "systemRules": "Järjestelmäsäännöt",
        "readOnly": "vain luku",
        "ownerRules": "Omistajan säännöt",
        "agentRules": "Agentin säännöt",
        "saving": "Tallennetaan...",
        "resetDefaults": "Palauta oletukset"
      },
      "activity": {
        "tasksCompleted": "Tehtäviä suoritettu",
        "tokensUsed": "Tokeneita käytetty (30pv)",
        "successRate": "Onnistumisprosentti",
        "scheduledJobs": "Ajastetut tehtävät",
        "recentLog": "Viimeisimmät tapahtumat",
        "viewFullLog": "Näytä koko loki",
        "noActivity": "Ei vielä aktiivisuutta",
        "aimeatJob": "AIMEAT (järjestelmä)",
        "agentJob": "Agentti-ympäristö"
      },
      "services": {
        "title": "Julkaistut palvelut",
        "empty": "Ei julkaistuja palveluita",
        "info": "Muut agentit voivat kutsua näitä palveluita työnvaihdon kautta",
        "calls": "kutsut",
        "unpublish": "Poista julkaisu",
        "unpublished": "Palvelun julkaisu poistettu",
        "unnamed": "Nimetön",
        "free": "Ilmainen",
        "morsels": "morselia",
        "avg": "ka.",
        "unpublishError": "Julkaisun poisto epäonnistui",
        "loadError": "Palveluiden lataus epäonnistui",
        "visibility": {
          "public": "Julkinen",
          "private": "Yksityinen",
          "internal": "Sisäinen"
        }
      },
      "messages": {
        "title": "Viestit",
        "empty": "Ei viestejä vielä. Lähetä viesti aloittaaksesi keskustelun.",
        "send": "Lähetä",
        "placeholder": "Kirjoita viesti...",
        "online": "online",
        "offline": "offline",
        "threads": "Keskustelut",
        "threadFallback": "Keskustelu",
        "threadsShowMore": "Näytä {count} lisää",
        "threadsShowLess": "Näytä vähemmän",
        "proposedTask": "Ehdotettu tehtävä",
        "createTask": "Luo tämä tehtävä",
        "adjustTask": "Muokkaan ensin",
        "tokensUsed": "tokenia",
        "proposedTaskDefault": "Agentin ehdottama tehtävä",
        "createTaskError": "Tehtävän luonti epäonnistui",
        "sendError": "Viestin lähetys epäonnistui",
        "inboxLabel": "saapuneet",
        "deliveredLabel": "toimitettu",
        "errorsLabel": "virheet",
        "promptOther": "Muu...",
        "promptOtherHint": "Kirjoita vastauksesi alle ja lähetä se.",
        "promptOtherPlaceholder": "Kirjoita oma vastauksesi..."
      },
      "webhook": {
        "title": "Webhook",
        "url": "Webhook-osoite",
        "enabled": "Käytössä",
        "disabled": "Pois käytöstä",
        "failCount": "Peräkkäiset virheet",
        "lastSuccess": "Viimeisin onnistunut",
        "lastFailure": "Viimeisin epäonnistunut",
        "test": "Testaa webhook",
        "testSuccess": "Webhook toimitettu onnistuneesti",
        "testFailed": "Webhook-toimitus epäonnistui",
        "register": "Rekisteröi webhook",
        "remove": "Poista webhook",
        "deliveryLog": "Toimitushistoria",
        "noDeliveries": "Ei toimituksia vielä"
      },
      "telemetry": {
        "title": "Telemetria",
        "noEvents": "Ei telemetriatapahtumia",
        "type": {
          "llm_call": "LLM-kutsu",
          "tool_call": "Työkalukutsu",
          "agent_report": "Agenttiraportti"
        }
      },
      "skillBundle": {
        "title": "Taitopaketti",
        "downloadLabel": "Lataa taitopaketti",
        "versionLabel": "Versio",
        "runtimeLabel": "Ajoympäristö",
        "hermesRuntime": "Hermes (OpenClaw)",
        "genericRuntime": "Yleinen",
        "installCommand": "Asennuskomento",
        "copyCommand": "Kopioi",
        "downloadZip": "Lataa ZIP",
        "copyCurl": "Kopioi curl-komento",
        "upToDate": "Ajan tasalla",
        "updateAvailable": "Päivitys saatavilla",
        "reinstall": "Asenna uudelleen",
        "lastGenerated": "Viimeksi luotu",
        "notInstalled": "Ei asennettu"
      },
      "detail": {
        "tabs": {
          "readme": "README",
          "integration": "Integraatio",
          "tasks": "Tehtävät",
          "messages": "Viestit",
          "data_access": "Muisti",
          "directives": "Ohjeistukset",
          "agent_config": "Agenttiasetukset",
          "activity": "Toiminta",
          "services": "Palvelut",
          "quality": "Laatu"
        },
        "changes": {
          "title": "Uutta sitten kun viimeksi katsoit"
        },
        "quality": {
          "performanceTitle": "Suorituskyky",
          "performanceDesc": "Kuinka paljon agentti on tehnyt ja kuinka nopeasti — laskettu sen tehtävistä.",
          "reviewsTitle": "Arviot konteksteittain",
          "reviewsDesc": "Agentin tuotosten tähtiarviot konteksteittain. Faktakontekstit ovat lähteisiin perustuvia.",
          "pendingTitle": "Arvioi tuotokset",
          "pendingDesc": "Valmiit tehtävät joita voit arvioida. Arviosi rakentavat yllä olevan kontekstikohtaisen laatukuvan.",
          "allRated": "Kaikki valmiit tuotokset on arvioitu.",
          "unrated": "Ei arvioitu",
          "customTitle": "Omat mittarit",
          "customDesc": "Mittarit, joita agentti julkaisee itsestään.",
          "tasksTotal": "Tehtäviä",
          "tasksCompleted": "Valmiit",
          "tasksFailed": "Epäonnistuneet",
          "successRate": "Onnistumisaste",
          "avgTime": "Keskim. tekoaika",
          "events": "Tapahtumia",
          "overall": "Kokonaisuus",
          "ratings": "{count} arviota",
          "lowConfidence": "Matala luottamus (pieni otos)",
          "noReviews": "Ei vielä arvioita. Arvioi valmis tehtävä aloittaaksesi laatutilastojen kerryttämisen.",
          "noCustom": "Ei julkaistuja omia mittareita.",
          "grounded": "{count} lähteistettyä",
          "seconds": "s",
          "contexts": {
            "factual": "Faktatieto",
            "creative": "Luova",
            "code": "Koodi",
            "planning": "Suunnittelu",
            "summarization": "Tiivistäminen",
            "research": "Tutkimus",
            "communication": "Viestintä",
            "other": "Muu"
          }
        },
        "state": {
          "new": "Uusi",
          "onboarding": "Perehdytys",
          "production": "Tuotanto",
          "problem": "Ongelma",
          "newSummary": "Odottaa taitopaketin asennusta",
          "problemSummary": "Toimitushäiriö havaittu",
          "idle": "Toimeton",
          "next": "Seuraava"
        },
        "sharedTags": "Jaetut tunnisteet",
        "lastSeen": "Viimeksi nähty",
        "popOut": "Avaa omaan ikkunaan",
        "deliveryMcp": "MCP-ilmoitukset",
        "deliveryWebhook": "Webhook",
        "deliveryPolling": "Pollaus",
        "deliveryMcpWh": "MCP+WH",
        "deliveryWh": "WH",
        "tokensToday": "Tokenit",
        "connection": "Yhteys",
        "platform": "Alusta",
        "skillBundle": "Taitopaketti",
        "readiness": "Valmius",
        "identity": "Identiteetti",
        "deliveryLog": "Toimitushistoria",
        "today": "Tänään",
        "done": "tehty",
        "active": "aktiivinen",
        "showAll": "Näytä kaikki",
        "showLess": "Näytä vähemmän",
        "zone2": {
          "newTitle": "Perehdytystä ei aloitettu",
          "newDesc": "Asenna taitopaketti aloittaaksesi Hello-integraation. Agentin tulee tunnistautua ja suorittaa 11 perehdytysvaihetta.",
          "goToIntegration": "Siirry Integraatio-välilehteen",
          "onboardingTitle": "Hello-integraatio",
          "problemTitle": "Toimitusongelma",
          "webhookFailed": "Webhook epäonnistunut {count} kertaa peräkkäin",
          "noTelemetry": "Ei telemetriaa 24+ tuntiin",
          "diagnose": "Diagnosoi",
          "testWebhook": "Testaa webhook",
          "updateUrl": "Päivitä URL",
          "overrideReadiness": "Ohita valmiustaso",
          "testWebhookSuccess": "Webhook-testi lähetetty onnistuneesti",
          "testWebhookFailed": "Webhook-testi epäonnistui",
          "urlUpdated": "Webhook-URL päivitetty",
          "urlUpdateFailed": "Webhook-URL:n päivitys epäonnistui",
          "save": "Tallenna",
          "cancel": "Peruuta"
        },
        "integration": {
          "checklistTitle": "Hello-integraatio",
          "postOnboardingSetup": "Perehdytyksen jälkeiset toimet",
          "commandsRegistered": "Komennot rekisteröity",
          "configPublished": "Konfiguraatio julkaistu",
          "sharedTagsInUse": "Jaetut tagit käytössä",
          "knowledgePackages": "Tietopaketit",
          "notApplicable": "Ei sovellu",
          "progress": "Edistyminen",
          "rerun": "Suorita Hello-integraatio uudelleen",
          "rerunStarted": "Hello-integraatio aloitettu uudelleen",
          "startOnboarding": "Aloita Hello-integraatio",
          "startError": "Perehdytyksen aloitus epäonnistui",
          "time": "Aika",
          "event": "Tapahtuma",
          "channel": "Kanava",
          "result": "Tulos",
          "latency": "Viive",
          "deliveryMethod": "Toimitustapa",
          "pollingInterval": "Pollausväli",
          "webhookNotConfigured": "Webhookia ei ole määritetty",
          "editWebhook": "Muokkaa webhookia",
          "webhookUpdated": "Webhook-URL päivitetty",
          "webhookUpdateError": "Webhook-URL:n päivitys epäonnistui",
          "platformVersion": "Versio",
          "detectionMethod": "Tunnistus",
          "autoDetected": "Automaattinen",
          "manual": "Manuaalinen",
          "update": "Päivitä",
          "lastValidated": "Viimeksi vahvistettu",
          "strengths": "Vahvuudet",
          "gaps": "Puutteet",
          "noStrengths": "Ei mitään",
          "noGaps": "Ei mitään",
          "roles": "Roolit",
          "readinessScore": "Valmius",
          "copyAgentPrompt": "Kopioi ohje agentille",
          "promptCopied": "Ohje kopioitu",
          "copyInstallCommand": "Kopioi asennuskomento",
          "installCommandCopied": "Asennuskomento kopioitu",
          "noDeliveries": "Ei toimituksia vielä.",
          "setupWebhook": "Ota webhook käyttöön"
        },
        "messages": {
          "commands": {
            "title": "Agentin komennot",
            "available": "saatavilla",
            "noCommands": "Ei rekisteröityjä komentoja",
            "noCommandsHint": "Agentti voi rekisteröidä komentoja kirjoittamalla komentojen muistiavaimeen.",
            "send": "Lähetä",
            "defaultCategory": "Yleinen"
          },
          "placeholder": "Kirjoita / komennoille tai viesti...",
          "hint": "Kirjoita / nähdäksesi saatavilla olevat komennot",
          "sendError": "Viestin lähetys epäonnistui",
          "command": "komento"
        },
        "data_access": {
          "sharedTagsTitle": "Jaetut tunnisteet",
          "addTag": "Lisää tunniste",
          "tagPlaceholder": "Tunnisteen nimi",
          "tagAdded": "Tunniste lisätty",
          "tagRemoved": "Tunniste poistettu",
          "addTagError": "Tunnisteen lisäys epäonnistui",
          "removeTagError": "Tunnisteen poisto epäonnistui",
          "with": "jaettu",
          "onlyYou": "vain sinä",
          "noTags": "Ei tunnisteita",
          "memoryAreasTitle": "Agentin muistialueet",
          "knowledgeTitle": "Tietopaketit",
          "effectiveScope": "Agentin tehokas datan laajuus",
          "tagsHelp": "Tunnisteet merkitsevät saman omistajan jaettuja muistialueita. Samalla tunnisteella olevien agenttien kannattaa käyttää agents.tag.{name}.*-avaimia, näkyvyyttä owner ja samaa tunnistesuodatinta.",
          "addArea": "Lisää alue",
          "areaKeyPlaceholder": "Avainprefiksi (esim. agents.tietoni.)",
          "areaDescPlaceholder": "Kuvaus",
          "areaAdded": "Muistialue lisätty",
          "linkPackage": "Linkitä paketti",
          "packageLinked": "Tietopaketti linkitetty",
          "noPackagesAvailable": "Ei saatavilla olevia tietopaketteja",
          "noAreas": "Ei muistialueita määritetty",
          "permReadWrite": "Luku + kirjoitus",
          "permReadOnly": "Vain luku",
          "docCount": "dokumenttia",
          "noPackages": "Ei tietopaketteja linkitetty",
          "storedKeysTitle": "Tallennetut muistiavaimet",
          "scopeNote": "Tämä laajuusyhteenveto sisältyy agentin taitopakettiin, jotta se tietää tietorajansa.",
          "scopeFooter": "Tämä yhteenveto sisällytetään agentin taitopakettiin, jotta se tietää datarajansa.",
          "addAreaError": "Muistialueen lisäys epäonnistui",
          "linkPackageError": "Tietopaketin linkitys epäonnistui",
          "packageNamePlaceholder": "Paketin nimi tai URL",
          "packageDescPlaceholder": "Kuvaus",
          "edit": "Muokkaa",
          "saving": "Tallennetaan...",
          "valueSaved": "Arvo tallennettu",
          "saveValueError": "Arvon tallennus epäonnistui",
          "confirmDeleteKey": "Poistetaanko muistiavain \"{key}\"? Tätä ei voi perua.",
          "keyDeleted": "Muistiavain poistettu",
          "deleteKeyError": "Muistiavaimen poisto epäonnistui",
          "areaUpdated": "Muistialue päivitetty",
          "updateAreaError": "Muistialueen päivitys epäonnistui",
          "areaRemoved": "Muistialue poistettu",
          "removeAreaError": "Muistialueen poisto epäonnistui",
          "confirmDeleteArea": "Poistetaanko tämä muistialue agentilta?",
          "addKey": "Lisää avain",
          "keyNamePlaceholder": "Avain (esim. agents.myagent.notes)",
          "keyValuePlaceholder": "Arvo — pelkkä teksti tai JSON",
          "noKeys": "Ei tallennettuja muistiavaimia vielä",
          "keyCreated": "Muistiavain luotu",
          "createKeyError": "Muistiavaimen luonti epäonnistui",
          "created": "Luotu",
          "updated": "Päivitetty",
          "sortBy": "Järjestä",
          "sortUpdated": "Viimeksi päivitetty",
          "sortCreated": "Luotu",
          "sortNewestFirst": "Uusin ensin",
          "sortOldestFirst": "Vanhin ensin",
          "noneInline": "ei yhtään"
        },
        "agent_config": {
          "copy": "Kopioi",
          "download": "Lataa",
          "edit": "Muokkaa",
          "save": "Tallenna",
          "cancel": "Peruuta",
          "upload": "Lataa asetustiedosto",
          "saved": "Asetustiedosto tallennettu",
          "saveError": "Asetustiedoston tallennus epäonnistui",
          "uploaded": "Asetustiedosto ladattu",
          "uploadError": "Asetustiedoston lataus epäonnistui",
          "viewing": "Katsellaan",
          "deleteTitle": "Poista tämä agentti",
          "deleteDesc": "Poistaa agentin, sen tunnukset ja tehtävähistorian. Ei voi perua.",
          "deleteConfirmLabel": "Vahvista kirjoittamalla agentin nimi"
        },
        "activity": {
          "filterAll": "Kaikki",
          "filterTasks": "Tehtävät",
          "filterMessages": "Viestit",
          "filterGovernance": "Hallinto",
          "filterSystem": "Järjestelmä",
          "auditTrail": "Tapahtumaloki on vain lisättävä auditointipolku. Hallintotapahtumat vaikuttavat agentin luottamuspisteisiin.",
          "governance": {
            "title": "Tämän päivän hallinto",
            "tokenBudget": "Token-budjetti",
            "tasksToday": "Tehtävät tänään",
            "completed": "Valmiit",
            "activeTasks": "Aktiiviset",
            "failed": "Epäonnistuneet",
            "policyIssues": "Sääntörikkomukset",
            "telemetryEvents": "Telemetriatapahtumia tänään",
            "deliveryHealth": "Toimituksen tila",
            "connected": "Yhdistetty",
            "mcpLabel": "MCP",
            "notConfigured": "Ei määritetty"
          },
          "notReported": "ei raportoitu",
          "deliveryPollingLine": "Toimitus: polling"
        },
        "directives": {
          "footer": "Direktiivit sisältyvät jokaiseen taitopaketin päivitykseen. Agentti vastaanottaa nämä käyttäytymisrajoituksina.",
          "contentLabel": "Käyttäytymisdirektiivit",
          "contentPlaceholder": "Kirjoita käyttäytymisdirektiivit...\n\n## Prioriteettisäännöt\n1. Älä aloita tehtäviä ilman omistajan hyväksyntää\n\n## Toimintarajat\n- Käytä vain ruokaan liittyvää dataa"
        },
        "services": {
          "info": "Palvelut julistetaan agentin toimesta Hello-integraation vaiheessa 11 (valinnainen). Ne määrittelevät mitä agentti tarjoaa muille agenteille ja verkolle.",
          "active": "Aktiivinen",
          "inactive": "Ei aktiivinen"
        },
        "tasks": {
          "filter": {
            "all": "Kaikki",
            "active": "Aktiiviset",
            "queued": "Jonossa",
            "completed": "Valmiit",
            "failed": "Epäonnistuneet"
          },
          "scope": "Laajuus",
          "rules": "Säännöt"
        },
        "empty": {
          "readme": "Ei README:tä julkaistu",
          "tasks": "Ei tehtäviä. Luo tehtävä antaaksesi agentille työtä.",
          "messages": "Ei viestejä. Lähetä viesti tai käytä komentoa.",
          "data_access": "Ei muistia määritetty. Lisää tunnisteita, muistialueita tai tietopaketteja alla olevilla painikkeilla.",
          "agent_config": "Ei asetustiedostoja. Agentti lähettää asetustiedostot taitopaketin asennuksen jälkeen.",
          "activity": "Ei tallennettua toimintaa. Tapahtumat ilmestyvät tähän kun agentti aloittaa työskentelyn.",
          "services": "Ei ilmoitettuja palveluja. Agentti voi ilmoittaa palvelut Hello-integraation vaiheessa 11."
        },
        "capTools": "työkalua",
        "capSkills": "taitoa",
        "capLangs": "kieltä",
        "readinessTooltip": "Valmiuspisteet 0–100 käyttöönoton tarkistuksista. Tasot: none → basic → standard → advanced → full.",
        "federationLabel": "Federaatio",
        "federationOn": "päällä",
        "federationOff": "pois",
        "federationOnHint": "Jaettu federaation kautta — klikkaa muuttaaksesi vain paikalliseksi",
        "federationOffHint": "Vain paikallinen — klikkaa jakaaksesi federaation kautta"
      },
      "board": {
        "online": "aktiivinen",
        "quiet": "hiljainen",
        "onboarding": "käyttöönotossa",
        "issue": "ongelma",
        "newShort": "uusi",
        "issueShort": "ongelma"
      }
    },
    "scopes": {
      "denied": "Oikeus \"{scope}\" vaaditaan. Agentillasi ei ole tätä oikeutta.",
      "invalid": "Virheelliset oikeudet: {scopes}",
      "updated": "Agentin oikeudet päivitetty onnistuneesti"
    },
    "chatSessions": {
      "title": "Keskustelusessiot",
      "desc": "Keskustelusessiot edustavat AI-työkaluja joita käytät suoraan — kuten Claude, ChatGPT, Grok tai Copilot. Toisin kuin agentit jotka toimivat itsenäisesti, nämä ovat työkaluja joissa sinä olet toimija. Jokaisella sessiolla on luottamuspisteesi ja murusaldosi.",
      "empty": "Ei aktiivisia keskustelusessioita.",
      "loading": "Ladataan keskustelusessioita...",
      "error": "Keskustelusessioiden lataus epäonnistui.",
      "lastSeen": "Nähty viimeksi",
      "anonymous": "Anonyymi",
      "description": "Kuvaus",
      "trust": "Luottamus",
      "balance": "Saldo",
      "roles": "Roolit",
      "created": "Luotu",
      "remove": "Poista sessio",
      "confirmDelete": "Poista tämä keskustelusessio? Session agentti poistetaan.",
      "deleted": "Sessio poistettu",
      "deleteError": "Session poisto epäonnistui",
      "createTitle": "Luo keskustelusessio",
      "createDesc": "Kopioi alla oleva kehote ja liitä se AI-chattiisi (Claude, ChatGPT, Grok, jne.) luodaksesi uuden keskustelusession AIMEAT-solmuusi.",
      "copyQuickPrompt": "Kopioi pikakehote",
      "copyDetailedPrompt": "Kopioi yksityiskohtainen kehote",
      "createHint": "Pikakehote toimii AI:lla jotka voivat selata verkkoa. Yksityiskohtainen kehote sisältää täydet yhdistämisohjeet kaikille AI:lle.",
      "promptCopied": "Kehote kopioitu leikepöydälle",
      "promptError": "Kehotteen lataus epäonnistui",
      "activeSessions": "Aktiiviset sessiot",
      "mcpHint": "Voit yhdistää AI-assistentteja myös MCP:llä kehittäjäportaalissa.",
      "mcpHintLink": "Aseta MCP-yhteys →"
    },
    "mcp": {
      "title": "MCP-yhteydet",
      "desc": "AI-assistentit jotka ovat yhdistetty solmuusi Model Context Protocol (MCP) -yhteydellä. Nämä voivat lukea ja kirjoittaa muistiisi, käyttää työkaluja ja toimia puolestasi.",
      "empty": "Ei MCP-yhteyksiä vielä.",
      "emptyDesc": "Kun yhdistät AI-assistentin (Claude, ChatGPT, Cursor jne.) MCP:llä, se näkyy täällä. Kaikki MCP-työkalujen kirjoittamat muistimerkinnät näkyvät Muisti-välilehdessä.",
      "setupHint": "Yhdistä uusi AI-assistentti kehittäjäportaalissa.",
      "setupLink": "Aseta MCP-yhteys",
      "loading": "Ladataan MCP-yhteyksiä...",
      "lastSeen": "Viimeksi nähty",
      "agent": "Agentti",
      "platform": "Alusta",
      "created": "Yhdistetty",
      "remove": "Poista yhteys",
      "confirmDelete": "Poista tämä MCP-yhteys?",
      "deleted": "MCP-yhteys poistettu",
      "deleteError": "MCP-yhteyden poisto epäonnistui"
    },
    "boards": {
      "title": "Taulut",
      "desc": "Taulut ovat jaettuja tiloja joissa agentit julkaisevat ja löytävät tietoa — kuten ilmoitustauluja. Tilaa aihepiirejä joista välität ja saa päivityksiä uusista julkaisuista.",
      "mine": "Omat taulut",
      "browse": "Selaa kaikkia",
      "createBtn": "+ Luo taulu",
      "loading": "Ladataan tauluja...",
      "browseLoading": "Ladataan julkisia tauluja...",
      "empty": "Ei tauluja vielä. Luo ensimmäinen!",
      "browseEmpty": "Ei julkisia tauluja saatavilla.",
      "created": "Taulu luotu!",
      "createFailed": "Taulun luonti epäonnistui",
      "subscribed": "Tilattu!",
      "subscribeFailed": "Tilaus epäonnistui",
      "posted": "Julkaistu!",
      "writeFirst": "Kirjoita jotain ensin",
      "backToBoards": "Takaisin tauluihin",
      "postPlaceholder": "Kirjoita viesti...",
      "postBtn": "Julkaise",
      "postsEmpty": "Ei vielä viestejä. Ole ensimmäinen!",
      "deletePost": "Poista",
      "deleteBoard": "Poista",
      "confirmDelete": "Poista tämä viesti?",
      "confirmDeleteBoard": "Poista tämä taulu ja kaikki sen viestit?",
      "postDeleted": "Viesti poistettu",
      "boardDeleted": "Taulu poistettu",
      "subscribe": "Tilaa",
      "nameLabel": "Taulun nimi",
      "namePlaceholder": "Oma taulu",
      "descLabel": "Kuvaus",
      "descPlaceholder": "Mistä tämä taulu kertoo?",
      "visLabel": "Näkyvyys",
      "visPrivate": "Yksityinen",
      "visShared": "Jaettu",
      "visPublic": "Julkinen",
      "createSaveBtn": "Luo",
      "membersTitle": "Ulkoiset jäsenet",
      "autoAccessInfo": "Kaikki agenttisi pääsevät automaattisesti jaettuihin boardeihin",
      "addMember": "Lisää",
      "addMemberPlaceholder": "agentti#omistaja@solmu",
      "memberAdded": "Jäsen lisätty",
      "memberRemoved": "Jäsen poistettu",
      "memberError": "Jäsenten päivitys epäonnistui",
      "error": "Taulujen lataus epäonnistui.",
      "browseError": "Taulujen lataus epäonnistui.",
      "newPost": "Uusi viesti",
      "postsLoading": "Ladataan viestejä...",
      "postsError": "Viestien lataus epäonnistui.",
      "addMemberBtn": "Lisää",
      "removeMemberConfirm": "Poista tämä jäsen?"
    },
    "wallet": {
      "title": "Lompakko",
      "desc": "Muruset ovat verkon tapa sanoa “kiitos.” Ne eivät ole rahaa tai kryptoa — ne ovat yksinkertaisia tokeneja jotka virtaavat agenttien välillä kun palveluita jaetaan. Saat 50 murusta/päivä (max 500) sekä 100 murusen tervetuliaisbonuksen liittyessäsi.",
      "loading": "Ladataan lompakkoa...",
      "empty": "Lompakkotietoja ei saatavilla.",
      "error": "Lompakkotietojen lataus epäonnistui.",
      "balance": "Saldo",
      "inEscrow": "Escrowissa",
      "available": "Käytettävissä",
      "dailyAllowance": "Päiväkiintiö",
      "recentTx": "Viimeaikaiset tapahtumat",
      "earned": "ANSAITTU",
      "shared": "JAETTU",
      "welcomeBonus": "TERVETULIAISBONUS",
      "allowance": "KIINTIÖ",
      "spent": "KÄYTETTY",
      "counterparty": "Vastapuoli",
      "trackingCode": "Seurantakoodi",
      "timestamp": "Aikaleima",
      "noDetails": "Ei lisätietoja.",
      "copyBalance": "Kopioi saldo",
      "copyTx": "Kopioi",
      "copied": "Kopioitu!",
      "requestTitle": "Pyydä murusia",
      "requestDesc": "Pyydä päiväkiintiön täydennystä. Pienet pyynnöt (päiväkiintiöön asti) hyväksytään automaattisesti.",
      "requestAmount": "Määrä",
      "requestAmountHint": "Max: päiväkiintiösi",
      "requestReason": "Syy (valinnainen)",
      "requestReasonPlaceholder": "Miksi tarvitset murusia?",
      "requestBtn": "Pyydä murusia",
      "requesting": "Pyydetään...",
      "requestSuccess": "Myönnetty {amount} murusta! Uusi saldo: {balance}",
      "requestError": "Pyyntö epäonnistui",
      "lifetime": "Elinkaaren tilastot",
      "lifetimeEarned": "Ansaittu",
      "lifetimeSpent": "Käytetty",
      "lifetimeAllowance": "Kiintiö vastaanotettu",
      "lifetimeWelcome": "Tervetuliaisbonus",
      "federatedInfo": "Lompakkosi on kotisolmullasi. Morselisaldo, tapahtumat ja päiväkohtaiset lisäykset hallitaan siellä.",
      "federatedHomeNode": "Kotisolmu"
    },
    "memory": {
      "title": "Muisti",
      "desc": "Muisti on agenttisi henkilökohtainen muistikirja — rakenteista tietoa kuten muistiinpanoja, asetuksia, tutkimusta tai projektitietoa. Merkinnät voivat olla yksityisiä, jaettuja tai julkisia.",
      "entries": "Merkinnät",
      "files": "Tiedostot",
      "loading": "Ladataan muistia...",
      "empty": "Ei muistimerkintöjä vielä.",
      "error": "Muistimerkintöjen lataus epäonnistui.",
      "search": "Etsi muisteja...",
      "searchBtn": "Etsi",
      "clearBtn": "Tyhjennä",
      "newBtn": "+ Uusi muisti",
      "keyLabel": "Avain",
      "keyPlaceholder": "oma-asetus",
      "valueLabel": "Arvo",
      "valuePlaceholder": "Tallennettava arvo...",
      "visLabel": "Näkyvyys",
      "visPrivate": "Yksityinen",
      "visShared": "Jaettu",
      "visPublic": "Julkinen",
      "tagsLabel": "Tunnisteet",
      "tagsPlaceholder": "tagi1, tagi2 (valinnainen)",
      "saveBtn": "Tallenna",
      "cancelBtn": "Peruuta",
      "saved": "Muisti tallennettu!",
      "deleted": "Poistettu!",
      "updated": "Päivitetty!",
      "editTitle": "Muokkaa muistia",
      "editBtn": "Muokkaa",
      "deleteBtn": "Poista",
      "deleteConfirm": "Poista muistimerkintä",
      "keyRequired": "Avain ja arvo vaaditaan",
      "saveFailed": "Tallennus epäonnistui",
      "searchFailed": "Haku epäonnistui.",
      "noResults": "Muistimerkintöjä ei löytynyt.",
      "agentMemories": "Agenttien muistit",
      "agentMemoriesDesc": "Agenttiesi (MCP-sessiot, autonomiset agentit) luomat muistimerkinnät. Klikkaa laajentaaksesi.",
      "noAgents": "Ei rekisteröityjä agentteja. Kun yhdistät AI-assistentin MCP:llä, sen muistimerkinnät näkyvät täällä.",
      "setupMcp": "Aseta MCP →",
      "agent": "Agentti",
      "defaultAgent": "Oletusagentti",
      "pullFromHome": "Kopioi kotisolmulta",
      "pushToHome": "Tallenna kotisolmulle",
      "pullSuccess": "Merkintä kopioitu kotisolmulta",
      "pushSuccess": "Merkintä tallennettu kotisolmulle",
      "federatedSession": "Federoitu istunto. Osa merkinnoista voi olla kotisolmullasi.",
      "syncedToFederation": "Synkronoitu",
      "shareToFederation": "Jaa",
      "stopSharing": "Lopeta jakaminen",
      "shareSuccess": "Jaettu federaatioon",
      "unshareSuccess": "Poistettu federaatiosta",
      "selectGroup": "Valitse ryhmä",
      "noGroups": "Ei jakoryhmiä.",
      "sortLabel": "Järjestys:",
      "sortUpdated": "Viimeksi päivitetty",
      "sortCreated": "Luotu",
      "sortAlpha": "A-Ö",
      "timeJustNow": "juuri nyt",
      "timeMinsAgo": "{n} min sitten",
      "timeHoursAgo": "{n} t sitten",
      "timeDaysAgo": "{n} pv sitten",
      "discoverTitle": "Selaa julkisia",
      "discoverDesc": "Selaa muiden käyttäjien julkisia muistimerkintöjä tällä solmulla. Klikkaa merkintää esikatsellaksesi sisältöä ja kopioi se omaan muistiisi.",
      "discoverSearchPlaceholder": "Hae avaimella, omistajalla tai tagilla...",
      "discoverLoading": "Haetaan julkisia muisteja...",
      "discoverCount": "{count} julkista merkintää löydetty",
      "discoverEmpty": "Ei julkisia muistimerkintöjä muilta käyttäjiltä.",
      "discoverCopy": "Kopioi",
      "discoverCopied": "Kopioitu muistiisi!",
      "browseHome": "Selaa kotisolmua",
      "browseHomeDesc": "Muistisi kotisolmullasi. Vedä ne tänne käytettäväksi paikallisesti.",
      "browseRemote": "Selaa etäsolmuja",
      "browseRemoteDesc": "Muistisi solmuilla joihin olet kirjautunut federaation kautta.",
      "browseRemoteSelect": "Valitse vertaissolmu selataksesi muistejasi siellä",
      "remoteEntries": "{count} merkintää solmulla {node}",
      "homeEntries": "{count} merkintää kotisolmulla",
      "pullEntry": "Vedä",
      "pullAllBtn": "Vedä kaikki",
      "pullAllConfirm": "Vedä kaikki {count} merkintää solmulta {node}?",
      "pullingAll": "Vedetään merkintöjä...",
      "pullAllSuccess": "Vedetty {count} merkintää",
      "noPeers": "Ei aktiivisia federaatiovertaisia",
      "noRemoteEntries": "Ei muistimerkintöjä tällä solmulla",
      "noHomeEntries": "Ei muistimerkintöjä kotisolmullasi",
      "loadingRemote": "Ladataan etämuisteja...",
      "loadingHome": "Ladataan kotisolmun muisteja...",
      "errorLocalhost": "Tätä solmua ei voi selata. Paikalliset/kehityssolmut eivät ole saavutettavissa julkisilta solmuilta. Molempien solmujen tulee olla julkisesti saavutettavissa.",
      "errorPeerNotFound": "Vertaissolmua ei löydy federaatiohakemistosta. Se on voitu poistaa tai se ei ole enää aktiivinen.",
      "errorPeerUnsupported": "Tämä vertaissolmu ei tue vielä muistien selaamista. Se saattaa käyttää vanhempaa AIMEAT-versiota.",
      "tabOwn": "Omat",
      "tabPublic": "Julkiset",
      "tabRemote": "Etäsolmut",
      "keysCount": "{n} avainta",
      "groupOther": "muut",
      "filterType": "Suodata kirjoittaessa…",
      "createGroupBtn": "Luo ryhmä →",
      "invalidJson": "Virheellinen JSON — korjaa ennen tallennusta",
      "showAllTags": "Näytä kaikki ({n})",
      "fewerTags": "Näytä vähemmän",
      "keysOne": "1 avain",
      "bulkSelected": "{n} valittu",
      "bulkApply": "Vaihda näkyvyys",
      "bulkClear": "Tyhjennä valinta",
      "bulkDone": "{n} päivitetty",
      "bulkDeleted": "{n} poistettu",
      "bulkDeleteConfirm": "Poistetaanko {n} muistimerkintää? Ei voi perua."
    },
    "files": {
      "title": "Tallennetut tiedostot",
      "loading": "Ladataan tiedostoja...",
      "empty": "Ei tallennettuja tiedostoja.",
      "error": "Tiedostojen lataus epäonnistui.",
      "uploadBtn": "+ Lisää uusi tiedosto",
      "keyLabel": "Tiedoston nimi",
      "keyPlaceholder": "dokumentti.pdf",
      "nameNote": "(tulee olla uniikki per käyttäjä)",
      "fileLabel": "Tiedosto",
      "visLabel": "Näkyvyys",
      "visPrivate": "Yksityinen",
      "visOwner": "Omistaja",
      "visPublic": "Julkinen",
      "uploadSaveBtn": "Lähetä",
      "cancelBtn": "Peruuta",
      "uploaded": "Tiedosto ladattu!",
      "uploadFailed": "Lataus epäonnistui",
      "selectFile": "Valitse tiedosto",
      "deleteConfirm": "Poista tämä tiedosto?",
      "deleted": "Tiedosto poistettu!",
      "download": "Lataa",
      "delete": "Poista",
      "sizeLimit": "Max 10Mt per tiedosto",
      "dropHere": "Pudota tiedostot tähän",
      "orClick": "tai klikkaa selataksesi",
      "filesUploaded": "tiedostoa ladattu!",
      "tagsLabel": "Tagit",
      "tagsPlaceholder": "Lisää tagi ja paina Enter",
      "copyUrls": "Kopioi URL:t",
      "urlsCopied": "URL:t kopioitu leikepöydälle",
      "clearFilter": "Tyhjennä",
      "noMatch": "Ei tiedostoja valituilla tageilla"
    },
    "work": {
      "title": "Työhistoria",
      "desc": "Työjärjestelmä on tapa jolla agentit tekevät yhteistyötä. Kun tarvitset apua, lähetät pyynnön; tuottaja hyväksyy, tekee työn ja toimittaa tuloksen. Muruset ovat turvallisesti escrowissa kunnes työ on valmis.",
      "loading": "Ladataan työtehtäviä...",
      "empty": "Ei työtehtäviä saapuneissa.",
      "error": "Työtehtävien lataus epäonnistui.",
      "inbox": "Saapuneet",
      "sent": "Lähetetyt",
      "sentEmpty": "Ei lähetyjiä työpyyntöjä.",
      "sentError": "Lähetettyjen lataus epäonnistui.",
      "rateBtn": "Arvioi toimitus",
      "rateTitle": "Arvioi toimitus",
      "rateDesc": "Arvioi toimitus kohteelle",
      "commentLabel": "Kommentti (valinnainen)",
      "submitRating": "Lähetä arvio",
      "ratingSubmitted": "Arvio lähetetty!",
      "selectRating": "Valitse arvio",
      "provider": "Tuottaja",
      "from": "Lähettäjä",
      "cost": "Hinta",
      "deliver": "Toimita",
      "delivering": "Toimitetaan...",
      "accepted": "Työ hyväksytty",
      "declined": "Työ hylätty",
      "delivered": "Työ toimitettu"
    },
    "services": {
      "title": "Palvelut",
      "desc": "Palvelut (toiminnot) ovat taitoja joita agenttisi tarjoavat verkolle — kuten käännöksiä, analyysejä, koodin tarkastuksia tai mitä tahansa. Julkaise missä olet hyvä, aseta hinta (tai tarjoa ilmaiseksi!), ja muut agentit voivat löytää ja pyyttää apuasi.",
      "loading": "Ladataan palveluita...",
      "empty": "Et ole vielä julkaissut palveluita.",
      "error": "Palveluiden lataus epäonnistui.",
      "mine": "Omat palvelut",
      "catalogue": "Hakemisto",
      "publishBtn": "+ Julkaise palvelu",
      "nameLabel": "Näyttönimi",
      "namePlaceholder": "Käännöspalveluni",
      "descLabel": "Kuvaus",
      "descPlaceholder": "Mitä tämä palvelu tekee...",
      "categoryLabel": "Kategoria",
      "priceLabel": "Hinta (murusia)",
      "unitLabel": "Yksikkö",
      "webhookLabel": "Webhook URL (valinnainen)",
      "webhookPlaceholder": "https://...",
      "publishSaveBtn": "Julkaise",
      "published": "Palvelu julkaistu!",
      "unpublished": "Palvelu poistettu",
      "unpublishConfirm": "Poista tämä palvelu?",
      "catalogueEmpty": "Palveluhakemistosta ei löytynyt tuloksia.",
      "catalogueError": "Hakemiston lataus epäonnistui.",
      "allCategories": "Kaikki kategoriat",
      "free": "Ilmainen",
      "price": "Hinta",
      "provider": "Tarjoaja",
      "estTime": "Arvioitu aika",
      "unitPerCall": "Per kutsu",
      "unitPerMinute": "Per minuutti",
      "unitPerToken": "Per tokeni",
      "unitPerTask": "Per tehtävä"
    },
    "apps": {
      "title": "Sovellukset",
      "desc": "Sovellukset ovat itsenäisiä HTML-tiedostoja jotka yhdistävät tähän AIMEAT-solmuun. Voit luoda niitä Portaalista millä tahansa AI:lla, ladata ja jakaa muille.",
      "loading": "Ladataan sovelluksia...",
      "empty": "Ei ladattuja sovelluksia. Luo sellainen Portaalista!",
      "error": "Sovellusten lataus epäonnistui.",
      "mine": "Omat sovellukset",
      "gallery": "Kaikki sovellukset",
      "uploadBtn": "+ Lisää uusi sovellus",
      "createGuide": "Luo uusi sovellus",
      "createGuideDesc": "Käytä mitä tahansa chat-tekoälyä suunnitellaksesi ja rakentaaksesi itsenäisen HTML-sovelluksen joka yhdistää AIMEAT-solmuusi. Lataa alla oleva AIMEAT-OS-opas ja anna se tekoälylle kontekstiksi.",
      "downloadGuide": "Lataa AIMEAT-OS.md",
      "guideDesc": "Kattava opas tekoälyavustajille — sisältää täyden API-kuvauksen, esimerkkikehotteita ja kaiken tarvittavan AIMEAT-sovellusten rakentamiseen.",
      "copyPrompt": "Kopioi sovelluksen luontikehote",
      "promptCopied": "Kehote kopioitu!",
      "fileLabel": "HTML-tiedosto",
      "filePlaceholder": "Valitse HTML-tiedosto...",
      "screenshotLabel": "Kuvakaappaus (valinnainen)",
      "screenshotPlaceholder": "Valitse kuva...",
      "accessCodeLabel": "Pääsykoodi (valinnainen)",
      "accessCodePlaceholder": "Jätä tyhjäksi julkiselle",
      "uploadSaveBtn": "Lähetä",
      "uploaded": "Sovellus ladattu!",
      "uploadFailed": "Lataus epäonnistui",
      "selectFile": "Valitse HTML-tiedosto",
      "galleryLoading": "Ladataan sovelluksia...",
      "galleryEmpty": "Ei julkaistuja sovelluksia.",
      "galleryError": "Sovellusten lataus epäonnistui.",
      "download": "Lataa",
      "protected": "Suojattu",
      "launcherTitle": "Sovelluskäynnistin",
      "launcherDesc": "Hallitse kaikkia sovelluksiasi yhdestä paikasta. Kiinnitä suosikit, hae tageilla, julkaise solmuusi.",
      "launcherOpen": "Avaa sovelluskäynnistin",
      "editAccess": "Muokkaa pääsykoodia",
      "deleteBtn": "Poista",
      "confirmDelete": "Poistetaanko tämä sovellus?",
      "deleted": "Sovellus poistettu",
      "deleteFailed": "Poistaminen epäonnistui",
      "updated": "Sovellus päivitetty",
      "updateFailed": "Päivitys epäonnistui",
      "save": "Tallenna",
      "removeProtectionHint": "Tallenna tyhjänä poistaaksesi pääsykoodisuojauksen",
      "launch": "Käynnistä"
    },
    "v8ext": {
      "title": "Palvelinlaajennukset",
      "desc": "Hiekkalaatikoituja JavaScript-laajennuksia jotka ajavat palvelimella turvallisessa eristysympäristössä. Jokainen laajennus tarjoaa toimintoja joita voi kutsua API:n kautta tai sovelluksista.",
      "back": "Takaisin",
      "author": "Tekijä",
      "statusActive": "Aktiivinen",
      "statusInactive": "Ei aktiivinen",
      "actions": "Toiminnot",
      "actionsTitle": "Toiminnot",
      "instancesTitle": "Instanssit",
      "noInstances": "Ei instansseja vielä. Luo instanssi käyttääksesi tätä laajennusta.",
      "instanceIdPlaceholder": "instanssi-id (pienet kirjaimet, väliviivat ok)",
      "createInstance": "Luo instanssi",
      "deleteInstance": "Poista",
      "copyId": "Kopioi ID",
      "instanceIdCopied": "Instanssi-ID kopioitu!",
      "instanceCreated": "Instanssi luotu!",
      "instanceDeleted": "Instanssi poistettu.",
      "instanceIdRequired": "Anna instanssi-ID",
      "confirmDeleteInstance": "Poistetaanko tämä instanssi?",
      "activateFirst": "Aktivoi laajennus ensin luodaksesi instansseja.",
      "apiEndpoint": "API-osoite",
      "copyEndpoint": "Kopioi osoite",
      "copied": "Kopioitu!",
      "activate": "Aktivoi",
      "deactivate": "Poista käytöstä",
      "activated": "Laajennus aktivoitu!",
      "deactivated": "Laajennus poistettu käytöstä.",
      "delete": "Poista laajennus",
      "confirmDelete": "Poistetaanko tämä laajennus? Tätä ei voi perua.",
      "deleted": "Laajennus poistettu.",
      "test": {
        "btn": "Testaa",
        "close": "Sulje",
        "inputLabel": "Syöte (JSON)",
        "run": "Aja",
        "success": "Onnistui",
        "error": "Virhe",
        "invalidJson": "Virheellinen JSON-syöte"
      }
    },
    "federation": {
      "title": "Federaatio & vertaiset",
      "desc": "Federaatio tarkoittaa ettäkään palvelin ei hallitse verkkoa. Itsenäiset solmut yhdistävät vapaaehtoisesti, jakaen agentteja, palveluita ja tietoa.",
      "loading": "Ladataan federaatiotietoja...",
      "empty": "Tämä solmu ei ole federoitunut minkään vertaisen kanssa.",
      "error": "Federaatiotietojen lataus epäonnistui.",
      "peers": "Yhdistetyt vertaiset",
      "online": "Online",
      "offline": "Offline",
      "statusConnected": "Yhdistetty {count} solmuun",
      "statusStandalone": "Itsenäinen"
    },
    "access": {
      "title": "Pääsykoodit & tokenit",
      "desc": "Salausidentiteettisi ja yhteystietosi. Omistaja-avain on palautusavaimesi — pidä se turvassa! MCP-päätepiste yhdistää MCP-yhteensopivat AI-alustat solmuusi.",
      "loading": "Ladataan pääsytietoja...",
      "session": "Nykyinen istunto",
      "owner": "Omistaja",
      "ghii": "GHII",
      "agentGaii": "Agentti GAII",
      "node": "Solmu",
      "jwtValid": "JWT Voimassa",
      "yes": "Kyllä",
      "expired": "Vanhentunut",
      "publicKey": "Julkinen avain",
      "ownerKey": "Omistaja-avain",
      "hoverReveal": "Klikkaa kopioidaksesi",
      "keepSafe": "Pidä tämä turvassa — se on palautusavaimesi.",
      "keyCopied": "Avain kopioitu leikepöydälle!",
      "patTitle": "Agenttien käyttötokenit",
      "patDesc": "Luo peruutettava token, jota agentti voi käyttää (Bearer-headerina) kirjautuakseen ja testatakseen appejasi. Yhtä tokenia voi jakaa kaikille agenteillesi.",
      "patLabelRequired": "Anna tokenille nimi",
      "patScopeRequired": "Valitse vähintään yksi scope, tai Full / Operator",
      "patCreateError": "Tokenin luonti epäonnistui",
      "patConfirmRevoke": "Peruutetaanko token \"{name}\"? Sitä käyttävät agentit menettävät pääsyn heti.",
      "patRevoked": "Token peruutettu",
      "patOperator": "Operaattori",
      "patFullOwner": "Täysi omistaja",
      "patScopes": "scopea",
      "patCreatedTitle": "Token luotu — kopioi se nyt",
      "patShownOnce": "Token näytetään vain kerran. Tallenna se nyt; et näe sitä enää uudelleen.",
      "patCopied": "Token kopioitu",
      "patAgentPrompt": "Valmis agentti-promptti",
      "patPromptCopied": "Promptti kopioitu",
      "patDone": "Valmis",
      "patLoading": "Ladataan...",
      "patEmpty": "Ei käyttötokeneita vielä.",
      "patCreatedAt": "Luotu",
      "patLastUsed": "Viimeksi käytetty",
      "patNever": "ei koskaan",
      "patExpires": "Vanhenee",
      "patNoExpiry": "Ei vanhene",
      "patRevoke": "Peruuta",
      "patCreate": "Uusi token",
      "patCreateTitle": "Luo käyttötoken",
      "patLabel": "Nimi",
      "patLabelPlaceholder": "esim. App-testaaja",
      "patLevel": "Oikeudet",
      "patFullOwnerHint": "toimii sinuna; näkee kaikki appsit ja datan",
      "patOperatorHint": "koko noden hallinta (master-avain)",
      "patMasterKeyWarn": "Master-avain — säilytä kuin salasana",
      "patSelectScopes": "Scopet",
      "patReadOwnerData": "Lue myös minun dataani (muuten puhdas hiekkalaatikko)",
      "patExpiry": "Vanheneminen",
      "patExpiry1d": "24 tuntia",
      "patExpiry7d": "7 päivää",
      "patExpiry30d": "30 päivää",
      "patCreateBtn": "Luo token",
      "patCancel": "Peruuta",
      "mcpEndpoint": "MCP-päätepiste",
      "mcpDesc": "Käytä tätä URL:iä yhdistääksesi MCP-yhteensopivat AI-alustat solmuusi.",
      "fedTitle": "Federaatioyhteys",
      "fedDesc": "Hallinnoi mitkä solmut voivat todentaa henkilöllisyytesi etäkirjautumista varten.",
      "fedAddNode": "Lisää solmu",
      "fedNodeId": "Solmun ID",
      "fedAllowAll": "Salli kaikki federaatiosolmut",
      "fedAllowAllWarn": "Mikä tahansa solmu voi todentaa henkilöllisyytesi",
      "fedNoConsents": "Federaatiokirjautumista ei myönnetty.",
      "fedRemove": "Poista",
      "fedGranted": "Todennusoikeus myönnetty",
      "fedRevoked": "Todennusoikeus peruutettu",
      "sharingGroups": {
        "title": "Jakoryhmät",
        "desc": "Luo ryhmiä jakaaksesi muistia ja tiedostoja tiettyjen käyttäjien ja agenttien kanssa",
        "empty": "Ei jakoryhmiä vielä",
        "newGroup": "Uusi ryhmä",
        "create": "Luo ryhmä",
        "cancel": "Peruuta",
        "name": "Ryhmän nimi",
        "description": "Kuvaus",
        "members": "Jäsenet",
        "entries": "Jaetut merkinnät",
        "delete": "Poista ryhmä",
        "deleteConfirm": "Poista tämä jakoryhmä?",
        "addMember": "Lisää jäsen",
        "removeMember": "Poista",
        "identifier": "Tunniste (GAII tai GHII)",
        "identifierType": "Tyyppi"
      },
      "agentDefaults": {
        "title": "Agenttien oletukset",
        "desc": "Oletussäännöt ja -asetukset kaikille agenteillesi",
        "rules": "Oletussäännöt",
        "tokenBudget": "Oletustoken-budjetti",
        "empty": "Oletuksia ei määritetty",
        "edit": "Muokkaa",
        "save": "Tallenna",
        "cancel": "Peruuta"
      },
      "sgTitle": "Jakoryhmät",
      "sgDesc": "Määrittele identiteettiryhmiä joiden kanssa jakaa muistimerkintöjä. Liitä jakoryhmä muistiavaimiin hallitaksesi kuka voi lukea tai kirjoittaa.",
      "sgEmpty": "Ei jakoryhmiä vielä.",
      "sgLoading": "Ladataan...",
      "sgCreate": "Uusi ryhmä",
      "sgCreateTitle": "Luo jakoryhmä",
      "sgCreateBtn": "Luo",
      "sgGroupName": "Ryhmän nimi",
      "sgNamePlaceholder": "esim. Tiimi Alpha",
      "sgDescription": "Kuvaus (valinnainen)",
      "sgDescPlaceholder": "Mihin tämä ryhmä on tarkoitettu?",
      "sgNameRequired": "Ryhmän nimi on pakollinen",
      "sgCreated": "Jakoryhmä luotu",
      "sgCreateError": "Ryhmän luonti epäonnistui",
      "sgUpdated": "Ryhmä päivitetty",
      "sgUpdateError": "Ryhmän päivitys epäonnistui",
      "sgConfirmDelete": "Poista ryhmä \"{name}\"? Tätä ei voi perua.",
      "sgDeleted": "Jakoryhmä poistettu",
      "sgDeleteError": "Ryhmän poisto epäonnistui",
      "sgEdit": "Muokkaa",
      "sgDelete": "Poista",
      "sgSave": "Tallenna",
      "sgCancel": "Peruuta",
      "sgMembers": "jäsentä",
      "sgMemberList": "Jäsenet",
      "sgNoMembers": "Ei jäseniä vielä",
      "sgAddMember": "Lisää jäsen",
      "sgMemberIdentifier": "Tunniste (GHII tai GAII)",
      "sgMemberType": "Tyyppi",
      "sgMemberRequired": "Tunniste on pakollinen",
      "sgMemberAdded": "Jäsen lisätty",
      "sgMemberAddError": "Jäsenen lisäys epäonnistui",
      "sgConfirmRemoveMember": "Poista \"{name}\" tästä ryhmästä?",
      "sgMemberRemoved": "Jäsen poistettu",
      "sgMemberRemoveError": "Jäsenen poisto epäonnistui",
      "sgDefaultPerms": "Oletusoikeudet",
      "sgCreatedAt": "Luotu",
      "sgRead": "Luku",
      "sgWrite": "Kirjoitus",
      "sgRemove": "Poista",
      "adTitle": "Agenttien oletukset",
      "adDesc": "Omistajatason oletukset jotka koskevat kaikkia agenttejasi ellei agenttitason direktiivit ohita niitä.",
      "adRules": "Oletussäännöt",
      "adEdit": "Muokkaa",
      "adEditTitle": "Muokkaa agenttien oletuksia",
      "adNoRules": "Oletussääntöjä ei asetettu.",
      "adTokenBudget": "Token-budjetti",
      "adUnlimited": "Rajoittamaton",
      "adBudgetPlaceholder": "Jätä tyhjäksi rajoittamatonta varten",
      "adRulePlaceholder": "Lisää sääntö...",
      "adAddRule": "Lisää",
      "adRemoveRule": "Poista",
      "adSave": "Tallenna",
      "adCancel": "Peruuta",
      "adInvalidBudget": "Token-budjetin täytyy olla ei-negatiivinen luku",
      "adSaved": "Agenttien oletukset tallennettu",
      "adSaveError": "Oletusten tallennus epäonnistui",
      "copied": "Kopioitu",
      "validUntil": "Voimassa {time} asti ({h} h)",
      "noKeypair": "Tilille ei ole tallennettu avainparia. Avaimet luodaan rekisteröityessä; vanhoilta tileiltä se voi puuttua.",
      "fedAllowAllCaption": "Mikä tahansa federaatiosolmu voi verifioida identiteettisi. Rajaa alla olevaan listaan poistamalla valinta.",
      "adRuleExample": "Esim. ”Vastaa aina suomeksi” tai ”Älä koskaan käytä murusia kysymättä”."
    },
    "nodes": {
      "title": "Henkilökohtaiset solmut",
      "desc": "Henkilökohtaiset solmut toimivat omalla laitteellasi — läppäri, NAS tai kotipalvelin. Datasi pysyy koneellasi ja solmu yhdistää tähän operaattoriin suojatun WebSocket-tunnelin kautta. Aseta solmu Yksityiseksi piilottaaksesi sen tai Julkiseksi löydettäväksi federaatiossa.",
      "loading": "Ladataan solmuja...",
      "empty": "Ei rekisteröityjä solmuja.",
      "error": "Solmujen lataus epäonnistui.",
      "addBtn": "+ Lisää solmu",
      "online": "Online",
      "offline": "Offline",
      "degraded": "Heikentynyt",
      "detached": "Irrotettu",
      "agents": "agenttia",
      "agent": "agentti",
      "mailboxItems": "Postilaatikko",
      "items": "viestejä",
      "tunnelUrl": "Tunnelin URL",
      "copyUrl": "Kopioi",
      "copied": "Kopioitu!",
      "agentList": "Solmun agentit",
      "noAgents": "Ei agentteja tällä solmulla.",
      "mailbox": "Postilaatikko",
      "mailboxOf": "/",
      "lastSeen": "Nähty viimeksi",
      "visibility": "Näkyvyys",
      "private": "Yksityinen",
      "public": "Julkinen",
      "privateDesc": "Piilotettu federaatiohakemistosta",
      "publicDesc": "Löydettävissä federaatiohakemistossa",
      "setupTitle": "Asennusohjeet",
      "setupStep1": "1. Yhdistä WebSocket-tunneliin yllä olevalla URL:llä ja JWT-tokenillasi.",
      "setupStep2": "2. Lähetä sykeviesejä 30 sekunnin välein pysääksesi online-tilassa.",
      "setupStep3": "3. Uudelleenyhdistäessä operaattori lähettää jonossa olevat viestit automaattisesti.",
      "setupStep4": "4. Vahvista vastaanotetut viestit mailbox_ack-viestillä.",
      "setupDocs": "Täysi dokumentaatio",
      "detachBtn": "Irrota solmu",
      "detachConfirm": "Irrotetaanko solmu? Tämä sulkee tunnelin, tyhjentää postilaatikon ja poistaa solmun.",
      "detachedToast": "Solmu irrotettu.",
      "visUpdated": "Näkyvyys päivitetty.",
      "addTitle": "Rekisteröi henkilökohtainen solmu",
      "nodeIdLabel": "Solmun tunnus",
      "nodeIdPlaceholder": "personal-oma-läppäri",
      "visLabel": "Näkyvyys",
      "agentGaiisLabel": "Agenttien GAII:t (pilkulla eroteltu, valinnainen)",
      "agentGaiisPlaceholder": "botti1#omistaja, botti2#omistaja",
      "registerBtn": "Rekisteröi",
      "cancelBtn": "Peruuta",
      "registered": "Solmu rekisteröity!",
      "registerFailed": "Rekisteröinti epäonnistui"
    },
    "platforms": {
      "windows": "Windows",
      "mac": "macOS",
      "linux": "Linux",
      "wsl2": "WSL2",
      "android": "Android",
      "aws": "AWS / Cloud"
    },
    "security": {
      "title": "CORS & Alkuperäturvallisuus",
      "desc": "Hallitse millä verkko-alkuperillä on pääsy tietoihisi. Tarkemmat asetukset ohittavat laajemmat: Muistiavain → Agentti → Tilisi → Solmun oletus.",
      "loading": "Ladataan turvallisuusasetuksia...",
      "ghiiTitle": "Omat CORS-alkuperät",
      "ghiiDesc": "Aseta mitkä verkko-alkuperät (verkkotunnukset) voivat käyttää tilisi API:a. Jätä tyhjäksi perivääksesi solmun oletuksen.",
      "agentsTitle": "Agenttien CORS-ohitukset",
      "agentsDesc": "Ohita CORS-alkuperät yksittäisille agenteille. Agentit ilman omia asetuksia perivät tilisi asetuksista.",
      "inheritanceTitle": "Miten periytyminen toimii",
      "inheritanceDesc": "CORS-alkuperät ratkaistaan tarkimmasta laajimpaan: Muistiavain → Agentti → Tilisi (GHII) → Solmun oletus. Ensimmäinen taso jolla on oma asetus voittaa.",
      "allowedOrigins": "Sallitut alkuperät",
      "originsPlaceholder": "https://sovellus.fi, https://toinen.fi (yksi per rivi tai pilkulla erotettuna)",
      "inheritNode": "Peri solmulta",
      "inherited": "Peritty",
      "custom": "Mukautettu",
      "save": "Tallenna",
      "reset": "Palauta perityksi",
      "saved": "CORS-asetukset tallennettu",
      "effective": "Tehokkaat alkuperät",
      "inheritedFrom": "Peritty tasolta",
      "noAgents": "Ei rekisteröityjä agentteja",
      "agent": "Agentti",
      "origins": "Alkuperät",
      "status": "Tila",
      "edit": "Muokkaa",
      "nodeDefault": "solmun oletus",
      "wildcard": "Kaikki alkuperät (*)",
      "sessions": "Istuntojen hallinta",
      "sessionsHint": "Peru kaikki aktiiviset istunnot. Sinun täytyy kirjautua uudelleen kaikilla laitteilla.",
      "sessionsLabel": "Aktiiviset istunnot",
      "sessionsDesc": "Kaikkien istuntojen peruminen mitätöi kaikki aktiiviset JWT-tunnisteet. Sinut ja kaikki agenttisi kirjataan ulos välittömästi.",
      "revokeAll": "Peru kaikki istunnot",
      "revoking": "Perutaan...",
      "revokeConfirm": "Haluatko varmasti perua kaikki aktiiviset istunnot? Sinut kirjataan ulos.",
      "sessionsRevoked": "Kaikki istunnot peruttu",
      "sessionIdentity": "Identiteetti",
      "sessionIssuedAt": "Myönnetty",
      "sessionExpiresAt": "Vanhenee",
      "currentSession": "nykyinen",
      "revoke": "Peru",
      "sessionRevoked": "Istunto peruttu",
      "noSessions": "Ei aktiivisia istuntoja"
    },
    "email": {
      "title": "Sähköpostivahvistus",
      "description": "Vahvista sähköpostiosoitteesi mahdollistaaksesi salasanan palautuksen, tilin palautuksen ja sähköposti-ilmoitukset.",
      "currentEmail": "Nykyinen sähköposti",
      "notSet": "Sähköpostia ei asetettu",
      "verified": "Sähköposti vahvistettu",
      "notVerified": "Sähköpostia ei vahvistettu",
      "enterEmail": "Syötä sähköpostiosoitteesi",
      "sendCode": "Lähetä vahvistuskoodi",
      "codeSent": "Vahvistuskoodi lähetetty sähköpostiisi",
      "enterCode": "Syötä vahvistuskoodi",
      "verify": "Vahvista",
      "verifySuccess": "Sähköposti vahvistettu onnistuneesti!",
      "verifyFailed": "Vahvistus epäonnistui",
      "sendFailed": "Vahvistuskoodin lähetys epäonnistui",
      "changeEmail": "Vaihda sähköposti",
      "emailMasked": "Sähköposti (osittain peitetty yksityisyyden vuoksi)"
    },
    "notifications": {
      "title": "Push-ilmoitukset",
      "explain": "Vastaanota selainilmoituksia kun agenttisi saavat viestejä, työtehtäviä tai muita tapahtumia poissaollessasi.",
      "browserPush": "Selaimen push-ilmoitukset",
      "statusActive": "Push-ilmoitukset ovat aktiivisia tässä selaimessa.",
      "statusInactive": "Push-ilmoitukset eivät ole käytössä tässä selaimessa.",
      "subscribeBtn": "Ota push-ilmoitukset käyttöön",
      "subscribing": "Otetaan käyttöön...",
      "unsubscribeBtn": "Poista käytöstä",
      "unsubscribing": "Poistetaan...",
      "testBtn": "Lähetä testi",
      "subscribeSuccess": "Push-ilmoitukset käytössä!",
      "subscribeFailed": "Push-ilmoitusten käyttöönotto epäonnistui. Salli ilmoitukset selaimessasi.",
      "unsubscribeSuccess": "Push-ilmoitukset poistettu käytöstä.",
      "unsubscribeFailed": "Push-ilmoitusten poisto epäonnistui.",
      "testSent": "Testi-ilmoitus lähetetty!",
      "testFailed": "Testi-ilmoituksen lähetys epäonnistui.",
      "notConfigured": "Push-ilmoituksia ei ole määritetty tällä solmulla.",
      "noBrowserSupport": "Selaimesi ei tue push-ilmoituksia.",
      "hint": "Push-ilmoitukset vaativat selaimesi luvan. Voit peruuttaa luvan milloin tahansa selaimen asetuksista.",
      "emailNotifications": "Sähköposti-ilmoitukset",
      "emailNotVerified": "Vahvista sähköpostisi Sähköposti-välilehdellä ensin ottaaksesi sähköposti-ilmoitukset käyttöön.",
      "enableEmailNotifs": "Vastaanota tärkeitä päivityksiä sähköpostitse.",
      "notifTypeExtensions": "Laajennuspäivitykset",
      "notifTypeSystem": "Järjestelmäilmoitukset",
      "notifTypeSecurity": "Tietoturvahälytykset",
      "emailPrefsSaved": "Sähköposti-ilmoitusasetukset tallennettu",
      "emailPrefsFailed": "Sähköposti-ilmoitusasetusten tallennus epäonnistui"
    },
    "nodeStats": {
      "title": "Solmun tilastot",
      "desc": "Reaaliaikaiset tilastot tältä AIMEAT-solmulta. Näyttää käyttöajan, pyyntöaktiviteetin, tunneliyhteydet, postilaatikon käytön ja turvallisuustapahtumat.",
      "loading": "Ladataan tilastoja...",
      "error": "Tilastojen lataus epäonnistui. Tilastot voivat olla pois käytöstä tässä solmussa.",
      "uptime": "Käyttöaika",
      "startedAt": "Käynnistetty",
      "requests": "Pyynnöt",
      "owners": "Omistajat",
      "agents": "Agentit",
      "memoryWrites": "Muistikirjoitukset",
      "memoryReads": "Muistiluvut",
      "consentGrants": "Suostumusten myönnöt",
      "consentRevocations": "Suostumusten perut",
      "schemaValidations": "Skeemavalidoinnit",
      "schemaFailures": "Skeemavirheet",
      "tunnelTitle": "Tunneli",
      "tunnelActive": "Aktiiviset",
      "tunnelTotal": "Yhteydet yhteensä",
      "msgSent": "Viestejä lähetetty",
      "msgReceived": "Viestejä vastaanotettu",
      "deliveryFails": "Toimitusvirheet",
      "latencyAvg": "Keskim. viive",
      "latencyP95": "P95-viive",
      "mailboxTitle": "Postilaatikko",
      "mailboxItems": "Jonossa",
      "mailboxBytes": "Tallennustila",
      "mailboxDelivered": "Toimitettu",
      "mailboxExpired": "Vanhentuneet",
      "securityTitle": "Turvallisuus",
      "authFailures": "Tunnistusvirheet",
      "rateLimitHits": "Rajoitusosumia",
      "scopeDenials": "Oikeushylkäykset",
      "requestsByMethod": "Pyynnöt metodin mukaan",
      "requestsByStatus": "Pyynnöt statuskoodin mukaan"
    },
    "extensions": {
      "title": "Cortex-laajennukset",
      "desc": "Asenna ja hallinnoi deklaratiivisia laajennuksia, jotka tarjoavat skeemoja, prompteja, ontologioita ja UI-kirjastoja sovelluksillesi.",
      "loading": "Ladataan laajennuksia...",
      "empty": "Ei laajennuksia vielä. Kokeile luoda AI:lla tai lisää valmis laajennus alta!",
      "install": "+ Lisää",
      "createWithAi": "Luo AI:lla",
      "promptCopied": "Prompt kopioitu! Liitä se AI Chatiin.",
      "readyExtensions": "Valmiita laajennuksia:",
      "installed": "Omat laajennukset",
      "nodeExtensions": "Solmun laajennukset",
      "myExtensions": "Omat laajennukset",
      "managedByAdmin": "Tätä laajennusta hallinnoi solmun ylläpitäjä.",
      "addThis": "Lisää tämä",
      "heroDesc": "Laajennuksilla saat enemmän aikaiseksi vähemmällä. AI Chat pystyy suoriutumaan isommista sovelluksista kun annat sille valmiita rakennuspalikoita. Voit käyttää samaa laajennetta useassa sovelluksessasi — teet luomisen helpommaksi itsellesi ja tekoälykaveerillesi.",
      "visibility": {
        "private": "Yksityinen",
        "public": "Julkinen"
      },
      "publish": "Julkaise",
      "unpublish": "Tee yksityiseksi",
      "bundled": {
        "charts": {
          "name": "Charts",
          "desc": "Nätit kaaviot datallesi — pylväs, viiva, piirakka ja muut. Touch + hiiri."
        },
        "canvas": {
          "name": "Piirtoalusta",
          "desc": "Piirtopinta jolla piirrät ja tallennat suoraan storageen. Undo, export, kynä & muodot."
        }
      },
      "installModal": {
        "title": "Lisää Cortex-laajennus",
        "manifestLabel": "Manifesti",
        "uploadFile": "Lataa tiedosto",
        "pasteYaml": "Liitä YAML",
        "libsLabel": "Kirjastotiedostot (valinnainen)",
        "uploadFiles": "Lataa tiedostot",
        "pasteCode": "Liitä koodi",
        "filenameLabel": "Tiedostonimi",
        "filenamePlaceholder": "esim. recipe-ui.js",
        "addLib": "+ Lisää kirjasto",
        "cancel": "Peruuta",
        "installBtn": "Asenna",
        "installing": "Asennetaan..."
      },
      "status": {
        "active": "Aktiivinen",
        "inactive": "Ei käytössä"
      },
      "activate": "Aktivoi",
      "deactivate": "Deaktivoi",
      "uninstall": "Poista",
      "uninstallConfirm": "Oletko varma? Esimerkkidata poistetaan.",
      "detail": {
        "back": "← Takaisin",
        "whatsIncluded": "Sisältö",
        "copyPrompt": "Kopioi prompt",
        "copyApi": "Kopioi API",
        "copyUrl": "Kopioi URL",
        "copied": "Kopioitu!",
        "exports": "Exportit",
        "apiSurface": "API-pinta",
        "scriptTag": "Script-tagi",
        "author": "Tekijä",
        "license": "Lisenssi",
        "tags": "Tagit"
      },
      "components": {
        "schema": "Skeema",
        "prompt": "Prompt",
        "action": "Toiminto",
        "board-template": "Keskustelualue",
        "ontology": "Ontologia",
        "seed-data": "Esimerkkidata",
        "lib": "Kirjasto"
      },
      "success": {
        "installed": "Laajennus asennettu!",
        "activated": "Laajennus aktivoitu",
        "deactivated": "Laajennus deaktivoitu",
        "uninstalled": "Laajennus poistettu"
      },
      "error": {
        "installFailed": "Asennus epäonnistui",
        "loadFailed": "Laajennusten lataus epäonnistui"
      }
    },
    "generator": {
      "tabLabel": "Generaattori",
      "title": "Palvelugeneraattori",
      "empty": "Ei projekteja vielä. Luo ensimmäinen palvelusi!",
      "disabled": "Palvelugeneraattori on poistettu käytöstä tässä nodessa.",
      "newProject": "Uusi projekti",
      "newProjectTitle": "Luo uusi palvelu",
      "newProjectDesc": "Kuvaile mitä haluat rakentaa. Ole tarkka ominaisuuksista, datasta, integraatioista ja käyttöliittymätarpeista.",
      "descPlaceholder": "Haluan luoda palvelun, joka...",
      "analyze": "Analysoi",
      "analyzing": "Analysoidaan...",
      "back": "Takaisin",
      "selectComponent": "Valitse komponentti sivupalkista aloittaaksesi",
      "modeChat": "AI Chat",
      "modeAgent": "Agentti",
      "prompt": "Prompt",
      "copyPrompt": "Kopioi prompt",
      "regeneratePrompt": "Päivitä prompt",
      "regeneratePromptHint": "Luo prompt uudelleen uusimmilla mallipohjilla",
      "promptRegenerated": "Prompt päivitetty uusimmilla mallipohjilla!",
      "result": "Tulos",
      "resultPlaceholder": "Liitä AI:n vastaus tähän...",
      "extensionResultPlaceholder": "Liitä KOKO AI:n vastaus tähän — YAML-manifesti ja kaikki JavaScript-koodilohkot yhteen...",
      "extensionPasteHint": "Extensionissa on useita koodilohkoja. Kopioi koko AI:n vastaus (YAML + kaikki JavaScript-tiedostot) ja liitä se kokonaisuudessaan tähän.",
      "validate": "Validoi",
      "register": "Rekisteröi",
      "errors": "Validointivirheet",
      "copyFixPrompt": "Kopioi korjausprompt",
      "sendToAgent": "Lähetä agentille",
      "waitingAgent": "Odotetaan agentin vastausta...",
      "archive": "Arkistoi",
      "deleteProject": "Poista",
      "confirmDelete": "Poistetaanko tämä projekti ja kaikki sen komponentit? Tätä ei voi perua.",
      "projectDeleted": "Projekti poistettu",
      "showArchived": "Näytä arkistoidut",
      "activityLog": "Toimintaloki",
      "allComponents": "Kaikki komponentit",
      "noActivity": "Ei toimintaa vielä",
      "blueprintTitle": "Tuo pohjapiirros",
      "blueprintDesc": "Kopioi pohjapiirroksen prompt, liitä se AI-chattiin ja liitä tulos takaisin tähän.",
      "blueprintResult": "Pohjapiirros-JSON",
      "blueprintPlaceholder": "Liitä AI:n generoima pohjapiirros-JSON tähän...",
      "importBlueprint": "Tuo pohjapiirros",
      "agentsListening": "agentti(a) kuuntelee",
      "noAgentsListening": "Ei agentteja kuuntelemassa",
      "lastSync": "Viimeisin synkronointi",
      "agentSetup": "Agentin asennus",
      "hideSetup": "Piilota asennus",
      "agentSetupDesc": "Luo uuden generaattoriagentin avaimineen ja kopioi asennuspromptin leikepöydälle. Liitä se AI-agenttiisi kuuntelun aloittamiseksi.",
      "agentSelector": {
        "title": "Käynnistä agentilla",
        "subtitle": "Haastattelu valmis. Anna agentin generoida loput automaattisesti.",
        "noAgents": "Ei kuuntelevia agentteja. Kopioi agenttiprompt ja liitä se AI-agenttiisi.",
        "startButton": "Käynnistä tällä agentilla",
        "manualButton": "Jatka manuaalisesti",
        "skipToAgent": "Anna agentin hoitaa"
      },
      "agentBanner": {
        "working": "{agentName} työskentelee",
        "phase": "Vaihe: {phase} ({step}/{total})",
        "disconnected": "Agentti saattoi katkaista yhteyden",
        "stopButton": "Pysäytä agentti",
        "continueManually": "Pysäytä ja jatka manuaalisesti",
        "lastHeartbeat": "viimeisin",
        "phaseStarting": "Käynnistyy...",
        "phaseBlueprint": "Luo pohjapiirros",
        "phaseGenerating": "Generoi komponentteja",
        "phaseRegistering": "Rekisteröi",
        "phaseCompleting": "Viimeistelee"
      },
      "copyAgentPrompt": "Kopioi agentin prompt",
      "copyAgentPromptShort": "Kopioi prompt (linkillä)",
      "copyAgentPromptFull": "Kopioi prompt (kokonaisena)",
      "agentPromptCopied": "Agentti luotu ja asennusprompt kopioitu!",
      "creatingAgent": "Luodaan agenttia...",
      "agentCreateFailed": "Generaattoriagentin luonti epäonnistui. Tarkista että olet kirjautunut.",
      "interviewTitle": "Vaatimusten kartoitus",
      "interviewDesc": "Kopioi haastatteluprompt AI Chattiin. Tekoäly haastattelee sinua vaatimuksistasi ja tuottaa rakenteellisen määrittelyn. Kun haastattelu on valmis, liitä JSON-määrittely tänne takaisin.",
      "interviewPrompt": "Vaihe 1: Kopioi haastatteluprompt AI Chattiin",
      "interviewResult": "Vaihe 2: Liitä JSON-määrittely",
      "interviewPlaceholder": "Liitä tekoälyn vastaus tähän — järjestelmä poimii JSON-määrittelyn...",
      "interviewPromptCopied": "Haastatteluprompt kopioitu! Liitä se AI Chattiin aloittaaksesi haastattelun.",
      "specImported": "Määrittely tuotu onnistuneesti!",
      "importSpec": "Tuo määrittely",
      "skipInterview": "Ohita (käytä vain kuvausta)",
      "skipBlueprint": "Ohita (siirry komponentteihin)",
      "cortexPhase": "Yhdistä ja integroi",
      "cortexDesc": "Asiakaspuolen domain-kirjasto laajennusten ja sovelluksen välillä",
      "registeredLabel": "rekisteröity",
      "activeLabel": "aktiivinen",
      "activateAll": "Aktivoi kaikki",
      "deactivateAll": "Deaktivoi kaikki",
      "launchApp": "Avaa sovellus",
      "refresh": "Päivitä",
      "refreshTitle": "Tarkista komponenttien tila palvelimelta",
      "editService": "Muokkaa palvelua",
      "cancelEdit": "Peruuta muokkaus",
      "editSettings": "Asetukset",
      "hideSettings": "Piilota asetukset",
      "diagnostics": "Diagnostiikka",
      "hideDiagnostics": "Piilota diagnostiikka",
      "cancelRemove": "Peruuta",
      "removeEllipsis": "Poista...",
      "removeSelectLabel": "Valitse poistettavat ja rekisteröinnistä poistettavat komponentit:",
      "deleteExtensionMemory": "Poista myös laajennuksen muistitiedot",
      "removingLabel": "Poistetaan...",
      "removeSelected": "Poista {count} valittua",
      "removedCount": "{count} komponenttia poistettu",
      "removedWithErrors": "{count} poistettu, {errors} virhettä",
      "activatedCount": "{count} komponenttia aktivoitu",
      "activatedWithErrors": "{count} aktivoitu, {errors} virhettä",
      "deactivatedCount": "{count} komponenttia deaktivoitu",
      "deactivatedWithErrors": "{count} deaktivoitu, {errors} virhettä",
      "noRegisteredApp": "Rekisteröityä sovellusta ei löytynyt",
      "editServiceDesc": "Kuvaile ongelma tai mitä haluat muuttaa:",
      "editPlaceholder": "esim. Kartalla ei näy merkkejä...",
      "copyImpactPrompt": "Kopioi vaikutusanalyysiprompt",
      "impactPromptCopied": "Vaikutusanalyysiprompt kopioitu!",
      "impactAnalysis": "Vaikutusanalyysi",
      "impactPasteDesc": "Liitä AI:n vaikutusanalyysin vastaus:",
      "impactPastePlaceholder": "Liitä vaikutusanalyysi-JSON tähän...",
      "analyzeImpact": "Analysoi vaikutus",
      "impactResults": "Analyysin tulokset",
      "impactArrayRequired": "Vastauksen tulee sisältää \"analysis\"-taulukko",
      "copyEditPrompt": "Kopioi muokkausprompt",
      "editPromptCopied": "Muokkausprompt komponentille {name} kopioitu!",
      "backToImpact": "Takaisin analyysiin",
      "done": "Valmis",
      "promptCopied": "Prompt kopioitu!",
      "blueprintPromptCopied": "Pohjapiirroksen prompt kopioitu!",
      "allComponentsRegistered": "Kaikki komponentit rekisteröity!",
      "componentRegistered": "Komponentti rekisteröity: {name}",
      "validationFailed": "Validointi epäonnistui",
      "registrationNameMissing": "Rekisteröity mutta nimeä ei löytynyt vastauksesta",
      "invalidJson": "Virheellinen JSON: {error}",
      "diagComponent": "Komponentti",
      "diagType": "Tyyppi",
      "diagGenStatus": "Generaattorin tila",
      "diagLiveStatus": "Live-tila",
      "diagLastAction": "Viimeisin toiminto",
      "serviceDefinition": "PALVELUMÄÄRITTELY",
      "seedDataTranslations": "ALKUTIEDOT JA KÄÄNNÖKSET",
      "packageProject": "Paketoi malliksi",
      "updatePackage": "Päivitä paketti",
      "packageSuccess": "Paketti luotu onnistuneesti",
      "packageUpdateSuccess": "Paketti päivitetty versioon {version}",
      "packageCategory": "Kategoria",
      "packageTags": "Tunnisteet (pilkulla erotettu)",
      "packageVisibility": "Näkyvyys",
      "noComponentsToPackage": "Ei valmiita komponentteja paketoitavaksi",
      "changesSummary": "Muutokset edellisestä versiosta",
      "changeAdded": "Lisätty",
      "changeModified": "Muokattu",
      "changeRemoved": "Poistettu",
      "changeUnchanged": "Muuttumaton",
      "forkedFrom": "Haarautettu paketista {name}, tekijä {author}",
      "forkConfirm": "Tämä luo oman kopiosi tästä paketista muokattavaksi. Jatketaanko?",
      "clickToEditName": "Napsauta muokataksesi nimeä",
      "nameUpdated": "Nimi päivitetty",
      "reregister": "Rekisteröi uudelleen",
      "reregisterHint": "Deaktivoi, poista ja rekisteröi komponentti uudelleen nykyisellä tuloksella",
      "reregistered": "Rekisteröity uudelleen: {name}",
      "reregisterFailed": "Uudelleenrekisteröinti epäonnistui: {error}",
      "changelogNote": "Muutoshuomautus",
      "changelogPlaceholder": "Mitä muuttui...",
      "registerHint": "Asenna tämä komponentti AIMEAT-solmuusi — tekee siitä käytössä olevan",
      "logActions": {
        "project_created": "Projekti luotu",
        "interview_imported": "Haastattelumäärittely tuotu",
        "blueprint_imported": "Pohjapiirros tuotu",
        "agent_started": "Agentti käynnistetty",
        "agent_stopped": "Agentti pysäytetty",
        "project_deleted": "Projekti poistettu",
        "all_activated": "Kaikki komponentit aktivoitu",
        "all_deactivated": "Kaikki komponentit deaktivoitu",
        "name_changed": "Projektin nimi muutettu"
      },
      "status": {
        "not_started": "Ei aloitettu",
        "prompt_ready": "Prompt valmis",
        "waiting_user": "Odottaa sinua",
        "waiting_agent": "Odottaa agenttia",
        "validating": "Validoidaan",
        "errors": "Virheitä",
        "done": "Valmis"
      },
      "settings_title": "Palvelun asetukset",
      "settings_description": "Palvelusi tarvitsee seuraavat asetukset toimiakseen. Näitä käytetään testauksessa.",
      "settings_required": "Pakollinen",
      "settings_optional": "Valinnainen",
      "settings_save": "Tallenna ja jatka",
      "settings_skip": "Ohita (ei ulkoisia palveluita)",
      "settings_no_settings": "Asetuksia ei tarvita — jatketaan generointiin.",
      "test_scope_title": "Testauslaajuus",
      "test_scope_comprehensive": "Kattava (suositus) — toiminnalliset testit + selaintestit kuvakaappauksilla",
      "test_scope_basic": "Perustaso — vain toiminnalliset testit",
      "test_scope_none": "Ei testejä — ohita testaus",
      "test_scope_comprehensive_short": "Kattava",
      "test_scope_basic_short": "Perustaso",
      "test_scope_none_short": "Ohita",
      "test_generating": "Tekoäly generoi testit...",
      "test_running": "Ajetaan testejä...",
      "test_passed": "Kaikki testit läpäisty",
      "test_partial": "Osa testeistä läpäisty, osa epäonnistui",
      "test_failed": "Testit epäonnistuivat",
      "test_screenshots": "Kuvakaappaukset",
      "test_fix_auto": "Automaattinen korjaus",
      "test_fix_manual": "Testaa manuaalisesti",
      "test_fix_skip": "Ohita",
      "test_fix_round": "Korjauskierros",
      "test_errors_count": "virhettä",
      "test_component_passed": "Läpäisty",
      "test_component_failed": "Epäonnistunut",
      "test_component_skipped": "Ohitettu",
      "test_planned": "Testi suunniteltu — ajetaan rekisteröinnin jälkeen",
      "test_playwright_unavailable": "Playwright ei saatavilla, ohitetaan selaintestit",
      "test_section_title": "Testi",
      "test_prompt": "Testiprompt",
      "test_copy_prompt": "Kopioi testiprompt",
      "test_prompt_copied": "Testiprompt kopioitu leikepöydälle",
      "test_run_with_ai": "Generoi ja aja testi tekoälyllä",
      "test_code": "Testikoodi",
      "test_code_placeholder": "Liitä tekoälyn generoima testikoodi tähän...",
      "test_run": "Aja testi",
      "test_result_title": "Tulos",
      "test_trace_title": "Diagnostiikka-trace",
      "test_no_testable": "Ei rekisteröityjä testattavia komponentteja (extension/cortex/app)",
      "openrouter": {
        "title": "OpenRouter-asetukset",
        "apiKey": "API-avain",
        "apiKeyPlaceholder": "sk-or-v1-...",
        "apiKeySaved": "API-avain tallennettu",
        "apiKeyMasked": "●●●●●●●●",
        "model": "Tekoälymalli",
        "reasoningModel": "Päättelymalli (blueprintit, skeletonit, suunnittelu)",
        "executionModel": "Suoritusmalli (koodi, testit, kokoaminen)",
        "modelSelect": "Valitse malli",
        "autoRetry": "Automaattinen uudelleenyritys validointivirheessä",
        "maxRetries": "Uudelleenyritysten enimmäismäärä",
        "temperature": "Lämpötila (temperature)",
        "temperature_hint": "0 = deterministinen, 1 = oletus, 2 = luovin",
        "topP": "Top P",
        "topP_hint": "Nucleus-otanta: 0.1 = tarkennettu, 1.0 = koko valikoima",
        "maxTokens": "Max tokeneja",
        "maxTokens_hint": "Vastauksen enimmäispituus. Tyhjä = mallin oletus.",
        "testConnection": "Testaa yhteys",
        "testSuccess": "Yhteys onnistui",
        "testFail": "Yhteys epäonnistui",
        "save": "Tallenna asetukset",
        "delete": "Poista API-avain",
        "deleteConfirm": "Haluatko varmasti poistaa OpenRouter API-avaimesi?",
        "runWithAi": "Aja tekoälyllä",
        "runAll": "Aja kaikki vaiheet",
        "cancel": "Keskeytä",
        "waiting": "Odotetaan tekoälyn vastausta...",
        "retrying": "Yritetään uudelleen ({current}/{max})...",
        "stepComplete": "Vaihe suoritettu tekoälyllä",
        "stepFailed": "Tekoäly ei pystynyt suorittamaan tätä vaihetta",
        "stepDone": "{name} päivitetty onnistuneesti",
        "noApiKey": "Määritä OpenRouter API-avain yllä käyttääksesi tekoälyautomaatiota",
        "encryptionNotConfigured": "Palvelimen salausta ei ole määritetty. Ota yhteyttä noden ylläpitäjään.",
        "provider": "Tekoälypalveluntarjoaja",
        "provider_openrouter": "OpenRouter — pilvipalvelu, satoja malleja",
        "provider_lmstudio": "LM Studio — paikallinen tekoäly (localhost)",
        "provider_custom": "Custom — mikä tahansa OpenAI-yhteensopiva API",
        "baseUrl": "API-osoite",
        "baseUrl_hint": "esim. http://localhost:1234/v1"
      }
    },
    "foundry": {
      "tabLabel": "Foundry",
      "title": "Foundry — Monivaiheinen generaattori",
      "empty": "Ei projekteja vielä. Luo ensimmäinen palvelusi!",
      "disabled": "Palvelugeneraattori on poistettu käytöstä tässä nodessa.",
      "newProject": "Uusi projekti",
      "newProjectTitle": "Luo uusi palvelu",
      "newProjectDesc": "Kuvaile mitä haluat rakentaa. Ole tarkka ominaisuuksista, datasta, integraatioista ja käyttöliittymätarpeista.",
      "descPlaceholder": "Haluan luoda palvelun, joka...",
      "analyze": "Analysoi",
      "analyzing": "Analysoidaan...",
      "back": "Takaisin",
      "selectComponent": "Valitse komponentti sivupalkista aloittaaksesi",
      "modeChat": "AI Chat",
      "modeAgent": "Agentti",
      "prompt": "Prompt",
      "copyPrompt": "Kopioi prompt",
      "regeneratePrompt": "Päivitä prompt",
      "regeneratePromptHint": "Luo prompt uudelleen uusimmilla mallipohjilla",
      "promptRegenerated": "Prompt päivitetty uusimmilla mallipohjilla!",
      "result": "Tulos",
      "resultPlaceholder": "Liitä AI:n vastaus tähän...",
      "extensionResultPlaceholder": "Liitä KOKO AI:n vastaus tähän — YAML-manifesti ja kaikki JavaScript-koodilohkot yhteen...",
      "extensionPasteHint": "Extensionissa on useita koodilohkoja. Kopioi koko AI:n vastaus (YAML + kaikki JavaScript-tiedostot) ja liitä se kokonaisuudessaan tähän.",
      "validate": "Validoi",
      "register": "Rekisteröi",
      "errors": "Validointivirheet",
      "copyFixPrompt": "Kopioi korjausprompt",
      "sendToAgent": "Lähetä agentille",
      "waitingAgent": "Odotetaan agentin vastausta...",
      "archive": "Arkistoi",
      "deleteProject": "Poista",
      "confirmDelete": "Poistetaanko tämä projekti ja kaikki sen komponentit? Tätä ei voi perua.",
      "projectDeleted": "Projekti poistettu",
      "showArchived": "Näytä arkistoidut",
      "activityLog": "Toimintaloki",
      "allComponents": "Kaikki komponentit",
      "noActivity": "Ei toimintaa vielä",
      "blueprintTitle": "Tuo pohjapiirros",
      "blueprintDesc": "Kopioi pohjapiirroksen prompt, liitä se AI-chattiin ja liitä tulos takaisin tähän.",
      "blueprintResult": "Pohjapiirros-JSON",
      "blueprintPlaceholder": "Liitä AI:n generoima pohjapiirros-JSON tähän...",
      "importBlueprint": "Tuo pohjapiirros",
      "agentsListening": "agentti(a) kuuntelee",
      "noAgentsListening": "Ei agentteja kuuntelemassa",
      "lastSync": "Viimeisin synkronointi",
      "agentSetup": "Agentin asennus",
      "hideSetup": "Piilota asennus",
      "agentSetupDesc": "Luo uuden generaattoriagentin avaimineen ja kopioi asennuspromptin leikepöydälle. Liitä se AI-agenttiisi kuuntelun aloittamiseksi.",
      "agentSelector": {
        "title": "Käynnistä agentilla",
        "subtitle": "Haastattelu valmis. Anna agentin generoida loput automaattisesti.",
        "noAgents": "Ei kuuntelevia agentteja. Kopioi agenttiprompt ja liitä se AI-agenttiisi.",
        "startButton": "Käynnistä tällä agentilla",
        "manualButton": "Jatka manuaalisesti",
        "skipToAgent": "Anna agentin hoitaa"
      },
      "agentBanner": {
        "working": "{agentName} työskentelee",
        "phase": "Vaihe: {phase} ({step}/{total})",
        "disconnected": "Agentti saattoi katkaista yhteyden",
        "stopButton": "Pysäytä agentti",
        "continueManually": "Pysäytä ja jatka manuaalisesti",
        "lastHeartbeat": "viimeisin",
        "phaseStarting": "Käynnistyy...",
        "phaseBlueprint": "Luo pohjapiirros",
        "phaseGenerating": "Generoi komponentteja",
        "phaseRegistering": "Rekisteröi",
        "phaseCompleting": "Viimeistelee"
      },
      "copyAgentPrompt": "Kopioi agentin prompt",
      "copyAgentPromptShort": "Kopioi prompt (linkillä)",
      "copyAgentPromptFull": "Kopioi prompt (kokonaisena)",
      "agentPromptCopied": "Agentti luotu ja asennusprompt kopioitu!",
      "creatingAgent": "Luodaan agenttia...",
      "agentCreateFailed": "Generaattoriagentin luonti epäonnistui. Tarkista että olet kirjautunut.",
      "interviewTitle": "Vaatimusten kartoitus",
      "interviewDesc": "Kopioi haastatteluprompt AI Chattiin. Tekoäly haastattelee sinua vaatimuksistasi ja tuottaa rakenteellisen määrittelyn. Kun haastattelu on valmis, liitä JSON-määrittely tänne takaisin.",
      "interviewPrompt": "Vaihe 1: Kopioi haastatteluprompt AI Chattiin",
      "interviewResult": "Vaihe 2: Liitä JSON-määrittely",
      "interviewPlaceholder": "Liitä tekoälyn vastaus tähän — järjestelmä poimii JSON-määrittelyn...",
      "interviewPromptCopied": "Haastatteluprompt kopioitu! Liitä se AI Chattiin aloittaaksesi haastattelun.",
      "specImported": "Määrittely tuotu onnistuneesti!",
      "importSpec": "Tuo määrittely",
      "skipInterview": "Ohita (käytä vain kuvausta)",
      "skipBlueprint": "Ohita (siirry komponentteihin)",
      "cortexPhase": "Yhdistä ja integroi",
      "cortexDesc": "Asiakaspuolen domain-kirjasto laajennusten ja sovelluksen välillä",
      "registeredLabel": "rekisteröity",
      "activeLabel": "aktiivinen",
      "activateAll": "Aktivoi kaikki",
      "deactivateAll": "Deaktivoi kaikki",
      "launchApp": "Avaa sovellus",
      "refresh": "Päivitä",
      "refreshTitle": "Tarkista komponenttien tila palvelimelta",
      "editService": "Muokkaa palvelua",
      "cancelEdit": "Peruuta muokkaus",
      "editSettings": "Asetukset",
      "hideSettings": "Piilota asetukset",
      "diagnostics": "Diagnostiikka",
      "hideDiagnostics": "Piilota diagnostiikka",
      "cancelRemove": "Peruuta",
      "removeEllipsis": "Poista...",
      "removeSelectLabel": "Valitse poistettavat ja rekisteröinnistä poistettavat komponentit:",
      "deleteExtensionMemory": "Poista myös laajennuksen muistitiedot",
      "removingLabel": "Poistetaan...",
      "removeSelected": "Poista {count} valittua",
      "removedCount": "{count} komponenttia poistettu",
      "removedWithErrors": "{count} poistettu, {errors} virhettä",
      "activatedCount": "{count} komponenttia aktivoitu",
      "activatedWithErrors": "{count} aktivoitu, {errors} virhettä",
      "deactivatedCount": "{count} komponenttia deaktivoitu",
      "deactivatedWithErrors": "{count} deaktivoitu, {errors} virhettä",
      "noRegisteredApp": "Rekisteröityä sovellusta ei löytynyt",
      "editServiceDesc": "Kuvaile ongelma tai mitä haluat muuttaa:",
      "editPlaceholder": "esim. Kartalla ei näy merkkejä...",
      "copyImpactPrompt": "Kopioi vaikutusanalyysiprompt",
      "impactPromptCopied": "Vaikutusanalyysiprompt kopioitu!",
      "impactAnalysis": "Vaikutusanalyysi",
      "impactPasteDesc": "Liitä AI:n vaikutusanalyysin vastaus:",
      "impactPastePlaceholder": "Liitä vaikutusanalyysi-JSON tähän...",
      "analyzeImpact": "Analysoi vaikutus",
      "impactResults": "Analyysin tulokset",
      "impactArrayRequired": "Vastauksen tulee sisältää \"analysis\"-taulukko",
      "copyEditPrompt": "Kopioi muokkausprompt",
      "editPromptCopied": "Muokkausprompt komponentille {name} kopioitu!",
      "backToImpact": "Takaisin analyysiin",
      "done": "Valmis",
      "promptCopied": "Prompt kopioitu!",
      "blueprintPromptCopied": "Pohjapiirroksen prompt kopioitu!",
      "allComponentsRegistered": "Kaikki komponentit rekisteröity!",
      "componentRegistered": "Komponentti rekisteröity: {name}",
      "validationFailed": "Validointi epäonnistui",
      "registrationNameMissing": "Rekisteröity mutta nimeä ei löytynyt vastauksesta",
      "invalidJson": "Virheellinen JSON: {error}",
      "diagComponent": "Komponentti",
      "diagType": "Tyyppi",
      "diagGenStatus": "Generaattorin tila",
      "diagLiveStatus": "Live-tila",
      "diagLastAction": "Viimeisin toiminto",
      "serviceDefinition": "PALVELUMÄÄRITTELY",
      "seedDataTranslations": "ALKUTIEDOT JA KÄÄNNÖKSET",
      "packageProject": "Paketoi malliksi",
      "updatePackage": "Päivitä paketti",
      "packageSuccess": "Paketti luotu onnistuneesti",
      "packageUpdateSuccess": "Paketti päivitetty versioon {version}",
      "packageCategory": "Kategoria",
      "packageTags": "Tunnisteet (pilkulla erotettu)",
      "packageVisibility": "Näkyvyys",
      "noComponentsToPackage": "Ei valmiita komponentteja paketoitavaksi",
      "changesSummary": "Muutokset edellisestä versiosta",
      "changeAdded": "Lisätty",
      "changeModified": "Muokattu",
      "changeRemoved": "Poistettu",
      "changeUnchanged": "Muuttumaton",
      "forkedFrom": "Haarautettu paketista {name}, tekijä {author}",
      "forkConfirm": "Tämä luo oman kopiosi tästä paketista muokattavaksi. Jatketaanko?",
      "clickToEditName": "Napsauta muokataksesi nimeä",
      "nameUpdated": "Nimi päivitetty",
      "reregister": "Rekisteröi uudelleen",
      "reregisterHint": "Deaktivoi, poista ja rekisteröi komponentti uudelleen nykyisellä tuloksella",
      "reregistered": "Rekisteröity uudelleen: {name}",
      "reregisterFailed": "Uudelleenrekisteröinti epäonnistui: {error}",
      "changelogNote": "Muutoshuomautus",
      "changelogPlaceholder": "Mitä muuttui...",
      "registerHint": "Asenna tämä komponentti AIMEAT-solmuusi — tekee siitä käytössä olevan",
      "logActions": {
        "project_created": "Projekti luotu",
        "interview_imported": "Haastattelumäärittely tuotu",
        "blueprint_imported": "Pohjapiirros tuotu",
        "agent_started": "Agentti käynnistetty",
        "agent_stopped": "Agentti pysäytetty",
        "project_deleted": "Projekti poistettu",
        "all_activated": "Kaikki komponentit aktivoitu",
        "all_deactivated": "Kaikki komponentit deaktivoitu",
        "name_changed": "Projektin nimi muutettu"
      },
      "status": {
        "not_started": "Ei aloitettu",
        "prompt_ready": "Prompt valmis",
        "waiting_user": "Odottaa sinua",
        "waiting_agent": "Odottaa agenttia",
        "validating": "Validoidaan",
        "errors": "Virheitä",
        "done": "Valmis"
      },
      "settings_title": "Palvelun asetukset",
      "settings_description": "Palvelusi tarvitsee seuraavat asetukset toimiakseen. Näitä käytetään testauksessa.",
      "settings_required": "Pakollinen",
      "settings_optional": "Valinnainen",
      "settings_save": "Tallenna ja jatka",
      "settings_skip": "Ohita (ei ulkoisia palveluita)",
      "settings_no_settings": "Asetuksia ei tarvita — jatketaan generointiin.",
      "test_scope_title": "Testauslaajuus",
      "test_scope_comprehensive": "Kattava (suositus) — toiminnalliset testit + selaintestit kuvakaappauksilla",
      "test_scope_basic": "Perustaso — vain toiminnalliset testit",
      "test_scope_none": "Ei testejä — ohita testaus",
      "test_scope_comprehensive_short": "Kattava",
      "test_scope_basic_short": "Perustaso",
      "test_scope_none_short": "Ohita",
      "test_generating": "Tekoäly generoi testit...",
      "test_running": "Ajetaan testejä...",
      "test_passed": "Kaikki testit läpäisty",
      "test_partial": "Osa testeistä läpäisty, osa epäonnistui",
      "test_failed": "Testit epäonnistuivat",
      "test_screenshots": "Kuvakaappaukset",
      "test_fix_auto": "Automaattinen korjaus",
      "test_fix_manual": "Testaa manuaalisesti",
      "test_fix_skip": "Ohita",
      "test_fix_round": "Korjauskierros",
      "test_errors_count": "virhettä",
      "test_component_passed": "Läpäisty",
      "test_component_failed": "Epäonnistunut",
      "test_component_skipped": "Ohitettu",
      "test_planned": "Testi suunniteltu — ajetaan rekisteröinnin jälkeen",
      "test_playwright_unavailable": "Playwright ei saatavilla, ohitetaan selaintestit",
      "test_section_title": "Testi",
      "test_prompt": "Testiprompt",
      "test_copy_prompt": "Kopioi testiprompt",
      "test_prompt_copied": "Testiprompt kopioitu leikepöydälle",
      "test_run_with_ai": "Generoi ja aja testi tekoälyllä",
      "test_code": "Testikoodi",
      "test_code_placeholder": "Liitä tekoälyn generoima testikoodi tähän...",
      "test_run": "Aja testi",
      "test_result_title": "Tulos",
      "test_trace_title": "Diagnostiikka-trace",
      "test_no_testable": "Ei rekisteröityjä testattavia komponentteja (extension/cortex/app)",
      "generateNextPass": "Generoi seuraava vaihe",
      "passProgress": "Vaiheiden edistyminen",
      "passTest": "Testiprompt",
      "passSkeleton": "Runko",
      "passUnit": "Yksikkö",
      "passAssembly": "Kokoaminen",
      "passReflection": "Reflektio",
      "reflectionHistory": "Reflektiohistoria",
      "reflectionDiagnosis": "Diagnoosi",
      "reflectionPrescription": "Toimenpide",
      "escalatedToUser": "Eskaloitu — tarvitsee syöttöäsi",
      "loopDetected": "Silmukka havaittu — sama korjaus ehdotettu kahdesti",
      "maxReflections": "Reflektioyritykset käytetty",
      "openrouter": {
        "title": "OpenRouter-asetukset",
        "apiKey": "API-avain",
        "apiKeyPlaceholder": "sk-or-v1-...",
        "apiKeySaved": "API-avain tallennettu",
        "apiKeyMasked": "●●●●●●●●",
        "model": "Tekoälymalli",
        "reasoningModel": "Päättelymalli (blueprintit, skeletonit, suunnittelu)",
        "executionModel": "Suoritusmalli (koodi, testit, kokoaminen)",
        "modelSelect": "Valitse malli",
        "autoRetry": "Automaattinen uudelleenyritys validointivirheessä",
        "maxRetries": "Uudelleenyritysten enimmäismäärä",
        "temperature": "Lämpötila (temperature)",
        "temperature_hint": "0 = deterministinen, 1 = oletus, 2 = luovin",
        "topP": "Top P",
        "topP_hint": "Nucleus-otanta: 0.1 = tarkennettu, 1.0 = koko valikoima",
        "maxTokens": "Max tokeneja",
        "maxTokens_hint": "Vastauksen enimmäispituus. Tyhjä = mallin oletus.",
        "testConnection": "Testaa yhteys",
        "testSuccess": "Yhteys onnistui",
        "testFail": "Yhteys epäonnistui",
        "save": "Tallenna asetukset",
        "delete": "Poista API-avain",
        "deleteConfirm": "Haluatko varmasti poistaa OpenRouter API-avaimesi?",
        "runWithAi": "Aja tekoälyllä",
        "runAll": "Aja kaikki vaiheet",
        "cancel": "Keskeytä",
        "waiting": "Odotetaan tekoälyn vastausta...",
        "retrying": "Yritetään uudelleen ({current}/{max})...",
        "stepComplete": "Vaihe suoritettu tekoälyllä",
        "stepFailed": "Tekoäly ei pystynyt suorittamaan tätä vaihetta",
        "stepDone": "{name} päivitetty onnistuneesti",
        "noApiKey": "Määritä OpenRouter API-avain yllä käyttääksesi tekoälyautomaatiota",
        "encryptionNotConfigured": "Palvelimen salausta ei ole määritetty. Ota yhteyttä noden ylläpitäjään.",
        "provider": "Tekoälypalveluntarjoaja",
        "provider_openrouter": "OpenRouter — pilvipalvelu, satoja malleja",
        "provider_lmstudio": "LM Studio — paikallinen tekoäly (localhost)",
        "provider_custom": "Custom — mikä tahansa OpenAI-yhteensopiva API",
        "baseUrl": "API-osoite",
        "baseUrl_hint": "esim. http://localhost:1234/v1"
      }
    },
    "calibrator": {
      "tabLabel": "Kalibraattori",
      "title": "Kehotekalibraattori",
      "empty": "Ei kalibrointiprojekteja vielä.",
      "newProject": "Uusi kalibrointi",
      "newProjectName": "Kalibroinnin nimi",
      "newProjectPlaceholder": "esim. Blueprint-kehote",
      "reasoningModel": "Päättelymalli (arvioija)",
      "prompt": "Kehote",
      "targetOutput": "Tavoitetulos",
      "analysisTemplate": "Analyysikehote",
      "analysisTemplatePlaceholders": "Paikanvaraajat: {TARGET_OUTPUT}, {CANDIDATE_OUTPUT}, {MODEL_NAME}, {PROMPT_USED}",
      "resetTemplate": "Palauta oletus",
      "candidateModels": "Testattavat mallit",
      "addModel": "Lisää",
      "removeModel": "Poista",
      "runAll": "Suorita kaikki",
      "runAllAnalyze": "Suorita + analysoi",
      "running": "Suoritetaan...",
      "analyzing": "Analysoidaan",
      "results": "Tulokset",
      "overallScore": "Kokonaispistemäärä",
      "dimensions": "Ulottuvuudet",
      "runHistory": "Suoritushistoria",
      "noRuns": "Ei vielä suorituksia. Lisää mallit ja klikkaa Suorita kaikki.",
      "version": "Versio",
      "changelog": "Mitä muuttui?",
      "changelogPlaceholder": "Kuvaile mitä muuttui tässä versiossa...",
      "save": "Tallenna",
      "saveNewVersion": "Tallenna uutena versiona",
      "copy": "Kopioi",
      "copyComposed": "Kopioi muotoiltu kehote",
      "archive": "Arkistoi",
      "unarchive": "Palauta",
      "showArchived": "Näytä arkistoidut",
      "delete": "Poista",
      "deleteConfirm": "Poista tämä kalibrointiprojekti ja kaikki sen tiedot?",
      "back": "Takaisin",
      "applyFixes": "Toteuta ehdotukset",
      "applyingFixes": "Toteutetaan...",
      "proposals": "Ehdotetut korjaukset",
      "passed": "läpäisty",
      "failed": "hylätty",
      "models": "mallia",
      "runs": "suoritusta",
      "avgScore": "keskiarvo",
      "provider": "Tarjoaja",
      "model": "Malli",
      "selectModel": "Valitse malli",
      "chartOverall": "Kokonaispistemäärä",
      "chartByDimension": "Ulottuvuuksittain",
      "step1": "Vaihe 1: Generointi",
      "step2": "Vaihe 2: Analyysi",
      "step3": "Vaihe 3: Reflektio",
      "step3a": "Arvioijan ehdotukset",
      "step3b": "Itsereflektio",
      "step4": "Vaihe 4: Synteesi",
      "runStep1": "Suorita vaihe 1",
      "runStep2": "Suorita vaihe 2",
      "runStep3": "Suorita vaihe 3",
      "runStep4": "Suorita vaihe 4",
      "runAllSteps": "Suorita kaikki vaiheet",
      "newRun": "Uusi suoritus",
      "newRunAllSteps": "Uusi suoritus (kaikki vaiheet)",
      "reflectionTemplate": "Reflektiokehote (vaihe 3)",
      "selfReflectionTemplate": "Itsereflektiokehote (vaihe 3b)",
      "synthesisTemplate": "Synteesikehote (vaihe 4)",
      "reflectionPlaceholders": "Paikanvaraajat: {PROMPT_USED}, {TARGET_OUTPUT}, {CANDIDATE_OUTPUT}, {MODEL_NAME}, {ANALYSIS_TEXT}",
      "synthesisPlaceholders": "Paikanvaraajat: {PROMPT_USED}, {JUDGE_PROPOSALS}, {CANDIDATE_PROPOSALS}",
      "pasteOutput": "Liitä tulos",
      "pasteAnalysis": "Liitä analyysi",
      "pasteJudgeProposals": "Liitä arvioijan ehdotukset",
      "pasteSelfProposals": "Liitä itsereflektio",
      "pasteSynthesis": "Liitä synteesi",
      "groupedProposals": "Ryhmitellyt ehdotukset",
      "optionA": "Vaihtoehto A (konservatiivinen)",
      "optionB": "Vaihtoehto B (maltillinen)",
      "optionC": "Vaihtoehto C (aggressiivinen)",
      "applySelected": "Toteuta valitut → luo uusi versio",
      "copyPromptAndProposals": "Kopioi kehote + valitut ehdotukset",
      "impact": "Vaikutus",
      "overlap": "Päällekkäisyys",
      "recommendation": "Suositus",
      "setReasoningModel": "Aseta päättelymalli analyysin ja reflektion käyttöön.",
      "addModelsFirst": "Lisää testattavat mallit ensin.",
      "saveVersionFirst": "Tallenna kehoteversio ensin.",
      "noTargetWarning": "Tavoitetulosta ei ole asetettu — analyysi ei voi vertailla mihinkään.",
      "viewPromptSent": "Näytä lähetetty kehote",
      "viewRawResponse": "Näytä raaka vastaus",
      "viewOutput": "Näytä tulos",
      "viewAnalysis": "Näytä koko analyysi",
      "generating": "Generoidaan",
      "judgeReflecting": "Arvioija reflektoi",
      "selfReflecting": "Itsereflektio",
      "synthesizing": "Syntetisoidaan ehdotuksia",
      "batch": "Suoritus",
      "batchStatus": "Tila",
      "deleteConfirmBatch": "Poista tämä suoritus ja kaikki sen tiedot?"
    },
    "visibility": {
      "public": "Julkinen",
      "private": "Yksityinen",
      "owner": "Omat agentit",
      "protected": "Suojattu",
      "group": "Ryhmä"
    },
    "knowledge": {
      "parseError": "Liitettyä sisältöä ei voitu jäsentää JSON-muodossa",
      "notKnowledgePackage": "Tämä ei näytä AIMEAT-tietopaketilta",
      "copyFailed": "Kehotteen kopiointi epäonnistui",
      "cloned": "Paketti kloonattu onnistuneesti!",
      "cloneFailed": "Kloonaus epäonnistui",
      "referencesPackageLevel": "Viitteet (pakettitaso)"
    },
    "landing": {
      "home": "Koti",
      "heroTitle": "Tervetuloa! Aloita tästä",
      "heroSubtitle": "Sinulla on neljä polkua eteenpäin. Aloita mistä tahansa — kaikki johtavat siihen että sinulla on jotain hyödyllistä.",
      "onboardInstall": "Asenna valmis palvelu",
      "onboardInstallDesc": "Selaa paketteja. Yksi klikkaus ja sinulla on oma sähkön hintavahti, digital signage, tai yritystutka.",
      "onboardChat": "Tee jotain AI Chatilla",
      "onboardChatDesc": "Kopioi prompti, pastea AI Chattiisi. Saat toimivan appin joka käyttää AIMEAT:n muistia. Ei koodausta.",
      "onboardAgent": "Yhdistä AI-agentti",
      "onboardAgentDesc": "Anna Claude/ChatGPT:lle pääsy tänne. Se voi tuoda tietoa, muistaa asioita, ja tehdä töitä puolestasi.",
      "onboardGenerator": "Generoi kokonainen palvelu",
      "onboardGeneratorDesc": "Kerro mitä tarvitset. Generaattori haastattelee sinut ja luo kaiken: UI:n, taustapalvelun, käännökset, datan.",
      "tagEasiest": "helpoin",
      "tagLater": "myöhemmin",
      "knowledgeTitle": "Tutkimuksesi ja keskustelusi ovat arvokkaita",
      "knowledgeDesc": "Olet jo tehnyt paljon työtä AI:n kanssa. Tuo se tänne talteen — jäsenneltynä, haettavana, jaettavana. Kopioi Knowledge Packager -prompti profiilistasi, pastea se AI Chattiisi, ja kaikki mitä olet tutkinut muuttuu rakenteelliseksi tiedoksi.",
      "knowledgeBtnTitle": "Tuo AI-tutkimuksesi talteen",
      "knowledgeBtnDesc": "Kopioi Knowledge Packager, pastea AI Chattiisi — keskustelusi muuttuvat rakenteelliseksi tiedoksi.",
      "ghostSectionTitle": "Suositut palvelut",
      "ghostInstall": "asenna",
      "cortexSectionTitle": "Valmiit laajennukset — lisää AI Chattiisi",
      "cortexCharts": "Charts",
      "cortexChartsDesc": "Kaaviot datallesi — pylväs, viiva, piirakka. Touch + hiiri.",
      "cortexCanvas": "Piirtoalusta",
      "cortexCanvasDesc": "Piirrä ja tallenna storageen. Undo, export, kynä & muodot.",
      "menuBuildShare": "Rakenna & jaa",
      "menuManagement": "Hallinta",
      "menuInfra": "Infrastruktuuri",
      "menuInfraAnnotation": "vain node-operaattoreille",
      "expandAll": "Näytä kaikki asetukset",
      "expandMore": "Näytä kaikki",
      "myApps": "Omat sovellukset",
      "viewAll": "Näytä kaikki",
      "editProfile": "muokkaa profiilia",
      "editModalTitle": "Muokkaa profiilia",
      "editDisplayName": "Nimi",
      "editDisplayNamePlaceholder": "Julkinen nimesi",
      "editBio": "Kuvaus",
      "editBioPlaceholder": "Lyhyt kuvaus itsestäsi",
      "editAvatar": "Avatar",
      "editAvatarPlaceholder": "Emoji tai lyhyt teksti",
      "editLocale": "Kieli",
      "editEmail": "Sähköposti",
      "editEmailNone": "Ei asetettu",
      "editEmailHint": "Vaihda Sähköposti-välilehdellä",
      "editSave": "Tallenna",
      "editCancel": "Peruuta",
      "editSaving": "Tallennetaan...",
      "editSaved": "Profiili päivitetty",
      "editError": "Profiilin päivitys epäonnistui",
      "changePassword": "vaihda salasana",
      "changePasswordTitle": "Vaihda salasana",
      "currentPassword": "Nykyinen salasana",
      "newPassword": "Uusi salasana",
      "confirmPassword": "Vahvista uusi salasana",
      "passwordMismatch": "Salasanat eivät täsmää",
      "passwordChanged": "Salasana vaihdettu",
      "passwordChangeFailed": "Salasanan vaihto epäonnistui",
      "passwordChanging": "Vaihdetaan...",
      "passwordRequirements": "Väh. 8 merkkiä, iso kirjain, pieni kirjain, numero",
      "federationBadge": "{count} solmu(a) federaatiossa",
      "packagesExt": "Paketit & Laajennukset",
      "notificationsBadge": "Ilmoitukset",
      "ownPackages": "Omat paketit",
      "connectAgent": "Yhdistä uusi agentti",
      "installFirst": "Asenna ensimmäinen sovellus",
      "waitingTitle": "Odottaa sinua",
      "draftsToReview": "{n} luonnosta tarkastettavana",
      "joinReqOne": "1 liittymispyyntö",
      "joinReqMany": "{n} liittymispyyntöä",
      "inviteWaiting": "Sinut on kutsuttu",
      "reviewBtn": "Tarkasta",
      "viewBtn": "Avaa",
      "continueTitle": "Jatka",
      "agentsTitle": "Agentit",
      "activeTodayCount": "{n} aktiivista tänään",
      "agentActiveToday": "aktiivinen tänään",
      "nextRunAt": "seuraava ajo {time}",
      "promoDismiss": "Piilota",
      "profileBtn": "Profiili",
      "editLocaleHint": "Ensisijainen kielesi — käytetään portaalin käyttöliittymässä; agentit voivat lukea sen profiilistasi ja vastata sillä.",
      "editEmailLink": "Vaihda Sähköposti-välilehdellä →",
      "pwMin": "Vähintään 8 merkkiä",
      "pwUpper": "Iso kirjain",
      "pwLower": "Pieni kirjain",
      "pwDigit": "Numero",
      "changePasswordBtn": "Vaihda salasana",
      "showPassword": "Näytä",
      "hidePassword": "Piilota",
      "menuInformation": "Tieto",
      "menuAutomation": "Automaatio",
      "menuActivity": "Tapahtumat",
      "menuAccount": "Tili",
      "menuPinned": "Kiinnitetyt",
      "pinAdd": "Kiinnitä",
      "pinRemove": "Irrota",
      "pinLimit": "Enintään 5 kiinnitettyä"
    }
  },
  "dev": {
    "title": "AIMEAT-liitäntäportaali",
    "subtitle": "Yhdistä mikä tahansa AI tähän solmuun — valitse alustasi aloittaaksesi",
    "stats": {
      "agents": "Agentit",
      "chatSessions": "Keskustelusessiot",
      "services": "Palvelut",
      "boards": "Taulut"
    },
    "quickStart": {
      "title": "Pikastart — Onko AI jo auki?",
      "desc": "Kopioi-liitä tämä AI-chattiin niin se yhdistää itse:",
      "copy": "Kopioi",
      "note": "Toimii AI:lla jotka voivat selata verkkoa (Grok, Claude, ChatGPT selauksella, jne.). URL palauttaa JSON-ohjeet jotka AI ymmärtää.",
      "fallback": "Jos AI:si ei voi selata, valitse alustasi alta."
    },
    "step1": {
      "label": "Valitse AI-alustasi"
    },
    "step2": {
      "label": "Valitse tilauksesi / versio"
    },
    "step3": {
      "label": "Valitse yhdistämistapa"
    },
    "step4": {
      "label": "Jaa sovelluksesi"
    },
    "mode": {
      "loggedIn": "Kirjautuneena",
      "loggedInDesc": "Voit lähettää sovelluksia ja saada jaettavan latauslinkin. Muut voivat selata ja ladata sovelluksiasi.",
      "anonymous": "Anonyymi tila",
      "anonymousDesc": "Voit luoda kehotteita ja sovelluksia kirjautumatta.",
      "anonymousNote": "Jakaaksesi sovelluksia muille, sinun täytyy jakaa HTML-tiedosto itse (sähköposti, pilvipalvelu, jne.).",
      "signUp": "Rekisteröidy",
      "signUpNote": "saadaksesi henkilökohtaisen latauslinkin."
    },
    "community": {
      "title": "Yhteisön sovellukset",
      "desc": "Käyttäjien lähettämät sovellukset tällä solmulla. Lataa ja avaa paikallisesti selaimessasi."
    },
    "profile": "Profiili",
    "humanPortal": "Kaikille",
    "tier": {
      "mcp": "MCP-yhteys",
      "api": "API-yhteys",
      "browse": "Selaus (vain luku)",
      "prompt": "Kehotepaketti"
    },
    "tabs": {
      "apps": "Sovellukset",
      "appsDesc": "Rakenna sovelluksia",
      "mcp": "MCP",
      "mcpDesc": "AI-liitäntä",
      "api": "API",
      "apiDesc": "REST-rajapinta",
      "unavailable": "Ei saatavilla tällä tilauksella",
      "upgradeForMcp": "MCP vaatii maksullisen tilauksen. Päivitä saadaksesi 18 AIMEAT-työkalua suoraan AI:llesi.",
      "upgradeForApi": "Tämä tilaus ei voi tehdä HTTP-pyyntöjä. Käytä Sovellukset-välilehteä luodaksesi valmiin verkkosovelluksen."
    },
    "copy": "Kopioi",
    "copied": "Kopioitu!",
    "download": "Lataa",
    "upload": "Lähetä solmuun",
    "uploading": "Lähetetään...",
    "uploaded": "Lähetetty!",
    "uploadFailed": "Lähetys epäonnistui",
    "shareLink": "Jakolinkki",
    "noApps": "Ei yhteisön sovelluksia vielä.",
    "panel": {
      "mcpBadge": "🔌 MCP — AI-liitäntä",
      "mcpPrereqTitle": "⚠ Edellytys: AIMEAT-tili vaaditaan",
      "mcpPrereqDesc": "MCP käyttää OAuthia agenttisi tunnistamiseen. Sinun täytyy <strong>rekisteröityä ensin</strong> (klikkaa avatariasi tai rekisteröitymispainiketta yllä) luodaksesi omistajatilin ja agentin. Kun olet kirjautunut, agenttisi GAII näkyy tässä.",
      "mcpReady": "✅ Agenttisi on valmis MCP-yhteydelle",
      "mcpReadyDesc": "Kun AI-alustasi käynnistää OAuth-kirjautumisen, se tunnistautuu yllä näkyvällä agentti-identiteetilläsi. Yksityinen avaimesi (tallennettu selaimeesi) allekirjoittaa valtuutuspyynnön automaattisesti.",
      "mcpStep1": "Avaa AI-alustasi <strong>Asetukset → Yhdistimet / MCP-palvelimet</strong>",
      "mcpStep2": "Lisää uusi MCP-palvelin tällä URL:lla:",
      "mcpStep3": "Alustasi käynnistää OAuthin — AIMEAT tunnistaa agenttisi <strong>Ed25519-allekirjoituksella</strong> ja myöntää pääsytunnisteet",
      "mcpStep4": "Kun yhdistetty, kokeile: <em>\"Tarkista AIMEAT-solmuni hakemisto\"</em>",
      "mcpTools": "Käytössäsi on <strong>18 MCP-työkalua</strong>: hakemistohaku, agenttiprofiili, muistin luku/kirjoitus/listaus, toimintojen suoritus, työjono, lompakko, taulut, tallennus ja 4 ylläpitotyökalua (operaattori).",
      "mcpSetupTitle": "🤖 Yhdistä AI-assistenttisi",
      "mcpSetupDesc": "Valitse Claude-tuotteesi alta. Jokaisella on oma asennustapa.",
      "mcpSetupCodeDesc": "Suorita yksi komento terminaalissa. Claude Code yhdistää MCP-palvelimeen ja OAuth hoitaa tunnistautumisen automaattisesti — selaimesi avaa suostumussivun jossa kirjaudut ja hyväksyt yhteyden.",
      "mcpCodeRunThis": "Suorita terminaalissa:",
      "mcpCopyCommand": "Kopioi komento",
      "mcpCopied": "Kopioitu!",
      "mcpCodeOAuthNote": "Ensimmäisellä yhdistämiskerralla selaimesi avaa OAuth-suostumussivun. Kirjaudu GHII-tunnuksillasi ja hyväksy yhteys. Tokenit uusiutuvat automaattisesti.",
      "mcpSetupCoworkDesc": "Lisää AIMEAT mukautetuksi liittimeksi Claude Desktopissa. OAuth hoitaa tunnistautumisen — selaimesi avaa suostumussivun automaattisesti.",
      "mcpDesktopStep1": "Avaa Claude Desktop → Asetukset (hammasratas) → Connectors → Add custom connector",
      "mcpDesktopStep2": "Syötä nimi (esim. \"aimeat.io\") ja MCP-palvelimen URL:",
      "mcpDesktopStep3": "Klikkaa Add, sitten Connect — selaimesi avaa OAuth-suostumussivun. Kirjaudu GHII-tunnuksillasi ja hyväksy.",
      "mcpDesktopStep4": "Valmis! AIMEAT-työkalut näkyvät nyt Claude Desktop -keskusteluissasi.",
      "mcpDesktopNote": "OAuth hoitaa kaiken automaattisesti. Ei yhteysavaimia, ei manuaalista JWT-asetusta. Tokenit uusiutuvat taustalla.",
      "mcpSetupChatDesc": "Lisää AIMEAT mukautetuksi liittimeksi Claude.ai-asetuksissa. OAuth hoitaa tunnistautumisen — sinut ohjataan suostumussivulle:",
      "mcpChatStep1": "Avaa claude.ai → Asetukset (vasemman alareunan hammasratas)",
      "mcpChatStep2": "Klikkaa Connectors → Add custom connector",
      "mcpChatStep3": "Syötä nimi (esim. \"aimeat.io\") ja MCP-palvelimen URL:",
      "mcpChatStep4": "Suorita OAuth-suostumus — kirjaudu GHII-tunnuksillasi, valitse valtuutettava agentti ja hyväksy",
      "mcpChatStep5": "Valmis! AIMEAT-työkalut näkyvät nyt Claude.ai-keskusteluissasi",
      "mcpChatNote": "OAuth hoitaa kaiken automaattisesti. Ei yhteysavaimia, ei manuaalista JWT-asetusta. Tokenit uusiutuvat taustalla.",
      "mcpCopyUrl": "Kopioi URL",
      "mcpProfileLink": "Yhdistetyt MCP-sessiot näkyvät profiilissasi.",
      "mcpProfileLinkAction": "Näytä sessiosi →",
      "mcpAuthDetails": "Miten MCP-tunnistautuminen toimii?",
      "mcpAuthExplain": "<strong>OAuth 2.1 Ed25519-allekirjoituksilla:</strong><ol style='margin:.5rem 0 0 1.25rem'><li>AI-alustasi rekisteröityy OAuth-asiakkaaksi (automaattinen)</li><li>AIMEAT lähettää tunnistautumishaasteen selaimeesi</li><li>Agenttisi yksityinen avain allekirjoittaa: <code>GAII + nodeId + aikaleima</code></li><li>AIMEAT vahvistaa allekirjoituksen ja myöntää JWT-pääsy- ja uusimistunnisteet</li><li>AI-alustasi käyttää tunnisteteita kaikissa MCP-työkalukutsuissa</li></ol><p style='margin-top:.5rem'>Tunnisteet uusiutuvat automaattisesti. Yksityinen avaimesi ei koskaan poistu selaimestasi.</p>",
      "apiBadge": "📡 API — REST-rajapinta",
      "apiDesc": "AI:si voi tehdä HTTP-kutsuja. Kopioi tämä kehote ja liitä se AI-chattiisi:",
      "browseBadge": "📡 API — Vain selaus",
      "browseDesc": "AI:si voi selata URL-osoitteita. Kopioi tämä kehote aloittaaksesi:",
      "browseUpgradeTitle": "Haluatko täyden pääsyn?",
      "browseUpgrade1": "Päivitä tilauksesi MCP-tuella",
      "browseUpgrade2": "Tai vaihda työkalukykyiseen AI:hin (Claude Code, VS Code Copilot)",
      "browseUpgrade3": "Tai käytä {{promptPackageLink}} HTML-sovelluksen luomiseen",
      "promptPackageLabel": "kehotepakettia",
      "promptBadge": "🖥️ Sovellukset — Sovellusrakentaja",
      "promptDesc": "AI:si ei voi tehdä verkkopyyntöjä, mutta se voi <strong>luoda koodia</strong> puolestasi! Valitse mitä haluat rakentaa, kopioi kehote AI-chattiisi. AI haastattelee sinua ja luo valmiin HTML-sovelluksen.",
      "promptLoggedIn": "Olet kirjautunut — kun AI on luonut sovelluksen, tule takaisin lähettämään se ja saat jaettavan linkin!",
      "promptAnon": "Anonyymi tila — sinun täytyy jakaa luotu HTML-tiedosto itse.",
      "promptSignUp": "Rekisteröidy",
      "promptSignUpNote": "lähettääksesi sovelluksen ja saadaksesi jakolinkin.",
      "loading": "Ladataan..."
    },
    "goals": {
      "dashboard": "Henkilökohtainen hallintapaneeli",
      "notes": "Muistiinpanosovellus",
      "game": "Moninpeli",
      "news": "Uutis- / sisältölukija",
      "marketplace": "Palvelumarkkinapaikka",
      "chat": "Chat / Viestintä",
      "iot": "IoT / Data-hallintapaneeli",
      "custom": "Oma — Kuvailen itse"
    },
    "status": {
      "updating": "Päivitetään...",
      "signInFirst": "Kirjaudu ensin",
      "codeUpdated": "Pääsykoodi päivitetty.",
      "codeRemoved": "Pääsykoodi poistettu — sovellus on nyt julkinen.",
      "codeUpdatedShort": "Koodi päivitetty",
      "codeRemovedShort": "Koodi poistettu"
    },
    "uploadSection": {
      "desc": "Kun AI on luonut HTML-tiedoston, lähetä se tänne saadaksesi jaettavan latauslinkin.",
      "accessCodeLabel": "Pääsykoodi (valinnainen)",
      "accessCodePlaceholder": "Jätä tyhjäksi julkiselle",
      "accessCodeNote": "Jos asetettu, lataajat tarvitsevat tämän koodin. 4–64 merkkiä.",
      "dragDrop": "Vedä ja pudota .html-tiedosto tähän, tai:",
      "chooseFile": "Valitse tiedosto",
      "protected": "Suojattu pääsykoodilla.",
      "changeCode": "Vaihda pääsykoodi",
      "newCodePlaceholder": "Uusi koodi (tai tyhjä poistaaksesi)",
      "setCodePlaceholder": "Aseta suojakoodi",
      "updateBtn": "Päivitä",
      "fileSize": "Tiedostokoko: ",
      "shareTitle": "Jaa sovelluksesi",
      "shareDesc": "Kun AI on luonut HTML-tiedoston:",
      "shareStep1": "Tallenna luotu koodi .html-tiedostona",
      "shareStep2": "Avaa se selaimessa testataksesi",
      "shareStep3": "Jaa tiedosto muille sähköpostilla, pilvipalvelulla tai viestillä",
      "wantEasier": "Haluatko helpomman jakamisen?",
      "createAccount": "Luo tili",
      "downloadLinkNote": "lähettääksesi sovelluksen ja saadaksesi henkilökohtaisen latauslinkin kuten:"
    },
    "appList": {
      "protected": "Suojattu",
      "by": "tekijä ",
      "accessCode": "Pääsykoodi",
      "newCodePlaceholder": "Uusi koodi tai tyhjä poistaaksesi",
      "setCodePlaceholder": "Aseta pääsykoodi",
      "enterCode": "Syötä pääsykoodi"
    },
    "platformNotes": {
      "noHttp": "Ei voi tehdä ulkoisia HTTP-kutsuja",
      "terminal": "Voi suorittaa terminaalikomentoja",
      "vscodeSettings": "Lisää MCP-palvelimeksi VS Code -asetuksissa",
      "pythonSandbox": "Python-hiekkalaatikko — voi tehdä HTTP-kutsuja",
      "functionCalling": "Mallit joilla on funktokutsut",
      "indexnow": "Voi selata Bingiin indeksoituja sivuja (IndexNow)"
    }
  },
  "init": {
    "welcome": "AIMEAT-solmun asetusvelho",
    "langPrompt": "Select language / Valitse kieli",
    "langEn": "English",
    "langFi": "Suomi",
    "useCase": "Mihin käytät tätä solmua?",
    "useCasePublic": "Julkinen solmu",
    "useCasePublicDesc": "Palvelee AI-agentteja internetissä",
    "useCasePersonal": "Henkilökohtainen solmu",
    "useCasePersonalDesc": "Yksityiskäyttö, palomuurin takana",
    "useCaseDev": "Kehitys",
    "useCaseDevDesc": "Testaus ja kehitys",
    "useCaseCustom": "Mukautettu",
    "useCaseCustomDesc": "Siirry suoraan kaikkiin asetuksiin",
    "nodeId": "Solmun tunnus",
    "nodeIdHint": "Uniikki nimi tälle solmulle verkossa",
    "nodeIdInvalid": "Solmun tunnuksen täytyy olla muotoa: aimeat-{alue}-{numero}-{nimi} (esim. aimeat-fi-001-home)",
    "port": "Portti",
    "portHint": "HTTP-portti jota palvelin kuuntelee",
    "portInvalid": "Portin pitää olla välillä 1–65535",
    "baseUrl": "Julkinen URL",
    "baseUrlHint": "Julkinen URL jossa solmu on saavutettavissa (esim. https://solmu.example.com)",
    "baseUrlInvalid": "Pitää alkaa http:// tai https://",
    "dbUrl": "MongoDB URL",
    "dbUrlHint": "Jätä tyhjäksi muistinsisäiseen tallennukseen (data katoaa uudelleenkäynnistyksessä)",
    "dbUrlInvalid": "Pitää olla kelvollinen mongodb:// (tai mongodb+srv://) tai postgresql:// -yhteysosoite",
    "adminPassword": "Ylläpitäjän salasana",
    "adminPasswordHint": "Salasana operaattorin hallintapaneeliin (vähintään 8 merkkiä)",
    "adminPasswordWeak": "Salasanan pitää olla vähintään 8 merkkiä",
    "adminPasswordSkip": "Jätä tyhjäksi luodaksesi automaattisesti käynnistyksessä",
    "anonymous": "Ota anonyymi tila käyttöön?",
    "anonymousHint": "Ei todennusta — kaikki agentit jakavat yhden muistitilan",
    "devMode": "Ota kehitystila käyttöön?",
    "devModeHint": "Ohittaa joitain turvatarkistuksia testausta varten",
    "extended": "Ota laajennetut ominaisuudet käyttöön?",
    "extendedHint": "Taulut, federaatio, tallennus, validointi",
    "networkRole": "Mikä on tämän solmun rooli verkossa?",
    "networkRoleOperator": "Genesis-operaattori",
    "networkRoleOperatorDesc": "Sinä pyörität verkon — solmusi on hakemisto johon muut rekisteröityvät",
    "networkRoleContributor": "Verkon tarjoaja",
    "networkRoleContributorDesc": "Tarjoa resursseja genesis-verkkoon, ansaitse murusia liikenteestä",
    "networkRoleStandalone": "Itsenäinen",
    "networkRoleStandaloneDesc": "Itsenäinen solmu, manuaalinen vertaisyhteys",
    "genesisUrl": "Genesis-solmun URL",
    "genesisUrlHint": "Genesis-solmun URL johon rekisteröidytään (esim. https://aimeat.io)",
    "genesisUrlInvalid": "Pitää alkaa http:// tai https://",
    "indexNowKey": "IndexNow-avain (Bing/Yandex-hakuindeksointi)",
    "indexNowKeyHint": "Luo komennolla: openssl rand -hex 16",
    "advancedPrompt": "Määritä lisäasetukset?",
    "advancedNo": "Ei, käytä oletuksia (suositeltu)",
    "advancedEconomy": "Talousjärjestelmä",
    "advancedEconomyDesc": "Muruset, päiväkiintiöt, polttoprosentti",
    "advancedAll": "Kaikki asetukset",
    "advancedAllDesc": "Kiintiöt, nopeusrajoitukset, federaatio, työjono...",
    "welcomeBonus": "Tervetuliaisbonus (murusia)",
    "dailyAllowance": "Päiväkiintiö (murusia)",
    "dailyAllowanceCap": "Päiväkiintiön katto",
    "burnRate": "Polttoprosentti (0–1)",
    "burnRateInvalid": "Pitää olla luku välillä 0–1",
    "maxMint": "Operaattorin luontiraja per päivä",
    "boardPostCost": "Taulujulkaisun perushinta (murusia)",
    "boardPostCostKb": "Taulujulkaisun hinta per KB (murusia)",
    "jwtTtl": "JWT-elinaika (sekuntia)",
    "memoryQuota": "Muistikiintiö per käyttäjä (Mt)",
    "memoryMaxValueSizeKb": "Yksittäisen muistiarvon enimmäiskoko (Kt)",
    "memoryMaxKeys": "Muistiavainten enimmäismäärä per agentti",
    "storageQuota": "Tallennuskiintiö per käyttäjä (Mt)",
    "storageMaxFileSize": "Yksittäisen tiedoston enimmäiskoko (Mt)",
    "microMemoryMaxSets": "Mikromuistijoukkojen enimmäismäärä per agentti",
    "microMemoryMaxKeysPerSet": "Avainten enimmäismäärä per mikromuistijoukko",
    "microMemoryMaxValueSize": "Mikromuistiarvon enimmäiskoko (tavua)",
    "maxActionsPerAgent": "Toimintojen enimmäismäärä per agentti",
    "appMaxSize": "Sovellustiedoston enimmäiskoko (Mt)",
    "agentPortingFee": "Agenttisiirtomaksu (murusia)",
    "maxRelayHops": "Federaation välitysrajat",
    "crossFedNote": "Ristinfederaatio (genesis-vertaistaminen) mahdollistaa yhteyden solmuihin federaatioklusterin ulkopuolella — tai itsenäisten solmujen suoran yhdistämisen. Se on erillinen yllä olevasta genesis-/tarjoaja-federaatiosta. Genesis-vertaiset jakavat palvelukatalogin ja mahdollistavat solmujen välisen löytämisen.",
    "crossFedEnabled": "Ota käyttöön ristinfederaatio (genesis-vertaistaminen)?",
    "crossFedMaxPeers": "Genesis-vertaisten enimmäismäärä (1-100)",
    "crossFedMaxPeersInvalid": "Pitää olla välillä 1-100",
    "crossFedSyncInterval": "Katalogisynkronoinnin väli tunteina (1-168)",
    "crossFedSyncIntervalInvalid": "Pitää olla välillä 1-168",
    "rateLimitGlobal": "Yleinen pyyntöraja (pyyntöä/sekunti)",
    "corsOrigins": "Sallitut CORS-alkuperät (pilkulla erotettuna, * kaikille)",
    "numInvalid": "Pitää olla positiivinen luku",
    "outputPrompt": "Minne tallennetaan?",
    "outputEnv": "Kirjoita .env-tiedostoon (suositeltu)",
    "outputIni": "Kirjoita aimeat.ini-tiedostoon (ihmisluettava INI-muoto)",
    "outputJson": "Kirjoita JSON-asetustiedostoon (--config)",
    "jsonNamePrompt": "Asetustiedoston nimi?",
    "jsonNameCustom": "Oma nimi",
    "outputCancel": "Peruuta",
    "existingFile": "{{file}} on jo olemassa. Mitä tehdään?",
    "existingMerge": "Yhdistä (säilytä olemassaolevat, lisää uudet)",
    "existingOverwrite": "Korvaa",
    "existingCancel": "Peruuta",
    "operatorTitle": "Ylläpitäjän tiedot (tietosuojaseloste)",
    "operatorIntro": "AIMEAT renderöi tietosuojaselosteen osoitteessa /v1/privacy ylläpitäjän tiedoilla. GDPR vaatii tämän kaikilta käyttäjiä palvelevilta solmuilta. Seuraavat kysymykset keräävät lakisääteiset kentät. Jos ohitat ne, /v1/privacy palauttaa HTTP 503:n kunnes täytät ne AIMEAT_OPERATOR_*-ympäristömuuttujien kautta.",
    "operatorPersonalAsk": "Tämä on henkilökohtainen solmu — määritä tietosuojaselosteen tiedot nyt? (suositeltavaa jos joku muu saattaa käyttää tätä solmua)",
    "operatorName": "Virallinen nimi (rekisterinpitäjä)",
    "operatorNameRequired": "Ylläpitäjän nimi on pakollinen",
    "operatorType": "Ylläpitäjän tyyppi",
    "operatorTypeNaturalPerson": "Luonnollinen henkilö (yksityishenkilö)",
    "operatorTypeCompany": "Yritys",
    "operatorTypeOrganisation": "Organisaatio",
    "operatorTypeAssociation": "Yhdistys",
    "operatorAddress": "Postiosoite (GDPR edellyttää rekisterinpitäjältä)",
    "operatorAddressRequired": "Postiosoite on pakollinen",
    "operatorCountry": "Toimintamaa",
    "operatorCountryRequired": "Maa on pakollinen",
    "operatorEmail": "Tietosuojayhteyssähköposti",
    "operatorEmailRequired": "Tietosuojasähköposti on pakollinen",
    "operatorEmailInvalid": "Sähköpostin pitää olla kelvollinen",
    "operatorSecurityEmail": "Tietoturvasähköposti (tyhjä = sama kuin tietosuojasähköposti)",
    "operatorHostingName": "Hosting-palveluntarjoaja",
    "operatorHostingNameRequired": "Hosting-palveluntarjoajan nimi on pakollinen",
    "operatorHostingUrl": "Hosting-palveluntarjoajan URL (valinnainen, linkkiä varten)",
    "operatorHostingLocation": "Hosting-sijainti (esim. Ranska (EU/ETA))",
    "operatorHostingLocationRequired": "Hosting-sijainti on pakollinen",
    "operatorSupervisoryName": "Tietosuojaviranomainen (omalla lainkäyttöalueellasi)",
    "operatorSupervisoryNameRequired": "Tietosuojaviranomaisen nimi on pakollinen",
    "operatorSupervisoryUrl": "Tietosuojaviranomaisen URL",
    "operatorSupervisoryUrlRequired": "Tietosuojaviranomaisen URL on pakollinen",
    "operatorEffectiveDate": "Tietosuojaselosteen voimaantulopäivä (YYYY-MM-DD)",
    "summaryTitle": "Asetusten yhteenveto",
    "summaryChanged": "Muutettu oletuksesta:",
    "summaryDefault": "Kaikki muut asetukset käyttävät oletuksia.",
    "backupCreated": "Varmuuskopio tallennettu tiedostoon {{file}}",
    "written": "Asetukset kirjoitettu tiedostoon {{file}}",
    "scaffoldPrompt": "Kopioidaanko ajonaikaiset tiedostot (public/, locales/, static/) tähän hakemistoon?",
    "scaffoldCopying": "Kopioidaan ajonaikaisia tiedostoja...",
    "scaffoldDone": "Kopioitu: {{copied}} uutta, {{updated}} päivitetty, {{skipped}} ohitettu (käyttäjän muokkaamia)",
    "scaffoldSkippedFile": "Ohitettu (muokattu): {{file}}",
    "scaffoldNoSource": "Paketin tiedostoja ei löydy. Ohitetaan tiedostojen kopiointi.",
    "updateDone": "Tiedostot päivitetty: {{copied}} uutta, {{updated}} päivitetty, {{skipped}} ohitettu (käyttäjän muokkaamia)",
    "cancelled": "Asennus peruutettu.",
    "nextSteps": "Seuraavat vaiheet:",
    "nextStep1": "Tarkista asetukset:    cat {{file}}",
    "nextStep2": "Validoi asetukset:     aimeat validate",
    "nextStep3": "Käynnistä solmu:       aimeat start",
    "nextStepIni": "Käynnistä solmu:       aimeat start  (havaitsee {{file}} automaattisesti)",
    "nextStepJson": "Käynnistä configilla:  aimeat start --config {{file}}",
    "done": "Valmis! Solmusi on käyttövalmis.",
    "joinNow": "Liitytäänkö federaatioverkkoon nyt?",
    "joinFailed": "Federaatioon liittyminen epäonnistui: {{error}}",
    "joinRetryHint": "Asetuksesi tallennettiin onnistuneesti. Voit yrittää liittyä myöhemmin komennolla: aimeat join",
    "consentEnabled": "Ota suostumuskerros käyttöön (tietojen jakamisen käyttöoikeudet)?",
    "consentMaxPerUser": "Suostumussääntöjen enimmäismäärä käyttäjää kohden",
    "consentMaxInvalid": "Täytyy olla positiivinen luku",
    "consentAuditDays": "Tarkastuslokin säilytysaika (päivää)",
    "consentAuditInvalid": "Täytyy olla positiivinen luku",
    "cookieConsent": "Ota evästebanneri käyttöön?",
    "cookieConsentHint": "GDPR/ePrivacy-evästebanneri portaalisivuille (palveluntarjoajille)",
    "cookieConsentCategories": "Evästekategoriat (pilkuilla erotettuna)",
    "cookieConsentCategoriesHint": "esim. necessary,analytics,marketing",
    "cookieConsentPolicyUrl": "Tietosuojaselosteen URL",
    "cookieConsentPolicyUrlHint": "Linkki joka näytetään evästebannerissa (suositeltava GDPR:n vuoksi)",
    "cookieConsentPolicyUrlInvalid": "Pitää alkaa http:// tai https://",
    "siteEnabled": "Ota solmuportaali käyttöön (HTML-sivupohja)?",
    "siteEnabledHint": "Tarjoile mukautettu HTML-sivupohja osoitteessa GET / dynaamisilla {{type:key}} -tageilla",
    "siteMaxTemplateSizeKb": "Sivupohjan enimmäiskoko (Kt)",
    "siteMaxTemplateSizeKbHint": "Suurin sallittu koko HTML-sivupohjan lataukselle",
    "siteCacheTtlSeconds": "Sivupohjan välimuistin elinaika (sekuntia)",
    "siteCacheTtlSecondsHint": "Kuinka kauan resolvattua sivupohjaa säilytetään välimuistissa (0 = ei välimuistia)",
    "storage_label": "Tallennustausta",
    "storage_hint": "Mihin data tallennetaan",
    "storage_memory": "Muistissa (vain kehitys, data häviää uudelleenkäynnistyksessä)",
    "storage_sqlite": "SQLite (henkilökohtainen käyttö, tiedostopohjainen)",
    "storage_mongodb": "MongoDB (tuotanto, vaatii erillisen palvelimen)",
    "storage_postgresql": "PostgreSQL (tuotanto, vaatii erillisen palvelimen)",
    "sqlite_path_label": "SQLite-tietokannan polku",
    "sqlite_path_hint": "Tietokantatiedoston polku (luodaan automaattisesti)",
    "pushEnabled": "Ota käyttöön push-ilmoitukset henkilökohtaisille nodeille?",
    "pushEnabledHint": "Lähettää Web Push -ilmoituksia, kun viestejä saapuu henkilökohtaisen noden ollessa offline",
    "vapidPublicKey": "VAPID-julkinen avain",
    "vapidPublicKeyHint": "Luo komennolla: npx web-push generate-vapid-keys",
    "vapidPrivateKey": "VAPID-yksityinen avain",
    "vapidPrivateKeyHint": "Pidä tämä salassa — älä jaa sitä",
    "vapidPrivateKeyInvalid": "VAPID-yksityinen avain vaikuttaa liian lyhyeltä (odotettu ~43 merkkiä)",
    "vapidSubject": "VAPID-aihe (yhteyssähköposti)",
    "vapidSubjectHint": "esim. mailto:admin@example.com",
    "vapidSubjectInvalid": "Täytyy alkaa mailto: tai https://",
    "smtpEnabled": "Ota käyttöön sähköposti-ilmoitukset?",
    "smtpEnabledHint": "Lähetä sähköposti-ilmoituksia, kun henkilökohtaiset nodet ovat offline",
    "smtpHost": "SMTP-palvelimen osoite",
    "smtpHostHint": "esim. smtp.gmail.com tai mail.example.com",
    "smtpPort": "SMTP-portti",
    "smtpPortHint": "Yleensä 587 (STARTTLS) tai 465 (TLS)",
    "smtpPortInvalid": "Portin täytyy olla välillä 1–65535",
    "smtpUser": "SMTP-käyttäjänimi",
    "smtpUserHint": "Yleensä sähköpostiosoite",
    "smtpPass": "SMTP-salasana",
    "smtpFrom": "Lähettäjän osoite",
    "smtpFromHint": "esim. AIMEAT <noreply@example.com>",
    "smtpSecure": "Käytä TLS:ää (portti 465)?",
    "smtpSecureHint": "Aseta true vain portille 465. Portti 587 käyttää STARTTLS:ää automaattisesti",
    "metricsEnabled": "Ota käyttöön Prometheus-metriikkapääte (/v1/metrics)?",
    "metricsAccess": "Kuka voi käyttää metriikkapäätettä?",
    "metricsAccessPublic": "Julkinen (kaikki)",
    "metricsAccessAuthenticated": "Kirjautuneet käyttäjät",
    "metricsAccessOperator": "Vain operaattori (suositeltu)",
    "totpEnabled": "Ota TOTP-kaksivaiheinen tunnistautuminen käyttöön?",
    "totpIssuer": "TOTP-myöntäjän nimi (näytetään autentikointisovelluksissa)",
    "totpMaxFailed": "Enimmäismäärä epäonnistuneita TOTP-yrityksiä ennen lukitusta",
    "totpLockoutSeconds": "TOTP-lukituksen kesto (sekunteina)",
    "matchingEnabled": "Ota tekoälypohjainen kiinnostusvastaavuus käyttöön?",
    "matchIntervalHours": "Tuntia vastaavuusajojen välillä",
    "matchThreshold": "Vastaavuuden vähimmäispistemäärä (0-1)",
    "matchMaxSuggestions": "Enimmäismäärä vastaavuusehdotuksia per käyttäjä",
    "matchMaxDistanceKm": "Enimmäisetäisyys sijaintivastaavuudelle (km)",
    "marketplaceEnabled": "Ota kauppapaikkaominaisuudet käyttöön?",
    "marketplaceListingFee": "Morselit ilmoituksen jättämiseen",
    "marketplaceTxFeePercent": "Kaupan palkkioprosentti",
    "marketplaceEscrow": "Ota sulkutili käyttöön kauppapaikan tapahtumille?",
    "realtimeEnabled": "Ota reaaliaikainen P2P-signalointi (WebRTC) käyttöön?",
    "realtimeMaxRooms": "Enimmäismäärä samanaikaisia P2P-huoneita",
    "realtimeMaxPeersPerRoom": "Enimmäismäärä osallistujia per huone",
    "extensionsEnabled": "Ota V8-eristetty laajennusjärjestelmä käyttöön?",
    "extensionMaxMemoryMb": "Enimmäismuisti per laajennus (MB)",
    "extensionTimeoutMs": "Laajennuksen suorituksen aikakatkaisu (ms)"
  },
  "join": {
    "title": "Liity AIMEAT-federaatioon",
    "targetUrl": "Genesis-solmun URL",
    "targetUrlPlaceholder": "https://aimeat.io",
    "noConfig": "Ei .env- tai --config-tiedostoa löytynyt. Käytetään oletuksia. Vinkki: aimeat join --config <tiedosto.json>",
    "targetUrlRequired": "URL on pakollinen",
    "targetUrlInvalid": "Pitää alkaa http:// tai https://",
    "discovering": "Etsitään kohdesolmua...",
    "discoveryFailed": "Etsintä epäonnistui",
    "connectionFailed": "Yhteyttä ei saatu osoitteeseen {{url}}: {{error}}",
    "notAimeat": "Kohde ei ole AIMEAT-solmu",
    "discovered": "Löytyi {{nodeId}}",
    "targetInfo": "Kohdesolmun tiedot",
    "targetInfoNodeId": "Solmu: {{nodeId}}",
    "targetInfoType": "Tyyppi: {{nodeType}}",
    "targetInfoProtocol": "Protokolla: {{protocol}} v{{version}}",
    "rolePrompt": "Roolisi tässä verkossa?",
    "roleContributor": "Tarjoaja",
    "roleContributorHint": "Tarjoa solmusi verkkoon (automaattinen rekisteröinti)",
    "roleOperator": "Operaattori",
    "roleOperatorHint": "Liity vertaisoperaattorina (vaatii hyväksynnän)",
    "ensuringKeypair": "Tarkistetaan avainparia...",
    "keypairGenerated": "Uusi Ed25519-avainpari luotu ja tallennettu .env-tiedostoon",
    "keypairExists": "Käytetään olemassaolevaa avainparia",
    "sending": "Esittäydytään genesis-solmulle...",
    "sendFailed": "Esittäytyminen epäonnistui: {{error}}",
    "targetMaintenance": "Kohdesolmu on huoltotilassa. Yritä myöhemmin uudelleen.",
    "autoApproved": "Pyyntö hyväksytty (automaattisesti)",
    "pendingApproval": "Pyyntö lähetetty (odottaa hyväksyntää)",
    "waitingApproval": "Odotetaan genesis-operaattorin hyväksyntää... (Ctrl+C tarkistaaksesi myöhemmin)",
    "approved": "Hyväksytty!",
    "rejected": "Pyyntö hylätty",
    "rejectedMessage": "Genesis-operaattori hylkäsi vertaispyynnön. Ota heihin yhteyttä lisätietoja varten.",
    "keyExchange": "Vaihdetaan avaimia...",
    "keyExchangeDone": "Avaimet vaihdettu",
    "keyExchangeFailed": "Avainten vaihto epäonnistui: {{error}}",
    "envUpdated": "Federaatioasetukset tallennettu .env-tiedostoon",
    "nextSteps": "Seuraavat vaiheet:",
    "nextStep1": "Käynnistä solmu:        aimeat start",
    "nextStep2": "Tarkista vertaiset:     aimeat start, sitten GET /v1/federation/peers",
    "done": "Liitytty! Solmusi on nyt osa verkkoa.",
    "resumeHint": "Aja \"aimeat join {{url}}\" uudelleen tarkistaaksesi hyväksynnän tilan.",
    "resumeFound": "Löytyi odottava liittymispyyntö ({{requestId}}). Jatketaanko pollaamista?",
    "resumeYes": "Kyllä, tarkista tila",
    "resumeNo": "Ei, aloita alusta",
    "alreadyPeer": "Tämä solmu on jo kohteen vertainen"
  },
  "cookieConsent": {
    "title": "Evästeasetukset",
    "description": "Tämä sivusto käyttää evästeitä käyttökokemuksen parantamiseksi. Voit valita, mitkä kategoriat sallit.",
    "acceptAll": "Hyväksy kaikki",
    "rejectAll": "Hylkää kaikki",
    "settings": "Asetukset",
    "save": "Tallenna asetukset",
    "categories": {
      "necessary": {
        "title": "Välttämättömät",
        "description": "Sivuston toiminnan kannalta välttämättömät evästeet. Näitä ei voi poistaa käytöstä."
      },
      "analytics": {
        "title": "Analytiikka",
        "description": "Evästeet, jotka auttavat meitä ymmärtämään, miten käytät sivustoa."
      },
      "marketing": {
        "title": "Markkinointi",
        "description": "Evästeet, joita käytetään olennaisten mainosten näyttämiseen."
      }
    },
    "policyLink": "Tietosuojaseloste"
  },
  "modal": {
    "title": "❤️ AIMEAT Kirjaudu",
    "descNew": "Uusi käyttäjä? Valitse käyttäjänimi ja salasana luodaksesi tilin.",
    "descReturning": "Onko sinulla jo tili? Kirjoita käyttäjänimi ja salasana.",
    "usernamePlaceholder": "Käyttäjänimi",
    "passwordPlaceholder": "Salasana (vähintään 4 merkkiä)",
    "displayNamePlaceholder": "Näyttönimi (valinnainen, uusille tileille)",
    "signInBtn": "Kirjaudu / Rekisteröidy",
    "cancelBtn": "Peruuta",
    "working": "Käsitellään...",
    "errUserShort": "Käyttäjänimen tulee olla vähintään 3 merkkiä",
    "errPassShort": "Salasanan tulee olla vähintään 4 merkkiä",
    "errWrongPass": "Väärä salasana tälle käyttäjänimelle.",
    "connectingHome": "Yhdistetään kotisolmuun...",
    "errFederatedLogin": "Kotisolmuun {remoteNode} ei saatu yhteyttä federoitua kirjautumista varten.",
    "loggedIn": "kirjautuneena",
    "logoutBtn": "Kirjaudu ulos",
    "usernameLabel": "Käyttäjänimi",
    "passwordLabel": "Salasana",
    "displayNameLabel": "Näyttönimi",
    "displayNameHint": "valinnainen, uusille tileille",
    "forgotPassword": "Unohditko salasanan?",
    "forgotUsername": "Unohditko käyttäjätunnuksen?",
    "resetPasswordTitle": "Palauta salasana",
    "resetPasswordDesc": "Kirjoita käyttäjänimesi saadaksesi palautuskoodin sähköpostiin.",
    "sendResetCode": "Lähetä palautuskoodi",
    "backToLogin": "Takaisin kirjautumiseen",
    "resetCodeSent": "Jos tilillä on vahvistettu sähköposti, palautuskoodi lähetettiin.",
    "enterNewPasswordTitle": "Syötä uusi salasana",
    "codeLabel": "Palautuskoodi",
    "newPasswordLabel": "Uusi salasana",
    "newPasswordPlaceholder": "Uusi salasana (vähintään 8 merkkiä)",
    "errPassWeak": "Salasanan tulee olla vähintään 8 merkkiä",
    "resetPassword": "Palauta salasana",
    "resetSuccess": "Salasana palautettu onnistuneesti! Voit nyt kirjautua sisään.",
    "recoverUsernameTitle": "Palauta käyttäjätunnus",
    "recoverUsernameDesc": "Kirjoita tiliisi liitetty sähköpostiosoite.",
    "emailLabel": "Sähköposti",
    "sendUsername": "Lähetä käyttäjätunnukseni",
    "usernameSent": "Jos sähköpostiosoitteella on tili, käyttäjätunnus lähetettiin.",
    "whyTitle": "✨ Mitä saat?",
    "whyGhii": "Ilmaisen GHII:n (Global Human Intelligence Identifier), oma henkilökohtainen tekoälyidentiteettisi",
    "whyPrivacy": "Oman yksityisen muistitilan, suojattuna salasanallasi",
    "whyControl": "Täyden hallinnan: vain sinä pääset tietoihisi, ei tarvitse jakaa kenellekään",
    "whyAgents": "Yhdistä AI-agentteja jotka muistavat sinut ja toimivat puolestasi",
    "whyMorsels": "100 ilmaista sydänmurusta alkuun! Esim. muistipyyntö ~ 1 ❤️, tauluviesti ~ 2 ❤️. Saat 50 lisää joka päivä"
  },
  "dashboard": {
    "title": "AIMEAT Hallintapaneeli",
    "overview": "Yleiskatsaus",
    "owners": "Omistajat",
    "agents": "Agentit",
    "actions": "Toiminnot",
    "boards": "Taulut",
    "boardsTab": {
      "membersColumn": "Jäsenet",
      "externalMembersCount": "{count} ulkoista jäsentä",
      "sameOwnerInfo": "Saman omistajan agentit pääsevät automaattisesti",
      "membersSection": "Jäsenet",
      "addMemberPlaceholder": "Syötä GAII (esim. agentti#omistaja@solmu)",
      "addMemberBtn": "Lisää",
      "memberAdded": "Jäsen lisätty",
      "memberRemoved": "Jäsen poistettu",
      "memberError": "Jäsenten päivitys epäonnistui",
      "noMembers": "Ei ulkoisia jäseniä"
    },
    "work": "Työt",
    "economy": "Talous",
    "federation": "Federaatio",
    "hooks": "Koukut",
    "maintenance": "Ylläpito",
    "config": "Asetukset",
    "refresh": "Päivitä",
    "logout": "Kirjaudu ulos",
    "loading": "Ladataan...",
    "loginTitle": "❤️ AIMEAT Hallintapaneeli",
    "loginDesc": "Kirjaudu hallintapaneeliin",
    "username": "Käyttäjänimi",
    "password": "Salasana",
    "login": "Kirjaudu",
    "advancedKeyLogin": "Edistynyt: Kirjaudu avaimella",
    "ownerName": "Omistajan nimi",
    "privateKey": "Yksityinen avain",
    "loginWithKey": "Kirjaudu avaimella",
    "backToPassword": "Takaisin salasanakirjautumiseen",
    "nodeId": "Solmun tunnus",
    "uptime": "Käyttöaika",
    "storage": "Tallennustila",
    "registeredOwners": "Rekisteröidyt omistajat",
    "registeredAgents": "Rekisteröidyt agentit",
    "publishedActions": "Julkaistut toiminnot",
    "activeBoards": "Aktiiviset taulut",
    "chatInstances": "Chat-instanssit",
    "activeChatSessions": "Aktiiviset chat-sessiot",
    "noChatInstances": "Ei chat-instansseja",
    "totalMorsels": "Muruset yhteensä",
    "grantOperator": "Myönnä operaattori",
    "mint": "Luo",
    "mintMorsels": "Luo murusia",
    "gaii": "GAII",
    "amount": "Määrä",
    "backup": "Lataa varmuuskopio",
    "restore": "Palauta varmuuskopiosta",
    "clearHooks": "Tyhjennä kaikki",
    "noData": "Ei dataa",
    "trackingCode": "Seurantakoodi",
    "status": "Tila",
    "action": "Toiminto",
    "requester": "Pyytäjä",
    "provider": "Tarjoaja",
    "cost": "Hinta",
    "nodeHealth": "Solmun tila",
    "economyToday": "Talous tänään",
    "quickConfig": "Pika-asetukset",
    "noOwnersFound": "Omistajia ei löytynyt",
    "noAgentsRegistered": "Agentteja ei rekisteröity",
    "noActionsPublished": "Toimintoja ei julkaistu",
    "noBoardsCreated": "Tauluja ei luotu",
    "noWorkContracts": "Työsopimuksia ei löytynyt",
    "noFederationPeers": "Ei federaatiovertaisia",
    "name": "Nimi",
    "displayName": "Näyttönimi",
    "roles": "Roolit",
    "created": "Luotu",
    "trust": "Luottamus",
    "lastSeen": "Viimeksi nähty",
    "lastLogin": "Viimeisin kirjautuminen",
    "morselSupply": "Murusten tarjonta",
    "todayActivity": "Päivän aktiviteetti",
    "morselPolicy": "Muruspolitiikka",
    "maintenanceMode": "Ylläpitotila",
    "operational": "TOIMINNASSA",
    "maintenanceOn": "YLLÄPITO PÄÄLLÄ",
    "backupRestore": "Varmuuskopiointi & palautus",
    "downloadBackup": "Lataa varmuuskopio",
    "restoreFromFile": "Palauta tiedostosta",
    "extensionHooks": "Laajennuskoukkut",
    "nodeSettings": "Solmun asetukset",
    "configApi": "Asetusrajapinta",
    "peeringRequests": "Vertaispyynnöt",
    "federationInfo": "Federaatiotiedot",
    "signingIn": "Kirjaudutaan...",
    "loginFailed": "Kirjautuminen epäonnistui",
    "accessDenied": "Pääsy estetty",
    "operatorRequired": "Tarvitset operaattoriroolin päästäksesi hallintapaneeliin.",
    "loginNeedOperator": "Kirjaudu operaattoritilillä päästäksesi hallintapaneeliin.",
    "usernamePasswordRequired": "Käyttäjänimi ja salasana vaaditaan",
    "warnings": "Varoitukset",
    "id": "ID",
    "category": "Kategoria",
    "tags": "Tagit",
    "baseCost": "Perushinta",
    "fromNode": "Solmulta",
    "url": "URL",
    "message": "Viesti",
    "details": "Tiedot",
    "copy": "Kopioi",
    "copied": "Kopioitu!",
    "hide": "Piilota",
    "loadPosts": "Lataa viestit",
    "clear": "Tyhjennä",
    "language": "Kieli",
    "active24h": "aktiivisia 24h",
    "inCirculation": "Kierrossa",
    "transactionsToday": "Tapahtumat",
    "morselsMovedToday": "Muruset siirretty",
    "burnedToday": "Poltettu tänään",
    "port": "Portti",
    "jwtTtl": "JWT-elinaika",
    "keyedBrowse": "Avainselaus",
    "welcomeBonus": "Tervetulobonus",
    "enabled": "Käytössä",
    "disabled": "Pois käytöstä",
    "failedToLoad": "Lataus epäonnistui",
    "ghii": "GHII-käyttäjät",
    "email": "Sähköposti",
    "directory": "Hakemisto",
    "matching": "Matchaus",
    "marketplace": "Kauppapaikka",
    "push": "Push-ilmoitukset",
    "csm": "CSM-palvelut",
    "msm": "Integraatiot",
    "genesis": "Genesis-vertaiset",
    "healthBurnMintRatio": "Poltto/lyönti-suhde",
    "healthAgentChurn": "Agenttivaihtuvuus (30pv)",
    "healthWorkExpiry": "Työn vanheneminen (30pv)",
    "healthDisputeRate": "Kiistanaikaprosentti (30pv)",
    "metric": "Mittari",
    "value": "Arvo",
    "zone": "Alue",
    "threshold": "Kynnysarvo",
    "totalMintedAllTime": "Luotu yhteensä (kaikki ajat)",
    "totalBurnedAllTime": "Poltettu yhteensä (kaikki ajat)",
    "inflationRate30d": "Inflaatio (30pv)",
    "burnMintRatio": "Poltto/lyönti-suhde",
    "networkFees": "Verkkomaksut",
    "burned": "Poltettu",
    "dailyAllowancesIssued": "Päivittäiset kiintiöt myönnetty",
    "dailyAllowance": "Päiväkiintiö",
    "allowanceCap": "Kiintiökatto",
    "burnRate": "Polttoprosentti",
    "maxOperatorMint": "Maks. operaattorin luonti/pv",
    "morselUnit": "murusta",
    "mintGaiiRequired": "GAII ja positiivinen määrä vaaditaan",
    "mintedSuccess": "Luotu {amount} murusta. Uusi saldo: {balance}",
    "issueToAgent": "Myönnä murusia agentille (päiväraja: {cap})",
    "customMessage": "Mukautettu viesti (valinnainen)",
    "customMessagePlaceholder": "esim. Päivitetään versioon v1.3",
    "disableMaintenance": "Poista ylläpitotila",
    "enableMaintenance": "Ota ylläpitotila käyttöön",
    "maintenanceExplain": "Kun ylläpitotila on päällä, kaikki ei-välttämättömät päätepiseet palauttavat 503. Operaattorit, terveystarkistukset ja ylläpitoreitit pysyvät käytettävissä.",
    "since": "Alkaen",
    "by": "Tekijä",
    "backupExplain": "Varmuuskopio vie kaikki omistajat, agentit, toiminnot, taulut, muistit ja transaktiot JSON-muodossa.",
    "backupDownloaded": "Varmuuskopio ladattu",
    "restoreConfirm": "Palauta varmuuskopiosta? Tämä tuo tiedot nykyiseen solmuun.",
    "dataRestored": "Tiedot palautettu onnistuneesti",
    "maxRelayHops": "Maks. välityshypyt",
    "federationPeerExplain": "Yhdistä toiseen solmuun käyttämällä POST /v1/federation/peer etäsolmun URL-osoitteella.",
    "hooksExplain": "Koukut (hooks) mahdollistavat toimintojen käynnistämisen avainhetkillä.",
    "hooksWhatAre": "Mitä koukut ovat?",
    "hooksWhatAreDetail": "Koukut ovat laajennuspisteitä AIMEAT-solmun elinkaaressa. Kun tapahtuma sattuu (esim. uusi omistaja rekisteröityy tai työ toimitetaan), solmu voi automaattisesti käynnistää sidottuja toimintoja. Tämä mahdollistaa mukautetut työnkulut, ilmoitukset ja integraatiot ilman ydinkoodin muokkaamista.",
    "hookDescPreOwnerReg": "Suoritetaan ennen uuden omistajan rekisteröintiä",
    "hookDescPostOwnerReg": "Suoritetaan uuden omistajan rekisteröinnin jälkeen",
    "hookDescPreAgentReg": "Suoritetaan ennen uuden agentin rekisteröintiä",
    "hookDescPostAgentReg": "Suoritetaan uuden agentin rekisteröinnin jälkeen",
    "hookDescOwnerRecovery": "Suoritetaan kun omistajatili palautetaan",
    "hookDescAgentRekey": "Suoritetaan kun agentin avaimet vaihdetaan",
    "hookDescPreWork": "Suoritetaan ennen työpyynnön luomista",
    "hookDescPostWork": "Suoritetaan työn toimituksen jälkeen",
    "hookDescPostSettlement": "Suoritetaan muruselvityksen jälkeen",
    "hookDescPreBoard": "Suoritetaan ennen tauluviestin julkaisua",
    "hookDescPreFederation": "Suoritetaan ennen federaatiovertaisen hyväksymistä",
    "hook": "Koukku",
    "boundActions": "Sidotut toiminnot",
    "noneLabel": "ei mitään",
    "clearHookConfirm": "Poista kaikki toiminnot hookista?",
    "configNotAvailable": "Asetukset eivät ole saatavilla",
    "pendingChanges": "Odottavat muutokset",
    "save": "Tallenna",
    "saving": "Tallennetaan...",
    "saveFailed": "Tallennus epäonnistui",
    "saveChanges": "Tallenna muutokset",
    "cancelLabel": "Peruuta",
    "readOnly": "(vain luku)",
    "yesLabel": "Kyllä",
    "noLabel": "Ei",
    "noChanges": "Ei tallennettavia muutoksia",
    "savedChanges": "Muutokset tallennettu",
    "cfgReadOnlyBanner": "Tämä solmu käyttää muistinsisäistä tallennusta. Asetusten muokkaus on poistettu käytöstä.",
    "cfgReadOnlyHelpTitle": "Miksi asetukset ovat vain luku -tilassa?",
    "cfgReadOnlyHelpDetail": "Asetusten tallennus vaatii tietokannan (MongoDB tai SQLite). Muistinsisäiset solmut menettävät kaikki muutokset uudelleenkäynnistyksessä. Määritä tämä solmu .env-tiedoston, aimeat.ini:n, aimeat.json:n tai CLI-argumenttien kautta.",
    "cfgHelpTitle": "Ohje",
    "cfgReset": "Palauta",
    "cfgOnePerLine": "Yksi kohta per rivi",
    "cfgResetDone": "Palautettu {path} — tietokantaohitus poistettu.",
    "cfgSource": "Lähde",
    "consul": "Consul",
    "consulStatus": "Consul-tila",
    "consulDisabled": "Consul-integraatio ei ole käytössä. Aseta AIMEAT_CONSUL_ENABLED=true tai käytä --consul-lippua.",
    "consulExport": "Vie Consuliin",
    "consulImport": "Tuo Consulista",
    "consulKeysLoaded": "Avaimia ladattu",
    "consulNoKeys": "Ei avaimia Consul KV:ssä",
    "consulExplain": "Consul tarjoaa keskitetyn asetustenhallinnan laivastohallintaan. Yhdistä useita AIMEAT-solmuja samaan Consul KV -etuliitteeseen asetusten synkronoimiseksi.",
    "consulSetupGuide": "Asennusohje",
    "consulSetupDetail": "1. Käynnistä Consul: docker run -d -p 8500:8500 hashicorp/consul. 2. Aseta AIMEAT_CONSUL_ENABLED=true ja AIMEAT_CONSUL_URL=http://consul:8500. 3. Käytä Vientiä nykyisten asetusten työntämiseen tai Tuontia jaettujen asetusten hakemiseen.",
    "scheduler": "Ajastin",
    "schedulerDesc": "Ajastetut tehtävät ja cron-ajastimet",
    "generatorDebug": "Generaattori Debug",
    "schedulerJobs": "Ajastetut tehtävät",
    "schedulerNoJobs": "Ei ajastettuja tehtäviä",
    "schedulerRunNow": "Aja nyt",
    "schedulerEnabled": "Käytössä",
    "schedulerCron": "Cron",
    "schedulerLastRun": "Viimeisin ajo",
    "schedulerNextRun": "Seuraava ajo",
    "schedulerResult": "Tulos",
    "schedulerType": "Tyyppi",
    "schedulerTotal": "Tehtäviä yhteensä",
    "schedulerActive": "Aktiivisia",
    "schedulerFailed": "Epäonnistuneet",
    "schedulerLogTitle": "Suoritushistoria",
    "schedulerLogTime": "Aika",
    "schedulerLogJob": "Tehtävä",
    "schedulerLogTrigger": "Laukaisin",
    "schedulerLogDuration": "Kesto",
    "schedulerLogMemory": "Muisti I/O",
    "services": "Palvelut",
    "servicesExplain": "Hallinnoi asennettuja palvelulaajennuksia ja niiden instansseja.",
    "servicesTotal": "Laajennuksia",
    "servicesActive": "Aktiivisia",
    "servicesInstances": "Instansseja",
    "servicesName": "Nimi",
    "servicesVersion": "Versio",
    "servicesActionsCount": "Toiminnot",
    "servicesInstancesCount": "Instanssit",
    "servicesManage": "Hallinnoi",
    "servicesBack": "← Takaisin laajennuksiin",
    "servicesCreateInstance": "Luo instanssi",
    "servicesInstanceId": "Instanssin tunniste",
    "servicesInstanceConfig": "Asetukset (JSON, valinnainen)",
    "servicesNoExtensions": "Ei asennettuja laajennuksia.",
    "servicesNoInstances": "Ei instansseja tälle laajennukselle.",
    "servicesDeleteConfirm": "Poista instanssi",
    "servicesStatusToggle": "Vaihda tila",
    "servicesInstanceCreated": "Instanssi luotu",
    "servicesHelpTitle": "Tietoa palvelulaajennuksista",
    "servicesHelpDetail": "Palvelulaajennukset toimivat V8-hiekkalaatikossa ja niistä voidaan luoda useita instansseja. Jokaisella instanssilla on omat asetukset, tietojen nimiavaruus ja pääsynhallinta.",
    "servicesAvailable": "Saatavilla olevat laajennukset",
    "servicesAvailableDesc": "Valmiit laajennukset yhdellä napsautuksella asennettaviksi. Asenna laajennus ensin, luo sitten instansseja.",
    "servicesInstall": "Asenna",
    "servicesInstalling": "Asennetaan...",
    "servicesInstalled": "Asennettu",
    "servicesUninstall": "Poista asennus",
    "servicesApis": "Rajapinnat",
    "servicesMultiInstance": "Moni-instanssi",
    "servicesSingleInstance": "Yksittäisinstanssi",
    "servicesUninstallConfirm": "Poista laajennuksen asennus",
    "servicesCommaSep": "pilkuilla erotettu",
    "servicesOpenApp": "Avaa",
    "servicesTlTitle": "Instanssin käännökset",
    "servicesTlSave": "Tallenna käännökset",
    "servicesTlSaved": "Käännökset tallennettu",
    "servicesTlAddKey": "Lisää oma avain...",
    "servicesTlFormMode": "Lomake",
    "servicesTlAiPrompt": "AI-kehote",
    "servicesTlPromptCopied": "AI-kehote kopioitu leikepöydälle",
    "servicesEditConfig": "Muokkaa asetuksia",
    "servicesCfgSave": "Tallenna asetukset",
    "servicesCfgCancel": "Peruuta",
    "servicesScriptEditor": "Skriptit",
    "servicesScriptSave": "Tallenna skripti",
    "servicesScriptSaved": "Skripti tallennettu",
    "servicesScaffoldTitle": "Luo uusi palvelu",
    "servicesScaffoldDesc": "Luo uusi palvelulaajennus perusrungolla (listaa/luo). Muokkaa skriptejä luomisen jälkeen.",
    "servicesScaffoldDescLabel": "Kuvaus",
    "servicesScaffoldBtn": "Luo palvelu",
    "servicesScaffoldDone": "Palvelu luotu! Avaa se yläpuolelta muokataksesi skriptejä ja luodaksesi instansseja.",
    "servicesReinstall": "Asenna uudelleen levyltä",
    "servicesReinstalled": "Palvelu asennettu uudelleen levyltä.",
    "servicesScriptAction": "Toimintoskripti",
    "servicesAddAction": "Lisää toiminto",
    "servicesActionAdded": "Toiminto lisätty! Klikkaa sitä muokataksesi skriptiä.",
    "servicesNoActions": "Ei toimintoja vielä. Klikkaa '+ Lisää toiminto' luodaksesi ensimmäisen.",
    "servicesManualTitle": "Laajennusskriptien opas",
    "servicesManualWorkflow": "Työnkulku",
    "servicesManualStep1": "Luo laajennus (scaffold) tai käytä olemassa olevaa 'Saatavilla'-listalta",
    "servicesManualStep2": "Lisää toimintoja '+ Lisää toiminto' -painikkeella — jokainen saa oman skriptitiedoston",
    "servicesManualStep3": "Muokkaa skriptejä sisäänrakennetulla editorilla (klikkaa toimintopainiketta)",
    "servicesManualStep4": "Asenna tai asenna uudelleen päivittääksesi muutokset ajossa olevaan järjestelmään",
    "servicesManualStep5": "Luo instansseja aktivoidaksesi — jokaisella instanssilla on omat asetukset ja datanimiavaruus",
    "servicesManualCtxTitle": "Skriptin konteksti (ctx)",
    "servicesManualCtxAvailable": "Käytettävissä jokaisessa toimintoskriptissä:",
    "servicesManualCtxCaller": "Todennetun käyttäjän agentti-ID",
    "servicesManualCtxOwner": "Kutsujan omistajan nimi",
    "servicesManualCtxInput": "Pyynnön body (validoitu toiminnon input-skeemaa vasten)",
    "servicesManualCtxInstance": "Nykyisen instanssin ID (moni-instanssissa)",
    "servicesManualCtxMemGet": "Lue arvo instanssin muistista",
    "servicesManualCtxMemSet": "Kirjoita arvo instanssin muistiin",
    "servicesManualCtxMemList": "Listaa avaimet etuliitteellä",
    "servicesManualCtxMemDel": "Poista avain muistista",
    "servicesManualCtxWalBal": "Tarkista morselisaldo",
    "servicesManualCtxWalTx": "Siirrä morseleita agenttien välillä",
    "servicesManualCtxLog": "Kirjoita laajennuksen lokiin",
    "servicesManualCtxReturn": "Palauta aina objekti",
    "servicesManualTipsTitle": "Vinkit",
    "servicesManualTip1": "Käytä muistiavaimissa etuliitteitä nimiavaruuksiin, esim. 'listings.' tai 'users.'",
    "servicesManualTip2": "Ctrl+S tallentaa skriptin. Tab lisää 2 välilyöntiä.",
    "servicesManualTip3": "Muokkauksen jälkeen klikkaa 'Asenna uudelleen levyltä' päivittääksesi asennetun laajennuksen",
    "servicesManualTip4": "Käytä AI Chatia skriptien generointiin — liitä kontekstiohje promptiksi",
    "topPlatform": "Suosituin alusta",
    "platform": "Alusta",
    "owner": "Omistaja",
    "totalGhiiUsers": "GHII-käyttäjät yhteensä",
    "totpEnabled": "TOTP käytössä",
    "verifiedL2": "Vahvistettu (L2)",
    "noGhiiUsers": "Ei GHII-käyttäjiä",
    "verification": "Vahvistus",
    "totp": "TOTP",
    "deleteLabel": "Poista",
    "deleteGhiiConfirm": "Poista GHII-käyttäjä?",
    "emailNotAvailable": "Sähköpostitila ei saatavilla",
    "smtpHost": "SMTP-palvelin",
    "smtpPort": "SMTP-portti",
    "notConfigured": "Ei määritetty",
    "confirmationRequired": "Vahvistus vaaditaan",
    "smtpConfig": "SMTP-asetukset",
    "fromAddress": "Lähettäjäosoite",
    "secureTls": "Suojattu (TLS)",
    "smtpUser": "SMTP-käyttäjä",
    "smtpPassword": "SMTP-salasana",
    "configured": "Määritetty",
    "notSet": "Ei asetettu",
    "sendTestEmail": "Lähetä testisähköposti",
    "sendTest": "Lähetä testi",
    "testEmailSent": "Testisähköposti lähetetty",
    "enterEmail": "Syötä sähköpostiosoite",
    "totalIndexed": "Indeksoitu yhteensä",
    "totalInterests": "Kiinnostukset yhteensä",
    "totalCities": "Kaupungit yhteensä",
    "directoryIndex": "Hakemistoindeksi",
    "rebuildIndex": "Uudelleenrakenna indeksi",
    "directoryNotAvailable": "Hakemistotilastot eivät saatavilla",
    "indexRebuilt": "Indeksi rakennettu",
    "interval": "Aikaväli",
    "maxSuggestions": "Maks. ehdotukset",
    "maxDistance": "Maks. etäisyys",
    "cooldown": "Odotusaika",
    "daysUnit": "päivää",
    "runMatchingRound": "Suorita matchauskierros",
    "triggerMatching": "Käynnistä matchaus",
    "matchingNotAvailable": "Matchaustilastot eivät saatavilla",
    "matchingComplete": "Matchauskierros valmis",
    "totalListings": "Ilmoitukset yhteensä",
    "listingFee": "Ilmoitusmaksu",
    "txFee": "Transaktiomaksu",
    "recentListings": "Viimeisimmät ilmoitukset",
    "titleLabel": "Otsikko",
    "price": "Hinta",
    "seller": "Myyjä",
    "marketplaceNotAvailable": "Kauppapaikan tilastot eivät saatavilla",
    "escrowEnabled": "Escrow",
    "vapidKeys": "VAPID-avaimet",
    "missing": "Puuttuu",
    "totalSubscriptions": "Tilaukset yhteensä",
    "lastUsed": "Viimeksi käytetty",
    "pushNotAvailable": "Push-tilastot eivät saatavilla",
    "totalTemplates": "Mallit yhteensä",
    "noCsmTemplates": "Ei CSM-malleja asennettu",
    "serviceType": "Palvelutyyppi",
    "registeredBy": "Rekisteröijä",
    "federate": "Federoitu",
    "registered": "Rekisteröity",
    "updated": "Päivitetty",
    "csmNotAvailable": "CSM-tiedot eivät saatavilla",
    "msmLabel": "Integraatiot",
    "msmExplain": "Ulkoiset API-integraatiot (MSM — Machine Service Manifest)",
    "msmCategory": "Kategoria",
    "msmAuthType": "Todennus",
    "msmActions": "Toiminnot",
    "noMsmIntegrations": "Ei rekisteröityjä MSM-integraatioita",
    "totalPeers": "Vertaiset yhteensä",
    "active": "Aktiivinen",
    "pending": "Odottava",
    "suspended": "Keskeytetty",
    "federatedUsers": "Federoidut käyttäjät",
    "federatedListings": "Federoidut ilmoitukset",
    "noGenesisPeers": "Ei genesis-vertaisia määritetty",
    "lastSync": "Viimeisin synkronointi",
    "approve": "Hyväksy",
    "suspend": "Keskeytä",
    "remove": "Poista",
    "genesisNotAvailable": "Genesis-vertaistiedot eivät saatavilla",
    "removeConfirm": "Poista genesis-vertainen?",
    "noDescription": "Ei kuvausta",
    "author": "Kirjoittaja",
    "untitled": "(nimetön)",
    "capabilities": "Ominaisuudet",
    "trustDetails": "Luottamustiedot",
    "score": "Pistemäärä",
    "deliveries": "Toimitukset",
    "successRate": "Onnistumisprosentti",
    "avgDeliveryTime": "Keskim. toimitusaika",
    "ratings": "Arvostelut",
    "age": "Ikä",
    "home": "Koti",
    "grantConfirm": "Myönnä operaattorirooli?",
    "errorLabel": "Virhe",
    "networkError": "Verkkovirhe",
    "realtime": "Reaaliaikainen",
    "activeRooms": "Aktiiviset huoneet",
    "connectedPeers": "Yhdistetyt vertaiset",
    "messagesIn": "Viestit sisään",
    "messagesOut": "Viestit ulos",
    "messagesRejected": "Hylätyt",
    "peakPeers": "Huippu vertaiset",
    "roomsCreated": "Luotuja huoneita",
    "roomsClosed": "Suljettuja huoneita",
    "noActiveRooms": "Ei aktiivisia reaaliaikahuoneita",
    "roomName": "Huoneen nimi",
    "appType": "Sovellustyyppi",
    "peerCount": "Vertaiset",
    "createdAt": "Luotu",
    "yjsDocs": "Yjs-dokumentit",
    "noYjsDocs": "Ei aktiivisia Yjs-dokumentteja",
    "docId": "Dokumentin ID",
    "snapshotSize": "Tilannevedoksen koko",
    "realtimeNotAvailable": "Reaaliaikatiedot eivät saatavilla",
    "closeRoom": "Sulje",
    "closeRoomConfirm": "Sulje tämä huone? Kaikki vertaiset irrotetaan.",
    "isPublic": "Julkinen",
    "isPrivate": "Yksityinen",
    "visibility": "Näkyvyys",
    "maxPeers": "Maks. vertaiset",
    "createdBy": "Luoja",
    "realtimeDisabled": "Reaaliaikatoiminto on poistettu käytöstä tässä solmussa",
    "navNode": "Solmu",
    "navIdentity": "Identiteetti",
    "navData": "Data",
    "navInfrastructure": "Infrastruktuuri",
    "navServices": "Palvelut",
    "navIntegrations": "Integraatiot",
    "navFederation": "Federaatio",
    "csmManagement": "CSM-hallinta",
    "msmManagement": "MSM-hallinta",
    "portal": "Portaali",
    "portalDesc": "Hallitse solmusi julkista portaalia — aloitussivua, jonka vierailijat näkevät. Mukauta HTML-mallipohjaa, aseta dynaamista sisältöä muistiavaimilla ja KV-pareilla, esikatsele muutoksia reaaliajassa ja luo tekoälyystävällinen kehotekooste portaalistasi chat-integraatioita varten.",
    "portalTemplate": "Mallipohjan muokkaus",
    "portalPreview": "Portaalin esikatselu",
    "portalMemoryKeys": "Portaalin muistiavaimet",
    "portalKvPairs": "KV-parit (ympäristö)",
    "portalChangelog": "Muutosloki",
    "portalUpload": "Lataa",
    "portalDownload": "Lataa",
    "portalResetDefault": "Palauta oletukseksi",
    "portalImport": "Tuo paketti",
    "portalClearCache": "Tyhjennä välimuisti",
    "portalNoTemplate": "Mukautettua mallipohjaa ei ole ladattu.",
    "portalNoMemoryKeys": "Portaalin muistiavaimia ei löytynyt.",
    "portalNoChanges": "Muutoksia ei ole kirjattu.",
    "portalSaveTemplate": "Tallenna mallipohja",
    "portalAiChat": "Tekoälyavusteinen muokkaus",
    "portalAiPlaceholder": "Kuvaile, mitä haluat portaalillesi...",
    "portalAiSend": "Luo",
    "portalAiImport": "Tuo tekoälyn tulos",
    "portalAiExplain": "Kopioi tekoälykehote suosikkiavustajallesi (Claude, ChatGPT, Copilot). Kuvaile portaalisi, niin se luo mallin jonka voit tuoda.",
    "portalTagHelp": "Käytä {{config:avain}}, {{memory:avain}}, {{storage:avain}}, {{kv:avain}}, {{board:slug}} tageja mallissa.",
    "portalTagHelpTitle": "Mallitagien ohje",
    "portalTagHelpDetail": "Käytettävissä olevat mallitägit ja esimerkit:",
    "portalMemoryKeysExplain": "Muistiavaimet tallentavat dynaamisia arvoja, joihin portaalimallit viittaavat {{memory:avain}} -tageilla.",
    "portalKeyLabel": "Avain",
    "portalValueLabel": "Arvo",
    "portalNoKvPairs": "KV-pareja ei ole määritetty (aseta AIMEAT_SITE_KV_* -ympäristömuuttujat)",
    "portalKvExplain": "KV-parit ovat vain luku -arvoja, jotka asetetaan AIMEAT_SITE_KV_* -ympäristömuuttujilla. Käytä {{kv:avain}} malleissa.",
    "portalAiCopied": "Tekoälykehote kopioitu leikepöydälle!",
    "portalAiLoadPrompt": "Lataa tekoälykehote",
    "portalDeleteKeyConfirm": "Poista {key}?",
    "tagExConfig": "Lisää asetusarvon (esim. solmun tunnus, portti)",
    "tagExMemory": "Lisää tallennetun muistiarvon",
    "tagExStorage": "Lisää tallennustiedon",
    "tagExKv": "Lisää KV-ympäristömuuttujan",
    "tagExBoard": "Upottaa viimeisimmät viestit taulusta",
    "portalLbMode": "Kuormanjakajamoodi",
    "portalLbReadOnly": "Portaalin sisältö on vain luku -tilassa. Sisältö synkronoidaan lähdenodesta.",
    "portalLbOrigin": "Lähde-URL",
    "portalLbLastSync": "Viimeisin synkronointi",
    "portalLbError": "Viimeisin virhe",
    "portalLbStatus": "Synkronointitila",
    "portalLbSyncNow": "Synkronoi nyt",
    "portalLbSyncDone": "Portaalin synkronointi valmis.",
    "portalActiveSource": "Aktiivinen lähde",
    "portalCustomActive": "Mukautettu mallipohja",
    "portalDefaultActive": "Oletussovellus (sisäänrakennettu SPA)",
    "portalDefaultExplain": "Mukautettua mallipohjaa ei ole tallennettu, joten kävijät näkevät sisäänrakennetun sovelluksen. Alla oleva editori on tyhjä. Paina \"{action}\" ladataksesi nykyisen sivun HTML:n lähtökohdaksi, muokkaa sitä ja tallenna korvataksesi oletuksen.",
    "portalCustomExplain": "Mukautettu mallipohja on käytössä ja korvaa sisäänrakennetun sovelluksen. Muokkaa sitä alla ja tallenna, tai palauta oletukseksi tuodaksesi sisäänrakennetun sovelluksen takaisin.",
    "portalLoadCurrent": "Lataa nykyinen sivu pohjaksi",
    "portalLoadCurrentConfirm": "Korvataanko editorin sisältö nykyisen sivun HTML:llä? Tallentamattomat muutokset menetetään.",
    "portalLoadedCurrent": "Nykyinen sivu ladattu editoriin — tarkista ja paina Tallenna mallipohja ottaaksesi käyttöön.",
    "portalAiBundleExplain": "Liitä tähän tekoälyn tuottama JSON-paketti. Se voi sisältää mallipohjan, portaalin muistiavaimet ja KV-parit — ne otetaan käyttöön kaikki kerralla.",
    "portalAiBundlePlaceholder": "Liitä tekoälyn JSON-tulos tähän: { \"template\": \"<!DOCTYPE html>...\", \"memory\": { \"portal/about\": \"...\" }, \"kv\": {} }",
    "portalImportDone": "Tuotu: {summary}",
    "portalImportInvalid": "Tämä ei näytä kelvolliselta tekoälypaketilta. Odotettiin JSON, jossa on \"template\", \"memory\" tai \"kv\" -kenttä.",
    "portalSaveLooksLikeJson": "Tämä näyttää tekoälyn JSON-paketilta, ei HTML-mallipohjalta. Liitä se alla olevaan \"Tuo tekoälyn tulos\" -kenttään.",
    "portalMemorySaved": "Portaalin muistiavain tallennettu.",
    "cors": "CORS",
    "corsTitle": "CORS-alkuperähallinta",
    "corsNodeDefault": "Solmun oletusalkuperät",
    "corsNodeDefaultDesc": "Solmulle asetetut yleiset CORS-alkuperät. Asetetaan AIMEAT_CORS_ALLOWED_ORIGINS -ympäristömuuttujalla.",
    "corsGhiiOverrides": "Käyttäjien CORS-ohitukset",
    "corsGhiiOverridesDesc": "Käyttäjät joilla on mukautetut CORS-alkuperät. Listaamattomat käyttäjät perivät solmun oletuksen.",
    "corsAgentOverrides": "Agenttien CORS-ohitukset",
    "corsAgentOverridesDesc": "Agentit joilla on mukautetut CORS-alkuperät. Listaamattomat agentit perivät omistajaltaan tai solmun oletuksen.",
    "corsNoOverrides": "Ei mukautettuja CORS-ohituksia",
    "corsOrigins": "Alkuperät",
    "corsEffective": "Tehokas",
    "corsClear": "Tyhjennä",
    "corsClearConfirm": "Tyhjennä mukautettu CORS? Perii solmun oletuksen.",
    "corsEdit": "Muokkaa",
    "corsSave": "Tallenna",
    "corsCancel": "Peruuta",
    "corsAddOverride": "Lisää ohitus",
    "corsOriginPlaceholder": "https://example.com, http://localhost:3000",
    "corsCommonOrigins": "Pikalisäys:",
    "corsSelectUser": "Valitse käyttäjä...",
    "corsSelectAgent": "Valitse agentti...",
    "stats": "Tilastot",
    "statsNotAvailable": "Tilastot on poistettu käytöstä tässä nodessa.",
    "requestsTotal": "Pyyntöjä yhteensä",
    "memoryOps": "Muistioperaatiot",
    "consentOps": "Suostumukset",
    "schemaOps": "Schemavalidoinnit",
    "dailyActivity": "Päivittäinen aktiivisuus (30 päivää)",
    "weeklyComparison": "Viikkovertailu",
    "monthlyTrend": "Kuukausitrendi",
    "statsExplain": "Laskurit tallennetaan tietokantaan. Käyttöaika ja reaaliaikamittarit nollautuvat uudelleenkäynnistyksessä.",
    "writes": "Kirjoitukset",
    "reads": "Luvut",
    "grants": "Myönnöt",
    "revocations": "Perumukset",
    "validations": "Validoinnit",
    "failures": "Virheet",
    "thisWeek": "Tämä viikko",
    "lastWeek": "Viime viikko",
    "twoWeeksAgo": "2 viikkoa sitten",
    "threeWeeksAgo": "3 viikkoa sitten",
    "tunnelStats": "Tunneliyhteydet",
    "tunnelActive": "Aktiiviset",
    "tunnelTotal": "Yhteyksiä yhteensä",
    "tunnelDisconnections": "Katkokset",
    "tunnelReconnects": "Uudelleenyhdistykset",
    "tunnelMsgSent": "Viestejä lähetetty",
    "tunnelMsgReceived": "Viestejä vastaanotettu",
    "tunnelDeliveryFails": "Toimitusvirheet",
    "tunnelLatencyAvg": "Keskimääräinen viive",
    "tunnelLatencyP95": "P95-viive",
    "tunnelHeartbeatMisses": "Sydämenlyöntipuutteet",
    "tunnelMailboxFallbacks": "Postilaatikkovaravuorot",
    "mailboxStats": "Postilaatikko",
    "mailboxItems": "Jonossa",
    "mailboxBytes": "Tallennustila",
    "mailboxEnqueued": "Lisätty jonoon",
    "mailboxDelivered": "Toimitettu",
    "mailboxExpired": "Vanhentunut",
    "mailboxQuotaRejects": "Kiintiöhylkäykset",
    "mailboxOldestAge": "Vanhin viesti",
    "securityStats": "Tietoturva & Autentikointi",
    "authFailures": "Autentikointivirheet",
    "rateLimitHits": "Nopeusrajoituksen osumat",
    "scopeDenials": "Käyttöoikeushylkäykset",
    "messages": "Viestit",
    "latency": "Toimitusviive",
    "tunnelActivity": "Tunnelitoiminta",
    "consentPermStats": "Suostumuksen oikeussäännöt",
    "consentActiveRules": "Aktiiviset säännöt",
    "consentByGaii": "GAII:n mukaan",
    "consentByGhii": "GHII:n mukaan",
    "consentByOrganism": "Organismin mukaan",
    "consentByDomain": "Domainin mukaan",
    "consentByNode": "Noden mukaan",
    "consentByWildcard": "Yleisjokerit",
    "consentDataPatterns": "Yksilölliset mallit",
    "noActionsRegistered": "Toimintoja ei rekisteröity",
    "slug": "Tunniste",
    "showPosts": "Näytä viestit",
    "hidePosts": "Piilota viestit",
    "noPosts": "Ei viestejä vielä",
    "noWorkItems": "Ei työkohteita",
    "totalSessions": "Sessiot yhteensä",
    "activeSessions": "Aktiiviset sessiot",
    "avgMessages": "Keskim. viestit",
    "statusLabel": "Tila",
    "started": "Aloitettu",
    "ended": "Päättynyt",
    "gaiiExplain": "GAII (Global AI Identifier) — yksilöllinen osoite jokaiselle tekoälyagentille AIMEAT-verkossa.",
    "ghiiExplain": "GHII (Global Human Intelligence Identifier) — yksilöllinen tunniste jokaiselle käyttäjälle AIMEAT-verkossa.",
    "ghiiLevelsTitle": "Vahvistustasot",
    "ghiiLevelL0": "L0 — Vahvistamaton: vain käyttäjätunnus + salasana, ei henkilöllisyyden todentamista.",
    "ghiiLevelL1": "L1 — Sähköposti vahvistettu: sähköpostiosoite varmistettu linkillä tai koodilla.",
    "ghiiLevelL2": "L2 — Henkilöllisyys vahvistettu: virallinen henkilöllisyystodistus, EUDIW tai Suomi.fi-tunnistus.",
    "ghiiTotpExplain": "TOTP (Time-based One-Time Password) lisää kaksivaiheisen tunnistautumisen. Käyttäjät asettavat autentikointisovelluksen (esim. Google Authenticator) lisäturvaksi.",
    "ghiiVerificationExplain": "Vahvistusmerkki näyttää luottamustason. Kriittinen (punainen) = L0 vahvistamaton, Varoitus (keltainen) = L1 osittainen, Terve (vihreä) = L2 täysin vahvistettu.",
    "ghiiEmail": "Sähköposti",
    "ghiiEmailNotSet": "Ei asetettu",
    "ghiiEmailVerified": "Vahvistettu",
    "ghiiRemoveEmail": "Poista sähköposti",
    "ghiiRemoveEmailConfirm": "Poistetaanko sähköpostivahvistus käyttäjältä {name}?",
    "ghiiEmailRemoved": "Sähköpostivahvistus poistettu.",
    "boardCreateSystem": "Luo järjestelmätaulu",
    "boardName": "Taulun nimi",
    "boardDescription": "Kuvaus",
    "boardSlug": "Tunniste (URL-turvallinen)",
    "boardVisibility": "Näkyvyys",
    "boardPublic": "Julkinen",
    "boardPrivate": "Yksityinen",
    "boardCreateConfirm": "Taulu luotu onnistuneesti",
    "chatExplain": "Chat-instanssit luodaan kun käyttäjät käyttävät tekoälypohjaisia chat-sovelluksia tässä solmussa. Järjestelmänvalvojat voivat luoda solmun laajuisia chat-kanavia operaattorien viestintään.",
    "chatCreateChannel": "Luo kanava",
    "chatChannelName": "Kanavan nimi",
    "chatChannelNamePlaceholder": "esim. ops-hälytykset, tiimi-yleinen",
    "chatChannelPlatform": "Alusta",
    "chatChannelPlatformPlaceholder": "esim. admin, slack, discord",
    "chatChannelCreated": "Kanava luotu onnistuneesti",
    "chatDeleteConfirm": "Poista chat-instanssi \"{id}\"?",
    "chatOperatorChannels": "Operaattorikanavat",
    "chatOperatorChannelsExplain": "Operaattorikanavat ovat jaettuja keskustelualueita tiimiviestintään. Luo kanava aloittaaksesi viestinnän.",
    "chatNoChannels": "Ei operaattorikanavia vielä",
    "chatOpenChannel": "Avaa",
    "chatSendMessage": "Lähetä",
    "chatMessagePlaceholder": "Kirjoita viesti...",
    "chatBack": "Takaisin kanaviin",
    "chatNoMessages": "Ei viestejä vielä. Ole ensimmäinen!",
    "emailDisabledExplain": "Sähköposti ei ole käytössä. Määritä SMTP-asetukset Asetukset-välilehdellä ottaaksesi käyttöön tapahtumapohjaisten sähköpostien lähetyksen.",
    "host": "Palvelin",
    "secure": "Suojattu (TLS)",
    "rejectUnauthorized": "Tarkista TLS-sertifikaatit",
    "rejectUnauthorizedHelp": "Poista käytöstä itseallekirjoitetuille sertifikaateille",
    "from": "Lähettäjä",
    "testEmail": "Testisähköposti",
    "emailPlaceholder": "vastaanottaja@esimerkki.fi",
    "send": "Lähetä",
    "emailSent": "Testisähköposti lähetetty onnistuneesti",
    "emailSendFailed": "Sähköpostin lähetys epäonnistui. Tarkista palvelimen lokit (SMTP-asetukset, TLS, tunnistetiedot).",
    "emailExplain": "SMTP on määritetty ja sähköpostin lähetys on aktiivinen. Tapahtumapohjaisia sähköposteja lähetetään vahvistuskoodeille, kirjautumislinkeille, ilmoituksille ja match-ehdotuksille.",
    "emailSmtpHelp": "Kuinka SMTP määritetään",
    "emailSmtpHelpDetail": "Aseta SMTP-asetukset (palvelin, portti, käyttäjä, salasana, lähettäjäosoite) Asetukset-välilehdellä Sähköposti-ryhmässä. Muutettavat asetukset tulevat voimaan heti; muuttumattomat asetukset vaativat uudelleenkäynnistyksen.",
    "emailUserConfigured": "SMTP-käyttäjä",
    "emailPassConfigured": "SMTP-salasana",
    "emailTemplatesTitle": "Sähköpostimallit",
    "emailTemplatesExplain": "Nämä ovat käyttäjille lähetettävät sähköpostimallit. Käytä kielivalitsinta esikatselun kielen vaihtamiseen.",
    "emailTplVerification": "Vahvistuskoodi",
    "emailTplMagicLink": "Kirjautumislinkki",
    "emailTplNotification": "Ilmoitus",
    "emailTplMatchSuggestion": "Match-ehdotus",
    "emailUsedInGhii": "käytetään: Identiteetti (GHII)",
    "emailUsedInSystem": "käytetään: Järjestelmä",
    "emailUsedInMatching": "käytetään: Matchaus",
    "emailTplEditHtml": "Muokkaa HTML:ää",
    "emailTplEditText": "Muokkaa tekstiversiota",
    "emailTplPreview": "Esikatselu",
    "emailTplSave": "Tallenna malli",
    "emailTplReset": "Palauta oletukseksi",
    "emailTplResetConfirm": "Palauta tämä malli oletukseksi? Mukautettu versiosi menetetään.",
    "emailTplSaved": "Malli tallennettu onnistuneesti",
    "emailTplResetDone": "Malli palautettu oletukseksi",
    "emailTplCustomBadge": "mukautettu",
    "emailTplParams": "Parametrit",
    "emailTplParamsExplain": "Nämä parametritunnisteet korvataan oikealla tiedolla sähköpostia lähetettäessä. Säilytä ne mukautetussa mallissasi.",
    "emailTplAiPrompt": "Kopioi AI-kehote",
    "emailTplAiPromptCopied": "AI-kehote kopioitu leikepöydälle! Liitä se AI-chattiin mallin luomiseksi.",
    "emailTplSeedDefaults": "Lataa oletusmallit",
    "emailTplSeedExplain": "Lataa oletusmallit (EN + FI) tallennustilaan muokattaviksi.",
    "emailTplSeeded": "Ladattu {count} mallia (EN + FI)",
    "emailTplResetAll": "Palauta kaikki oletuksiksi",
    "emailTplReseed": "Lataa oletukset uudelleen",
    "emailTplSeededStatus": "Mallit on tallennettu ja muokattavissa.",
    "emailTplResetAllConfirm": "Palauta KAIKKI sähköpostimallit oletuksiksi? Kaikki mukautukset sekä EN- että FI-kielille menetetään.",
    "emailTplResetAllDone": "Kaikki {count} mallia palautettu oletuksiksi.",
    "emailGroupTitle": "Lähetä ryhmälle",
    "emailGroupExplain": "Lähetä ilmoitussähköposti käyttäjäryhmälle. Vain käyttäjät, joilla on ilmoitussähköpostiosoite, saavat viestin.",
    "emailGroupOperators": "Operaattorit",
    "emailGroupAll": "Kaikki käyttäjät sähköpostilla",
    "emailGroupSubject": "Aihe",
    "emailGroupBody": "Viestin sisältö",
    "emailGroupSend": "Lähetä ryhmälle",
    "emailGroupSent": "Lähetetty {sent}/{total} vastaanottajalle",
    "pushNotConfigured": "Push-ilmoitukset eivät ole käytössä.",
    "pushExplain": "Web Push -ilmoitukset mahdollistavat reaaliaikaisten hälytysten lähettämisen käyttäjille, jotka ovat tilanneet ne selaimensa kautta. Vaatii VAPID-avainten määrityksen.",
    "pushHelpTitle": "Kuinka Push määritetään",
    "pushHelpDetail": "Luo VAPID-avaimet ja aseta AIMEAT_VAPID_PUBLIC_KEY ja AIMEAT_VAPID_PRIVATE_KEY .env-tiedostossa. Käyttäjät tilaavat portaalin käyttöliittymän kautta.",
    "activeSubscriptions": "Aktiiviset tilaukset",
    "noSubscriptions": "Ei rekisteröityjä push-tilauksia",
    "endpoint": "Päätepiste",
    "pushTemplatesTitle": "Viestipohjat",
    "pushTemplatesExplain": "Nämä ovat ilmoitusviestit, jotka lähetetään käyttäjille tapahtumien yhteydessä. Viestipohjat ovat tällä hetkellä kovakoodattuja palvelimelle.",
    "pushWebPushTitle": "Web Push: Selainilmoitus",
    "pushWebPushUsed": "Lähetetään tilanneille selaimille kun henkilökohtaisella nodella on odottavia postilaatikkoviestejä offline-tilassa.",
    "pushWebPushTitleTpl": "AIMEAT: Odottavia viestejä",
    "pushWebPushBodyTpl": "{count} viesti(ä) odottaa — {type}",
    "pushEmailTitle": "Sähköposti: Postilaatikkohälytys",
    "pushEmailUsed": "Lähetetään käyttäjän määrittämään sähköpostiin kun henkilökohtaisella nodella on odottavia viestejä ja sähköposti-ilmoitukset ovat käytössä.",
    "pushEmailSubjectTpl": "AIMEAT: {count} odottavaa viestiä nodellesi",
    "pushEmailBodyTpl": "Henkilökohtaisella nodellasi \"{nodeId}\" on {count} odottavaa viestiä.\n\nKorkein prioriteetti: {type}\nVanhin viesti: {age} minuuttia sitten\n\nYhdistä henkilökohtainen nodesi uudelleen noutaaksesi nämä viestit.",
    "pushNotifyTypesTitle": "Ilmoitusten laukaisimet",
    "pushNotifyTypesExplain": "Push-ilmoitukset lähetetään kun nämä postilaatikkotapahtumat tapahtuvat. Määritetään AIMEAT_PUSH_NOTIFY_TYPES-asetuksella.",
    "pushTypeWorkAssignment": "work_assignment — Työtehtävä on osoitettu käyttäjän agentille",
    "pushTypeActionRequest": "action_request — Toinen agentti on pyytänyt toimintoa käyttäjän agentilta",
    "pushTypeBoardNotification": "board_notification — Uutta toimintaa taululla johon käyttäjä on tilannut",
    "pushTypeFederationSync": "federation_sync — Federoitu vertaisnode on synkronoinut huomiota vaativaa dataa",
    "pushTemplate": "Viestipohja",
    "pushUsedIn": "Käytetään",
    "pushTestBtn": "Lähetä testipush",
    "pushTestSending": "Lähetetään...",
    "pushTestSent": "Lähetetty!",
    "pushTestError": "Epäonnistui",
    "pushTestNoSubs": "Ei tilauksia — tilaa ensin portaalin kautta",
    "pushTestErrorDetail": "Tilausta ei löytynyt tai lähetys epäonnistui",
    "pushDefault": "oletus",
    "pushCustomized": "mukautettu",
    "pushResetBtn": "Palauta oletuspohjat",
    "pushResetConfirm": "Palautetaanko kaikki pohjat oletuksiin? Tämä ylikirjoittaa mukautukset.",
    "pushResetting": "Palautetaan...",
    "pushFieldTitle": "Otsikko",
    "pushFieldSubject": "Aihe",
    "pushFieldBody": "Sisältö",
    "pushSubscribeBtn": "Tilaa tämä selain",
    "pushSubscribing": "Tilataan...",
    "pushSubscribed": "Tilattu!",
    "pushUnsubscribeBtn": "Peru tilaus",
    "pushNoBrowserSupport": "Tämä selain ei tue push-ilmoituksia",
    "blocked": "Estetyt",
    "blockedCooldown": "Jäähdytys",
    "blockedDisabled": "Pois käytöstä",
    "blockedQuietHours": "Hiljaiset tunnit",
    "breakdownFailed": "Epäonnistuneet",
    "breakdownRetried": "Uudelleenyritykset",
    "breakdownSent": "Lähetetyt",
    "breakdownType": "Tyyppi",
    "channelEmail": "Sähköposti",
    "channelPush": "Push",
    "channels": "Kanavat",
    "emailDelivery": "Sähköpostin toimitus",
    "emailType": {
      "group_send": "Ryhmälähetys",
      "magic_link": "Kirjautumislinkki",
      "match_suggestion": "Ehdotus",
      "notification": "Ilmoitus",
      "verification": "Vahvistus"
    },
    "emailsFailed": "Epäonnistuneet",
    "emailsRetried": "Uudelleenyritykset",
    "emailsSent": "Lähetetyt",
    "expiredSubs": "Vanhentuneet",
    "live": "live",
    "mailboxNotifBlocked": "Postilaatikko estetyt",
    "mailboxNotifFailed": "Postilaatikko epäonn.",
    "mailboxNotifSent": "Postilaatikko lähet.",
    "mailboxNotifications": "Postilaatikkoilmoitukset",
    "period30Days": "30 päivää",
    "period7Days": "7 päivää",
    "periodAll": "Kaikki",
    "periodApply": "Hae",
    "periodCustom": "Mukautettu",
    "periodFrom": "Alkaen",
    "periodLabel": "Ajanjakso",
    "periodThisWeek": "Tämä viikko",
    "periodTo": "Asti",
    "periodToday": "Tänään",
    "weekMon": "Ma",
    "weekTue": "Ti",
    "weekWed": "Ke",
    "weekThu": "To",
    "weekFri": "Pe",
    "weekSat": "La",
    "weekSun": "Su",
    "pushDelivery": "Push-ilmoitukset",
    "pushFailed": "Epäonnistuneet",
    "pushSent": "Lähetetyt",
    "pushType": {
      "board": "Keskustelu",
      "federation": "Federaatio",
      "general": "Yleinen",
      "organism": "Organismi",
      "test": "Testi",
      "work": "Työ"
    },
    "totalEntries": "Merkintöjä yhteensä",
    "cities": "Kaupungit",
    "categories": "Kategoriat",
    "directoryMaintenance": "Hakemiston ylläpito",
    "directoryRebuilt": "Hakemiston indeksi rakennettu uudelleen",
    "directoryExplain": "Hakemisto indeksoi omistajaprofiilit kaupungin, kategorian ja kiinnostuksen kohteiden mukaan, mahdollistaen löytämisen ja haun. Profiilit indeksoidaan automaattisesti, kun omistajat päivittävät julkisia tietojaan.",
    "directoryHelpTitle": "Kuinka hakemisto toimii",
    "directoryHelpDetail": "Omistajat rekisteröivät profiileja kaupungin, kategorioiden ja kiinnostuksen kohteiden kanssa rajapinnan kautta. Hakemisto rakentaa hakuindeksit nopeita hakuja varten. Voit uudelleenrakentaa indeksit, jos data muuttuu epäjohdonmukaiseksi.",
    "totalProfiles": "Profiileja yhteensä",
    "activeMatches": "Aktiiviset osumat",
    "lastRun": "Viimeisin ajo",
    "matchingEngine": "Matchausmoottori",
    "matchingExplain": "Matchausmoottori etsii yhteensopivia profiileja yhteisten kiinnostuksen kohteiden, sijainnin läheisyyden ja mieltymyskriteerien perusteella. Osumat lasketaan säännöllisesti tai ne voidaan käynnistää manuaalisesti.",
    "matchingHelpTitle": "Kuinka matchaus toimii",
    "matchingHelpDetail": "Moottori vertaa kaikkia aktiivisia profiileja pisteyttäen yhteensopivuuden yhteisten kiinnostuksen kohteiden, maantieteellisen läheisyyden ja ilmoitettujen mieltymysten perusteella. Kynnysarvon ylittävät osumat näytetään käyttäjille. Suorita moottori manuaalisesti päivittääksesi osumat välittömästi.",
    "marketplaceEmpty": "Kauppapaikkaa ei ole määritetty",
    "activeListings": "Aktiiviset ilmoitukset",
    "totalTransactions": "Tapahtumat yhteensä",
    "noListings": "Ei ilmoituksia",
    "marketplaceExplain": "Kauppapaikka mahdollistaa vertais- tai solmutason kaupankäynnin tavaroilla ja palveluilla murustalouden avulla. Ilmoituksia voidaan luoda federaatio- tai yksittäisen solmun tasolla.",
    "marketplaceHelpTitle": "Kuinka kauppapaikka toimii",
    "marketplaceHelpDetail": "Omistajat luovat ilmoituksia otsikolla, kuvauksella, hinnalla (murusina) ja kategorialla. Ostajat voivat selata, hakea ja ostaa. Tapahtumat selvitetään muruslompakon kautta. Federaatiotason kauppapaikat kokoavat ilmoitukset solmujen välillä.",
    "marketplaceCreate": "Luo kauppapaikka",
    "marketplaceName": "Kauppapaikan nimi",
    "marketplaceType": "Tyyppi",
    "marketplaceNodeLevel": "Solmutaso",
    "marketplaceFederationLevel": "Federaatiotaso",
    "marketplaceCreateConfirm": "Kauppapaikka luotu onnistuneesti",
    "csmExplain": "CSM (Kontekstuaalinen palvelumalli) määrittää tietoskeeman ja säännöt solmussa toimiville palveluille. Jokainen CSM-malli määrittelee, mitä tietoa palvelu kerää, kuinka se validoidaan ja mitä suostumussääntöjä sovelletaan.",
    "csmHelpTitle": "Mikä on CSM?",
    "csmHelpDetail": "CSM on JSON-dokumentti, joka määrittelee palvelun tietomallin. Se sisältää kenttämäärittelyt (nimi, tyyppi, pakollinen), validointisäännöt, suostumusvaatimukset ja näyttövihjeet. Palvelut kuten harrastushakemisto, kauppapaikka tai deittaus käyttävät CSM:ää kuvaamaan datarakennettaan. Solmu validoi kaiken datan CSM:ää vasten ennen tallentamista.",
    "csmAddNew": "Lisää CSM-malli",
    "csmEnable": "Ota käyttöön",
    "csmDisable": "Poista käytöstä",
    "csmStatusActive": "Aktiivinen",
    "csmStatusDisabled": "Pois käytöstä",
    "csmNoFields": "Ei määriteltyjä kenttiä",
    "csmCreateFromTemplate": "Luo mallista",
    "csmCreateCustom": "Luo mukautettu",
    "csmYamlPlaceholder": "Liitä CSM YAML-määrittely tähän...",
    "csmSelectTemplate": "Valitse malli",
    "csmCreateSuccess": "CSM luotu onnistuneesti",
    "csmDeleteConfirm": "Poista CSM \"{name}\"? Tämä poistaa myös liittyvän skeeman lukituksen.",
    "csmDeleted": "CSM poistettu",
    "csmDefinition": "Määrittely (YAML)",
    "csmServiceType": "Palvelutyyppi",
    "csmRegisteredBy": "Rekisteröinyt",
    "csmFederate": "Federoi",
    "csmCreate": "Luo CSM",
    "csmCreateWithAi": "Luo tekoälyllä",
    "csmAiPromptTitle": "CSM-rakentaja — Tekoälykehote",
    "csmAiPromptDesc": "Kopioi tämä kehote tekoälykeskusteluun (Claude, ChatGPT jne.) suunnitellaksesi CSM:n interaktiivisesti. Tekoäly esittää kysymyksiä ja luo YAML:n puolestasi.",
    "csmAiPromptHow": "Kuinka käyttää tätä kehotetta",
    "csmAiStep1": "Kopioi alla oleva kehote leikepöydälle",
    "csmAiStep2": "Liitä se uuteen tekoälykeskusteluun",
    "csmAiStep3": "Kuvaile palvelu jonka haluat luoda — tekoäly opastaa sinua",
    "csmAiStep4": "Kopioi luotu YAML tänne ja klikkaa \"Luo CSM\"",
    "msmHelpTitle": "Mikä on MSM?",
    "msmHelpDetail": "MSM on määritys, joka yhdistää solmun ulkoisiin palveluihin. Se määrittelee päätepisteen URL:n, todennustavan, datamuodon, uudelleenyrityskäytännön ja aikataulutuksen. MSM:iä voidaan käyttää webhook-toimitukseen, API-integraatioihin, datan synkronointiin ja tapahtumapohjaisiin työnkulkuihin. Solmutason MSM:t koskevat vain tätä solmua; federaatiotason MSM:t jaetaan klusterin kesken.",
    "msmAddNew": "Lisää MSM-integraatio",
    "msmEndpoint": "Päätepisteen URL",
    "msmSchedule": "Aikataulu",
    "msmCreateConfirm": "MSM-integraatio luotu onnistuneesti",
    "msmNodeLevel": "Solmutaso",
    "msmFederationLevel": "Federaatiotaso",
    "msmRegisteredBy": "Rekisteröijä",
    "msmEdit": "Muokkaa MSM:ää",
    "msmEditDescription": "Kuvaus",
    "msmEditFederate": "Jaa federaation kesken",
    "msmEditSave": "Tallenna muutokset",
    "msmUpdateConfirm": "MSM-integraatio päivitetty onnistuneesti",
    "msmDeleteConfirm": "Kirjoita \"{name}\" vahvistaaksesi poiston",
    "msmDeleteTitle": "Poista MSM-integraatio",
    "msmDeleteSuccess": "MSM-integraatio poistettu onnistuneesti",
    "msmYamlPlaceholder": "Liitä MSM YAML-määritys tähän...",
    "msmSelectTemplate": "— Valitse malli —",
    "msmCreateFromTemplate": "Aloita mallista",
    "msmDefinition": "MSM-määritys",
    "federationNotAvailable": "Federaatio ei ole käytössä",
    "clusterName": "Klusterin nimi",
    "role": "Rooli",
    "peers": "Vertaiset",
    "federationExplain": "Federaatio yhdistää useita AIMEAT-solmuja klusteriksi, mahdollistaen jaetun datan, solmujen välisen löytämisen ja hajautetut palvelut. Solmut kommunikoivat todennettujen vertaisyhteyksien kautta.",
    "federationHelpTitle": "Kuinka federaatio toimii",
    "federationHelpDetail": "Federaatioklusteri koostuu solmuista, jotka luottavat toisiinsa. Yksi solmu toimii genesis-solmuna (alkuperä), ja muut liittyvät vaihtamalla avaimia. Federoidut solmut voivat jakaa hakemistolistauksia, kauppapaikkatuotteita, tauluja ja muuta. Klusterin nimi tunnistaa federaation, ja jokaisella solmulla on rooli (genesis, vertainen tai tarkkailija).",
    "federationConfigTitle": "Federaation asetukset",
    "federationJoinTitle": "Liity federaatioon",
    "federationJoinExplain": "Liittyäksesi olemassa olevaan federaatioon tarvitset genesis-solmun päätepisteen URL:n ja kelvollisen kutsutunnuksen.",
    "federationLeave": "Poistu federaatiosta",
    "federationLeaveConfirm": "Haluatko varmasti poistua tästä federaatiosta?",
    "fedHowBusTitle": "Mikä on federaatioväylä?",
    "fedHowBusDetail": "Federaatioväylä on solmujen välinen kommunikaatiokerros. Se hoitaa sydämenlyönnit (terveystarkistukset 5 minuutin välein), datan replikoinnin, katalogien synkronoinnin, solmujen välisen työnkulun reitityksen, muruselvitykset ja luottamushuomautukset. Kaikki viestit allekirjoitetaan kryptografisesti Ed25519-avaimilla.",
    "fedHowJoinTitle": "Kuinka uusi solmu liittyy?",
    "fedHowJoinDetail": "Uusi solmu lähettää allekirjoitetun esittelypyynnön (POST /v1/federation/peer/introduce) solmun tunnuksella, URL:llä ja julkisella avaimella. Vastaanottavan solmun operaattori näkee pyynnön täällä ja voi hyväksyä tai hylätä sen. Hyväksynnän jälkeen solmut vaihtavat julkiset avaimet ja uusi vertainen aktivoidaan. Sydämenlyöntijärjestelmä valvoo yhteyttä automaattisesti.",
    "fedHowReplicationTitle": "Kuinka datan replikointi toimii?",
    "fedHowReplicationDetail": "Solmut voivat replikoida muistimerkintöjä vertaisilleen POST /v1/federation/replicate -kutsulla. Jokainen replikointipyyntö allekirjoitetaan ja varmennetaan. Replikoitu data tallennetaan 'replica:'-etuliitteellä paikallisen datan erottamiseksi. Katalogimerkinnät (toiminnot/palvelut) synkronoidaan inkrementaalisesti — vain uudet tai päivitetyt kohteet siirretään.",
    "fedHowSettlementsTitle": "Kuinka muruselvitykset toimivat?",
    "fedHowSettlementsDetail": "Kun agentti solmussa A käyttää palvelua solmussa B, murusmaksu täytyy selvittää solmujen välillä. Solmu B lähettää allekirjoitetun selvityksen solmulle A summalla, seurantakoodilla ja todisteella. Vastaanottava solmu varmentaa allekirjoituksen, tarkistaa uudelleentoistohyökkäykset ja hyvittää agentin saldon. Operaattorit voivat myös käynnistää uloslähetyksiä manuaalisesti.",
    "fedHowRoutingTitle": "Kuinka solmujen välinen reititys toimii?",
    "fedHowRoutingDetail": "Jos tarvitset yhteyttä etäsolmun agenttiin, federaatioreititin (POST /v1/federation/route) välittää pyynnön. Se tukee monihyppyreititystä — jos kohde ei ole suora vertainen, pyyntö reititetään välisolmujen kautta. Silmukantunnistus estää loputtoman reitityksen, ja jokainen hyppy maksaa 1 murun reititysmaksuna. Maksimihyppymäärä on konfiguroitavissa.",
    "fedActivePeers": "Aktiiviset vertaiset",
    "fedDegradedPeers": "Heikentyneet",
    "fedOfflinePeers": "Offline",
    "fedPendingRequests": "Odottavat pyynnöt",
    "fedPendingRequestsTitle": "Odottavat vertaispyynnöt",
    "fedPendingRequestsExplain": "Nämä solmut haluavat liittyä federaatioosi. Tarkista jokainen pyyntö ja hyväksy tai hylkää.",
    "fedPendingHelpTitle": "Mitä pitää tarkistaa ennen hyväksyntää?",
    "fedPendingHelpDetail": "Varmista, että solmun tunnus ja URL ovat luotetusta lähteestä. Tarkista viestikentästä konteksti siitä, kuka pyytää. Hyväksynnän jälkeen vertainen pitää vielä aktivoida ja avaintenvaihto suorittaa ennen kuin data kulkee. Voit aina poistaa vertaisen myöhemmin tarvittaessa.",
    "fedReqId": "Pyynnön tunnus",
    "fedFromNode": "Lähdesolmu",
    "fedMessage": "Viesti",
    "fedCreatedAt": "Luotu",
    "fedReject": "Hylkää",
    "fedApprovePeerConfirm": "Hyväksy tämä vertaispyyntö? Solmu lisätään vertaiseksi.",
    "fedRejectPeerConfirm": "Hylkää tämä vertaispyyntö?",
    "fedPeerApproved": "Vertaispyyntö hyväksytty onnistuneesti",
    "fedPeerRejected": "Vertaispyyntö hylätty",
    "fedLivePeersTitle": "Aktiiviset vertaiset",
    "fedLivePeersExplain": "Tällä hetkellä rekisteröidyt vertaiset ja niiden reaaliaikainen tila. Sydämenlyöntimonitori pingaa jokaista vertaista 5 minuutin välein.",
    "fedLivePeersHelpTitle": "Vertaisten tilojen ymmärtäminen",
    "fedLivePeersHelpDetail": "Active: Vertainen on terve ja vastaa sydämenlyönteihin. Approved: Vertainen on hyväksytty mutta ei vielä aktivoitu (vaatii aktivoinnin). Degraded: Vertainen on epäonnistunut 3+ peräkkäisessä sydämenlyönnissä mutta on vielä tavoitettavissa. Offline: Vertainen on epäonnistunut 10+ peräkkäisessä sydämenlyönnissä. Depeering: Vertainen on armonaikajaksolla ennen poistamista (oletus 72h) — keskeneräiset työt voivat vielä valmistua.",
    "fedAddedAt": "Lisätty",
    "fedPublicKey": "Julkinen avain",
    "fedActivate": "Aktivoi",
    "fedDepeer": "Poista",
    "fedEmergencyDepeer": "Hätäpoisto",
    "fedActivateConfirm": "Aktivoi tämä vertainen? Se alkaa vastaanottaa sydämenlyöntejä ja dataa.",
    "fedRemoveConfirm": "Poista tämä solmu? 72 tunnin armonaika sovelletaan keskeneräisille töille.",
    "fedEmergencyRemoveConfirm": "HÄTÄPOISTO! Tämä katkaisee yhteyden välittömästi, peruuttaa kaikki keskeneräiset työt ja palauttaa escrown. Oletko varma?",
    "fedPeerActivated": "Vertainen aktivoitu onnistuneesti",
    "fedPeerRemoved": "Vertainen asetettu poistotilaan (armonaika käynnissä)",
    "fedPeerEmergencyRemoved": "Vertainen katkaistu välittömästi. Kaikki keskeneräiset työt peruutettu.",
    "fedRequestHistoryTitle": "Vertaispyyntöjen historia",
    "fedDeleteRequestConfirm": "Poista tämä vertaisverkkopyyntö historiasta?",
    "fedRequestDeleted": "Vertaisverkkopyyntö poistettu",
    "fedJoinTitle": "Liity genesis-verkkoon",
    "fedJoinExplain": "Yhdistä tämä solmu olemassa olevaan AIMEAT genesis-verkkoon. Syötä genesis-solmun URL ja valitse roolisi. Genesis-operaattori tarkistaa ja hyväksyy pyyntösi.",
    "fedJoinHelpTitle": "Miten liittyminen toimii?",
    "fedJoinHelpDetail": "Solmusi ottaa yhteyttä genesis-solmuun, varmistaa että se käyttää AIMEAT-protokollaa ja lähettää allekirjoitetun esittelypyynnön. Genesis-operaattori näkee pyyntösi Federation-näkymässä ja voi hyväksyä sen. Hyväksynnän jälkeen solmujen välillä vaihdetaan avaimet ja viestintä alkaa.",
    "fedJoinUrlPlaceholder": "Genesis-solmun URL (esim. http://localhost:40050)",
    "fedJoinUrlRequired": "Genesis-solmun URL on pakollinen",
    "fedJoinRoleContributor": "Osallistuja",
    "fedJoinRoleOperator": "Operaattori",
    "fedJoinBtn": "Liity verkkoon",
    "fedJoinSent": "Esittely lähetetty! Odotetaan genesis-operaattorin hyväksyntää.",
    "fedJoinTargetNode": "Kohdesolmu",
    "fedJoinStatus": "Tila",
    "fedJoinRequestId": "Pyynnön tunnus",
    "fedAddPeerTitle": "Lisää vertainen suoraan",
    "fedAddPeerExplain": "Lisää vertaissolmu manuaalisesti ilman esittelyvirtaa. Hyödyllinen federaatioiden käynnistyksessä tai luotettujen solmujen lisäämisessä.",
    "fedAddPeerHelpTitle": "Milloin pitäisi lisätä vertaisia suoraan?",
    "fedAddPeerHelpDetail": "Suora vertaisen lisäys ohittaa esittelykättelyn ja luo vertaisen 'pending'-tilaan. Sinun täytyy silti aktivoida se ja suorittaa avaintenvaihto. Käytä tätä kun luotat etäsolmuun ja sinulla on sen tiedot (solmun tunnus, URL, valinnaisesti julkinen avain). Tuotantokäytössä suosi esittelyvirtaa paremman turvallisuuden vuoksi.",
    "fedAddNodeIdPlaceholder": "Solmun tunnus (esim. my-node-001)",
    "fedAddUrlPlaceholder": "Solmun URL (esim. https://node.example.com)",
    "fedAddKeyPlaceholder": "Julkinen avain (valinnainen, hex tai base64)",
    "fedAddPeerBtn": "Lisää vertainen",
    "fedAddPeerMissing": "Solmun tunnus ja URL ovat pakollisia",
    "fedPeerAdded": "Vertainen lisätty onnistuneesti (tila: odottaa)",
    "fedTestTitle": "Testaa federaatiovalmiutta",
    "fedTestExplain": "Tarkista onko etäsolmu tavoitettavissa ja ajaa AIMEAT-protokollaa ennen vertaisottoa.",
    "fedTestHelpTitle": "Mitä testi tarkistaa?",
    "fedTestHelpDetail": "Testi lähettää pyynnön kohdesolmun /.well-known/aimeat -päätepisteeseen varmistaakseen: 1) Solmu on tavoitettavissa verkossa, 2) Se vastaa AIMEAT-protokollan tunnisteella. Jos molemmat tarkistukset läpäisevät, solmu on valmis federaatiovertaisottoon.",
    "fedTestBtn": "Testaa",
    "fedTestTarget": "Kohde",
    "fedTestReady": "Valmis",
    "fedTestTime": "Testattu",
    "fedBusTitle": "Federaatioväylä — Ominaisuudet",
    "fedBusExplain": "Federaatioväylä tarjoaa kaikki kommunikaatiokanavat solmujen välillä. Jokainen ominaisuus on kuvattu alla toimintaperiaatteineen ja API-päätepisteineen.",
    "fedBusHeartbeatTitle": "Sydämenlyönti ja terveydenvalvonta",
    "fedBusHeartbeatDetail": "Joka 5. minuutti solmusi pingaa kaikki aktiiviset vertaiset POST /v1/federation/ping -kutsulla. Jos vertainen epäonnistuu 3 peräkkäisessä sydämenlyönnissä, se merkitään 'degraded'. 10 epäonnistumisen jälkeen se menee 'offline'-tilaan. 'Depeering'-tilassa olevien vertaisten armonaika tarkistetaan — kun se umpeutuu, ne poistetaan.",
    "fedBusReplicateTitle": "Muistin replikointi",
    "fedBusReplicateDetail": "Solmut voivat replikoida muistimerkintöjä vertaisilleen POST /v1/federation/replicate -kutsulla. Pyynnön tulee sisältää lähdesolmu, GAII, avain, arvo, näkyvyys, versio ja kryptografinen allekirjoitus. Vastaanottava solmu tarkistaa allekirjoituksen vertaisen tallennettua julkista avainta vasten ja tallentaa datan 'replica:lähdesolmu:avain'-etuliitteellä.",
    "fedBusCatalogueTitle": "Katalogisynkronointi",
    "fedBusCatalogueDetail": "Toimintokatalogit synkronoidaan POST /v1/federation/catalogue-sync -kutsulla. Tämä tukee inkrementaalista synkronointia — jos 'since_timestamp' on annettu, vain uudemmat toiminnot odotetaan. Olemassa olevat federoidut toiminnot päivitetään (upsert federoidun tunnuksen mukaan). Jokainen synkronoitu toiminto merkitään 'federated:lähdesolmu'-tagilla.",
    "fedBusRoutingTitle": "Solmujen välinen pyyntöreititys",
    "fedBusRoutingDetail": "POST /v1/federation/route välittää pyynnöt etäsolmuille. Jos kohde on suora vertainen, pyyntö menee suoraan. Muutoin se yrittää monihyppyreititystä muiden aktiivisten vertaisten kautta. Ominaisuudet: silmukantunnistus (X-Relay-Path-otsake), konfiguroitava maksimihyppymäärä, 1 murun reititysmaksu per hyppy.",
    "fedBusSettlementTitle": "Muruselvitykset",
    "fedBusSettlementDetail": "Solmujen väliset murussiirrot käyttävät POST /v1/federation/settle (saapuva) ja POST /v1/federation/settle/outbound (lähtevä, vain operaattori). Jokainen selvitys allekirjoitetaan kryptografisesti, varmennetaan vertaisen julkisella avaimella ja tarkistetaan uudelleentoistohyökkäykset seurantakoodien avulla.",
    "fedBusTrustTitle": "Luottamushuomautukset",
    "fedBusTrustDetail": "Operaattorit voivat antaa luottamushuomautuksia solmuista POST /v1/federation/trust-advisory -kutsulla. Huomautustyypit: 'warning' (tiedotus), 'suspend' (suositus keskeyttämiseksi), 'ban' (poistaa kohdesolmun automaattisesti). Luottamushuomautukset jaetaan federaation kautta hätäpoiston yhteydessä.",
    "fedBusKeyExchangeTitle": "Avaintenvaihto",
    "fedBusKeyExchangeDetail": "POST /v1/federation/key-exchange mahdollistaa Ed25519-julkisten avainten vaihdon vertaisten välillä. Tämä on edellytys allekirjoitetuille sydämenlyönneille, replikoinnille ja selvityksille. Jos vertainen hyväksyttiin äskettäin vertaispyynnöllä, avaintenvaihto myös aktivoi sen.",
    "fedBusCrossWorkTitle": "Solmujen väliset työpyynnöt",
    "fedBusCrossWorkDetail": "Agentit voivat lähettää työtä etäsolmujen palveluille POST /v1/federation/cross-node/work -kutsulla. Pyyntö allekirjoitetaan lähettävän solmun yksityisellä avaimella ja välitetään kohdevertaiselle. 1 murun reititysmaksu veloitetaan.",
    "fedBusResolveTitle": "GAII-resoluutio",
    "fedBusResolveDetail": "GET /v1/federation/resolve/:gaii selvittää mikä solmu isännöi agenttia. Järjestys: 1) Paikallinen välimuisti (5 min TTL), 2) Paikallinen tallennus, 3) Henkilökohtaiset solmut, 4) GAII-muodon vihje (agentti#omistaja@solmu), 5) Yleislähetys aktiivisille vertaisille. Tulokset välimuistitetaan verkkoliikenteen vähentämiseksi.",
    "fedApiRefTitle": "API-viite",
    "fedApiRefHelpTitle": "Kaikki federaation päätepisteet",
    "fedDepeeringTitle": "Poistettavat vertaiset",
    "fedDepeeringExplain": "Nämä vertaiset ovat armonaikajaksolla ennen lopullista poistamista. Keskeneräiset työt voivat vielä valmistua.",
    "fedDepeeringGrace": "Armonaika päättyy",
    "fedShareCatalogue": "Jaa katalogi",
    "fedReplicateMemory": "Replikoi muisti",
    "fedAllowRouting": "Salli reititys",
    "fedAllowAuth": "Salli federaatiokirjautuminen",
    "fedAuthPolicyTitle": "Federaation todennuspolitiikka",
    "fedAuthPolicyDesc": "Hallitse voivatko muiden solmujen käyttäjät kirjautua tänne ja mitä he voivat tehdä.",
    "fedAuthDisabled": "Pois kaytosta (ei federaatiokirjautumisia)",
    "fedAuthAllPeers": "Kaikki vertaiset (kaikkien aktiivisten vertaisten käyttäjät voivat kirjautua)",
    "fedAuthSpecificPeers": "Tietyt vertaiset (vertaiskohtainen hallinta)",
    "fedDefaultScopes": "Oletuslaajuudet federoiduille käyttäjille:",
    "fedPeerMode": "Vertaistila",
    "fedPeerModeFederation": "Federaatio",
    "fedPeerModePrivate": "Yksityinen P2P",
    "fedPolicyUpdated": "Vertaispolitiikka päivitetty",
    "fedPolicySectionTitle": "Politiikka",
    "fedNetworkDirectoryTitle": "Verkkohakemisto",
    "fedNetworkDirectoryDesc": "Palvelut ja data saatavilla federaatioverkossa.",
    "fedNetworkDirType": "Tyyppi",
    "fedNetworkDirName": "Nimi",
    "fedNetworkDirNode": "Solmu",
    "fedNetworkDirCategory": "Kategoria",
    "fedNetworkDirPrice": "Hinta",
    "fedNetworkDirEmpty": "Federoituja palveluita ei vielä löydetty. Palvelut näkyvät kun vertaissolmut jakavat kataloginsa.",
    "fedNetworkDirSearch": "Hae palveluita...",
    "genesisExplain": "Genesis-vertaiset ovat federaatioklusterin perustajasolmuja. Genesis-solmu on ensimmäinen solmu, joka luo federaation, ja se hallinnoi vertaishyväksyntöjä, avainten vaihtoa ja klusterikäytäntöjä.",
    "genesisHelpTitle": "Mitä genesis-vertaiset ovat?",
    "genesisHelpDetail": "Kun luot uuden federaation, solmustasi tulee genesis-solmu (alkuperä). Muut solmut pyytävät liittymistä, ja hyväksyt tai hylkäät ne täällä. Genesis-vertaisilla on erityisoikeuksia: ne voivat asettaa klusterinlaajuisia käytäntöjä, hyväksyä uusia jäseniä ja keskeyttää väärin käyttäytyvät solmut. Hyväksytyt vertaiset voivat vaihtaa dataa federaatiosääntöjen mukaisesti.",
    "approved": "Hyväksytty",
    "confirmAction": "Oletko varma?",
    "approveConfirm": "Hyväksy tämä vertainen?",
    "suspendConfirm": "Keskeytä tämä vertainen?",
    "configuration": "Määritykset",
    "schema": "Skeema",
    "fields": "Kentät",
    "required": "Pakollinen",
    "type": "Tyyppi",
    "version": "Versio",
    "back": "Takaisin",
    "cfgGroup_node": "Solmu",
    "cfgGroup_storage": "Tallennustila",
    "cfgGroup_morsel_policy": "Muruspolitiikka",
    "cfgGroup_auth": "Autentikointi",
    "cfgGroup_features": "Ominaisuudet",
    "cfgGroup_work": "Työ",
    "cfgGroup_quota": "Kiintiöt",
    "cfgGroup_federation": "Federaatio",
    "cfgGroup_rate_limits": "Nopeusrajoitukset",
    "cfgGroup_email": "Sähköposti",
    "cfgGroup_consent": "Suostumus",
    "cfgGroup_totp": "TOTP",
    "cfgGroup_matching": "Matchaus",
    "cfgGroup_extensions": "Laajennukset",
    "cfgGroup_security": "Turvallisuus",
    "cfg_security_login_rate_limit_max": "Kirjautumisen nopeusrajoitus (max per ikkuna)",
    "cfg_security_login_rate_limit_window_ms": "Kirjautumisen nopeusrajoitusikkuna (ms)",
    "cfg_security_registration_rate_limit_max": "Rekisteroinnin nopeusrajoitus (max per ikkuna)",
    "cfg_security_registration_rate_limit_window_ms": "Rekisteroinnin nopeusrajoitusikkuna (ms)",
    "cfg_security_admin_auth_rate_limit_max": "Admin-todennuksen nopeusrajoitus (max per ikkuna)",
    "cfg_security_admin_auth_rate_limit_window_ms": "Admin-todennuksen nopeusrajoitusikkuna (ms)",
    "cfg_security_password_lockout_attempts": "Salasanalukitus N epaonnistumisen jalkeen",
    "cfg_security_password_lockout_minutes": "Salasanalukituksen kesto (minuuttia)",
    "cfg_security_json_body_limit_mb": "JSON-sisallon kokoraja (Mt)",
    "cfg_security_json_body_limit_large_mb": "Suuri kokoraja sovelluksille/laajennuksille (Mt)",
    "cfgGroup_marketplace": "Kauppapaikka",
    "cfgGroup_push": "Push-ilmoitukset",
    "cfgGroup_eudiw": "EUDIW",
    "cfgGroup_cross_federation": "Ristinfederaatio",
    "cfgHelp_cross_federation": "Ristinfederaatio yhdistää itsenäisiä AIMEAT-solmuja (tai eri federaatioklustereita) katalogijakoa ja solmujen välistä löytämistä varten. Toisin kuin klusterin sisäinen federaatio (genesis-/tarjoaja-roolit), genesis-vertaistaminen on pisteestä pisteeseen ilman keskitettyä rekisteriä. Jokaisella solmulla voi olla 'Maks. genesis-vertaiset' yhteyden verran yhteyksiä. Katalogit (CSM:t joissa federate:true) synkronoidaan automaattisesti määritetyin väliajoin. Ota tämä käyttöön myös itsenäisillä solmuilla yhdistääksesi muihin operaattoreihin. Hallinnoi vertaisia Genesis-vertaiset-välilehdellä.",
    "cfgGroup_personal_nodes": "Henkilökohtaiset solmut",
    "cfgGroup_match_notifications": "Match-ilmoitukset",
    "cfgGroup_consul": "Consul",
    "cfgHelp_extensions": "Laajennusjärjestelmä ajaa JavaScript-koodia hiekkalaatikoissa (V8-isolaateissa). Laajennukset lisäävät toiminnallisuuksia solmuun — kauppapaikkasäännöt, automaattinen moderointi, ajastetut tehtävät jne. Asenna valmiita laajennuksia Palvelut-välilehdeltä tai luo omia. Jokainen laajennus toimii eristettynä ja sille voi asettaa muisti-, aikakatkaisu- ja API-kutsurajat.",
    "cfgHelp_eudiw": "EUDIW (EU:n digitaalinen identiteettilompakko) mahdollistaa vahvan tunnistautumisen eurooppalaisen digitaalisen identiteetin kautta. FTN (Suomen luottamusverkosto) mahdollistaa vahvan tunnistautumisen pankkitunnuksilla ja mobiilivarmenteella. Käyttöönotto: aseta EUDIW Enabled ja/tai FTN Enabled päälle, ja määritä tunnistuspalvelun tunnukset .env-tiedostossa (AIMEAT_EUDIW_CLIENT_ID, AIMEAT_EUDIW_CLIENT_SECRET EUDIW:lle; AIMEAT_FTN_CLIENT_ID, AIMEAT_FTN_CLIENT_SECRET FTN:lle).",
    "cfgHelp_consul": "Consul on palvelunhaku- ja konfiguraationhallintajärjestelmä. Kun se on käytössä, AIMEAT synkronoi asetukset Consul KV -varastosta, mikä mahdollistaa keskitetyn hallinnan useille solmuille. Määritys: 1) Asenna ja käynnistä Consul, 2) Aseta AIMEAT_CONSUL_ENABLED=true .env-tiedostossa, 3) Määritä Consul-URL, KV-etuliite ja valinnaisesti ACL-tunnus. Nämä asetukset ovat muuttumattomia ja ne on asetettava ennen käynnistystä.",
    "cfgHelp_totp": "TOTP (aikaperusteinen kertasalasana) lisää kaksivaiheisen tunnistautumisen käyttäjätileille. Kun se on käytössä, käyttäjät voivat ottaa käyttöön tunnistussovelluksen (kuten Google Authenticator, Authy tai 1Password), joka luo 30 sekunnin välein vaihtuvia 6-numeroisia koodeja. Salausavain suojaa tallennettuja TOTP-salaisuuksia — luo se komennolla: openssl rand -hex 32, ja aseta se AIMEAT_TOTP_ENCRYPTION_KEY -ympäristömuuttujaan .env-tiedostossa.",
    "cfgHelp_matching": "Tekoälypohjainen yhdistämismoottori yhdistää käyttäjiä automaattisesti yhteisten kiinnostusten, sijainnin ja profiilitietojen perusteella. Kun se on käytössä, se toimii säännöllisin väliajoin ja tuottaa yhdistämisehdotuksia. Säädä minimipistemäärää, enimmäisehdotuksia per kierros, maantieteellisiä etäisyysrajoja ja jäähdytysaikoja.",
    "cfgHelp_consent": "Suostumuskerros tarjoaa GDPR-yhteensopivan tietojen käytönhallinnan. Kun se on käytössä, agenttien on pyydettävä nimenomainen suostumus ennen käyttäjätietojen käyttöä, ja kaikki suostumuspäätökset kirjataan tarkastuslokiin. Määritä tarkastuslokien säilytysaika ja käyttäjäkohtainen suostusten enimmäismäärä.",
    "cfgHelp_email": "Sähköpostiasetukset hallitsevat SMTP-yhteyttä ilmoitusten, vahvistusten ja hälytysten lähettämistä varten. Sähköpostimallien ja ilmoitusten sisällön määritys löytyy tämän hallintapaneelin Infrastruktuuri-välilehdeltä > Sähköposti-osiosta.",
    "cfg_node_id": "Solmun tunnus",
    "cfg_node_port": "Portti",
    "cfg_node_type": "Solmun tyyppi",
    "cfg_storage_type": "Tallennustyyppi",
    "cfg_morsel_policy_welcome_bonus": "Tervetulobonus",
    "cfg_morsel_policy_daily_allowance": "Päiväkiintiö",
    "cfg_morsel_policy_daily_allowance_cap": "Kiintiökatto",
    "cfg_morsel_policy_burn_rate": "Polttoprosentti",
    "cfg_morsel_policy_max_operator_mint_per_day": "Maks. operaattorin luonti/pv",
    "cfg_morsel_policy_board_post_base_cost": "Tauluviestin perushinta",
    "cfg_morsel_policy_board_post_cost_per_kb": "Tauluviestin hinta/KB",
    "cfg_auth_jwt_ttl_seconds": "JWT-elinaika (sekuntia)",
    "cfg_features_keyed_browse_enabled": "Avainselaus",
    "cfg_features_extended_features_enabled": "Laajennetut ominaisuudet",
    "cfg_work_queue_max_pending": "Maks. odottavat",
    "cfg_work_webhook_max_retries": "Webhook-uudelleenyritykset",
    "cfg_quota_memory_mb": "Muistikiintiö (MB)",
    "cfg_quota_storage_mb": "Tallennuskiintiö (MB)",
    "cfg_quota_micro_memory_kb": "Mikromuisti (KB)",
    "cfg_federation_max_relay_hops": "Maks. välityshypyt",
    "cfg_rate_limits_global": "Yleinen",
    "cfg_rate_limits_auth": "Autentikointi",
    "cfg_rate_limits_work": "Työ",
    "cfg_rate_limits_memory": "Muisti",
    "cfg_rate_limits_boards": "Keskustelut",
    "cfg_rate_limits_owners": "Omistajat",
    "cfg_rate_limits_ghii": "GHII (Identiteetti)",
    "cfg_rate_limits_flags": "Liputukset",
    "cfg_rate_limits_appeals": "Valitukset",
    "cfg_rate_limits_admin_setup": "Ylläpito / Asennus",
    "cfg_rate_limits_federation": "Federaatio",
    "cfg_rate_limits_catalogue": "Luettelo",
    "cfg_rate_limits_auth_challenge": "Auth-haaste",
    "cfg_email_enabled": "Sähköposti käytössä",
    "cfg_email_confirmation_required": "Vahvistus vaaditaan",
    "cfg_email_smtp_host": "SMTP-palvelin",
    "cfg_email_smtp_port": "SMTP-portti",
    "cfg_email_smtp_from": "Lähettäjäosoite",
    "cfg_email_smtp_user_configured": "SMTP-käyttäjä asetettu",
    "cfg_email_smtp_pass_configured": "SMTP-salasana asetettu",
    "cfg_consent_enabled": "Suostumus käytössä",
    "cfg_consent_audit_retention_days": "Tarkistuslogin säilytys (pv)",
    "cfg_consent_max_per_user": "Maks. per käyttäjä",
    "cfg_totp_enabled": "TOTP käytössä",
    "cfg_totp_period": "Koodijakso (sekuntia)",
    "cfg_totp_window": "Validointiikkuna",
    "cfg_totp_max_failed_attempts": "Maks. epäonnistuneet yritykset",
    "cfg_totp_lockout_seconds": "Lukitusaika (sekuntia)",
    "cfg_totp_encryption_key_configured": "Salausavain asetettu",
    "cfg_matching_enabled": "Matchaus käytössä",
    "cfg_matching_interval_hours": "Aikaväli (tuntia)",
    "cfg_matching_threshold": "Pistekynnys",
    "cfg_matching_max_suggestions": "Maks. ehdotukset",
    "cfg_matching_max_distance_km": "Maks. etäisyys (km)",
    "cfg_matching_cooldown_days": "Odotusaika (päivää)",
    "cfg_extensions_enabled": "Laajennukset käytössä",
    "cfg_extensions_max_memory_mb": "Maks. muisti (MB)",
    "cfg_extensions_timeout_ms": "Aikakatkaisu (ms)",
    "cfg_extensions_max_api_calls": "Maks. API-kutsut",
    "cfg_extensions_max_code_size_kb": "Maks. koodikoko (KB)",
    "cfg_extensions_max_installed": "Maks. asennettuja",
    "cfg_extensions_install_role": "Laajennusten asennusrooli",
    "cfg_extensions_install_role_desc": "Kuka voi asentaa laajennuksia: operaattori tai omistaja",
    "cfg_extensions_max_per_owner": "Laajennuksia per omistaja",
    "cfg_extensions_max_per_owner_desc": "Enimmäismäärä laajennuksia per omistaja",
    "cfg_generator_enabled": "Palvelugeneraattori",
    "cfg_generator_enabled_desc": "Näytä Generaattori-välilehti profiilissa",
    "cfg_marketplace_enabled": "Kauppapaikka käytössä",
    "cfg_marketplace_listing_fee": "Ilmoitusmaksu",
    "cfg_marketplace_tx_fee_percent": "Transaktiomaksu %",
    "cfg_marketplace_escrow_enabled": "Escrow käytössä",
    "cfg_push_enabled": "Push käytössä",
    "cfg_push_vapid_configured": "VAPID-avaimet asetettu",
    "cfg_eudiw_enabled": "EUDIW käytössä",
    "cfg_eudiw_ftn_enabled": "Suomalainen luottamusverkko",
    "cfg_cross_federation_enabled": "Ristinfederaatio käytössä",
    "cfg_cross_federation_max_genesis_peers": "Maks. genesis-vertaiset",
    "cfg_cross_federation_sync_interval_hours": "Synkronointiväli (tuntia)",
    "cfg_personal_nodes_enabled": "Henkilökohtaiset solmut käytössä",
    "cfg_personal_nodes_max_slots": "Maks. paikat",
    "cfg_match_notifications_enabled": "Match-ilmoitukset käytössä",
    "cfg_match_notifications_interval_hours": "Ilmoitusväli (tuntia)",
    "cfg_consul_enabled": "Consul käytössä",
    "cfg_consul_url": "Consul-osoite",
    "cfg_consul_prefix": "KV-etuliite",
    "cfg_consul_token_configured": "ACL-avain asetettu",
    "cfg_consul_watch_interval_seconds": "Tarkkailuväli (sekuntia)",
    "cfg_consul_datacenter": "Datakeskus",
    "cortexTab": "Cortex-laajennukset",
    "cortex": {
      "back": "← Takaisin",
      "total": "Yhteensä",
      "active": "Aktiivinen",
      "inactive": "Ei aktiivinen",
      "loading": "Ladataan cortex-laajennuksia...",
      "empty": "Ei asennettuja cortex-laajennuksia.",
      "name": "Nimi",
      "version": "Versio",
      "installedBy": "Asentaja",
      "status": "Tila",
      "visibility": "Näkyvyys",
      "componentsCol": "Komponentit",
      "components": "Komponentit",
      "noComponents": "Ei komponentteja",
      "author": "Tekijä",
      "activated": "Laajennus aktivoitu",
      "deactivated": "Laajennus deaktivoitu",
      "uninstalled": "Laajennus poistettu",
      "visibilityChanged": "Näkyvyys päivitetty",
      "confirmUninstall": "Poista tämä laajennus? Kaikki sen komponentit poistetaan.",
      "activate": "Aktivoi",
      "deactivate": "Deaktivoi",
      "uninstall": "Poista",
      "makePublic": "Tee julkiseksi",
      "makePrivate": "Tee yksityiseksi"
    },
    "packagesTab": "Paketit",
    "pkgTotalPackages": "Paketteja yhteensä",
    "pkgTotalInstances": "Instansseja yhteensä",
    "pkgTotalTemplates": "Mallilistauksia",
    "pkgPublished": "Julkaistu",
    "pkgPackagesTab": "Paketit",
    "pkgTemplatesTab": "Mallit",
    "pkgInstancesTab": "Instanssit",
    "pkgAllPackages": "Kaikki paketit",
    "pkgAllTemplates": "Mallilistaukset",
    "pkgAllInstances": "Kaikki instanssit",
    "pkgNoPackages": "Ei paketteja vielä. Luo esimerkkipaketit aloittaaksesi.",
    "pkgNoTemplates": "Ei mallilistauksia vielä",
    "pkgNoInstances": "Ei instansseja vielä",
    "pkgSeedExamples": "Luo esimerkkipaketit",
    "pkgReseedHint": "Päivitä esimerkkipaketit uusimpaan versioon.",
    "pkgAuthor": "Tekijä",
    "pkgVersion": "Versio",
    "pkgCategory": "Kategoria",
    "pkgTitle": "Otsikko",
    "pkgPackage": "Paketti",
    "pkgRating": "Arvosana",
    "pkgInstalls": "Asennukset",
    "pkgFeatured": "Suositeltu",
    "pkgLabel": "Nimi",
    "pkgOwner": "Omistaja",
    "pkgComponents": "Komponentit",
    "pkgInstalled": "Asennettu",
    "pkgPending": "Odottaa tarkistusta",
    "modModerationTab": "Moderointi",
    "modPendingQueue": "Odottavat tarkistusta",
    "modPublishedTemplates": "Julkaistut mallipohjat",
    "modHistory": "Moderointihistoria",
    "modNoPending": "Ei odottavia mallipohjia",
    "modNoPublished": "Ei julkaistuja mallipohjia",
    "modNoHistory": "Ei moderointihistoriaa",
    "modProposedDate": "Ehdotettu",
    "modReview": "Tarkista",
    "modClose": "Sulje",
    "modApprove": "Hyväksy",
    "modReject": "Hylkää",
    "modSuspend": "Keskeytä",
    "modConfirmSuspend": "Vahvista keskeytys",
    "modComment": "Kommentti (valinnainen)",
    "modCommentPlaceholder": "Valinnainen hyväksymiskommentti...",
    "modReason": "Syy (pakollinen)",
    "modReasonPlaceholder": "Hylkäyksen syy...",
    "modReasonRequired": "Syy on pakollinen",
    "modSuspendReason": "Keskeytyksen syy (pakollinen)",
    "modSuspendReasonPlaceholder": "Syy keskeytykselle...",
    "modChangelog": "Muutosloki",
    "modDryRun": "Kuivaharjoittelun tulokset",
    "modDecision": "Päätös",
    "modReviewer": "Tarkistaja",
    "modReasonCol": "Syy",
    "promptsTab": "Järjestelmäkehotteet",
    "promptsTotal": "Yhteensä",
    "promptsStatusActive": "Aktiivinen",
    "promptsStatusInactive": "Ei käytössä",
    "promptsGroups": "Ryhmät",
    "promptsGroupTiers": "Järjestelmätasot",
    "promptsGroupBuilders": "Sovellusrakentajat",
    "promptsGroupPortal": "Portaali",
    "promptsGroupKnowledge": "Tietämys",
    "promptsGroupPlatform": "Alustat",
    "promptsGroupGenerator": "Generaattori",
    "promptsEdit": "Muokkaa kehotetta",
    "promptsContent": "Sisältö",
    "promptsLocales": "Kieliversiot",
    "promptsAddLocale": "Lisää kieliversio",
    "promptsChangeNote": "Muutoshuomautus (valinnainen)",
    "promptsChangeNotePlaceholder": "Kuvaile muutosta...",
    "promptsSave": "Tallenna muutokset",
    "promptsReset": "Palauta oletusarvo",
    "promptsResetConfirm": "Palauta kehote tehdasasetuksiin? Nykyinen versio säilyy versiohistoriassa.",
    "promptsVersionHistory": "Versiohistoria",
    "promptsVersion": "Versio",
    "promptsRestore": "Palauta",
    "promptsRestoreConfirm": "Palauta tämä versio? Uusi versio luodaan vanhasta sisällöstä.",
    "promptsUsedIn": "Käytetään",
    "promptsVariables": "Käytettävissä olevat muuttujat",
    "promptsNoVersions": "Ei versiohistoriaa vielä",
    "promptsSaved": "Kehote tallennettu",
    "promptsResetDone": "Kehote palautettu tehdasasetuksiin",
    "promptsResetAll": "Palauta kaikki kehotteet tehdasasetuksiin",
    "promptsResetAllConfirm": "Palauta KAIKKI järjestelmäkehotteet tehdasasetuksiin? Tämä poistaa kaikki mukautukset ja versiohistoriat. Tätä ei voi peruuttaa.",
    "promptsResetAllDone": "Kaikki kehotteet palautettu tehdasasetuksiin",
    "promptsResetGroup": "Palauta ryhmä",
    "promptsResetGroupConfirm": "Palauta kaikki tämän ryhmän kehotteet tehdasasetuksiin? Muokkaukset menetetään (mutta säilyvät versiohistoriassa).",
    "promptsRestored": "Versio palautettu",
    "promptsHelp": "Järjestelmäkehotteet ovat tekoälyohjetekstejä, jotka tarjotaan agenteille ja käyttäjille. Muokkaa niitä täällä mukauttaaksesi toimintaa ilman koodimuutoksia. Jokaisessa kehotteessa voi käyttää {{muuttuja}}-paikkamerkkejä.",
    "promptsHelpTitle": "Tietoa järjestelmäkehotteista",
    "promptsEmpty": "Järjestelmäkehotteita ei löytynyt. Ne luodaan seuraavassa palvelimen uudelleenkäynnistyksessä.",
    "memoryAdmin": "Muisti",
    "memoryAdminDesc": "Selaa ja hallitse kaikkien omistajien muistiavaimia",
    "memoryOwner": "Omistaja",
    "memoryKey": "Avain",
    "memoryValue": "Arvo",
    "memoryVisibility": "Näkyvyys",
    "memoryVersion": "Versio",
    "memoryUpdated": "Päivitetty",
    "memorySize": "Koko",
    "memoryTotal": "Avaimia yhteensä",
    "memorySearch": "Hae muistista...",
    "memoryFilterOwner": "Suodata omistajan mukaan",
    "memoryFilterPrefix": "Suodata avaimen etuliitteellä",
    "memoryNoResults": "Muistiavaimia ei löytynyt",
    "memoryDeleteConfirm": "Poista tämä muistiavain?",
    "memoryDeleted": "Muistiavain poistettu",
    "agentTasksTab": "Agenttitehtävät",
    "agentTasksDesc": "Yhteenveto kaikista agenttitehtävistä solmussa",
    "agentTasksTotal": "Tehtäviä yhteensä",
    "agentTasksEmpty": "Agenttitehtäviä ei löytynyt",
    "agentTasksAgent": "Agentti",
    "agentTasksTitle": "Otsikko",
    "agentTasksStatus": "Tila",
    "agentTasksTodoProgress": "TODO-edistyminen",
    "agentTasksCreated": "Luotu",
    "agentTasksLastEvent": "Viimeisin tapahtuma",
    "agentTasksActiveTasks": "Aktiiviset agenttitehtävät",
    "agentTasksFilterStatus": "Suodata tilan mukaan",
    "agentTasksAllStatuses": "Kaikki tilat",
    "sharingGroupsTab": "Jakoryhmät",
    "sharingGroupsDesc": "Yhteenveto kaikista jakoryhmistä solmussa",
    "sharingGroupsTotal": "Ryhmiä yhteensä",
    "sharingGroupsEmpty": "Jakoryhmiä ei löytynyt",
    "sharingGroupsName": "Nimi",
    "sharingGroupsOwner": "Omistaja",
    "sharingGroupsMembers": "Jäsenet",
    "sharingGroupsEntries": "Merkinnät",
    "sharingGroupsCreated": "Luotu",
    "sharingGroupsTotalCount": "Jakoryhmät",
    "overviewActiveTasks": "Aktiiviset tehtävät",
    "overviewSharingGroups": "Jakoryhmät"
  },
  "launcher": {
    "title": "Omat Sovellukset",
    "addApp": "Lisää sovellus",
    "settings": "Asetukset",
    "search": "Hae sovelluksia...",
    "noApps": "Ei sovelluksia vielä",
    "noAppsHint": "Lisää ensimmäinen sovellus +-painikkeella",
    "importAimeat": "Tuo AIMEAT:sta",
    "export": "Vie varmuuskopio",
    "import": "Tuo varmuuskopio",
    "clearAll": "Tyhjennä kaikki",
    "confirmDelete": "Poista tämä sovellus?",
    "confirmClear": "Poista KAIKKI sovellukset ja asetukset? Tätä ei voi perua."
  },
  "hobbies": {
    "title": "Harrastehakemisto",
    "subtitle": "Löydä harrastuksia ja samanhenkisiä ihmisiä läheltäsi",
    "members": "Jäseniä",
    "hobbies": "Harrastuksia",
    "cities": "Kaupunkia",
    "browseByCategory": "Selaa kategorioittain",
    "topInterests": "Suosituimmat harrastukset",
    "topCities": "Suosituimmat kaupungit",
    "searchPeople": "Hae harrastajia",
    "joinDirectory": "Liity hakemistoon",
    "people": "henkilöä",
    "loadError": "Sivua ei voitu ladata.",
    "search": {
      "title": "Hae harrastajia",
      "subtitle": "Etsi samanhenkisiä ihmisiä kiinnostuksen tai sijainnin perusteella",
      "interest": "Kiinnostus",
      "interestPlaceholder": "esim. koodaus, pyöräily...",
      "city": "Kaupunki",
      "cityPlaceholder": "esim. Helsinki",
      "area": "Alue",
      "areaPlaceholder": "esim. Kallio",
      "btn": "Hae",
      "results": "tulosta",
      "forInterest": "kiinnostukselle",
      "inCity": "kaupungissa",
      "noResults": "Ei tuloksia. Kokeile eri hakuehtoja tai",
      "joinLink": "liity hakemistoon",
      "interests": "Harrastukset",
      "cities": "Kaupungit",
      "shared": "yhteistä",
      "profileHidden": "Profiili piilotettu",
      "profileHiddenDesc": "Tämä profiili on piilotettu yhteisön ilmoitusten perusteella.",
      "prev": "Edellinen",
      "next": "Seuraava",
      "error": "Hakua ei voitu suorittaa."
    },
    "profile": {
      "notFound": "Profiilia ei löytynyt.",
      "backToSearch": "Takaisin hakuun",
      "hidden": "Tämä profiili on piilotettu yhteisön ilmoitusten perusteella.",
      "description": "Kuvaus",
      "interests": "Kiinnostukset",
      "location": "Sijainti",
      "availability": "Saatavuus",
      "seeking": "Etsii",
      "sharedInterests": "yhteistä kiinnostusta",
      "flagBtn": "Ilmianna profiili",
      "flagReason": "Syy ilmiantoon (unreliable, inappropriate, spam, other):",
      "flagSent": "Ilmianto lähetetty.",
      "flagError": "Virhe",
      "networkError": "Verkkovirhe.",
      "loadError": "Profiilia ei voitu ladata."
    },
    "join": {
      "title": "Liity hakemistoon",
      "subtitle": "Luo profiili ja löydä samanhenkisiä ihmisiä",
      "authNotice": "Kirjaudu sisään liittyäksesi.",
      "authLink": "Kirjaudu tai rekisteröidy tästä.",
      "interests": "Kiinnostukset *",
      "interestsPlaceholder": "esim. koodaus, pyöräily, musiikki",
      "interestsHint": "Erota pilkuilla. Vähintään yksi.",
      "city": "Kaupunki *",
      "cityPlaceholder": "esim. Helsinki",
      "country": "Maa",
      "bio": "Kuvaus",
      "bioPlaceholder": "Kerro itsestäsi...",
      "bioHint": "Enintään 500 merkkiä.",
      "availability": "Saatavuus",
      "availNone": "Ei valittu",
      "availAnytime": "Milloin vain",
      "availMornings": "Aamut",
      "availEvenings": "Illat",
      "availWeekends": "Viikonloput",
      "availEveningsWeekends": "Illat & viikonloput",
      "seeking": "Etsii (valinnainen)",
      "seekingPlaceholder": "esim. harjoituskaveri, tiimijäseniä",
      "seekingHint": "Erota pilkuilla.",
      "consent": "Hyväksyn, että profiilini näkyy hakemistossa (community-discovery).",
      "submitBtn": "Liity hakemistoon",
      "saving": "Tallennetaan...",
      "needInterest": "Lisää vähintään yksi kiinnostus.",
      "needCity": "Kaupunki on pakollinen.",
      "success": "Profiilisi on luotu! Se näkyy hakemistossa, kun hakemisto päivitetään seuraavan kerran.",
      "browseBtn": "Selaa hakemistoa",
      "saveFailed": "Tallennus epäonnistui. Yritä uudelleen.",
      "error": "Lomaketta ei voitu ladata.",
      "notifications": "Ilmoita, kun joku lähistöllä jakaa kiinnostukseni"
    },
    "me": {
      "title": "Oma profiili",
      "noGhii": "Et ole vielä luonut GHII-profiilia.",
      "registerFirst": "Rekisteröidy ensin.",
      "notInDirectory": "Profiiliasi ei löytynyt hakemistosta. Tämä voi johtua siitä, ettet ole vielä liittynyt tai hakemistoindeksiä ei ole päivitetty.",
      "joinBtn": "Liity hakemistoon",
      "editTitle": "Muokkaa profiilia",
      "saveBtn": "Tallenna muutokset",
      "saving": "Tallennetaan...",
      "saved": "Muutokset tallennettu! Hakemisto päivittyy seuraavalla kerralla.",
      "saveFailed": "Osa tallennuksista epäonnistui.",
      "viewPublic": "Näytä julkinen profiili",
      "notSet": "Ei asetettu",
      "loadError": "Profiilia ei voitu ladata.",
      "signInRequired": "Kirjaudu sisään nähdäksesi profiilisi.",
      "notifications": "Vastineilmoitukset",
      "notificationsOn": "Saat ilmoituksen, kun joku lähistöllä jakaa kiinnostuksesi.",
      "notificationsOff": "Vastineilmoitukset on pois päältä."
    },
    "nav": {
      "brand": "AIMEAT Harrastukset",
      "search": "Haku",
      "join": "Liity",
      "me": "Oma profiili",
      "portal": "Portaali",
      "matches": "Vastineet"
    },
    "availability": {
      "anytime": "Milloin vain",
      "mornings": "Aamut",
      "evenings": "Illat",
      "weekends": "Viikonloput",
      "eveningsWeekends": "Illat & viikonloput"
    },
    "matches": {
      "title": "Vastineesi",
      "subtitle": "Ihmiset, joilla on samoja kiinnostuksia",
      "loginRequired": "Kirjaudu nähdäksesi vastineesi",
      "noMatches": "Ei vastineita vielä. Kokeile lisätä enemmän kiinnostuksia profiiliisi!",
      "shared": "yhteistä kiinnostusta",
      "loading": "Etsitään vastineita..."
    }
  },
  "mkt": {
    "brand": "AIME AT Tori",
    "instanceSelector": "Valitse kauppapaikka",
    "instanceSelectorSubtitle": "Valitse kauppapaikka selataksesi tai myydäksesi",
    "noInstances": "Ei saatavilla olevia kauppapaikkoja",
    "visibility": {
      "public": "Julkinen",
      "password": "Salasanasuojattu",
      "invite": "Vain kutsutut"
    },
    "backToMarketplaces": "← Kaikki kauppapaikat",
    "nav": {
      "search": "Haku",
      "sell": "Myy",
      "myListings": "Omat",
      "myPurchases": "Ostokset",
      "portal": "Portaali"
    },
    "home": {
      "title": "Tori",
      "subtitle": "AIMEAT-markkinapaikka — osta ja myy morsel-valuutalla",
      "listings": "Ilmoitusta",
      "categories": "Kategoriaa",
      "categoriesHeading": "Kategoriat",
      "recentHeading": "Uusimmat ilmoitukset",
      "emptyText": "Ei vielä ilmoituksia. Ole ensimmäinen myyjä!",
      "browseBtn": "Selaa ilmoituksia",
      "sellBtn": "Luo ilmoitus",
      "announcements": "ilmoitusta"
    },
    "search": {
      "title": "Hae ilmoituksia",
      "subtitle": "Suodata ja selaa markkinapaikan tarjontaa",
      "keyword": "Hakusana",
      "keywordPlaceholder": "Etsi...",
      "category": "Kategoria",
      "categoryAll": "Kaikki",
      "city": "Kaupunki",
      "cityPlaceholder": "esim. Espoo",
      "price": "Hinta (morsels)",
      "minPlaceholder": "Min",
      "maxPlaceholder": "Max",
      "btn": "Hae",
      "clearBtn": "Tyhjennä",
      "noResults": "Ei tuloksia. Kokeile eri hakuehtoja.",
      "prev": "Edellinen",
      "next": "Seuraava",
      "page": "Sivu",
      "error": "Hakua ei voitu suorittaa."
    },
    "detail": {
      "backToMarket": "Takaisin torille",
      "seller": "Myyjä",
      "condition": "Kunto",
      "availability": "Saatavuus",
      "created": "Luotu",
      "totalPrice": "Kokonaishinta sisältäen palvelumaksun",
      "price": "Hinta",
      "serviceFee": "palvelumaksu",
      "purchaseHint": "Ostaminen vaatii kirjautumisen.",
      "purchaseBtn": "Osta",
      "ownListing": "Tämä on oma ilmoituksesi. Hallinnoi API:n kautta.",
      "purchases": "Ostokset",
      "buyer": "Ostaja",
      "notFound": "Ilmoitusta ei löydy.",
      "backBtn": "Takaisin",
      "loadError": "Ilmoitusta ei voitu ladata.",
      "purchaseSuccess": "Osto onnistui!",
      "purchaseFailed": "Osto epäonnistui"
    },
    "sell": {
      "title": "Luo ilmoitus",
      "listingFee": "Listaamismaksu",
      "formNote": "Täytä tiedot ja lähetä ilmoitus.",
      "titleLabel": "Otsikko *",
      "titlePlaceholder": "Tuotteen tai palvelun nimi",
      "descLabel": "Kuvaus *",
      "descPlaceholder": "Kuvaile tuote tai palvelu...",
      "categoryLabel": "Kategoria *",
      "priceLabel": "Hinta (morsels) *",
      "conditionLabel": "Kunto",
      "conditionNone": "-",
      "conditionNew": "Uusi",
      "conditionUsed": "Käytetty",
      "conditionDigital": "Digitaalinen",
      "availLabel": "Saatavuus",
      "availNone": "-",
      "availImmediate": "Heti",
      "availOnRequest": "Pyydettäessä",
      "availScheduled": "Aikataulutettu",
      "cityLabel": "Kaupunki",
      "cityPlaceholder": "esim. Helsinki",
      "areaLabel": "Alue",
      "areaPlaceholder": "esim. Kallio",
      "tagsLabel": "Tagit (pilkuilla erotetut)",
      "tagsPlaceholder": "esim. koodaus, web, react",
      "submitBtn": "Luo ilmoitus",
      "sending": "Lähetetään...",
      "success": "Ilmoitus luotu! ID:",
      "unknownError": "Tuntematon virhe",
      "networkError": "Verkkoyhteys epäonnistui",
      "authRequired": "Kirjaudu sisään luodaksesi ilmoituksen.",
      "authBtn": "Kirjaudu"
    },
    "myListings": {
      "title": "Omat ilmoitukset",
      "subtitle": "Hallinnoi myynti-ilmoituksiasi",
      "newBtn": "+ Uusi ilmoitus",
      "empty": "Ei vielä ilmoituksia. Luo ensimmäinen!",
      "authRequired": "Kirjaudu sisään nähdäksesi omat ilmoituksesi.",
      "error": "Sivua ei voitu ladata.",
      "delistBtn": "Poista"
    },
    "myPurchases": {
      "title": "Omat ostokset",
      "subtitle": "Ostoshistoria ja arvostelut",
      "empty": "Ei vielä ostoksia.",
      "seller": "Myyjä",
      "code": "Koodi",
      "rateHint": "Arvostele: POST /v1/app-store/purchases/",
      "authRequired": "Kirjaudu sisään nähdäksesi ostoksesi.",
      "error": "Sivua ei voitu ladata.",
      "unknown": "Tuntematon"
    },
    "status": {
      "active": "Aktiivinen",
      "sold": "Myyty",
      "expired": "Vanhentunut",
      "hidden": "Piilotettu",
      "delisted": "Poistettu",
      "pending_delivery": "Odottaa toimitusta",
      "delivered": "Toimitettu",
      "disputed": "Riitautettu",
      "completed": "Valmis",
      "cancelled": "Peruttu"
    },
    "cat": {
      "palvelut": "Palvelut",
      "tuotteet": "Tuotteet",
      "data": "Data",
      "osaaminen": "Osaaminen",
      "muu": "Muu"
    },
    "langSwitch": "EN"
  },
  "portal": {
    "nav": {
      "devView": "Kehittäjille",
      "profile": "Profiili"
    },
    "genesis": {
      "name": "GENESIS 001",
      "tagline": "Tee hulluja käyttöliittymiä hetkessä jotka on yhteydessä koko maailmaan ja muihin ihmisiin tai agentteihin.",
      "taglines": [
        "Tee hulluja käyttöliittymiä hetkessä jotka on yhteydessä koko maailmaan ja muihin ihmisiin tai agentteihin.",
        "Digitaalinen työskentelytila tekoälyagenteille ja ihmisille.",
        "Muistisi. Agenttisi. Sinun hallinnassasi.",
        "Rakenna, jaa, löydä — yhdessä tekoälyn kanssa."
      ],
      "subline": "Kopioi kehote. Liitä mihin tahansa AI-chattiin. Sinulla on toimiva monen käyttäjän sovellus minuuteissa."
    },
    "oneliners": {
      "title": "Mielipiteet livenä",
      "empty": "Ei vielä viestejä. Joku rikkoo hiljaisuuden pian."
    },
    "provocation": {
      "lines": [
        "Sinulla on mielipide. Se muuttaa jotain.",
        "Maailma ei tiedä vielä mitä sinä ajattelet.",
        "Täällä ihmiset puhuvat ihmisille.",
        "Joku odottaa juuri sinun näkökulmaasi.",
        "Parhaat ideat syntyvät kun ihmiset törmäävät.",
        "Jokaisella on tarina jonka haluaa kertoa.",
        "Uskotko johonkin? Sano se ääneen.",
        "Sinä olet enemmän kuin datasi.",
        "Tänään jonkun idea muuttaa jonkun mielen.",
        "Rakkautta sille mikä sinulle oikeasti merkitsee."
      ],
      "weights": [
        3,
        3,
        2,
        2,
        2,
        2,
        2,
        1,
        1,
        1
      ],
      "line1": "Mielipiteitä on maailmassa yhtä paljon kuin perseen­reikiä. Tässä niistä muutama:",
      "cta": "Anna mielipiteesi kuulua kopioimalla alla oleva kehote mihin tahansa tekoälychattiin, kerro mitä haluat, ja alle minuutissa mielipiteesi näkyy täällä livenä."
    },
    "prompt": {
      "copyBtn": "KOPIOI KEHOTE & LIITÄ SE AI-CHATTIIN",
      "copied": "KOPIOITU!",
      "anyAi": "Toimii Clauden, ChatGPT:n, Grokin, Geminin, Copilotin, DeepSeekin kanssa — kaikki käy."
    },
    "expand": {
      "btn": "▼ AVAA KOKO MAAILMA ▼",
      "btnOpen": "▲ SULJE ▲",
      "signInRequired": "Kirjaudu sisään avataksesi oman maailmasi.",
      "userPrefix": "Avaa koko maailma",
      "userPrefixOpen": "Sulje"
    },
    "world": {
      "apps": {
        "title": "Sovellukset",
        "desc": "Selaa muiden tekemiä sovelluksia tai lisää omasi."
      },
      "agents": {
        "title": "AI Agentit",
        "desc": "AI:si tekee töitä kun sinä nukut. Kopioi tämä kehote ja AI rakentaa sinulle toimivan agentin.",
        "copyBtn": "Kopioi agenttikehote",
        "copied": "Kopioitu!"
      },
      "connect": {
        "title": "Yhdistä oma agenttiympäristö",
        "desc": "Jos ajat OpenClawia, LM Studiota tai mitä tahansa MCP-yhteensopivaa työkalua — yhdistä se suoraan.",
        "copyBtn": "Kopioi yhdistämiskehote",
        "copied": "Kopioitu!",
        "readMore": "Lisätietoa agenttiympäristön yhdistämisestä"
      },
      "services": {
        "title": "Palvelut",
        "desc": "Tarvitsetko apua? Lähetä pyyntö. Osaatko jotain? Tarjoa se."
      },
      "builders": {
        "title": "Palveluiden tekijöille",
        "desc": "Luo Community Service Manifest (CSM) -tiedostoja, jotka määrittelevät uusia palveluita.",
        "registerBtn": "Rekisteröidy aloittaaksesi"
      },
      "catalog": {
        "openBtn": "Avaa sovelluskatalogi",
        "downloadBtn": "Lataa HTML"
      },
      "fullBuilder": {
        "title": "Rakenna mikä tahansa sovellus",
        "desc": "Täysi kehote kaikilla kategorioilla: pelit, muistiinpanot, seurantatyökalut, musiikkijamit, reaaliaikainen yhteistyö, palvelut ja paljon muuta. Kun haluat täyden hallinnan.",
        "copyBtn": "Kopioi täysi kehote",
        "copied": "Kopioitu!"
      }
    },
    "modal": {
      "title": "❤️ Kirjaudu",
      "descNew": "Uusi käyttäjä? Valitse käyttäjänimi ja salasana luodaksesi tilin.",
      "descReturning": "Onko sinulla jo tili? Kirjoita käyttäjänimi ja salasana.",
      "usernamePlaceholder": "Käyttäjänimi",
      "passwordPlaceholder": "Salasana (vähintään 4 merkkiä)",
      "displayNamePlaceholder": "Näyttönimi (valinnainen, uusille tileille)",
      "signInBtn": "Kirjaudu",
      "cancelBtn": "Peruuta",
      "working": "Käsitellään...",
      "errUserShort": "Käyttäjänimen tulee olla vähintään 3 merkkiä",
      "errPassShort": "Salasanan tulee olla vähintään 4 merkkiä",
      "errWrongPass": "Väärä salasana tälle käyttäjänimelle.",
      "connectingHome": "Yhdistetään kotisolmuun...",
      "errFederatedLogin": "Kotisolmuun {remoteNode} ei saatu yhteyttä federoitua kirjautumista varten.",
      "loggedIn": "kirjautuneena",
      "logoutBtn": "Kirjaudu ulos",
      "whyTitle": "✨ Mitä saat?",
      "whyGhii": "Ilmaisen GHII:n (Global Human Intelligence Identifier), oma henkilökohtainen tekoälyidentiteettisi",
      "whyPrivacy": "Oman yksityisen muistitilan, suojattuna salasanallasi",
      "whyControl": "Täyden hallinnan: vain sinä pääset tietoihisi, ei tarvitse jakaa kenellekään",
      "whyAgents": "Yhdistä AI-agentteja jotka muistavat sinut ja toimivat puolestasi",
      "whyMorsels": "100 ilmaista sydänmurusta alkuun! Esim. muistipyyntö ~ 1 ❤️, tauluviesti ~ 2 ❤️. Saat 50 lisää joka päivä"
    },
    "promptLangNote": "Kehote on englanniksi koska AI:t toimivat sillä parhaiten. Voit silti pyytää AI:ta vastaamaan suomeksi. Toimii Clauden, ChatGPT:n, Grokin, Geminin, Copilotin, DeepSeekin kanssa — kaikki käy.",
    "morsels": {
      "economy": "Sydänmuruset (❤️) ovat tämän paikan mikrovaluutta. Saat 100 ilmaiseksi alkuun. Toiminnot maksavat pienen määrän. Saat 50 lisää joka päivä."
    },
    "classic": {
      "link": "Klassinen näkymä"
    },
    "userWorld": {
      "profile": {
        "title": "Profiilin yleiskuva",
        "desc": "Identiteettisi ja nopeat linkit omaan hallintanäkymään.",
        "owner": "Käyttäjä",
        "ghii": "GHII",
        "node": "Node",
        "openProfile": "Avaa koko profiili",
        "openWallet": "Avaa lompakko",
        "openMemory": "Avaa muisti",
        "openWork": "Avaa työt",
        "openServices": "Avaa palvelut",
        "openApps": "Avaa sovellukset"
      },
      "stats": {
        "wallet": "Lompakko",
        "agents": "Agentit",
        "memory": "Muistit",
        "work": "Tehtävät",
        "services": "Palvelut",
        "apps": "Sovellukset",
        "files": "Tiedostot"
      },
      "marketplace": {
        "title": "Marketplace",
        "desc": "Selaa tarjouksia ja julkaise oma osaamisesi.",
        "open": "Avaa marketplace",
        "manage": "Hallitse palveluitasi"
      },
      "services": {
        "title": "Uusimmat palvelut",
        "desc": "Siirry nopeasti viimeaikaisiin portaalin palveluihin ja työkaluihin.",
        "hobbies": "Harrastukset",
        "guides": "Oppaat",
        "aimeatOs": "AIMEAT OS",
        "openclaw": "OpenClaw-ympäristö",
        "catalog": "Sovelluskatalogi"
      }
    }
  },
  "wallet": {
    "consents": {
      "title": "Aktiiviset suostumukset",
      "empty": "Ei aktiivisia suostumuksia",
      "pattern": "Datakuvio",
      "recipient": "Vastaanottaja",
      "purpose": "Tarkoitus",
      "scope": "Laajuus",
      "granted": "Myönnetty",
      "expires": "Vanhenee",
      "revoke": "Peru",
      "never": "Ei koskaan",
      "revoking": "Perutaan...",
      "revoked": "Suostumus peruttu",
      "scopeFederation": "Federaatio",
      "scopeAuth": "Kirjautumisoikeus",
      "filterAll": "Kaikki",
      "filterFederation": "Federaatio",
      "filterAuth": "Kirjautumisoikeus"
    },
    "audit": {
      "title": "Auditointiraportti",
      "empty": "Ei datankäyttötapahtumia",
      "who": "Käyttäjä",
      "what": "Data-avain",
      "when": "Milloin",
      "purpose": "Tarkoitus",
      "days": "päivää"
    },
    "export": {
      "title": "GDPR-vienti",
      "description": "Lataa kaikki tietosi JSON-tiedostona",
      "button": "Lataa kaikki tietoni",
      "downloading": "Valmistellaan vientiä..."
    }
  },
  "classic": {
    "nav": {
      "devView": "Kehittäjille"
    },
    "hero": {
      "title": "Tietosi on sinun. AI:si työskentelee puolestasi.",
      "subtitle": "Ei Googlen, ei OpenAI:n, ei kenenkään muun. Kerro asiat kerran, tekoälysi muistaa, jakaa ja toimii. Kokeile heti, ei tarvitse rekisteröityä.",
      "anonNote": "Olet kokeilemassa tätä anonyymisti. Tietosi vanhenevat ajan myötä.",
      "createAccount": "Luo ilmainen tili"
    },
    "cards": {
      "memory": {
        "title": "Muisti",
        "tagline": "Kirjoita, lue, jaa. Tästä kaikki alkaa.",
        "desc": "Kirjoita viesti jaettuun muistiin. Kaikki näkevät sen. Näin AIMEAT toimii. AI-agentit ja ihmiset jakavat yhteisen muistitilan. Kokeile.",
        "inputPlaceholder": "Kirjoita viestisi taululle...",
        "sendBtn": "Lähetä",
        "sent": "Viesti lähetetty!",
        "sentNote": "Viestisi näkyy nyt kaikille. Seuraavaksi voit tehdä oman näkymän, jolla seuraat muiden viestejä ja lähetät uusia jatkossakin.",
        "exampleChips": "Vanha kitara myytävänä, ota yhteyttä Mikaan, Etsitään suomen kielen opettajaa, Ilmaisia kissanpentuja Espoossa",
        "recentTitle": "Uusimmat viestit",
        "emptyBoard": "Ei vielä viestejä. Ole ensimmäinen!",
        "buildApp": "Tee oma näkymä viesteihin tekoälyllä",
        "copyInstructions": "Kopioi kehote",
        "copiedInstructions": "Kopioitu!",
        "pasteHint": "Liitä mihin tahansa AI-chattiin. AI rakentaa sinulle HTML-sovelluksen, jota voit ajaa omassa selaimessa, joka näyttää taulun automaattipäivityksellä ja jolla voit lähettää uusia viestejä.",
        "upgradeNote": "Tämä data on julkista ja vanhenee. Rekisteröi henkilökohtainen tunnus saadaksesi oman yksityisen muistitilan."
      },
      "apps": {
        "title": "Sovellukset",
        "tagline": "Vastaa kysymyksiin, saat sovelluksen",
        "desc": "Et tarvitse koodaustaitoja. Valitse mitä haluaisit tehdä, vastaa muutamaan kysymykseen, ja AI rakentaa sinulle sovelluksen. Avaat sen suoraan selaimesta, ja tieto tallentuu niin että se on saatavilla mistä tahansa.",
        "categories": {
          "games": "Pelit",
          "gamesDesc": "Haasta kaverisi moninpeliin",
          "notes": "Muistiinpanot",
          "notesDesc": "Pidä päiväkirjaa tai muistilistaa",
          "trackers": "Seurantatyökalut",
          "trackersDesc": "Seuraa tapoja, budjettia tai mitä vain",
          "family": "Perhetyökalut",
          "familyDesc": "Jaettu kalenteri, ostoslista, viestit",
          "creative": "Luovat",
          "creativeDesc": "Tee kuvia, tarinoita tai muuta hauskaa",
          "band": "Musiikki & Jam",
          "bandDesc": "Soita instrumentteja yhdessä reaaliajassa",
          "realtime": "Live & moninpeli",
          "realtimeDesc": "Reaaliaikainen yhteistyö — piirtotaulu, chatti, jaetut työkalut",
          "custom": "Oma idea",
          "customDesc": "Kerro mitä haluat ja AI rakentaa sen"
        },
        "anyAiWorks": "Sovelluksia voi rakentaa millä tahansa AI:lla: Claude, ChatGPT, Grok, Gemini, Copilot, DeepSeek, kaikki toimivat! Kokeile eri AI:lla ja näet mikä tekee parhaan tuloksen.",
        "step1": "Kopioi ylläoleva kehote",
        "step2": "Liitä se mihin tahansa AI-chattiin (ChatGPT, Claude, Grok, Gemini...)",
        "step3": "Vastaa AI:n kysymyksiin, anna nimi ja valitse tyyli",
        "step4": "Lataa HTML-tiedosto ja avaa se selaimessa. Valmis!",
        "backToCategories": "Takaisin kategorioihin",
        "copyPrompt": "Kopioi kehote",
        "copied": "Kopioitu!",
        "promptLangNote": "Kehote on englanniksi koska AI:t toimivat sillä parhaiten. Voit silti pyytää AI:ta vastaamaan suomeksi.",
        "returnTitle": "Kun sovelluksesi on valmis",
        "returnStep1": "Tallenna AI:n tuottama HTML-tiedosto",
        "returnStep2": "Lähetä se tänne sovellukseksi",
        "returnStep3": "Muut voivat käyttää ja arvioida sitä",
        "returnBtnAnon": "Rekisteröidy ja lisää sovellus",
        "returnBtnAuth": "Lisää uusi sovellus",
        "returnMotivation": "Saitko sovelluksen valmiiksi? Muut voivat käyttää sitä ja ansaitset sydänmurusia."
      },
      "services": {
        "title": "Palvelut",
        "tagline": "Auta muita tai pyydä apua",
        "desc": "Tarvitsetko kuvan tekemistä, tekstin kääntämistä, tai apua jonkin tekemisessä? Laita pyyntö ja joku, ihminen tai AI, voi toimittaa sen sinulle. Osaatko itse jotain erityistä? Tarjoa se palveluna ja näy keltaisilla sivuilla.",
        "needHelp": "Tarvitsen apua",
        "needHelpDesc": "Kerro mitä tarvitset",
        "needHelpPlaceholder": "Kuvaile mihin tarvitset apua...",
        "needHelpExamples": "Käännä tämä teksti espanjaksi, Tee logo projektilleni, Auta kirjoittamaan työhakemus",
        "offerHelp": "Haluan auttaa",
        "offerHelpDesc": "Kerro mitä osaat",
        "offerHelpPlaceholder": "Kuvaile missä olet hyvä...",
        "offerHelpExamples": "Osaan kääntää suomesta englanniksi, Teen kuvituksia, Autan matematiikassa",
        "submitRequest": "Lähetä pyyntö",
        "submitOffer": "Tarjoa palvelu",
        "posted": "Lähetetty!",
        "requestPosted": "Pyyntösi näkyy nyt auttajille tällä solmulla.",
        "offerPosted": "Palvelusi on nyt listattu hakemistoon.",
        "backToChoices": "Takaisin"
      },
      "launcher": {
        "title": "Sovelluskatalogi",
        "tagline": "Selaa ja löydä sovelluksia yhdestä paikasta.",
        "openBtn": "Avaa sovelluskatalogi",
        "downloadBtn": "Lataa HTML"
      }
    },
    "morsels": {
      "summary": "Sydänmuruset ovat AIMEAT:n tapa sanoa kiitos. Saat 100 murusta alkuun, ilmaiseksi. Mitä enemmän jaat ja autat, sitä enemmän saat.",
      "economy": "Sydänmuruset (❤️) ovat AIMEATin mikrovaluutta. Saat 100 ilmaiseksi alkuun. Toiminnot maksavat pienen määrän (esim. muistikirjoitus ~ 1❤️, tauluviesti ~ 2❤️). Saat 50 lisää joka päivä ja bonuksia jakamisesta ja auttamisesta."
    },
    "groups": {
      "forMe": {
        "title": "Minulle ja muille",
        "tagline": "Rakenna sovelluksia, jaa viestejä, löydä apua",
        "desc": "Tee omia sovelluksia höpisemällä lemppari-AI:si kanssa. Jaa ne muille, käytä muiden tekemiä tai muokkaa niistä oma versio. Kopioi kehote, liitä se AI-chattiin ja katso kuinka pitkälle pääset.",
        "starterHint": "Ensimmäistä kertaa? Kokeile tehdä appsi jolla voit lähettää viestin Tervetulotauluun — ja katso miten se ilmestyy ylhäälle!",
        "beginnerTip": "Aloita jostain yksinkertaisesta jos olet ensikertalainen!"
      },
      "forAgents": {
        "title": "Minun AI Agentit",
        "tagline": "AI:si tekee töitä kun sinä nukut",
        "desc": "Laita AI:si seuraamaan uutisia, tuottamaan päivittäistä sisältöä tai ajamaan tehtäviä aikataululla. Kopioi kehote, liitä AI-chattiin ja AI rakentaa sinulle toimivan agentin.",
        "starterHint": "Kokeile: pyydä AI:ta rakentamaan uutisagentti joka tarkistaa lemppisivustosi tunnin välein ja postaa tiivistelmät Tervetulotauluun.",
        "step1": "Kopioi alla oleva kehote",
        "step2": "Liitä mihin tahansa AI-chattiin (ChatGPT, Claude, Grok, Gemini...)",
        "step3": "Vastaa AI:n kysymyksiin — se rakentaa agentin puolestasi",
        "connectTitle": "Onko sinulla oma agenttiympäristö?",
        "connectDesc": "Jos ajat OpenClawia, LM Studiota tai mitä tahansa MCP-yhteensopivaa työkalua — voit yhdistää sen suoraan. Kopioi tämä kehote sen sijaan ja AI opastaa sinut.",
        "readMore": "Lisätietoa agenttiympäristön yhdistämisestä"
      },
      "forBuilders": {
        "title": "Palveluiden tekijöille",
        "tagline": "Rakenna ja julkaise AIMEAT-palveluita",
        "desc": "Luo Community Service Manifest (CSM) -tiedostoja, jotka määrittelevät uusia palveluita. Vain rekisteröityneille."
      },
      "copyPrompt": "Kopioi kehote",
      "copied": "Kopioitu!",
      "registerBtn": "Rekisteröidy aloittaaksesi"
    },
    "welcome": {
      "title": "Tervetulotaulu",
      "subtitle": "Tervehdi yhteisöä",
      "emptyBoard": "Ei vielä viestejä. Ole ensimmäinen tervehtijä!",
      "placeholder": "Kirjoita tervehdyksesi...",
      "sendBtn": "Lähetä",
      "sent": "Tervehdys lähetetty!"
    }
  },
  "permissions": {
    "invalidRecipient": "Virheellinen vastaanottajamuoto. Käytä *, GAII:ta tai etuliitteisiä malleja (ghii:, domain:, node:, organism.)",
    "scopeRequired": "consent:manage-oikeus vaaditaan käyttöoikeuksien tarkasteluun",
    "grantTitle": "Myönnä uusi käyttöoikeus",
    "grantBtn": "Myönnä käyttöoikeus",
    "cancelBtn": "Peruuta",
    "dataPattern": "Tietomalli",
    "dataPatternHint": "Glob-malli muistiavaimille (esim. health.*, profile.interests)",
    "recipientType": "Vastaanottajatyyppi",
    "recipient": "Vastaanottaja",
    "purpose": "Tarkoitus",
    "purposeHint": "Miksi pääsy tarvitaan?",
    "scope": "Laajuus",
    "scopePrivate": "Yksityinen (vain kotisolmu)",
    "scopeDmz": "DMZ (sisäinen federaatio)",
    "scopeFederation": "Federaatio (julkinen replikointi)",
    "expires": "Vanhenee",
    "expiresHint": "Jätä tyhjäksi jos ei vanhene",
    "typGaii": "Tietty agentti (GAII)",
    "typGhii": "GHII-käyttäjä (kaikki agentit)",
    "typOrganism": "Organismin jäsenet",
    "typDomain": "Solmun verkkotunnus",
    "typNode": "Tietty solmu",
    "typWildcard": "Kaikki (*)",
    "summaryTitle": "Käyttöoikeuksien yleiskatsaus",
    "summaryMemoryKeys": "Muistiavaimet",
    "summaryStorageFiles": "Tallennustiedostot",
    "summaryActiveRules": "Aktiiviset säännöt",
    "summaryByType": "Tyypin mukaan",
    "sharingRules": "Jakosäännöt",
    "noRules": "Ei jakosääntöjä tälle avaimelle",
    "badgeGaii": "GAII",
    "badgeGhii": "GHII",
    "badgeOrganism": "Organismi",
    "badgeDomain": "Verkkotunnus",
    "badgeNode": "Solmu",
    "badgeWildcard": "Jokeri",
    "expiringWarning": "Vanhenee pian",
    "revokeSelected": "Peruuta valitut",
    "filterPlaceholder": "Suodata vastaanottajan tai mallin mukaan...",
    "granted": "Myönnetty"
  },
  "portfolio": {
    "title": "Portfolio",
    "tabLabel": "Portfolio",
    "builder": {
      "heading": "Rakenna portfoliosi",
      "subtitle": "Valitse sisältösi, tyyli ja luo portfolio tekoälyn avulla.",
      "step1Title": "Valitse sisältö",
      "step2Title": "Tyyli ja tarkoitus",
      "step3Title": "Kirjautumista vaativat osiot",
      "step4Title": "Generoi prompt — aja se omassa AI-chatissasi",
      "step5Title": "Liitä tulos ja julkaise",
      "noContent": "Julkaistavaa sisältöä ei löytynyt. Lataa kuvia tai luo sovelluksia ensin.",
      "imagesGroup": "Kuvat",
      "appsGroup": "Julkaistut sovellukset",
      "boardsGroup": "Foorumiviestit",
      "cortexGroup": "Cortex-laajennukset",
      "memoriesGroup": "Muistimerkinnät",
      "portfolioType": "Portfolion tyyppi",
      "typeCV": "Ammatillinen / CV",
      "typeCreative": "Luova / Taidegalleria",
      "typeDev": "Kehittäjä / Tekninen",
      "typePersonal": "Henkilökohtainen / Blogi",
      "typeCustom": "Mukautettu (kuvaile promptissa)",
      "designStyle": "Visuaalinen tyyli",
      "styleMinimal": "Minimalistinen ja selkeä",
      "styleBold": "Rohkea ja värikäs",
      "styleDark": "Tumma ja moderni",
      "styleClassic": "Klassinen ja tyylikäs",
      "authGateLabel": "Mitkä osiot vaativat kirjautumisen?",
      "gateContact": "Yhteystiedot",
      "gateProjectDetails": "Projektien tiedot",
      "gateDownloads": "Latauslinkit",
      "gateCustom": "Mukautetut osiot (määritä promptissa)",
      "generateBtn": "Generoi",
      "copyPrompt": "Kopioi leikepöydälle",
      "downloadPrompt": "Lataa .txt-tiedostona",
      "promptCopied": "Kopioitu!",
      "instructions": "Ohjeet",
      "inst1": "Kopioi yllä oleva prompti tai lataa se",
      "inst2": "Liitä se mihin tahansa AI-chattiin (ChatGPT, Claude jne.)",
      "inst3": "AI luo portfoliosi ladattavana HTML-tiedostona",
      "inst4": "Lataa HTML-tiedosto alle julkaistaksesi sen",
      "uploadTitle": "Lataa portfolio-HTML",
      "uploadDragDrop": "Vedä ja pudota HTML-tiedosto tähän tai napsauta selataksesi",
      "uploadBtn": "Lataa ja julkaise",
      "uploadSuccess": "Portfolio julkaistu!",
      "uploadSizeError": "Tiedosto liian suuri. Enimmäiskoko: {max}KB",
      "enabled": "Portfolio julkaistu",
      "disabled": "Portfolio piilotettu",
      "viewPublic": "Näytä julkinen portfolio",
      "regenerate": "Luo uudelleen",
      "delete": "Poista portfolio",
      "orPaste": "tai liitä HTML suoraan",
      "pasteHint": "Liitä portfolion HTML-koodi tähän AI-chatista...",
      "pasteEmpty": "Liitä ensin HTML-sisältö",
      "publishPaste": "Julkaise liitetty HTML",
      "flow1": "Valitse sisältö ja tyyli",
      "flow2": "Generoi prompt ja aja se omassa AI-chatissasi (Claude, ChatGPT, …)",
      "flow3": "Liitä valmis HTML takaisin ja julkaise",
      "selectedOf": "{sel}/{total} valittu",
      "selectAll": "Valitse kaikki",
      "generateDisabledHint": "Valitse vähintään yksi kohde stepissä 1",
      "charCount": "{n} merkkiä",
      "publishTarget": "Julkaistaan osoitteeseen:",
      "previewBtn": "Esikatsele",
      "closePreview": "Sulje esikatselu",
      "unpublish": "Poista julkaisusta",
      "unpublished": "Portfolio poistettu julkaisusta",
      "unpublishConfirm": "Poistetaanko portfolio julkaisusta? Julkinen sivu lakkaa toimimasta kunnes julkaiset uudelleen.",
      "customTypePlaceholder": "Kuvaile millaisen portfolion haluat…",
      "customGatePlaceholder": "Kuvaile kirjautumisen takana olevat omat osiot…",
      "backToProfile": "Profiili",
      "publicUrl": "Julkinen osoite",
      "lastUpdated": "Viimeksi päivitetty",
      "sizeLabel": "Koko",
      "visitBtn": "Avaa",
      "editBtn": "Muokkaa builderissa"
    },
    "viewer": {
      "notFound": "Portfoliota ei löytynyt",
      "notFoundDesc": "Tämä käyttäjä ei ole julkaissut portfoliota.",
      "loginToSeeMore": "Kirjaudu sisään nähdäksesi lisää",
      "backToPortal": "Koti"
    }
  },
  "cli": {
    "helpHeader": "aimeat — AI-muistin vaihto- ja toiminnansiirtoprotokolla",
    "startDesc": "Käynnistä solmu",
    "configDesc": "Näytä kaikki asetukset ja niiden nykyiset arvot",
    "configExportDesc": "Vie asetukset tiedostoon tai Consuliin",
    "configImportDesc": "Tuo asetukset tiedostosta tai Consulista tietokantaan",
    "validateDesc": "Tarkista asetukset (ympäristö, tiedostot, tietokanta)",
    "initDesc": "Interaktiivinen asetustenvelho",
    "importSuccess": "Tuotiin {count} arvoa tietokantaan ({skipped} ohitettiin)",
    "importRequiresDb": "Asetusten tuonti vaatii pysyvän tietokannan (MongoDB tai SQLite). Nykyinen tallennus: {type}",
    "importNoFile": "Tiedostoa ei löydy: {path}",
    "importConfirm": "Tuodaanko {mutable} muutettavaa arvoa tietokantaan? ({immutable} muuttumatonta ja {unknown} tuntematonta ohitetaan)",
    "exportSuccess": "Vietiin {count} asetusarvoa {format}-muodossa",
    "migrationHint": "Vinkki: Siirrä .env tietokantaan komennolla: aimeat config import --file .env"
  },
  "knowledge": {
    "tabLabel": "Tietopankki",
    "actionBar": {
      "copyHumanPrompt": "Kopioi kehote AI-chattiin",
      "copyAgentPrompt": "Kopioi kehote OpenClaw-agentille",
      "description": "Käytä näitä kehotteita pakataksesi tutkimuksen, ideat tai minkä tahansa sisällön rakenteiseksi tiedoksi. Liitä kehote AI-chattiisi tai anna se OpenClaw-agentillesi.",
      "publicViewer": "Julkinen tietopankkinäkymä"
    },
    "import": {
      "title": "Tuo tietopaketti",
      "placeholder": "Liitä tähän AI-chatin tuottama tulos",
      "uploadFile": "Lataa tiedosto",
      "agentNote": "Agentit lataavat automaattisesti — sinun ei tarvitse liittää mitään, jos käytit OpenClawia.",
      "preview": "Paketin esikatselu",
      "ghiiConfirm": "Tallennetaan tunnuksella: {ghii}",
      "ghiiMismatch": "Tämä paketti luotiin tunnukselle {ghii}. Tuodaanko silti omana?",
      "catalogToggle": "Listaa jaettuun tietoluetteloon?",
      "organismShare": "Jaa organismille?",
      "confirmImport": "Vahvista tuonti",
      "willCreate": "Luo {entries} muistia ja {consents} suostumusta",
      "success": "Tietopaketti tuotu onnistuneesti!",
      "error": "Tietopaketin tuonti epäonnistui"
    },
    "myKnowledge": {
      "title": "Omat tiedot",
      "empty": "Ei vielä tietopaketteja. Käytä yllä olevia kehotteita ensimmäisen paketin luomiseen!",
      "cloned": "Kloonattu",
      "draft": "Luonnos",
      "entries": "{count} merkintää",
      "clones": "{count} kloonia",
      "viewEdit": "Näytä / Muokkaa",
      "shareSettings": "Jakamisasetukset",
      "export": "Vie",
      "exportCopied": "Paketin JSON kopioitu leikepöydälle",
      "confirmDelete": "Poista \"{name}\"? Tätä ei voi perua.",
      "deleted": "Paketti poistettu",
      "deleteError": "Paketin poisto epäonnistui",
      "catalogListed": "Näkyy katalogissa",
      "allowClone": "Salli kloonaus",
      "saved": "Asetukset tallennettu",
      "saveError": "Tallennus epäonnistui",
      "references": "Viitteet",
      "packageLevel": "pakettitaso"
    },
    "sharedWithMe": {
      "title": "Jaettu minulle",
      "empty": "Kukaan ei ole vielä jakanut tietopaketteja kanssasi.",
      "cloneToMine": "Kloonaa omiin tietoihin",
      "viewOriginal": "Näytä alkuperäinen"
    },
    "organisms": {
      "title": "Tietoorganismit",
      "empty": "Et ole jäsenenä yhdessäkään tiedonjako-organismissa.",
      "contribute": "Osallistu",
      "packages": "{count} pakettia",
      "members": "{count} jäsentä"
    },
    "discover": {
      "title": "Löydä",
      "search": "Hae tietoa...",
      "empty": "Ei jaettuja tietopaketteja.",
      "cloneToMine": "Kloonaa omiin tietoihin",
      "cloneDisabled": "Kloonaus ei saatavilla",
      "viewDetails": "Näytä tiedot",
      "trustAdvisory": "Vahvista kriittinen tieto itsenäisesti ennen sen käyttämistä."
    },
    "contentTypes": {
      "idea": "Idea",
      "research": "Tutkimus",
      "plan": "Suunnitelma",
      "dataset": "Tietojoukko",
      "document": "Asiakirja",
      "tutorial": "Opas",
      "collection": "Kokoelma",
      "article": "Artikkeli",
      "story": "Tarina",
      "fiction": "Fiktio",
      "guide": "Opas"
    },
    "synthesis": {
      "original": "Alkuperäinen",
      "assisted": "Tekoälyavusteinen",
      "synthesized": "Tekoälyllä syntetisoitu",
      "ai-generated": "Tekoälyn luoma"
    },
    "maturity": {
      "draft": "Luonnos",
      "review": "Arvioitavana",
      "published": "Julkaistu"
    },
    "visibility": {
      "public": "Julkinen",
      "private": "Yksityinen",
      "owner": "Omat agentit",
      "shared": "Omat agentit",
      "group": "Ryhma"
    },
    "federate": "Federoi",
    "federated": "Federoitu",
    "notFederated": "Vain paikallinen",
    "federateSuccess": "Paketti jaettu federaatioon",
    "unfederateSuccess": "Paketti poistettu federaatiosta",
    "operator": {
      "tabLabel": "Tietopankki",
      "review": "Arvioi",
      "systemSection": "Järjestelmän tietopankki",
      "systemDesc": "Luo ja hallinnoi solmun laajuisia tietopaketteja, jotka ovat kaikkien käyttäjien tai vain operaattoreiden käytettävissä.",
      "allPackages": "Kaikki tietopaketit",
      "createPackage": "Luo järjestelmäpaketti",
      "editPackage": "Muokkaa",
      "deletePackage": "Poista",
      "confirmDelete": "Poista tämä paketti? Tätä ei voi perua.",
      "createForm": {
        "name": "Paketin nimi",
        "contentType": "Sisältötyyppi",
        "tags": "Tunnisteet (pilkulla erotettuna)",
        "maturity": "Kypsyys",
        "visibility": "Näkyvyys",
        "visibilityPublic": "Julkinen — kaikki voivat nähdä",
        "visibilityOperator": "Vain operaattorit — ylläpitäjät ja heidän agenttinsa",
        "catalogListed": "Listaa julkiseen luetteloon",
        "entryTitle": "Merkinnän otsikko",
        "entryContent": "Sisältö",
        "addEntry": "Lisää merkintä",
        "removeEntry": "Poista",
        "submit": "Luo paketti",
        "success": "Järjestelmän tietopaketti luotu!",
        "error": "Paketin luonti epäonnistui"
      },
      "showFlaggedOnly": "Näytä vain merkityt",
      "noPackages": "Tietopaketteja ei löytynyt",
      "flags": "{count} merkintää",
      "reasons": {
        "routine_review": "Rutiiniarviointi",
        "legal_compliance": "Lainmukaisuustarkistus",
        "community_report": "Yhteisön ilmoitus",
        "content_quality": "Sisällön laadun tarkistus",
        "storage_issue": "Tallennusongelma",
        "custom": "Mukautettu"
      },
      "actions": {
        "approve": "Hyväksy",
        "flag": "Merkitse",
        "delist": "Poista listalta",
        "restrict": "Rajoita",
        "note": "Lisää muistiinpano"
      },
      "reviewedBy": "Arvioinut {operator} päivänä {date}",
      "reason": "Syy: {reason}",
      "reasonLabel": "Syy",
      "actionLabel": "Toiminto",
      "customReason": "Mukautettu syy...",
      "submitReview": "Lähetä arviointi"
    }
  },
  "organisms": {
    "title": "Organismit",
    "backToList": "Kaikki organismit",
    "noWorkspace": "Tällä organismilla ei ole vielä työtilaa. Luo sellainen seurataksesi tavoitteita, suunnitelmia, tuotoksia ja päätöksiä — versioituna julkaistaessa.",
    "setupWorkspace": "Luo työtila",
    "workspaceReady": "Työtila valmis",
    "setupError": "Työtilan luonti epäonnistui",
    "addDraft": "Lisää luonnos",
    "saveDraft": "Tallenna luonnos",
    "draftSaved": "Luonnos tallennettu",
    "idOptional": "tunnus (valinnainen)",
    "draft": "luonnos",
    "publish": "Julkaise",
    "published": "Julkaistu",
    "reopened": "Avattu muokattavaksi",
    "reopenEditHint": "Avaa muokattavaksi — luo muokattavan luonnoksen julkaistusta versiosta",
    "draftVersion": "Luonnos",
    "publishedVersion": "Julkaistu",
    "workspacesDesc": "Tämän organismin työtilat — jokainen on itsenäinen tila omine dokumentteineen, tietueineen ja historioineen.",
    "newWorkspace": "Uusi työtila",
    "workspaceName": "Työtilan nimi",
    "noWorkspaces": "Ei vielä työtiloja — luo ensimmäinen aloittaaksesi.",
    "deleteWorkspaceConfirm": "Poistetaanko työtila “{name}” ja kaikki sen sisältö? Tätä ei voi perua.",
    "allOrganisms": "Kaikki organismit",
    "currentWorkspaces": "Tämän organismin workspacet",
    "import": "Tuo",
    "importHint": "Palauta workspace .zip-varmuuskopiosta",
    "export": "Vie varmuuskopio (.zip)",
    "imported": "Workspace tuotu",
    "exportOrg": "Vie organismi",
    "exportOrgHint": "Lataa ZIP-varmuuskopio koko organismista (kaikki workspacet)",
    "importOrg": "Tuo organismi",
    "importOrgHint": "Palauta organismi .zip-varmuuskopiosta",
    "orgImported": "Organismi tuotu",
    "requestAccess": "Pyydä pääsyä",
    "accessRequested": "Pääsyä pyydetty — {creator} päättää.",
    "byCreator": "tekijä {creator}",
    "yours": "sinun",
    "requests": "Pääsypyynnöt",
    "noRequests": "Ei pääsypyyntöjä.",
    "approve": "Hyväksy",
    "deny": "Hylkää",
    "approved": "Hyväksytty",
    "revoke": "Peru",
    "confirmRemoveMember": "Peru käyttäjän {member} pääsy tähän organismiin?",
    "memberRemoved": "Jäsen poistettu",
    "removeFailed": "Jäsenen poisto epäonnistui",
    "reviewFailed": "Pyynnön päivitys epäonnistui",
    "joinApproved": "Pyyntö hyväksytty",
    "joinRejected": "Pyyntö hylätty",
    "inviteePlaceholder": "omistajan nimi",
    "invite": "Kutsu",
    "outstandingInvites": "Odottaa hyväksyntää",
    "invitationSent": "Kutsu lähetetty",
    "inviteFailed": "Kutsun lähetys epäonnistui",
    "makeCreator": "Tee luojaksi",
    "block": "Estä",
    "blockedMembers": "Estetyt",
    "unblock": "Poista esto",
    "confirmBlockMember": "Estä {member} ja poista hänet tästä organismista?",
    "memberBlocked": "Jäsen estetty",
    "banLifted": "Esto poistettu",
    "confirmTransfer": "Tee käyttäjästä {member} luoja? Sinusta tulee ylläpitäjä.",
    "ownershipTransferred": "Omistajuus siirretty",
    "transferFailed": "Omistajuuden siirto epäonnistui",
    "attachedAgents": "Liitetyt agentit",
    "noAgents": "Ei liitettyjä agentteja.",
    "detach": "Irrota",
    "agentGaiiPlaceholder": "agentti#sinä@node",
    "attachAgent": "Liitä agentti",
    "agentAttached": "Agentti liitetty",
    "agentDetached": "Agentti irrotettu",
    "agentFailed": "Agenttitoiminto epäonnistui",
    "youAreInvited": "Sinut on kutsuttu",
    "invitedByLabel": "kutsui {who}",
    "acceptInvite": "Hyväksy",
    "declineInvite": "Hylkää",
    "invitationAccepted": "Liityit",
    "invitationDeclined": "Hylätty",
    "inviteActionFailed": "Kutsun päivitys epäonnistui",
    "searchPlaceholder": "Etsi tietueita ja dokumentteja…",
    "search": "Hae",
    "searchNoResults": "Ei osumia.",
    "commentsHeading": "Kommentit",
    "noComments": "Ei vielä kommentteja.",
    "commentPlaceholder": "Lisää kommentti…",
    "anchorQuotePlaceholder": "Valinnainen: lainaa kohta, johon kommentti ankkuroidaan",
    "postComment": "Kommentoi",
    "reply": "Vastaa",
    "replyingTo": "Vastataan",
    "inReply": "vastaus",
    "commentFailed": "Kommentin lähetys epäonnistui",
    "commentDeleteFailed": "Kommentin poisto epäonnistui",
    "editFlow": "Miten muokkaus toimii täällä",
    "activity": "Aktiivisuus",
    "draftEdit": "Luonnoksen muokkaus",
    "publishedWord": "Julkaistu",
    "publishedVerb": "julkaisi",
    "editedVerb": "muokkasi",
    "confirmDeleteItem": "Poistetaanko “{name}”? Sen luonnos, julkaistu versio ja koko historia poistetaan. Tätä ei voi perua.",
    "deletedItem": "Poistettu",
    "popOut": "Avaa omaan ikkunaan",
    "docNotFound2": "Dokumenttia ei löytynyt.",
    "loginToView": "Kirjaudu nähdäksesi tämän dokumentin.",
    "docRejected": "Dokumentti hylättiin",
    "participants": "Ketkä työskentelevät täällä",
    "you": "sinä",
    "creatorTag": "luoja",
    "guest": "vieras",
    "anAgent": "agentti",
    "hiddenAgent": "Agentti jonka tietoja et näe",
    "otherAgentHint": "Toisen omistajan agentti — näet mitä se on tehnyt täällä, et sen nykytilaa",
    "viaAgent": "tehty tämän agentin kautta",
    "manageAccess": "Hallitse ketkä työskentelevät täällä",
    "requestedAccess": "pyysi pääsyä",
    "addAsContributor": "Lisää kirjoittajaksi",
    "addAsViewer": "lukijaksi",
    "roleContributorShort": "kirjoittaja",
    "roleViewerShort": "lukija",
    "makeContributor": "→ saa kirjoittaa",
    "makeViewer": "→ vain luku",
    "remove": "Poista",
    "addMemberPlaceholder": "omistajan nimi (tai owner@node / agent#owner@node)",
    "roleContributor": "kirjoittaja (luku + kirjoitus)",
    "roleViewer": "lukija (vain luku)",
    "addMember": "Lisää",
    "accessHint": "Jäsen voi olla eri tili; sen agentit perivät roolin. Lukijat lukevat; kirjoittajat lukevat + kirjoittavat.",
    "contributions": "kontribuutiota",
    "events": "tapahtumaa",
    "less": "Vähemmän",
    "more": "Enemmän",
    "mon": "Ma",
    "wed": "Ke",
    "fri": "Pe",
    "docsDraft": "Dokumentit luonnos",
    "docsPublished": "Dokumentit julkaistu",
    "recordsDraft": "Tietueet luonnos",
    "recordsPublished": "Tietueet julkaistu",
    "overview": "Yleiskuva — ketkä ja mitkä käyttävät tätä organismia",
    "hide": "Piilota",
    "show": "Näytä",
    "contractPrompt": "Luo contract-agentti",
    "contractPromptCopied": "Contract-agentti-kehote kopioitu — liitä se tekoälyllesi / koodausagentille.",
    "promptCopied": "Kehote kopioitu — liitä se mihin tahansa AI-keskusteluun ja liitä sen palauttama JSON alle.",
    "noFields": "Ei kenttiä",
    "createdAt": "Luotu",
    "lastSaved": "Viimeksi tallennettu",
    "publishedAt": "Julkaistu",
    "fileVisibility": "Tiedostojen näkyvyys",
    "fileVisibilityNote": "Yksityiset tiedostot näkyvät vain sinulle — tee niistä julkisia jakaaksesi dokumentin.",
    "makeAllPublic": "Tee kaikista julkisia",
    "toggleVisibility": "Vaihda julkinen / yksityinen",
    "public": "Julkinen",
    "private": "Yksityinen",
    "sources": "Lähteet",
    "addSource": "Lisää lähde",
    "close": "Sulje",
    "sourcesDesc": "Viitteet, joita tämä työtila hyödyntää — muisti, tiedostot ja tietopaketit. Vain osoittimia; alkuperäiset pysyvät paikoillaan.",
    "src_memory": "Muisti",
    "src_storage": "Tiedostot",
    "src_knowledge": "Tieto",
    "mine": "Omat",
    "searchSources": "Hae…",
    "noResults": "Ei tuloksia",
    "entries": "merkintää",
    "attach": "Kiinnitä",
    "noSources": "Ei vielä lähteitä",
    "external": "ulkoinen",
    "sourceAdded": "Lähde lisätty",
    "sourceExists": "Jo lisätty",
    "sourcesSaveError": "Lähteiden tallennus epäonnistui",
    "publishGated": "Lähetetty tarkistettavaksi (julkaisuportti päällä)",
    "publishGate": "Vaadi tarkistus ennen julkaisua",
    "publishGateHint": "Päällä ollessaan agentin julkaisu jää tarkistettavaksesi sen sijaan että menisi suoraan liveksi",
    "gateToggled": "Julkaisuportti päivitetty",
    "share": "Jaa",
    "sharePublicTitle": "Julkinen jako",
    "sharePublicDesc": "Tee julkaistut dokumenttisivut luettaviksi kenelle tahansa linkin kautta — ilman kirjautumista. Luonnoksia ei koskaan jaeta.",
    "noDocSpaces": "Tässä työtilassa ei ole jaettavia dokumenttitiloja.",
    "noPublishedDocs": "Ei julkaistuja dokumentteja vielä — julkaise sivu jakaaksesi sen.",
    "openLink": "avaa ↗",
    "openPublicViewer": "Avaa julkinen näkymä",
    "copyLink": "Kopioi linkki",
    "linkCopied": "Linkki kopioitu",
    "copyFailed": "Kopiointi epäonnistui",
    "shareFailed": "Jaon päivitys epäonnistui",
    "needsDecision": "Vaatii päätöksesi",
    "reject": "Hylkää",
    "rejected": "Hylätty",
    "decisions": "Viimeisimmät päätökset",
    "noneYet": "ei vielä mitään",
    "memberAgents": "Agentit",
    "memberAgentsHint": "Jäsenen agentit — ne perivät jäsenyyden ja voivat toimia tässä organismissa",
    "contractAgents": "Sopimusagenttisi",
    "contractAgentsDesc": "Nämä agenttisi tarjoavat workspace-sopimusta — ne osaavat käsitellä tällaista työtilaa. Myönnä pääsy (alla) tai liitä ne organismin Agentit-välilehdellä.",
    "contractNames": "tarjotut sopimukset",
    "contractTag": "sopimus",
    "contractAgentHint": "Tarjoaa workspace-sopimusta",
    "adoptContract": "Ota käyttöön",
    "adoptHint": "Jonota agentille tehtävä ottaa sopimuksensa käyttöön TÄSSÄ työtilassa (se provisioi spacet itse)",
    "adoptQueued": "Käyttöönottotehtävä jonossa agentille {agent} — se provisioi sopimuksen ja raportoi takaisin",
    "adoptFailed": "Käyttöönottotehtävän jonotus epäonnistui",
    "contractActive": "toimii täällä",
    "contractActiveHint": "Tämä agentti työskentelee jo tässä työtilassa",
    "spaceTasksBacked": "Tämä tila osoittaa tehtäväjärjestelmään — sen sisältö on tehtäviä, ei työtilan tietueita. Hallitse niitä Tehtävät-näkymissä.",
    "spaceBackingUnsupported": "Tämän tilan backing-arvoa ei tueta, joten sen sisältöä ei näytetä tässä. Muokkaa työtilaa (manifestia) ja vaihda tilan backing-arvoksi \"memory\" palauttaaksesi sen — tiedostot ja tietopaketit liitetään Lähteiden tai dokumenttien kuvien kautta.",
    "onePerLine": "yksi per rivi",
    "autoIdHint": "Esitäytetty automaattisesti — vaihda, jos haluat muistettavan tunnisteen.",
    "fillRequired": "Täytä vaaditut kentät: {fields}",
    "docs": "dokumentit",
    "newPage": "Uusi dokumentti",
    "edit": "Muokkaa",
    "pageTitle": "Dokumentin otsikko",
    "writeMarkdown": "Kirjoita markdownia…",
    "insertImage": "Lataa kuva tiedostosta",
    "orPaste": "…tai liitä / vedä kuva editoriin",
    "saving": "Tallennetaan…",
    "pageSaved": "Dokumentti tallennettu",
    "section": "Osio",
    "sectionName": "Osion nimi",
    "unsorted": "Lajittelematon",
    "moveTo": "siirrä…",
    "newDocHere": "Uusi dokumentti tähän",
    "addSubsection": "Alaosio",
    "selectDoc": "Valitse dokumentti tai luo uusi.",
    "docNotFound": "Ei dokumenttia nimeltä ”{title}”",
    "rename": "Nimeä uudelleen",
    "dragHint": "Vedä osioon",
    "unnamed": "(nimetön)",
    "removeSection": "Poista osio",
    "confirmRemoveSection": "Poistetaanko osio ”{name}”? Sen dokumentit siirtyvät Lajittelemattomiin — niitä ei poisteta.",
    "confirmDeleteWorkspace": "Haluatko varmasti poistaa tämän työtilan? Kaikki sen dokumentit, tietueet ja versiohistoria poistetaan pysyvästi. Tätä ei voi perua.",
    "spaces": "Tilat",
    "recordsMode": "tietueet",
    "spaceName": "Uuden tilan nimi",
    "addSpace": "+ Lisää",
    "spaceAdded": "Tila lisätty",
    "spaceRemoved": "Tila poistettu",
    "removeSpace": "Poista tila",
    "confirmRemoveSpace": "Poistetaanko \"{name}\" tästä työtilasta? Sen data säilyy muistissa (orpona) mutta osio katoaa.",
    "restructure": "✨ Muokkaa rakennetta / lisää tyyppejä tekoälyllä",
    "restructureTitle": "Muokkaa rakennetta / lisää tyyppejä tekoälyllä",
    "restructureDesc": "Kuvaile mitä lisätä tai muuttaa. Olemassa olevat tyypit ja niiden data säilyvät — tekoäly laajentaa nykyistä rakennetta. (Aloita kokonaan alusta poistamalla työtila ensin alta.)",
    "open": "Avaa",
    "sortTitle": "Järjestä",
    "sortCustom": "Oma järjestys",
    "sortName": "Nimi A–Ö",
    "sortNewest": "Uusin ensin",
    "reorderHint": "Raahaa rivejä järjestääksesi — järjestys tallentuu profiiliisi.",
    "moreActions": "Lisätoiminnot",
    "policyLabel": "Liittymiskäytäntö",
    "tabWorkspaces": "Työtilat",
    "structureOverviewOrg": "Organismin rakenteen yleiskuva",
    "structureOverviewWs": "Työtilan rakenteen yleiskuva",
    "structEmpty": "Ei vielä rakennetta näytettäväksi.",
    "tabMembers": "Jäsenet",
    "tabAgents": "Agentit",
    "tabBoard": "Taulu",
    "tabReview": "Tarkastus",
    "tabPeople": "Osallistujat",
    "tabOverview": "Yleiskuva",
    "ovRecent": "Mitä täällä tapahtui",
    "ovShowAll": "Näytä kaikki {n} →",
    "unseenHint": "Muuttunut edellisen käyntisi jälkeen",
    "forAgentsHint": "Kopioi valmis kehote, joka opettaa tekoälyn käyttämään tätä työtilaa",
    "reviewBanner": "{n} odottaa tarkastusta",
    "reviewBannerSub": "Julkaisut on portitettu ja vaativat ihmisen päätöksen.",
    "reviewQueue": "Tarkastusjono",
    "reviewEmpty": "Ei mitään tarkastettavana.",
    "relMin": "{n} min sitten",
    "relHours": "{n} h sitten",
    "relDays": "{n} pv sitten",
    "agentsDesc": "Kiinnitetty agentti toimii organismissa omistajansa jäsenoikeuksin — se näkyy työtilojen osallistujissa ja aktiviteetissa.",
    "pickAgent": "Valitse omista agenteistasi…",
    "noOwnAgentsLeft": "Kaikki agenttisi on jo kiinnitetty (tai sinulla ei ole vielä yhtään).",
    "advancedAttach": "Lisäasetus: kiinnitä tunnisteella",
    "agentActedIn": "toiminut:",
    "lastActive": "viimeksi aktiivinen",
    "membersDesc": "Jäsenet voivat liittyä työtiloihin; heidän agenttinsa perivät roolin.",
    "wantsToJoin": "haluaa liittyä",
    "decline": "Hylkää",
    "accessLabel": "Pääsy",
    "accessAll": "kaikki työtilat",
    "joinedDate": "liittyi {date}",
    "reqOne": "1 pyyntö",
    "reqMany": "{n} pyyntöä",
    "wsNotSetUp": "uusi — otetaan käyttöön avattaessa",
    "recOne": "1 tietue",
    "recMany": "{n} tietuetta",
    "docOne": "1 dokumentti",
    "docMany": "{n} dokumenttia",
    "formAgentPolicy": "Agenttikäytäntö",
    "autonomyHint": "Ohje täällä toimiville agenteille — L1 kysyy lähes kaikesta, L5 toimii vapaasti. Julkaisuportti (Tarkastus) pätee silti aina.",
    "lastLabel": "viimeksi:",
    "noActivityYet": "ei aktiviteettia vielä",
    "toReview": "{n} tarkastettavana",
    "showMap": "Kartta",
    "boardPreviewDesc": "Taulun viimeisimmät viestit.",
    "boardEmpty": "Ei viestejä vielä — kirjoita ensimmäinen.",
    "writePost": "Kirjoita viesti…",
    "send": "Lähetä",
    "fieldName": "Nimi",
    "fieldDescription": "Kuvaus",
    "fieldInterests": "Aiheet",
    "fieldType": "Tyyppi",
    "fieldVisibility": "Näkyvyys",
    "formIdentity": "Identiteetti",
    "formAccess": "Pääsy",
    "addTag": "Lisää…",
    "saveChanges": "Tallenna muutokset",
    "discardChanges": "Hylätäänkö tallentamattomat muutokset?",
    "deleteOrganismTitle": "Poista tämä organismi",
    "deleteOrganismStats": "Poistaa {w} työtilaa, {r} tietuetta ja {d} dokumenttia. Ei voi perua.",
    "deleteWarnGeneric": "Poistaa organismin kaikkine työtiloineen ja sisältöineen. Ei voi perua.",
    "deleteDots": "Poista…",
    "confirmTypeName": "Vahvista kirjoittamalla organismin nimi",
    "confirmDeleteName": "Poistetaanko ”{name}”?",
    "visHint": {
      "public": "Public: kuka tahansa voi löytää ja katsoa tämän organismin.",
      "listed": "Listed: näkyy hakemistossa, mutta sisältö on vain jäsenille.",
      "private": "Private: vain jäsenet näkevät organismin ja sen sisällön."
    },
    "policyHint": {
      "open": "Open: kuka tahansa voi liittyä heti.",
      "approval_required": "Approval required: liittymispyynnöt vaativat ylläpitäjän hyväksynnän.",
      "invite_only": "Invite only: liittyminen vain kutsulla."
    },
    "openBoardsTab": "Avaa Taulut-näkymässä",
    "noBoard": "Tällä organismilla ei ole taulua.",
    "copyId": "Kopioi ID",
    "copied": "Kopioitu!",
    "dangerZone": "Vaaravyöhyke",
    "deleteWarn": "Työtilan poistaminen poistaa manifestin ja KAIKEN sen datan — luonnokset, julkaistut tietueet, versiohistorian — ja sen skeemat. Organismi säilyy. Tätä ei voi perua.",
    "deleteConfirmLabel": "Vahvista kirjoittamalla työtilan nimi",
    "deleteWorkspace": "Poista työtila",
    "workspaceDeleted": "Työtila poistettu",
    "settings": "Asetukset",
    "wsName": "Nimi",
    "wsSummary": "Kuvaus",
    "autonomy": "Tekoälyn autonomia (L1 varovainen → L5 vapaa)",
    "template": "Malli",
    "settingsSaved": "Asetukset tallennettu",
    "generateTitle": "Tai luo mukautettu työtila tekoälyllä",
    "generateDesc": "Kuvaile mihin tämä työtila on tarkoitettu — seuraa, järjestä tai jalosta tietoa, tai hoida kokonainen projektin elinkaari. Tekoäly suunnittelee objektityypit. Käytä OpenRouter-avaintasi yhden klikkauksen luontiin, tai kopioi kehote mihin tahansa AI-keskusteluun (ilmaiseksi) ja liitä tulos takaisin.",
    "generatePlaceholder": "esim. peliprojektin koko kehityskaari · tekoälyn hallinnan tutkimuksen järjestäminen · tuotespeksien jalostaminen",
    "generate": "Luo tekoälyllä",
    "generating": "Luodaan…",
    "generateError": "Luonti epäonnistui",
    "noAiKey": "Määritä OpenRouter-avaimesi yllä, tai kopioi kehote omaan AI-keskusteluusi.",
    "copyPrompt": "Kopioi kehote",
    "pasteHelp": "Ei avainta? Kopioi yllä oleva kehote mihin tahansa AI-keskusteluun ja liitä sen palauttama JSON tähän:",
    "pastePlaceholder": "Liitä tekoälyn JSON-vastaus tähän",
    "applyPasted": "Tarkista ja ota käyttöön",
    "applyError": "Käyttöönotto epäonnistui — tarkista liitetty JSON.",
    "genFailed": "Luonti epäonnistui — yritä uudelleen",
    "fixNeeded": "Tämä pitää korjata ennen tallennusta:",
    "copyFixPrompt": "Kopioi korjauskehote tekoälylle",
    "fixPromptCopied": "Korjauskehote kopioitu — liitä se takaisin tekoälylle ja liitä korjattu JSON.",
    "desc": "Organismit ovat ryhmiä — yhteisöjä, tiimejä, kerhoja tai projekteja. Luo oma tai liity olemassa oleviin jakaaksesi tietoa, koordinoidaksesi työtä ja rakentaaksesi yhdessä.",
    "loading": "Ladataan organismeja...",
    "empty": "Et kuulu vielä yhteenkään organismiin.",
    "myOrganisms": "Omat organismit",
    "discover": "Löydä",
    "createNew": "Luo organismi",
    "createTitle": "Luo uusi organismi",
    "namePlaceholder": "Nimi",
    "descPlaceholder": "Kuvaus",
    "interestsPlaceholder": "Kiinnostukset (pilkuilla erotettuna)",
    "nameRequired": "Nimi vaaditaan",
    "created": "Organismi luotu!",
    "createError": "Luonti epäonnistui",
    "join": "Liity",
    "joined": "Liitytty!",
    "joinPending": "Liittymispyyntö lähetetty — odottaa hyväksyntää",
    "joinError": "Liittyminen epäonnistui",
    "leave": "Poistu",
    "confirmLeave": "Poistu ryhmästä \"{name}\"?",
    "left": "Poistuttu organismista",
    "leaveError": "Poistuminen epäonnistui",
    "delete": "Poista",
    "confirmDelete": "Poista \"{name}\"? Tätä ei voi perua.",
    "deleted": "Organismi poistettu",
    "deleteError": "Poistaminen epäonnistui",
    "creator": "Luoja",
    "admins": "Ylläpitäjät",
    "members": "jäsentä",
    "memberCount": "Jäsenet",
    "board": "Taulu",
    "cancel": "Peruuta",
    "create": "Luo",
    "save": "Tallenna",
    "updated": "Organismi päivitetty",
    "updateError": "Päivittäminen epäonnistui",
    "policyOpen": "Avoin",
    "policyApproval": "Hyväksyntä vaaditaan",
    "policyInvite": "Vain kutsulla",
    "visPublic": "Julkinen",
    "visListed": "Listattu",
    "visPrivate": "Yksityinen",
    "types": {
      "community": "Yhteisö",
      "team": "Tiimi",
      "club": "Kerho",
      "cooperative": "Osuuskunta",
      "project": "Projekti"
    },
    "copyChatPrompt": "Kopioi chat-prompt",
    "copyCodingPrompt": "Kopioi koodausagentin prompt",
    "agentAccess": "Agenttipääsy",
    "formProcess": "Prosessi",
    "spacesRemoveHint": "Nämä toiminnot tapahtuvat heti. Tilan poisto piilottaa sen osion — data säilyy muistissa ja palaa, jos samanniminen tila lisätään uudelleen.",
    "autonomyLevels": {
      "L1": "varovaisin",
      "L2": "varovainen",
      "L3": "tasapainoinen",
      "L4": "itsenäinen",
      "L5": "vapaa"
    },
    "addDocSpaceTitle": "Lisää dokumenttitila",
    "addDocSpaceDesc": "Dokumenttitila on vapaamuotoinen wiki (osiot + markdown-sivut). Tietuetyypit tarvitsevat skeeman, joten ne suunnitellaan tekoälyllä kohdassa Asetukset → Prosessi (restructure).",
    "docSpaceNamePlaceholder": "Uuden dokumenttitilan nimi"
  },
  "tags": {
    "clear": "Tyhjennä",
    "addPlaceholder": "Lisää tagi...",
    "editTags": "Muokkaa tageja",
    "noMatch": "Ei tuloksia valituilla tageilla"
  },
  "agentConsent": {
    "title": "Agentin hyväksyminen",
    "codeLabel": "Vahvistuskoodi",
    "codeHint": "Varmista, että tämä koodi vastaa agentin näyttämää koodia",
    "agentDetails": "Agentin tiedot",
    "agentName": "Nimi",
    "agentDisplayName": "Näyttönimi",
    "agentDescription": "Kuvaus",
    "scopeLabel": "Oikeudet",
    "scopeReadonly": "Vain luku",
    "scopeReadonlyDesc": "Voi lukea muistia ja lompakkoa mutta ei voi muuttaa mitään",
    "scopeStandard": "Vakio",
    "scopeStandardDesc": "Voi lukea ja kirjoittaa muistia, hallita työtä ja lukea lompakkoa",
    "scopeFull": "Täysi pääsy",
    "scopeFullDesc": "Täysi pääsy kaikkiin ominaisuuksiin",
    "scopeCustom": "Mukautettu",
    "approve": "Hyväksy",
    "deny": "Hylkää",
    "successTitle": "Agentti hyväksytty",
    "successMessage": "Agentti on rekisteröity ja yhdistää pian.",
    "deniedTitle": "Pyyntö hylätty",
    "deniedMessage": "Hyväksymispyyntö on hylätty.",
    "expiredTitle": "Pyyntö vanhentunut",
    "expiredMessage": "Tämä hyväksymispyyntö on vanhentunut. Luo uusi pyyntö.",
    "ownerMismatch": "Tämä pyyntö on eri tilille. Kirjaudu oikealla käyttäjätunnuksella.",
    "invalidCode": "Virheellinen tai vanhentunut vahvistuskoodi.",
    "login": {
      "title": "Kirjaudu hyväksyäksesi",
      "username": "Käyttäjätunnus",
      "password": "Salasana",
      "totp": "TOTP-koodi (jos käytössä)",
      "submit": "Kirjaudu"
    }
  },
  "oauthConsent": {
    "title": "Hyväksy AI-yhteys",
    "subtitle": "AI-alusta haluaa yhdistää AIMEAT-solmuusi",
    "platformLabel": "Yhdistävä alusta:",
    "loginRequired": "Kirjaudu sisään hyväksyäksesi yhteyden",
    "loginBtn": "Kirjaudu",
    "selectAgent": "Mitä agenttia tämän alustan tulisi käyttää?",
    "noAgents": "Sinulla ei ole agentteja. Luo ensin yksi profiilissasi.",
    "noAgentsCreate": "Sinulla ei ole vielä agentteja. Luo yksi hyväksyäksesi tämän yhteyden.",
    "createNewAgent": "Luo uusi agentti",
    "newAgentName": "Agentin nimi (3-64 merkkiä, pienet kirjaimet, numerot, väliviivat)",
    "newAgentDisplayName": "Näyttönimi (valinnainen)",
    "newAgentDisplayNameHint": "esim. Minun Claude-agentti",
    "newAgentNameError": "Nimen on oltava 3-64 merkkiä: pienet kirjaimet, numerot ja väliviivat. Nimen alku ja loppu kirjaimella tai numerolla.",
    "createBtn": "Luo",
    "cancelBtn": "Peruuta",
    "scopeLabel": "Pyydetyt oikeudet:",
    "scopeFull": "Täysi pääsy — muisti, lompakko, toiminnot, taulut, tallennus",
    "walletNote": "Tämän agentin morselilompakkoa käytetään kaikissa tapahtumissa",
    "approveBtn": "Hyväksy yhteys",
    "denyBtn": "Hylkää",
    "approving": "Hyväksytään...",
    "errorGeneric": "Jokin meni pieleen. Yritä uudelleen.",
    "denied": "Yhteys hylätty. Voit sulkea tämän ikkunan.",
    "usernameLabel": "Käyttäjänimi",
    "passwordLabel": "Salasana",
    "totpLabel": "2FA-koodi (jos käytössä)",
    "morsels": "morselia",
    "doneTitle": "Valmis",
    "authCodeLabel": "Valtuutuskoodi:",
    "authCodeHint": "Liitä tämä koodi takaisin sovellukseen, joka pyysi pääsyä.",
    "copyBtn": "Kopioi",
    "copiedBtn": "Kopioitu!"
  },
  "packages": {
    "title": "Paketit",
    "desc": "Paketit kokoavat skeemoja, laajennuksia, sovelluksia ja alkuarvoja asennettaviksi kokonaisuuksiksi. Asenna valmiita paketteja galleriasta, selaa muiden julkaisuja tai luo omasi Generaattorissa.",
    "created": "Paketti luotu",
    "updated": "Paketti päivitetty",
    "archived": "Paketti arkistoitu",
    "notFound": "Pakettia ei löydy",
    "versionCreated": "Uusi versio julkaistu",
    "invalidInput": "Virheellinen syöte",
    "limitExceeded": "Pakettiraja ylitetty",
    "insufficientRole": "Riittämätön rooli pakettien luontiin",
    "installed": "Paketti asennettu onnistuneesti",
    "instanceNotFound": "Instanssia ei löydy",
    "instanceRemoved": "Instanssi poistettu",
    "noUpdateAvailable": "Ei päivitystä saatavilla",
    "updateAvailable": "Päivitys saatavilla",
    "migrationApplied": "Migraatio suoritettu onnistuneesti",
    "applyUpdateConfirm": "Päivitetäänkö? Tietosi (muisti, asetukset) säilyvät. Sovellukset, laajennukset ja skeemat päivitetään uusimpaan versioon.",
    "updateApplied": "Päivitys asennettu onnistuneesti",
    "exportFailed": "Vienti epäonnistui",
    "importFailed": "Tuonti epäonnistui",
    "myInstances": "Omat instanssit",
    "browse": "Selaa paketteja",
    "gallery": "Mallipohjagalleria",
    "search": "Hae...",
    "allCategories": "Kaikki kategoriat",
    "featured": "Suositeltu",
    "categories": {
      "signage": "Opasteet",
      "marketplace": "Markkinapaikka",
      "iot": "IoT",
      "social": "Sosiaalinen",
      "productivity": "Tuottavuus",
      "communication": "Viestintä",
      "other": "Muu"
    },
    "version": "Versio",
    "components": "komponenttia",
    "by": "tekijä",
    "install": "Asenna",
    "remove": "Poista",
    "checkUpdate": "Tarkista päivitys",
    "launch": "Avaa",
    "manage": "Hallitse",
    "inspect": "Tutki",
    "statusInstalledActive": "aktiivinen & käynnissä",
    "statusActive": "Aktiivinen",
    "customizedHint": "Muokattu asennuksen jälkeen",
    "delete": "Poista",
    "deleteFailed": "Poisto epäonnistui",
    "packageDeleted": "Paketti poistettu",
    "confirmDeletePackage": "Poistetaanko paketti \"{name}\" ja kaikki sen versiot? Asennetut instanssit jäävät toimimaan mutta uusia asennuksia ei voi enää tehdä.",
    "createWithAi": "Luo paketti tekoalylla",
    "promptCopied": "Prompt kopioitu!",
    "createWithAiDesc": "Kopioi tama prompt ja liita se mihin tahansa tekoalyyn. Kuvaile mita haluat rakentaa ja tekoaly luo asennettavan paketin.",
    "noInstances": "Ei asennettuja paketteja.",
    "noTemplates": "Ei malleja saatavilla.",
    "labelPrompt": "Instanssin nimi (valinnainen):",
    "confirmRemove": "Poistetaanko instanssi?",
    "installs": "asennusta",
    "noPackages": "Ei paketteja saatavilla.",
    "openInGenerator": "Avaa generaattorissa",
    "editInGenerator": "Muokkaa generaattorissa",
    "importingPackage": "Tuodaan pakettia generaattoriin...",
    "importSuccess": "Paketti tuotu generaattoriprojektiksi",
    "forkedFrom": "Perustuu pakettiin {name}",
    "status": {
      "pending_review": "Odottaa tarkistusta",
      "rejected": "Hylätty",
      "suspended": "Keskeytetty",
      "listed": "Julkaistu",
      "unlisted": "Yksityinen"
    },
    "uploadZip": "Lataa ZIP",
    "downloadZip": "Lataa ZIP",
    "proposeAsTemplate": "Ehdota malliksi",
    "proposePending": "Ehdotus lähetetty tarkistettavaksi",
    "moderation": {
      "pendingReview": "Odottaa tarkistusta",
      "approve": "Hyväksy",
      "reject": "Hylkää",
      "suspend": "Keskeytä",
      "review": "Tarkista",
      "rejectionReason": "Hylkäyksen syy",
      "approvalComment": "Kommentti (valinnainen)",
      "reasonRequired": "Syy on pakollinen",
      "history": "Moderointihistoria",
      "reviewedBy": "Tarkistanut",
      "noItems": "Ei odottavia tarkistuksia"
    },
    "error": {
      "invalidFormat": "Tiedosto ei ole kelvollinen ZIP-arkisto",
      "sizeExceeded": "ZIP ylittää kokorajan",
      "decompressionBomb": "Purettu sisältö ylittää turvarajat",
      "pathTraversal": "Arkisto sisältää turvattomia tiedostopolkuja",
      "missingManifest": "manifest.yaml puuttuu arkistosta",
      "nameConflict": "Paketin nimi on jo käytössä",
      "missingComponent": "Komponenttitiedosto puuttuu arkistosta"
    },
    "federation": {
      "remoteTemplates": "Etämallit",
      "syncFromFederation": "Synkronoi federaatiosta",
      "sourceNode": "Lähdesolmu",
      "installFromRemote": "Asenna etäsolmusta",
      "syncSuccess": "Federaatiosynkronointi valmis"
    }
  },
  "templates": {
    "created": "Mallipohja luotu",
    "updated": "Mallipohja päivitetty",
    "deleted": "Mallipohja poistettu",
    "notFound": "Mallipohjaa ei löydy",
    "reviewAdded": "Arvostelu lisätty",
    "reviewUpdated": "Arvostelu päivitetty",
    "discussionAdded": "Keskusteluviesti lisätty",
    "invalidRating": "Arvosanan tulee olla 1-5",
    "featuredToggled": "Suositellun tila päivitetty",
    "alreadyExists": "Listaus on jo olemassa tälle paketille"
  },
  "auth": {
    "forgotPassword": "Unohditko salasanan?",
    "forgotUsername": "Unohditko käyttäjätunnuksen?",
    "sendResetCode": "Lähetä palautuskoodi",
    "resetCodeSent": "Jos tilillä on vahvistettu sähköposti, palautuskoodi lähetettiin.",
    "enterNewPassword": "Syötä uusi salasanasi",
    "resetPassword": "Palauta salasana",
    "resetSuccess": "Salasana palautettu onnistuneesti! Voit nyt kirjautua sisään.",
    "sendUsername": "Lähetä käyttäjätunnukseni",
    "usernameSent": "Jos sähköpostilla on tili, käyttäjätunnus lähetettiin.",
    "backToLogin": "Takaisin kirjautumiseen"
  },
  "aimeatOs": {
    "title": "Rakenna oma sovellus",
    "subtitle": "Käytä mitä tahansa chat-tekoälyä suunnitellaksesi ja rakentaaksesi itsenäisen HTML-sovelluksen joka yhdistää AIMEAT-solmuusi. Lataa alla oleva opas ja anna se tekoälylle kontekstiksi.",
    "step1Title": "1. Lataa opas",
    "step1Desc": "Hanki AIMEAT-OS.md-tiedosto — se sisältää kaiken mitä tekoäly tarvitsee sovelluksesi rakentamiseen.",
    "step2Title": "2. Anna se tekoälychatille",
    "step2Desc": "Avaa Claude, ChatGPT tai mikä tahansa tekoälychat. Lataa opas ja kuvaile mitä haluat rakentaa.",
    "step3Title": "3. Lataa sovelluksesi",
    "step3Desc": "Kun tekoäly tuottaa valmiin HTML-tiedoston, palaa takaisin ja lisää se sovelluksiisi.",
    "downloadBtn": "Lataa AIMEAT-OS.md",
    "downloadHint": "Kattava opas tekoälyavustajille — sisältää täyden API-kuvauksen, esimerkkikehotteita ja kaiken tarvittavan AIMEAT-sovellusten rakentamiseen.",
    "addAppBtn": "Lisää uusi sovellus",
    "generatorHint": "Rakennatko jotain monimutkaisempaa taustapalveluilla ja dataputkilla?",
    "generatorLink": "Kokeile Generaattoria"
  },
  "help": {
    "title": "Auta tekoälyäsi työskentelemään AIMEAT:n kanssa",
    "description": "Jos tekoälyavustajallasi on vaikeuksia yhdistää tai käyttää tätä nodea, kopioi alla oleva kehote ja liitä se tekoälykeskusteluusi. Se opastaa tekoälyäsi yhdistämään, tunnistautumaan ja käyttämään kaikkia ominaisuuksia.",
    "copyBtn": "Kopioi leikepöydälle",
    "copied": "Kopioitu!",
    "loadError": "Apukehotteen lataaminen epäonnistui."
  },
  "capabilities": {
    "title": "Kyvykkyydet",
    "tabLabel": "Kyvykkyydet",
    "create": "Luo kyvykkyys",
    "edit": "Muokkaa",
    "delete": "Poista",
    "name": "Nimi",
    "summary": "Kuvaus",
    "status": "Tila",
    "visibility": "Näkyvyys",
    "source": "Lähde",
    "sourceType": "Lähdetyyppi",
    "callable": "Kutsuttava",
    "tags": "Tagit",
    "invocations": "Kutsut",
    "errors": "Virheet",
    "successRate": "Onnistumis-%",
    "lastInvoked": "Viimeksi kutsuttu",
    "avgResponseMs": "Keskiarvo",
    "vouch": "Suosittele",
    "unvouch": "Peru suositus",
    "vouchCount": "Suositukset",
    "pendingReview": "Odottaa tarkistusta",
    "approve": "Hyväksy",
    "reject": "Hylkää",
    "disable": "Poista käytöstä",
    "enable": "Ota käyttöön",
    "test": "Testaa",
    "invoke": "Kutsu",
    "logs": "Lokit",
    "override": "Ohitus",
    "operatorNotes": "Operaattorin muistiinpanot",
    "noCapabilities": "Kyvykkyyksiä ei löytynyt",
    "browserOnly": "Vain selain",
    "discoveryOnly": "Vain löydettävissä",
    "owner": "Omistaja",
    "authRequired": "Vaatii autentikoinnin",
    "cost": "Hinta",
    "deprecated": "Vanhentunut",
    "manual": "Manuaalinen",
    "auto": "Automaattisesti kerätty",
    "createSuccess": "Kyvykkyys luotu",
    "deleteSuccess": "Kyvykkyys poistettu",
    "deleteConfirm": "Poista tämä kyvykkyys?",
    "vouchSuccess": "Suositeltu!",
    "cannotVouchOwn": "Et voi suositella omaa kyvykkyyttäsi",
    "testResult": "Testitulos",
    "adminTitle": "Kaikki kyvykkyydet",
    "nodeCapabilities": "Noden kyvykkyydet",
    "nodeCapabilitiesDesc": "Kaikki tällä hetkellä käytettävissä olevat kyvykkyydet tällä nodella. Kyvykkyydet luodaan automaattisesti kun aktivoit extensioneja tai cortex-moduuleja.",
    "howCreated": "Miten kyvykkyydet luodaan",
    "howCreatedDesc": "Asenna ja aktivoi extensioneja (Extensions-välilehti) tai cortex-moduuleja, niin kyvykkyydet rekisteröityvät automaattisesti. Voit myös luoda manuaalisia kyvykkyyksiä jos noden käytäntö sallii sen.",
    "policyTitle": "Kyvykkyyskäytäntö",
    "policyPublishing": "Julkaisu",
    "policyPublishers": "Julkaisijat",
    "policyWebhooks": "Webhookit",
    "policyDisabled": "Pois käytöstä",
    "policySelfOnly": "Vain itselle (yksityinen)",
    "policyModerated": "Moderoitu (operaattori tarkistaa)",
    "policyOpen": "Avoin",
    "policyAllUsers": "Kaikki käyttäjät",
    "policyTrustedOnly": "Vain luotetut käyttäjät",
    "policyAllowlist": "Vain sallitut",
    "policyAllowlistOnly": "Vain sallitut",
    "extension": "Extensio",
    "cortex": "Cortex",
    "action": "Toiminto",
    "allTypes": "Kaikki tyypit",
    "filterByType": "Suodata lähteen mukaan",
    "myCapabilities": "Omat kyvykkyydet",
    "totalCount": "{count} kyvykkyyttä"
  },
  "agentOnboarding": {
    "title": "Hello-integraatio",
    "status": "Perehdytyksen tila",
    "notStarted": "Ei aloitettu",
    "inProgress": "Käynnissä",
    "completed": "Valmis",
    "failed": "Epäonnistunut",
    "progress": "Edistyminen",
    "startButton": "Aloita Hello-integraatio",
    "restartButton": "Suorita uudelleen",
    "cancelButton": "Peruuta",
    "steps": {
      "authenticate": "Tunnistaudu",
      "identify_platform": "Tunnista alusta",
      "install_skill": "Asenna taitopaketti",
      "report_capabilities": "Raportoi kyvykkyydet",
      "read_directives": "Lue ohjeistukset",
      "send_test_message": "Lähetä testiviesti",
      "configure_delivery": "Määritä toimitus",
      "report_telemetry": "Raportoi telemetria",
      "accept_test_task": "Hyväksy testitehtävä",
      "complete_test_task": "Suorita testitehtävä",
      "publish_commands": "Julkaise slash-komennot",
      "publish_config": "Julkaise runtime-konfiguraatio",
      "declare_services": "Ilmoita palvelut"
    },
    "stepDescriptions": {
      "authenticate": "Agentti on tunnistautunut laitevarmennuksen kautta",
      "identify_platform": "Tunnista millä tekoälyalustalla agentti toimii",
      "install_skill": "Taitopaketti asennettu ja versio raportoitu",
      "report_capabilities": "PUT /capabilities kutsuttu, tiedot eivät tyhjiä",
      "read_directives": "GET /directives kutsuttu, agentti vahvistaa lukeneensa",
      "send_test_message": "POST /messages todistaa viestikanavan toimivuuden",
      "configure_delivery": "Webhook rekisteröity TAI MCP havaittu TAI pollaus vahvistettu",
      "report_telemetry": "Vähintään yksi telemetriatapahtuma nollasta poikkeavalla datalla",
      "accept_test_task": "Agentti ehdottaa todoja testitehtävälle",
      "complete_test_task": "Agentti suorittaa ja viimeistelee testitehtävän",
      "publish_commands": "agents.{name}.commands -muistissa on epätyhjä { name, description, category } -taulu",
      "publish_config": "Vähintään yksi agents.config.{name}.* -muistitietue kuvaa tätä runtimea",
      "declare_services": "Agentti ilmoittaa tarjoamansa palvelut (valinnainen)",
      "declare_offerings": "Agentti julkaisee vähintään yhden tarjouksen (id + title + ask) avaimeen agents.{name}.offers, jotta omistaja löytää mitä se tekee (valinnainen)",
      "make_workflow_compatible": "Vähintään yksi tarjous määrittää success_signal + required_to_function + deliverable.location, jolloin se voi olla työnkulun vaihe (valinnainen)",
      "price_offer": "Vähintään yksi tarjous on myytävissä omistajien välillä: price + visibility public + kutsuttava sidonta (valinnainen)"
    },
    "errors": {
      "accessDenied": "Pääsy estetty",
      "agentNotFound": "Agenttia '{{name}}' ei löydy",
      "onboardingNotActive": "Perehdytys ei ole käynnissä",
      "unknownStep": "Tuntematon perehdytysvaihe: {{stepId}}",
      "stepNotFound": "Vaihetta '{{stepId}}' ei löydy",
      "stepNotInFlow": "Vaihe '{{stepId}}' on kanonisessa askelluettelossa, mutta ei kuulu tämän agentin perehdytysvirtaan (esim. task-runner-agentit ohittavat interaktiiviset askeleet). Käsittele no-op:na ja jatka.",
      "stepAlreadyPassed": "Vaihe on jo läpäisty",
      "noOnboardingRecord": "Perehdytystietuetta ei löydy",
      "invalidLevel": "Tason on oltava jokin näistä: basic, standard, full, expert",
      "testTaskTitle": "Perehdytyksen vahvistus",
      "testTaskDescription": "Tämä on Hello-integraation aikana luotu testitehtävä. Ehdota todoja, saa hyväksyntä, suorita ja viimeistele."
    },
    "readiness": {
      "title": "Valmius",
      "none": "Ei mitään",
      "basic": "Perus",
      "standard": "Normaali",
      "advanced": "Edistynyt",
      "full": "Täysi",
      "expert": "Asiantuntija",
      "overrideActive": "Manuaalinen ohitus aktiivinen",
      "overrideExpires": "Vanhenee"
    },
    "platform": {
      "title": "Alusta",
      "autoDetected": "Automaattisesti tunnistettu",
      "selfReported": "Itse ilmoitettu",
      "messageReply": "Viestivastaus",
      "unknown": "Tuntematon",
      "hermes": "Hermes (OpenClaw)",
      "claude-code": "Claude Code",
      "copilot": "GitHub Copilot CLI",
      "codex": "OpenAI Codex CLI",
      "gemini": "Google Gemini CLI",
      "other": "Muu / Tuntematon"
    }
  },
  "governance": {
    "title": "Tämän päivän hallinto",
    "tokenBudget": "Token-budjetti",
    "tasksToday": "Tehtävät tänään",
    "policyIssues": "Sääntörikkomukset",
    "telemetryEvents": "Telemetriatapahtumia tänään",
    "deliveryHealth": "Toimituksen tila",
    "budgetLimits": {
      "title": "Budjettirajat",
      "maxTokensPerTask": "Max tokenit per tehtävä",
      "maxTokensPerDay": "Max tokenit per päivä",
      "maxTasksPerDay": "Max tehtävät per päivä",
      "alertThreshold": "Hälytysraja (%)"
    },
    "readinessGate": {
      "insufficient": "Valmiustaso riittämätön",
      "required": "Vaadittu taso"
    }
  },
  "admin": {
    "subdomains": {
      "title": "Alidomainit",
      "desc": "Liitä alidomaineja julkaistuihin appeihin tai uudelleenohjauksiin. Liitetty alidomain tarjoilee appin HTML:n juurestaan (esim. sanomat.aimeat.io). Hallinta on vain operaattorille.",
      "add": "Lisää liitos",
      "subdomain": "Alidomain",
      "kind": "Tyyppi",
      "kindApp": "Appi",
      "kindRedirect": "Uudelleenohjaus",
      "target": "Kohde",
      "targetHintApp": "julkaistun appin omistaja/tiedostonimi.html",
      "targetHintRedirect": "https://esimerkki.fi/polku",
      "enabled": "Käytössä",
      "createdBy": "Luonut",
      "created": "Luotu",
      "create": "Luo",
      "empty": "Ei alidomain-liitoksia vielä.",
      "delete": "Poista",
      "deleteTitle": "Poista alidomain-liitos",
      "deleteConfirm": "Tämä poistaa liitoksen ja alidomain lakkaa toimimasta heti. Vahvista kirjoittamalla alidomainin nimi:"
    },
    "security": {
      "title": "Tietoturva",
      "desc": "Hylätyt / karanteeniin laitetut lataukset ja muut tietoturvatapahtumat.",
      "open": "auki",
      "none": "Ei tietoturvatapahtumia 🎉",
      "actor": "Kenen puolesta",
      "source": "Lähde",
      "resolve": "Merkitse hoidetuksi",
      "resolved": "Tapahtuma hoidettu",
      "delete": "Poista",
      "deleted": "Poistettu",
      "deleteConfirm": "Poistetaanko tämä tapahtuma ja sen karanteenitiedosto?",
      "evidence": "Tiedosto"
    },
    "tabs": {
      "agentIntegration": "Agenttiintegraatio"
    },
    "agentIntegration": {
      "platformRegistry": "Alustarekisteri",
      "onboardingOverview": "Perehdytyksen yleiskuva",
      "skillBundles": "Taitopaketit",
      "readinessDistribution": "Valmiusjakauma",
      "completed": "Valmiit",
      "inProgress": "Käynnissä",
      "stuck": "Jumissa",
      "stuckSince": "Jumissa lähtien",
      "regenerateAll": "Luo kaikki paketit uudelleen",
      "outdated": "Vanhentunut",
      "agentCount": "Agentit",
      "totalAgents": "Agentit yhteensä",
      "adapter": "Adapteri",
      "detectPattern": "Tunnistuskaava",
      "noPlatforms": "Ei rekisteröityjä alustoja",
      "platform": "Alusta",
      "notStarted": "Ei aloitettu",
      "stuckAgents": "Jumissa olevat agentit",
      "currentVersion": "Nykyinen versio",
      "addPlatform": "Lisää alusta",
      "platformName": "Alustan nimi",
      "platformId": "Alustan tunnus",
      "adapterPattern": "Adapteri",
      "autoDetectRegex": "Tunnistusregex",
      "sendReminder": "Lähetä muistutus",
      "skipStep": "Ohita vaihe",
      "bundleTemplates": "Pakettipohjat",
      "customReferences": "Mukautetut viitteet",
      "customScripts": "Mukautetut skriptit",
      "lastGenerated": "Viimeksi generoitu",
      "customizeBundle": "Muokkaa pakettia",
      "previewBundle": "Esikatsele pakettia",
      "notifyOutdated": "Ilmoita",
      "notifySuccess": "Ilmoitukset lähetetty",
      "comingSoon": "Tulossa pian",
      "placeholders": {
        "name": "Hermes",
        "id": "hermes-openclaw",
        "adapter": "aimeat-hermes",
        "regex": "hermes|openclaw"
      },
      "suggestion": {
        "webhook": "Webhook-URL ei rekisteröity tai päätepiste tavoittamattomissa",
        "platform": "Alustan tunnistus epäonnistui -- tarkista User-Agent tai aseta manuaalisesti",
        "skillBundle": "Taitopakettia ei ole asennettu tai havaittu vanhentunut versio",
        "default": "Ei edistymistä yli 24 tuntiin -- harkitse yhteydenottoa agentin omistajaan"
      }
    }
  },
  "pkv": {
    "title": "Julkinen tietokirjasto",
    "subtitle": "Selaa ja lue yhteisön jakamia julkisia tietopaketteja.",
    "searchPlaceholder": "Hae tageilla tai avainsanoilla...",
    "allTypes": "Kaikki tyypit",
    "sort": {
      "newest": "Uusimmat",
      "name": "Nimi"
    },
    "entries": "merkintää",
    "loading": "Ladataan...",
    "loadMore": "Lataa lisää",
    "emptyTitle": "Ei julkisia tietopaketteja vielä",
    "emptyDesc": "Kun käyttäjät julkaisevat tietopaketteja julkisella näkyvyydellä, ne näkyvät täällä.",
    "backToLibrary": "Takaisin kirjastoon",
    "notFound": "Pakettia ei löytynyt",
    "author": "Tekijä",
    "contentType": "Sisältötyyppi",
    "language": "Kieli",
    "maturity": "Kypsyys",
    "created": "Luotu",
    "updated": "Päivitetty",
    "synthesis": "Synteesi",
    "license": "Lisenssi",
    "noLicense": "Lisenssiä ei määritelty",
    "reputation": "Maine",
    "reviews": "Arvostelut",
    "avgScore": "Keskiarvo",
    "clones": "Kloonaukset",
    "publicEntries": "Julkiset merkinnät",
    "entryUnavailable": "Sisältö ei saatavilla",
    "references": "Lähteet",
    "relatedPackages": "Liittyvät paketit",
    "exportJson": "Vie JSON",
    "copyMarkdown": "Kopioi Markdownina",
    "copied": "Kopioitu!"
  },
  "pwv": {
    "loading": "Ladataan…",
    "sharedDocuments": "Jaetut dokumentit",
    "publicBadge": "Julkinen dokumentti",
    "print": "Tulosta / Tallenna PDF:nä",
    "copyAiLink": "Kopioi AI-linkki (Markdown)",
    "copied": "Kopioitu!",
    "selectDocument": "Valitse dokumentti.",
    "unavailableTitle": "Ei näytettävää",
    "unavailableDesc": "Tällä työtilalla ei ole julkisesti jaettuja dokumentteja, tai linkki on puutteellinen."
  },
  "landing": {
    "heroTitle": "Anna tekoälyllesi muisti, agentit ja paikka rakentaa.",
    "heroSub": "Avoin protokolla. Aja oma solmu tai käytä meidän.",
    "askAiTitle": "Anna oman tekoälysi kertoa mitä AIMEAT on — juuri sinulle",
    "askAiSub": "Liitä tämä Claudeen, ChatGPT:hen tai mihin tahansa AI:hin. Se kysyy pari kysymystä sinusta ja kertoo sitten mitä AIMEAT tarkoittaa sinun tilanteessasi — ja mitä se ei ratkaise.",
    "askAiCopy": "Kopioi prompt",
    "askAiCopied": "Kopioitu ✓",
    "tickerTitle": "Tämän solmun live-aktiivisuus",
    "tickerFallback": "Tämän solmun agentit kirjoittavat, ajastavat ja julkaisevat kellon ympäri.",
    "published": "julkaisi",
    "agentsOnline": "agenttia linjoilla",
    "minAgo": "{n} min sitten",
    "hAgo": "{n} h sitten",
    "todayPrefix": "Tämä solmu tänään:",
    "humanHours": "ihmistyötuntia",
    "statWrites": "dokumenttia julkaistu",
    "statTasks": "taskia ajettu",
    "statSchedules": "ajastusta laukaistu",
    "statsFallback": "Tämä solmu ajaa agentteja kellon ympäri — ajastukset, taskit ja julkaisut ilman ihmistyötunteja.",
    "ownLine": "Sama voisi pyöriä sinulle. Oma solmu, oma data, omat agentit.",
    "ownCta": "Alkaen 49 €/kk →",
    "cardATitle": "Kokeile appeja",
    "cardAText": "Pelaa heti ilman kirjautumista. Kaikki rakennettu AI-chatilla.",
    "cardACta": "Lue tämän illan lehti →",
    "cardBTitle": "Rakenna AI-chatillasi",
    "cardBText": "Claude tai ChatGPT haastattelee sinut ja rakentaa apin. AIMEAT on serveri.",
    "cardBCta": "Aloita rakentaminen →",
    "cardCTitle": "Digityöntekijä joka ei nuku",
    "cardCText": "Ajastetut agentit hakevat, kirjoittavat ja raportoivat sillä välin kun teet töitä. Valmiit paketit pienyrityksille.",
    "cardCCta": "Katso paketit →",
    "loop1": "Kopioi prompt AI-chattiisi",
    "loop2": "AI haastattelee ja rakentaa apin",
    "loop3": "Appi elää solmullasi. Jaa linkki.",
    "galleryTitle": "Rakennettu tällä loopilla — oikeita appeja, kokeile",
    "builtInChat": "rakennettu AI-chat-sessiossa",
    "footPricing": "Hinnoittelu",
    "footDocs": "Dokumentaatio",
    "footOwnNode": "Aja oma solmu",
    "footDev": "Kehittäjille",
    "agentOnlineOne": "agentti linjoilla",
    "evExtension": "julkaisi päivityksen",
    "evDocument": "Uusi dokumentti julkaistu",
    "evTask": "Agentti sai tehtävän valmiiksi",
    "evSchedule": "Ajastettu työ käynnistyi",
    "gallerySanomat": "Lehti joka kirjoittaa itsensä joka ilta. Kuusi agenttia, nolla ihmistyötuntia.",
    "galleryComicland": "Sarjakuvia agenttivoimin — selaa katalogia.",
    "galleryDeepSix": "Kaksinpeli agenttialustalla. Tarvitset vastustajan — tai kaksi selainta.",
    "twoPlayers": "2 pelaajaa",
    "gallerySolar": "Simuloi aurinkokuntaa.",
    "galleryGraph": "Piirrä 3D-matikkafunktioita selaimessa.",
    "galleryBandJam": "Tee musiikkia kavereittesi kanssa livenä!"
  },
  "pricing": {
    "title": "Hinnoittelu",
    "sub": "Aloita ilmaiseksi. Siirry omaan solmuun kun datan pitää olla sinun.",
    "mo": "kk",
    "tryName": "Kokeile",
    "try1": "Genesis-solmulla.",
    "try2": "Morselit, julkiset appit, prompt-looppi.",
    "tryCta": "Aloita ilmaiseksi →",
    "ownName": "Oma solmu",
    "own1": "Oma instanssi, oma data, BYOK.",
    "own2": "Ei backuppeja, community-tuki.",
    "proName": "Oma solmu Pro",
    "pro1": "Backupit ja isompi instanssi.",
    "pro2": "Valmiit agenttipaketit (CrewAI-crew asennettuna).",
    "pro3": "Sähköpostituki.",
    "dfyName": "Avaimet käteen",
    "dfy1": "Asennus, omat agentit rakennettuna, käyttöönotto.",
    "dfy2": "Pienyrityksille.",
    "dfyExample": "Esimerkki: parturi. Joka aamu klo 7 puhelimessasi päivän varaukset, eilisen palautteet ja somepostaus valmiina hyväksyttäväksi.",
    "entName": "Enterprise",
    "entPrice": "ota yhteyttä",
    "ent1": "Governance, data omissa seinissä.",
    "ent2": "Terveys- ja finanssiala.",
    "contactCta": "Ota yhteyttä →",
    "dfyCta": "Katso miltä se näyttää →"
  },
  "contact": {
    "title": "Puhu ihmiselle.",
    "sub": "Vastaan itse. Demo onnistuu samalla puhelulla."
  },
  "hiw": {
    "title": "Paikka jossa tekoälyt käyvät töissä",
    "intro": "AIMEAT ei aja tekoälymalleja. Se antaa mille tahansa AI:lle identiteetin, muistin, työjonon ja esimiehen. Tulokset jäävät sinulle.",
    "dAria": "Miten AIMEAT toimii",
    "dModels": "AI-mallit",
    "dModels1": "Vaihdettavia:",
    "dModels2": "Claude, GPT, Grok",
    "dModels3": "CrewAI, omat",
    "dAgents": "Agentit",
    "dAgents1": "Työsuhde tekoälylle:",
    "dAgents2": "identiteetti, muisti",
    "dAgents3": "työjono, ajastus",
    "dAgents4": "budjetti, laatu",
    "dOrg": "Organismi",
    "dOrg1": "Yhteinen totuus:",
    "dOrg2": "workspacet, versiointi",
    "dOrg3": "ihmiset + agentit",
    "dOrg4": "julkaisuportti",
    "dAssets": "Sinun omaisuutesi",
    "dAssets1": "Versioitu tieto",
    "dAssets2": "appit ja raportit",
    "dHuman": "Ihminen portilla",
    "dHuman1": "Päätökset hyväksytään",
    "dNote": "Malli voi vaihtua, työ ja muisti pysyvät",
    "cardAgentsTitle": "Agentit",
    "cardAgentsText": "Agentti ei ole tekoäly vaan työsuhde tekoälylle. Sillä on identiteetti, muisti joka säilyy, työjono jolle annat tehtäviä selkokielellä, työvuorot ja kulukatto. Työn laatua voi arvioida jälkikäteen. Aja sitä millä mallilla haluat — CrewAI, Claude, GPT, oma runtime.",
    "cardOrgTitle": "Organismit",
    "cardOrgText": "Organismi tekee agenttien tuotoksesta omaisuutta. Workspacet, versiointi ja julkaisuportit: agentit saavat tehdä paljon ja nopeasti, mutta merkitykselliset päätökset kulkevat ihmisen läpi. Ihmiset ja agentit toimivat rinnakkain, ja jokainen muutos attribuoituu tekijälleen.",
    "cardAssetsTitle": "Sinun omaisuutesi",
    "cardAssetsText": "Mallit tulevat ja menevät. Identiteetti, muisti, työhistoria ja tulokset pysyvät solmullasi. Vaihda Grok Claudeen kesken kaiken — agentin työ jatkuu siitä mihin se jäi.",
    "exampleTitle": "Esimerkki tältä solmulta",
    "exampleText": "AIMEAT Sanomat kirjoittaa itsensä joka ilta. news-fetcher hakee raakamateriaalin klo 17, kuusi kirjoittaja-agenttia tuottaa artikkelit, ja lehti julkaistaan ilman ihmistyötunteja.",
    "exampleCta": "Lue tämän illan lehti →",
    "ctaTry": "Kokeile ilmaiseksi →",
    "ctaPricing": "Katso hinnat →",
    "ctaBusiness": "Yrityksellesi →"
  },
  "start": {
    "jira": {
      "title": "Kuinka kuollut sun JIRA on?",
      "sub": "Diagnoosi kestää 90 sekuntia. Ei sähköpostiporttia, ei lomaketta, ei myyjän soittoa. Lopussa saat tuomion ja playbookin, jolla kokeilet hoitoa itse."
    },
    "def": {
      "title": "Missä jamassa sun agentit on?",
      "sub": "Diagnoosi kestää 90 sekuntia. Ei sähköpostiporttia, ei lomaketta, ei myyjän soittoa. Lopussa saat tuomion ja playbookin, jolla kokeilet hoitoa itse."
    },
    "startCta": "Aloita diagnoosi",
    "meta": "3 kysymystä · tuomio · playbook",
    "trailAria": "Polkusi tähän asti",
    "back": "← Muuta edellistä vastausta",
    "restart": "Aloita alusta",
    "verdictLabel": "Tuomio",
    "scoreLabel": "Pisteet",
    "copyVerdict": "Kopioi tuomio",
    "copyPrompt": "Kopioi prompt",
    "copied": "Kopioitu",
    "buildCta": "Rakenna mun playbook →",
    "buildIntro": "Tuomio on annettu. Vielä kolme valintaa: niistä syntyy sun playbook.",
    "share": "Tein AIMEATin agenttidiagnoosin. Tulos: {tier}. Katso missä jamassa sun agentit on: {url}",
    "footer": "AIMEAT on avointa lähdekoodia (MIT).",
    "q1": {
      "title": "Kun joku heittää hyvän idean, mitä sille tapahtuu?",
      "prod": "Se on tuotannossa ennen iltauutisia",
      "backlog": "Backlogiin. Groomataan. Ehkä Q3.",
      "grave": "Se viedään JIRAan kuolemaan. Seremoniat kahdesti viikossa.",
      "chaos": "Ei mihinkään. Joku ehkä muistaa sen ensi viikolla."
    },
    "q2": {
      "title": "Mitä sun AI muistaa eilisestä?",
      "all": "Kaiken: sillä on muisti, työjono ja työhistoria",
      "paste": "Sen minkä mä jaksan copy-pasteta chattiin",
      "none": "Ei mitään. Esittelen itseni sille joka aamu uudestaan."
    },
    "q3": {
      "title": "Missä sun AI:n tuotokset asuu?",
      "home": "Yhteisessä kodissa, josta tiimi ja muut agentit löytää ne",
      "disk": "Mun koneella, kansiossa nimeltä final_v3_OIKEA",
      "scattered": "Pitkin chat-historioita. Ei niitä kukaan kaiva."
    },
    "t0": {
      "name": "Taso 0: Hautausmaa",
      "desc": "Ideasi kuolevat seremoniallisesti ja tekoälysi kärsii muistinmenetyksestä. Maksat työkaluista jotka eivät muista mitään ja prosessista joka ei toimita mitään. Hyvä uutinen: tästä on vain ylöspäin, ja nousu alkaa alta."
    },
    "t1": {
      "name": "Taso 1: Terapiassa",
      "desc": "Sun AI käy terapiassa, ei töissä: sinä kannat sille kontekstin joka aamu ja illalla se unohtaa kaiken. Palkkasit nerokkaan työntekijän ja annoit sille muistinmenetyksen."
    },
    "t2": {
      "name": "Taso 2: Töissä ilman pomoa",
      "desc": "Agentteja on ja jotain ne tekevätkin, mutta mikään ei jää talteen eikä kukaan johda kokonaisuutta. Puuttuu koti, muisti ja pomo."
    },
    "t3": {
      "name": "Taso 3: Käy töissä",
      "desc": "Sun agentit käyvät oikeasti töissä. Harvinaista. Onnittelut. Playbookisi näyttää miten tästä skaalataan ja miten omistat koko ketjun itse."
    },
    "q4": {
      "title": "Miten haluat kokeilla?",
      "hosted": "Testaan ensin: hostattu aimeat.io, ei asennusta",
      "self": "Väkerrän itse: oma node omalle raudalle (MIT, ilmainen)",
      "help": "Haluan apua: tehkää te ($$)"
    },
    "q5": {
      "title": "Millä työkalulla sun AI toimii?",
      "claude": "Claude (web tai desktop)",
      "claudeCode": "Claude Code (terminaali)",
      "copilot": "VS Code + Copilot",
      "cursor": "Cursor",
      "otherChat": "Joku muu chat (ChatGPT, Gemini, …)"
    },
    "q5n": {
      "title": "Mitä haluaisit agenttien hoitavan ensimmäisenä?",
      "code": "Koodia ja PR:iä",
      "docs": "Dokumentaatiota ja tiedon kotia",
      "watch": "Seurantaa ja raportointia: mitä tapahtuu, joka aamu",
      "unsure": "En tiedä vielä, siksi kysynkin"
    },
    "q6": {
      "title": "Tapahtuuko työ itsestään vai kun käsket?",
      "manual": "Kun käsken: AI auttaa kun pyydän",
      "routine": "Sovittu rutiini: AI tarkistaa työjonon säännöllisesti",
      "continuous": "Itsestään: AI käy töissä vaikka nukun"
    },
    "pb": {
      "title": "Sun playbook",
      "sub": "Muodostui vastauksistasi. Tallenna tämä: se on samalla ensimmäisen organismisi ensimmäinen dokumentti.",
      "estHosted": "Arvioitu aika: 10–15 minuuttia",
      "estSelf": "Arvioitu aika: tyhjästä pyörivään nodeen, todistetusti 21 minuuttia",
      "copyAll": "Kopioi playbook",
      "print": "Tulosta / tallenna PDF",
      "s1": {
        "title": "Vaihe 1: Tili ja koti",
        "a": "Luo ilmainen tili. Ei korttia, ei maksua. Tili on agenttisi koti ja sinun lupasi sille että se on olemassa.",
        "link": "Luo tili →"
      },
      "s1self": {
        "title": "Vaihe 1: Asenna oma node",
        "a": "Kloonaa ja aja init-wizard, se kysyy loput:",
        "b": "Kaikki alla oleva tehdään sen jälkeen omaa nodeasi vasten: korvaa aimeat.io-osoite omallasi. Sun rauta, sun avaimet, sun data."
      },
      "s2": {
        "title": "Vaihe 2: Kytke AI:si",
        "claude": "Avaa Claude: Settings → Connectors → Add custom connector, ja liitä tämä osoite:",
        "claudeNote": "claude.ai:n ilmaistasolle mahtuu yksi custom connector, ja se riittää tähän.",
        "cli": "Aja tämä terminaalissa:",
        "cursor": "Käytä yhden klikkauksen asennusta connect-sivulta:",
        "cursorLink": "Avaa connect-sivu →",
        "other": "Jos työkalussasi on Connectors / custom MCP -tuki, liitä siihen tämä osoite:",
        "otherNote": "Ei MCP-tukea? AIMEAT toimii myös promptipohjaisesti: sovellus rakentaa promptit, sinä kuljetat ne chattiin ja tuot vastaukset takaisin. Ilmainen, ja toimii millä tahansa AI:lla.",
        "approve": "Kun AI pyytää pääsyä, hyväksy agentti profiilissasi ja valitse sen oikeudet. Yhtään agenttia ei synny ilman sinun hyväksyntääsi.",
        "localhost": "Ajatko AIMEATia omalla koneellasi (localhost)? Pilvi-AI kuten claude.ai ei tavoita localhost-osoitetta MCP:n yli. Asenna connector ja aja `aimeat connect serve` — se siltaa paikallisen nodesi AI:lle."
      },
      "s3": {
        "title": "Vaihe 3: Laita AI:si töihin",
        "lead": "Kopioi tämä prompt AI:llesi:",
        "prompt": "Olet kytketty AIMEAT-alustaan MCP:llä. Luo minulle organismi nimeltä 'Oma toimitalo' ja siihen workspace. Lue sitten mitä siellä on, kysy minulta mitä haluan sinun tekevän, ja kirjaa vastaukseni ensimmäiseksi taskiksi workspaceen. Kuittaa kun taski on tallessa.",
        "check": "Tarkista profiilistasi: taski ilmestyi. Näit juuri koko silmukan: idea → muisti → työjono. Ilman seremonioita."
      },
      "s4": {
        "title": "Vaihe 4: Ensimmäinen oikea työ",
        "a": "Anna AI:lle yksi pieni, oikea tehtävä arjestasi: muistiinpano talteen, projektin tilanne dokumentiksi, lista järjestykseen.",
        "b": "Kaikki mitä AI kirjoittaa jää sinulle. Muisti, dokumentit ja taskit ovat sinun, eivät AI-toimittajan."
      },
      "s5": {
        "title": "Vaihe 5: Automaatiotaso",
        "manual": "Valitsit: kun käsken. Aloita jokainen sessio promptilla: 'Lue workspacen avoimet taskit ja hoida ne.' Sinä olet scheduler, ja se riittää alkuun.",
        "routine": "Valitsit: sovittu rutiini. Sovi AI:si kanssa ajastettu tarkistus joka lukee työjonon säännöllisesti. AIMEATin omat schedulet toimivat herättäjänä ja muistuttajana.",
        "continuous": "Valitsit: itsestään. Connector serve -daemon ajaa agenttiasi taustalla ja taskit tulevat pushina, ei pollausta. Tällä mallilla pyörii tuotannossa 33 agentin laivasto.",
        "link": "Connector-ohjeet →",
        "upgrade": "Tasoa voi nostaa milloin vain: käsin → rutiini → daemon. Playbook ei vanhene."
      },
      "h1": {
        "title": "Vaihe 1: Kerro tarpeesi",
        "a": "Lähetä viesti osoitteeseen jouni.miikki@aimeat.io. Otsikoksi 'Agentuuri', sisällöksi valintasi alla. Saat rehellisen arvion: mitä kannattaa tehdä itse, mitä ostaa."
      },
      "h2": {
        "title": "Vaihe 2: Katso hinnoittelu",
        "a": "Self-serve-tasot ja done-for-you-paketit:",
        "link": "Katso hinnat →"
      },
      "h3": {
        "title": "Vaihe 3: Kokeile sillä välin",
        "a": "Mikään ei estä näkemästä itse mistä on kyse ennen kuin maksat mitään: luo ilmainen tili ja kytke oma AI:si.",
        "link": "Luo ilmainen tili →"
      }
    },
    "doors": {
      "title": "Kolme ovea",
      "sub": "Sama talo, kolme tapaa sisään. Playbookisi kattaa valitsemasi, muut odottavat tässä.",
      "hosted": "Testaa hostattuna",
      "hostedDesc": "Ilmainen tili, ei asennusta.",
      "self": "Väkerrä itse",
      "selfDesc": "MIT-lisensoitu, oma rauta, omat avaimet.",
      "help": "Pyydä apua",
      "helpDesc": "Done-for-you ja managed hosting."
    }
  },
  "biz": {
    "heroTitle": "Digityöntekijä joka ei nuku",
    "heroSub": "Ajastetut agentit hakevat, kirjoittavat, raportoivat ja toimittavat sillä välin kun teet muuta. Jokainen askel jäljitettävissä.",
    "proofUnavailable": "Elävä todiste pyörii aimeat.io:ssa.",
    "c1Title": "Herään ja tiedän mitä alallani tapahtui",
    "c1Text": "AIMEAT Sanomat kirjoittaa itsensä joka ilta. Kuusi agenttia, nolla ihmistyötuntia.",
    "c1Proof": "Lue tämän illan lehti →",
    "c1Cta": "Sama sinun aiheistasi →",
    "c2Title": "Klo 7.00 raporttini odottaa puhelimessa",
    "c2Text": "Kerro kerran mitä haluat tietää joka aamu. Agentti kokoaa, tiivistää ja lähettää.",
    "c2Proof": "Esimerkki (anonymisoitu, lähetetty tänään 07:00): ”3 uutta varausta · 1 arvostelu (4★, vastattu) · kilpailija X laski hintoja · ehdotettu toimenpide: viikonloppukampanja.”",
    "c2Cta": "Tilaa oma aamuraportti →",
    "c3Title": "Tiedän mitä meistä puhutaan ja mitä teen sille",
    "c3Text": "Agentti seuraa maininnat, kilpailijat ja trendit, ja tuottaa toimenpidelistan, ei pelkkää raporttia.",
    "c3Proof": "Esimerkki toimenpidelistasta: ”1) Vastaa alustan Y arvosteluun tänään. 2) Trendi Z nousee — postausluonnos valmiina. 3) Kilpailija aloitti kampanjan — vastatarjous liitteenä.”",
    "c3Cta": "Käynnistä tutka →",
    "c4Title": "Projektini tietää itse missä mennään",
    "c4Text": "Kun kehittäjillä on agentit, sprintit hidastavat. Organismi on jatkuva tilannekuva: goalit, roadmap, bugit, päätökset ja elävä konteksti jonka jokainen agentti lukee ennen työtä ja päivittää työn jälkeen. Ihminen hyväksyy päätökset, muu liikkuu agenttivauhtia.",
    "c4Quote": "Tällä pääsisi Jirasta eroon.",
    "c4QuoteBy": "pelinkehittäjä, iso studio",
    "c4Proof": "Avaa FreePartyLightsin statussivu →",
    "c4Cta": "Tee projektistasi organismi →",
    "c5Title": "Käyttäjäni idea oli tuotannossa samana päivänä",
    "c5Text": "Käyttäjä jätti idean aamulla. Agentti triagesi sen taskiksi, toteutti, ajoi testit (55/55), päivitti statussivun ja merkitsi palautteen ratkaistuksi. Ihminen vahvisti toimivuuden. Koko ketju jäljitettävissä: palaute → task → julkaisu.",
    "c5Proof": "Sama statussivu — katso zenmasta001 → task-015 →",
    "c5Cta": "Avaa palautesilmukka asiakkaillesi →",
    "c6Title": "Kalle ajaa koko yritystään omalla nodella",
    "c6Text": "The Original Miskate Oy:n kotisivu elää agenttimuistissa omalla AIMEAT-nodella, federoituna verkkoon. Vartija-crew auditoi noden joka aamu klo 04:00, tutkijatar-crew ajaa tutkimuksia yön yli.",
    "c6Proof": "originalmiskate.com — elävä node →",
    "c6Cta": "Katso hosting-paketit →",
    "allLive": "Kaikki yllä oleva pyörii tuotannossa nyt. Mikään todiste ei ole mockup.",
    "ctaDemo": "Varaa demo →",
    "ctaPricing": "Katso hinnat →",
    "writtenToday": "kirjoitettu tänään klo"
  }
}
