{
  "auth": {
    "login": "Log in",
    "signup": "Sign up",
    "logout": "Log out",
    "loginRequired": "Sign-in required",
    "loginDescription": "Log in to use the scanning feature. New users get 10 free credits.",
    "loginNow": "Log in / Sign up",
    "email": "Email",
    "password": "Password",
    "confirmPassword": "Confirm password",
    "forgotPassword": "Forgot password?",
    "noAccount": "Don't have an account?",
    "hasAccount": "Already have an account?",
    "signupSuccess": "Account created successfully",
    "orContinueWith": "Or continue with",
    "loginSuccess": "Signed in",
    "logoutSuccess": "Logged out",
    "emailNotVerified": "Email not verified",
    "emailNotVerifiedDesc": "Please check your email and click the verification link to activate your account.",
    "invalidCredentials": "Invalid email or password",
    "emailAlreadyRegistered": "This email is already registered",
    "verificationSent": "Verification email sent",
    "verificationSentDesc": "Please check your inbox and click the verification link.",
    "checkYourEmail": "Check your email",
    "verificationSentTo": "We've sent a verification email to {{email}}. Please click the link to activate your account.",
    "resendEmail": "Resend verification email",
    "verificationResent": "Email Resent",
    "verificationResentDesc": "A new verification email has been sent.",
    "enterEmailFirst": "Please enter your email address first",
    "didntReceiveEmail": "Didn't receive the email? Resend",
    "referralBonus": "Use a referral code to get 5 bonus credits",
    "emailVerificationNotice": "You'll need to verify your email address to complete registration.",
    "emailVerified": "Email Verified",
    "emailUnverified": "Email not verified",
    "verifyStatus": {
      "waiting": {
        "title": "Check your email",
        "description": "Open the verification link we sent before using scan credits."
      },
      "verifying": {
        "title": "Verifying your email",
        "description": "This will only take a moment."
      },
      "verified": {
        "title": "Email verified",
        "description": "Your account is ready to scan."
      },
      "failed": {
        "title": "Verification link invalid",
        "description": "The link is invalid or expired. Sign in to request another one."
      }
    },
    "welcomeBack": "Welcome back.",
    "welcome": "Welcome to ScanChess.",
    "emailPlaceholder": "you@example.com",
    "passwordPlaceholder": "At least 6 characters",
    "signupWithCredits": "Sign Up — 10 free credits",
    "enterValidEmail": "Enter a valid email address",
    "passwordResetSent": "Check your email",
    "passwordResetSentDesc": "If an account exists for that address, we sent a password reset link.",
    "validation": {
      "emailInvalid": "Enter a valid email address.",
      "passwordMin": "The password must be at least 6 characters."
    },
    "agreement": "By continuing you agree to the <terms>Terms of Service</terms> and <privacy>Privacy Policy</privacy>.",
    "pageTitle": "Sign in to ScanChess",
    "popup": {
      "title": {
        "default": "Sign in to continue",
        "scan": "Sign in to scan",
        "save": "Sign in to save your game",
        "checkout": "Sign in to upgrade",
        "session": "Your session ended — sign in again",
        "signup": "Create your free account"
      },
      "staysHere": "You stay on this page and pick up where you left off.",
      "signingIn": "Signing you in…",
      "otherWays": "Other ways to sign in",
      "orEmail": "or with email",
      "createWithEmail": "Create an account with email",
      "resetNeedsEmail": "Enter your email above and we'll send you a reset link.",
      "fullPage": "Trouble signing in? Use the full sign-in page",
      "embedded": "Google sign-in doesn't work inside in-app browsers. Open this page in Safari or Chrome, or sign in with email below.",
      "googleUnavailable": "Google sign-in can't be reached right now. Sign in with email instead.",
      "gateTitle": "Sign in to open this page",
      "joinTitle": "Sign in to accept your club invitation"
    }
  },
  "scan": {
    "title": "Start Scan",
    "seoHeading": "Scan a chess scoresheet or board photo",
    "seoIntro": "Upload a clear photo to convert handwritten moves into validated SAN and PGN, or turn a board position into FEN.",
    "inputType": "Image type",
    "scoresheetMode": "Handwritten scoresheet",
    "boardMode": "Board image",
    "uploadBoardImage": "Upload board image",
    "scanning": "AI Recognizing...",
    "uploadImages": "Upload images",
    "dragDrop": "Drag and drop scoresheet images here",
    "orClick": "or click to select",
    "tapUpload": "Tap to add scoresheet photos",
    "tapUploadHint": "Take a photo or pick from your library",
    "pasteSupport": "Supports paste (Ctrl+V)",
    "maxImages": "Maximum {{count}} images",
    "maxSize": "Max {{size}}MB per image",
    "scanSuccess": "Scan Complete",
    "scanSuccessDesc": "Successfully recognized {{count}} moves, cost {{credits}} credits",
    "scanSuccessSavedDesc": "Recognized {{count}} moves, used {{credits}} credits, and saved the game to your games",
    "scanSuccessImagePending": "Recognized {{count}} moves and saved the game to your games, but the source image still needs to be saved",
    "notationTranslated": "The piece letters were read as {{language}} notation ({{mapping}}).",
    "scanFailed": "Scan Failed",
    "noImages": "Add an image first",
    "noImagesDesc": "Upload scoresheet images to start scanning",
    "insufficientCredits": "Insufficient Credits",
    "insufficientCreditsDesc": "Scanning requires {{cost}} credits, current balance {{balance}}",
    "inviteFriends": "Invite friends for more credits",
    "scoresheetImages": "Scoresheet Images",
    "uploadedImages": "Uploaded Images",
    "monthlyQuotaUsed": "Not enough credits",
    "monthlyQuotaUsedDesc": "This needs more credits than you have. Your next {{credits}} credits arrive on {{date}}.",
    "monthlyQuotaUsedDescNoDate": "This needs more credits than you have. Your next plan credits arrive at the start of your next 30-day period.",
    "outOfCredits": "You're out of credits for this scan.",
    "seePricing": "Get more credits — $4.99/month",
    "overlayDescription": "Analyzing the scoresheet images and extracting the moves.",
    "cancelWait": "Stop waiting",
    "cancelWaitDesc": "Processing may finish in the background. Retry the same images to retrieve it without another charge.",
    "uploadRejected": "Some images could not be added",
    "uploadRejectedDesc": "{{count}} file(s) exceeded the type, size, or {{max}}-image limit.",
    "verifyEmailRequired": "Verify your email first",
    "verifyEmailRequiredDesc": "Scanning is available once you confirm your email address. Check your inbox, or send the link again.",
    "verifyEmailCta": "Send the verification link",
    "repeatScanTitle": "Same image — no credits used",
    "repeatScanDesc": "This is the result from the earlier scan of this photo. Re-scanning an unchanged image never costs credits. For a different result, take a clearer or more complete photo.",
    "lowBalance": "{{balance}} credits left — about one more scoresheet.",
    "onlineSourceNotice": "This looks like a screenshot of an online game. A screenshot only shows the moves visible in the move panel, so the scan cannot recover the rest — on Chess.com or Lichess, exporting the PGN from the game itself gives you the full game.",
    "scanWithCost_one": "Scan · {{cost}} credit",
    "scanWithCost_other": "Scan · {{cost}} credits",
    "recognizeWithCost_one": "Recognize · {{cost}} credit",
    "recognizeWithCost_other": "Recognize · {{cost}} credits",
    "pasteHint": "Paste with {{shortcut}}",
    "uploadLimits": "Up to {{max}} images, {{size}} MB each — JPG, PNG or WebP. HEIC is not supported; convert it first.",
    "uploadLimitsBoard": "One image, up to {{size}} MB — JPG, PNG or WebP. HEIC is not supported; convert it first.",
    "imageCount": "{{count}} of {{max}} images added",
    "fileRejectedType": "{{name}}: unsupported format. Use JPG, PNG or WebP — HEIC must be converted first.",
    "fileRejectedSize": "{{name}}: larger than {{size}} MB.",
    "fileRejectedCount": "{{name}}: only {{max}} image(s) can be scanned at once.",
    "fileRejectedRead": "{{name}}: could not be read as an image.",
    "switchToBoardTitle": "Keep only the first image?",
    "switchToBoardDesc": "Board recognition reads a single photo. Switching keeps the first of your {{count}} images and removes the rest.",
    "switchToBoardConfirm": "Keep first image",
    "signInHint": "You'll be asked to sign in before the scan runs. New accounts get 10 free credits.",
    "unverifiedNotice": "Your first scan works without verifying your email; verify to keep scanning.",
    "unverifiedUsedTitle": "Free unverified scan used",
    "unverifiedUsedDesc": "Verify your email to keep scanning. We can send the link again.",
    "resendVerification": "Resend link",
    "stillRunningTitle": "The scan is still running",
    "stillRunningDesc": "The server is still processing this photo. Your credits were charged once and the same photo will not be charged again — try again in a minute to pick up the result.",
    "replayedTitle": "Loaded your earlier result",
    "replayedDesc": "This photo was already scanned. No credits were charged.",
    "getCredits": "Get credits",
    "insufficientInline": "You have {{balance}} credits; this scan needs {{cost}}.",
    "imageAlt": "Scoresheet page {{n}}",
    "boardImageAlt": "Board photo",
    "removeImage": "Remove image {{n}}",
    "moveImageEarlier": "Move image {{n}} earlier",
    "moveImageLater": "Move image {{n}} later",
    "restoredTitle": "Restored your unsaved game",
    "restoredDesc": "Your moves and images from before the reload are back.",
    "restoredDismiss": "Dismiss",
    "batchHint": "Scanning a whole tournament round? Use Round scan",
    "wrongKindScoresheet": "This photo looks like a scoresheet, not a chessboard. Your credit was refunded.",
    "wrongKindBoard": "This photo looks like a chessboard, not a scoresheet. Your credits were refunded.",
    "wrongKindScoresheetAction": "Scan as a scoresheet · {{cost}} credits",
    "wrongKindBoardAction": "Recognize as a board · {{cost}} credit",
    "detectedSwitchedScoresheet": "This photo looks like a scoresheet, so it will be scanned as one.",
    "detectedSwitchedBoard": "This photo looks like a chessboard, so it will be recognized as a board.",
    "detectedSuggestScoresheet": "This photo looks like a scoresheet, not a chessboard.",
    "detectedSuggestBoard": "This photo looks like a chessboard, not a scoresheet.",
    "switchToScoresheet": "Scan as a scoresheet",
    "switchToBoard": "Recognize as a board"
  },
  "notation": {
    "de": "German",
    "es": "Spanish",
    "fr": "French",
    "pt": "Portuguese",
    "nl": "Dutch",
    "pl": "Polish",
    "cs": "Czech",
    "hu": "Hungarian",
    "ru": "Russian",
    "zh": "Chinese"
  },
  "game": {
    "moves": "Moves",
    "totalMoves_one": "{{count}} move total",
    "totalMoves_other": "{{count}} moves total",
    "doubleClickEdit": "Use the pencil button to edit",
    "noMoves": "No game data",
    "noMovesDesc": "Upload scoresheet images to start scanning",
    "suspiciousMoves_one": "{{count}} move to check",
    "suspiciousMoves_other": "{{count}} moves to check",
    "autoFixPrompt": "Engine check flagged {{issues}} problem move(s); auto-fix would adjust {{changes}} spot(s)",
    "autoFixApply": "Try auto-fix",
    "autoFixDismiss": "Keep as scanned",
    "allMovesValid": "All moves validated successfully",
    "alternatives": "Alternatives",
    "moveEmpty": "Move cannot be empty",
    "illegalMove": "Move {{move}} does not replay from the position before it. Fix it with the pencil, and any later problem will show up next.",
    "white": "White",
    "black": "Black",
    "event": "Event",
    "site": "Site",
    "date": "Date",
    "result": "Result",
    "unknown": "Unknown",
    "unknownEvent": "Unknown Event",
    "unknownSite": "Unknown Site",
    "unknownDate": "Unknown Date",
    "navStart": "Go to start",
    "navPrev": "Previous move",
    "navNext": "Next move",
    "navEnd": "Go to final position",
    "navReset": "Reset board",
    "navFlip": "Flip board",
    "resultWhite": "White won",
    "resultBlack": "Black won",
    "resultDraw": "Draw",
    "resultOngoing": "Ongoing",
    "editMove": "Edit {{move}}",
    "goToMove": "Show the position after {{move}}",
    "resetTitle": "Discard this scan?",
    "resetDescription": "This clears the current images, moves, and any unsaved corrections. It cannot be undone.",
    "scanUnreliable": {
      "notFromStartingPosition": "This move list doesn't start from the opening",
      "notFromStartingPositionHint": "It looks like part of a game — a screenshot of a move panel, or a later page of a scoresheet. The moves are shown exactly as scanned; we can't replay or auto-correct them without the earlier moves. Scan the full scoresheet from move 1, or edit the moves by hand.",
      "descriptiveNotation": "This scoresheet uses descriptive notation",
      "descriptiveNotationHint": "Moves like P-K4 or P4R name pieces instead of squares. We can only read algebraic notation (e4, Nf3) for now, so the moves are shown exactly as scanned rather than converted."
    },
    "lowConfidence": "Read with {{percent}}% confidence — check it against the scoresheet.",
    "implausible": "A legal move the game argues with: {{san}} would win {{gain}} pawns on {{square}} and nobody played it. This ply or the next one was probably misread.",
    "replaceWith": "Replace with {{move}}",
    "insertBefore": "Insert a move before {{move}}",
    "insertMove": "Insert move",
    "deleteMove": "Delete {{move}}",
    "undoEdit": "Undo last edit",
    "newMovePlaceholder": "e.g. Nf3",
    "moreActions": "More actions for {{move}}",
    "round": "Round",
    "opening": "Opening",
    "addWhite": "Add white player",
    "addBlack": "Add black player",
    "addEvent": "Add event",
    "addSite": "Add site",
    "addDate": "Add date",
    "addRound": "Add round",
    "editField": "Edit {{field}}",
    "keepMove": "Keep {{move}}",
    "flaggedPosition": "Flagged move {{current}} of {{total}}",
    "playerSide": {
      "label": "I played",
      "neither": "Neither",
      "neitherTitle": "I didn't play this game",
      "fromAliases": "Matched by the names you play under. Pick a side to confirm it.",
      "saved": "Saved",
      "saving": "Saving",
      "failed": "Couldn't save which side you played",
      "cardsHint": "Pick your side so your missed shots become practice cards.",
      "summaryLabel": "I played:",
      "notSet": "Not set",
      "changeInAnalysis": "Change in the analysis"
    }
  },
  "history": {
    "title": "History",
    "viewAll": "View All",
    "noHistory": "No History",
    "cloudSync": "Log in to sync your history to the cloud",
    "deleted": "Deleted",
    "deletedDesc": "History record deleted",
    "justNow": "Just now",
    "minutesAgo": "{{count}} min ago",
    "hoursAgo": "{{count}} hours ago",
    "daysAgo": "{{count}} days ago",
    "startScan": "Scan a scoresheet",
    "totalRecords_one": "1 game saved",
    "totalRecords_other": "{{count}} games saved",
    "loadedRecords": "{{count}} games loaded — more are available",
    "moveCount_one": "1 move",
    "moveCount_other": "{{count}} moves",
    "scanAnother": "Scan another",
    "noHistoryDesc": "Games you save after a scan appear here, on every device you sign in from.",
    "deleteGame": "Delete {{game}}",
    "deleteTitle": "Delete this game?",
    "deleteDesc": "{{game}} will be removed from your library. This cannot be undone — export the PGN first if you want to keep it.",
    "searchLabel": "Search saved games",
    "searchPlaceholder": "Search by player, event or date",
    "matchCount": "{{count}} of {{total}} games",
    "savedAt": "Saved {{when}}",
    "loadMore": "Load more games",
    "openGame": "Open {{game}}",
    "deleteFailed": "Could not delete the game",
    "deleteFailedDesc": "The game is still in your library. Please try again.",
    "sharedBadge": "Shared",
    "revokeShare": "Revoke the share link for {{game}}",
    "revokeTitle": "Revoke this share link?",
    "revokeDesc": "The link to {{game}} will stop working for everyone who has it. You can create a new one later.",
    "needsCorrection_one": "1 move needs correction",
    "needsCorrection_other": "{{count}} moves need correction",
    "sortLabel": "Sort",
    "sort": {
      "savedDesc": "Newest saved",
      "savedAsc": "Oldest saved",
      "gameDateDesc": "Game date, newest first",
      "gameDateAsc": "Game date, oldest first",
      "white": "White player, A to Z",
      "black": "Black player, A to Z"
    },
    "filterLabel": "Result",
    "filter": {
      "all": "All",
      "whiteWins": "1-0",
      "blackWins": "0-1",
      "draws": "½-½",
      "unfinished": "Unfinished"
    },
    "tryBatch": "Scan a whole round at once"
  },
  "export": {
    "exportPGN": "Export PGN",
    "copyPGN": "Copy PGN",
    "copied": "Copied",
    "embed": "Embed Game",
    "embedCopied": "Embed code copied to clipboard",
    "exportSuccess": "Export Successful",
    "exportSuccessDesc": "PGN file downloaded",
    "copySuccess": "Copy Successful",
    "copySuccessDesc": "PGN copied to clipboard",
    "noData": "No game data",
    "noDataDesc": "Please scan scoresheet images first",
    "saveGame": "Save game",
    "saving": "Saving...",
    "gameSaved": "Game saved",
    "gameSavedDesc": "Game saved to your games",
    "saveFailed": "Save Failed",
    "saveFailedDesc": "Failed to save game. Please try again.",
    "gameSavedWithCorrections_one": "Saved — 1 move still needs correction",
    "gameSavedWithCorrections_other": "Saved — {{count}} moves still need correction",
    "gameSavedWithCorrectionsDesc": "Replay stops at move {{ply}}. Fix the moves and save again.",
    "signInToSave": "Sign in to save",
    "openLichess": "Open on Lichess",
    "lichessOpening": "Sending to Lichess…",
    "lichessFailed": "Lichess did not take the game",
    "lichessFailedDesc": "The import did not go through. Copy the PGN and paste it at lichess.org/paste instead.",
    "lichessRateLimited": "Lichess is limiting imports right now. Wait a minute and try again, or paste the PGN at lichess.org/paste.",
    "lichessPasteReady": "We opened Lichess' paste page and copied the PGN — press ⌘V / Ctrl+V there and import it.",
    "moreShare": "More ways to export and share"
  },
  "share": {
    "title": "Share",
    "text": "Check out this game: {{title}} ({{count}} moves) - Scanned with ScanChess.com",
    "wechat": "WeChat",
    "wechatTitle": "Share to WeChat",
    "wechatDesc": "Link copied! Paste it in WeChat to share.",
    "copyLink": "Copy Link",
    "copied": "Copied!",
    "linkCopied": "Link Copied",
    "linkCopiedDesc": "Share link copied to clipboard",
    "more": "More Options",
    "cardTitle": "Share it with your opponent",
    "cardBody": "You both played this game — send them a link so they can replay it. Anyone can open it, no account needed.",
    "cardBodyShared": "The link is live. Anyone who has it can replay this game.",
    "needsSave": "Save the game first — a share link points at the saved copy.",
    "createLink": "Create share link",
    "linkReady": "Share link ready",
    "linkReadyDesc": "Send it to your opponent — they can open it without signing in.",
    "linkFailed": "Could not create the link",
    "linkFailedDesc": "Please try again in a moment.",
    "linkRevoked": "Link revoked",
    "linkRevokedDesc": "The old link no longer opens this game.",
    "revokeLink": "Revoke",
    "anyoneWithLink": "Anyone with the link can view this game.",
    "anyoneWithLinkImages": "Anyone with the link can view this game and the scoresheet photos.",
    "unsavedEdits": "You have edited this game since it was saved. Save again so the link shows your corrections.",
    "includeImages": "Include the original scoresheet photos",
    "includeImagesHint": "Off by default. Turn it on if the person you send the link to should see the uploaded photos.",
    "imagesNowShared": "Scoresheet photos are now visible on the link",
    "imagesNowPrivate": "Scoresheet photos are no longer on the link",
    "updateFailed": "Could not update the link",
    "revokeFailed": "Could not revoke the link",
    "copyFailedDesc": "Copy the link from the box above instead."
  },
  "user": {
    "credits": "Credits",
    "settings": "Settings",
    "referralCode": "Referral code",
    "codeCopied": "Code copied",
    "copyReferralLink": "Copy referral link",
    "referralBonusDesc": "Share your link: you both get 5 credits.",
    "referralPlaceholder": "Friend's referral code",
    "proUntil": "Pro until",
    "creditsRefresh": "Credits refresh",
    "manageSubscription": "Manage subscription",
    "inviteFriends": "Invite friends"
  },
  "demo": {
    "title": "How it works",
    "source": "Scoresheet",
    "sourceBoard": "Board Photo",
    "result": "Digital Board"
  },
  "nav": {
    "home": "Home",
    "history": "History",
    "about": "About",
    "faq": "FAQ",
    "boardRecognition": "Board Recognition",
    "scan": "Scan",
    "howItWorks": "How it works",
    "blog": "Blog",
    "solutions": "Solutions",
    "scanCta": "Scan an image",
    "pricing": "Pricing",
    "settings": "Settings",
    "tools": "Tools",
    "extension": "Browser extension",
    "analyze": "Analyze",
    "scanBoard": "Board image → FEN",
    "scanScoresheet": "Scoresheet → PGN",
    "roundScan": "Round scan for clubs",
    "coachesClubs": "For coaches & clubs",
    "coachesClubsHint": "Scan a group's games, run events, share reports",
    "help": "Help & FAQ",
    "analyzeMenu": {
      "game-analysis": {
        "label": "Analyze a game",
        "hint": "Paste PGN: accuracy, key moments, missed tactics"
      },
      "analysis-board": {
        "label": "Analysis board",
        "hint": "Any position, with the engine’s best move"
      },
      "best-move": {
        "label": "Best move finder",
        "hint": "From a screenshot of the board"
      },
      "pgn-viewer": {
        "label": "PGN viewer",
        "hint": "Replay a game move by move"
      },
      "missed-tactics": {
        "label": "Practice missed tactics",
        "hint": "Your games’ missed tactics, as puzzles"
      },
      "opening-identifier": {
        "label": "Opening identifier",
        "hint": "Name and ECO code of any game's opening"
      }
    },
    "toolsMenu": {
      "groups": {
        "analyze": "Analyze",
        "create": "Create & convert",
        "play": "Tournament & fun"
      },
      "hints": {
        "board-editor": "Set up a position, copy the FEN",
        "pgn-to-gif": "Animate a game to share",
        "fen-to-image": "Download a board diagram",
        "pgn-validator": "Find and fix broken PGN",
        "fen-validator": "Check that a FEN is legal",
        "pgn-to-pdf": "Print a game with diagrams",
        "fen-to-pgn": "Start a PGN from a position",
        "pgn-to-fen": "The FEN after any move",
        "printable-scoresheets": "Blank score sheets to print",
        "time-control-calculator": "How long a 90+30 game lasts",
        "rating-calculator": "Your FIDE rating change",
        "chess-wrapped": "Your chess year in numbers",
        "tiebreak-calculator": "Swiss tie-breaks and ranking"
      }
    }
  },
  "footer": {
    "rights": "All rights reserved",
    "product": "Product",
    "resources": "Resources",
    "company": "Company",
    "howItWorks": "How it works",
    "blog": "Blog",
    "solutions": "Solutions",
    "about": "About",
    "privacy": "Privacy Policy",
    "terms": "Terms of Service",
    "deleteAccount": "Delete account",
    "pricing": "Pricing",
    "contactSupport": "Contact support",
    "supportLabel": "Support",
    "refunds": "Refund Policy",
    "operator": "ScanChess is operated by SudoAI. Web subscriptions are sold by Waffo as merchant of record.",
    "security": "Security",
    "status": "Status",
    "changelog": "Changelog",
    "cookieSettings": "Cookie settings",
    "tools": "Free chess tools",
    "allTools": "All free tools",
    "extension": "Browser extension"
  },
  "about": {
    "kicker": "About ScanChess",
    "title": "A chess scanner and study tool from a small team that plays",
    "lead": "ScanChess turns photos of handwritten chess scoresheets into rule-checked, editable PGN, then helps you study the games. This page says who makes it, why, how the recognition works, and what it does not do.",
    "cta": "Scan a scoresheet",
    "who": {
      "title": "Who builds it",
      "body1": "ScanChess is made by SudoAI, a small software studio. There is no sales team and no support department: the people who write the code read the support inbox and look at every scan a user reports as wrong.",
      "body2": "The guides on the blog are written by the same team and checked against the FIDE handbook and the platforms they describe."
    },
    "why": {
      "title": "Why it exists",
      "body": "Over-the-board games end up as a stack of paper, and typing them into a database is slow enough that most are never looked at again. We wanted the step from a scoresheet photo to a game you can replay to take about a minute — including the checking."
    },
    "how": {
      "title": "How recognition works",
      "steps": [
        "A vision model reads the handwriting on each photo and proposes a move for every cell, with a confidence score.",
        "The proposed moves are replayed on a board with chess.js. A move that is illegal in its position, or that the model was unsure about, is flagged. Nothing is corrected silently.",
        "You check the flagged moves against your scoresheet in the editor — retype a move, pick one of the alternatives the rules allow, insert or delete a move — then export the PGN or save the game."
      ],
      "note": "Recognition quality depends on the handwriting, the lighting and the notation used, so we do not quote an accuracy figure. Expect to check a few moves in a typical game."
    },
    "not": {
      "title": "What it does not do",
      "items": [
        "It does not guarantee an error-free transcription. A flagged move is one to check; an unflagged move can still be wrong when a misread was confident.",
        "It reads algebraic notation (e4, Nf3, O-O), including long algebraic (e2-e4), a P prefix for pawns, piece letters in several languages and figurines. Descriptive notation (P-K4) is not converted.",
        "It does not upload games to Lichess or Chess.com for you. It gives you a standard .pgn file, which those sites and desktop programs import.",
        "Scanning uses credits and needs an account. The {{tools}} free tools work without signing in; their optional extras — AI explanations and reading a photo of a real board in the best move finder — need a free account with a verified email."
      ]
    },
    "links": {
      "title": "Elsewhere on this site",
      "security": "Security — how uploads and accounts are protected, and how to report a vulnerability",
      "status": "Status — a live check of the website and the scanning API",
      "changelog": "Changelog — what shipped and when",
      "contact": "Contact — email the team about a bad scan or a billing question",
      "tools": "Free chess tools — all {{tools}} of them, in your browser"
    }
  },
  "common": {
    "loading": "Loading...",
    "error": "Error",
    "cancel": "Cancel",
    "confirm": "Confirm",
    "save": "Save",
    "delete": "Delete",
    "back": "Back",
    "next": "Next",
    "prev": "Previous",
    "language": "Language",
    "optional": "optional",
    "closeMenu": "Close menu",
    "copyFailed": "Failed to copy",
    "pageNotFound": "Page not found",
    "returnHome": "Return to Home",
    "imgScoresheet": "Chess scoresheet",
    "imgBoard": "Chess board",
    "imgDigitalBoard": "Digital chessboard",
    "menu": "Menu",
    "versus": "vs",
    "sentenceEnd": ".",
    "close": "Close",
    "skipToContent": "Skip to content"
  },
  "notFound": {
    "description": "The address may be mistyped, or the page has moved. These are the places most people are looking for.",
    "tools": "Free chess tools"
  },
  "errors": {
    "INVALID_CREDENTIALS": "Invalid email or password.",
    "EMAIL_EXISTS": "This email is already registered. Sign in instead, or use the reset link if you forgot the password.",
    "REAUTH_REQUIRED": "That password or sign-in check did not match this account.",
    "INVALID_RESET_TOKEN": "This reset link is invalid or has expired. Request a new one from the sign-in page.",
    "INVALID_VERIFICATION_TOKEN": "This verification link is invalid or has expired. Sign in to request another one.",
    "VERIFICATION_UNAVAILABLE": "Verification emails cannot be sent right now. Please try again later.",
    "INVALID_GOOGLE_TOKEN": "Google could not confirm your identity. Please try again.",
    "GOOGLE_EMAIL_UNVERIFIED": "Your Google account email is not verified, so it cannot be used to sign in.",
    "GOOGLE_LOGIN_DISABLED": "Sign in with Google is not available right now.",
    "INVALID_INPUT": "Some of the information entered is not valid. Please check it and try again.",
    "NOT_FOUND": "We could not find that record.",
    "SESSION_EXPIRED": "Your session has expired. Please sign in again.",
    "EMAIL_NOT_VERIFIED": "Verify your email address before using scan credits.",
    "INSUFFICIENT_CREDITS": "You do not have enough credits for this action.",
    "SUBSCRIPTION_ACTIVE": "Cancel the active App Store subscription before deleting this account.",
    "CHECKOUT_FAILED": "Checkout could not be started. Please try again in a moment.",
    "CANCEL_FAILED": "The subscription could not be canceled. Please try again or contact support.",
    "server": "Something went wrong on our side. Please try again in a moment.",
    "network": "Could not reach ScanChess. Check your connection and try again.",
    "generic": "Something went wrong. Please try again.",
    "PERMISSION_DENIED": "Your role in this club does not allow that.",
    "WORKSPACE_FORBIDDEN": "You are no longer a member of that club.",
    "OWNER_MUST_TRANSFER": "Make another member the owner before you leave or delete your account.",
    "INVITE_INVALID": "This invite link has expired or was revoked. Ask the club for a new one.",
    "RATE_LIMITED": "Too many requests. Please wait a moment and try again."
  },
  "resetPassword": {
    "title": "Reset password",
    "checkingLink": "Checking your reset link…",
    "missingToken": "This link is missing its token. Request a new reset email from the sign-in page or the app.",
    "goToSignIn": "Go to sign in",
    "done": "Password updated. Sign in with your new password.",
    "confirmNew": "Confirm new password",
    "submit": "Set new password"
  },
  "boardRecognition": {
    "dragDrop": "Drag and drop a board image here",
    "tapUpload": "Tap to add a board photo",
    "recognitionSuccess": "Recognition Successful",
    "recognitionSuccessDesc_one": "Position recognized, {{credits}} credit used",
    "recognitionSuccessDesc_other": "Position recognized, {{credits}} credits used",
    "recognitionFailed": "Recognition Failed",
    "fenCopied": "FEN copied to clipboard",
    "copyFen": "Copy FEN",
    "uncertainSquares": "Check highlighted squares: {{squares}}",
    "flipBoard": "Flip board",
    "openInEditor": "Open in board editor",
    "analyseLichess": "Analyze on Lichess"
  },
  "analysis": {
    "title": "Engine Analysis",
    "depth": "Depth",
    "calculating": "Calculating",
    "startAnalysis": "Start Analysis",
    "stopAnalysis": "Stop Analysis",
    "bestMove": "Best Move",
    "evaluation": "Evaluation",
    "annotations": "Annotations",
    "comment": "Comment",
    "addComment": "Add a comment...",
    "arrows": "Arrows",
    "arrowsHighlights": "Arrows & Highlights",
    "bookmark": "Bookmark",
    "symbols": "Symbols",
    "engineOff": "Engine Off",
    "engineLoading": "Loading Engine...",
    "engineReady": "Engine Ready",
    "engineError": "Engine Failed",
    "enable": "Turn on the engine",
    "disable": "Turn off the engine",
    "unavailable": "The engine could not load in this browser.",
    "lines": "Best lines",
    "noLegalMoves": "No legal moves: the game is over.",
    "reviewGame": "Analyze the whole game",
    "analyzeGame": "Analyze this game",
    "reviewing": "Analyzing position {{done}} of {{total}}…",
    "stopReview": "Stop the analysis",
    "accuracy": "Accuracy",
    "bestWas": "Best was {{san}}",
    "kind": {
      "book": "Book",
      "best": "Best",
      "good": "Good",
      "inaccuracy": "Inaccuracy",
      "mistake": "Mistake",
      "blunder": "Blunder"
    },
    "poweredBy": "Stockfish 18 runs in your browser; nothing is uploaded.",
    "poweredByLibrary": "Stockfish 18 runs in your browser. Unsaved games stay on your device; when you save a game, its analysis is saved with it.",
    "licence": "Engine source (GPL-3.0)",
    "linePreview": "Line preview",
    "previewingLine": "Line preview · move {{current}} of {{total}}",
    "exitPreview": "Exit preview",
    "previewLineHint": "Play this line out on the board",
    "saveAsVariation": "Save as variation",
    "tactics": {
      "title": "Missed tactics",
      "practice": "Practice {{count}} missed tactics",
      "practiceOne": "Practice this missed tactic",
      "enginePaused": "The engine is paused while you practice, so it can't give the answer away. It picks up again when you close the exercise.",
      "none": "No missed tactics here — only quiet mistakes, or nothing forcing the engine wanted instead.",
      "toMove": "{{side}} to play",
      "moveNumber": "Move {{number}}",
      "findTheShot": "Find the move that was missed.",
      "correct": "That's the shot.",
      "wrong": "Not that one — try again.",
      "reveal": "Show the solution",
      "next": "Next",
      "previous": "Previous",
      "youPlayed": "In the game you played {{san}}.",
      "solution": "Solution: {{line}}",
      "save": "Save to practice later",
      "saved": "Saved",
      "savedCount_one": "1 saved from your games",
      "savedCount_other": "{{count}} saved from your games",
      "practiceSaved_one": "Practice 1 saved tactic",
      "practiceSaved_other": "Practice {{count}} saved tactics",
      "clearSaved": "Clear saved tactics",
      "close": "Close trainer",
      "of": "{{current}} of {{total}}",
      "foundInGame_one": "1 forcing shot was missed in this game.",
      "foundInGame_other": "{{count}} forcing shots were missed in this game.",
      "find": "Find my missed tactics",
      "searching": "Looking for missed tactics: position {{done}} of {{total}}…",
      "addToPractice": "Add to daily practice",
      "addedToPractice": "Added to daily practice",
      "addedDetail_one": "{{count}} new practice card.",
      "addedDetail_other": "{{count}} new practice cards.",
      "openPractice": "Open daily practice",
      "savedLocally": "Saved in this browser.",
      "signUpToKeep": "Sign up free to turn them into daily practice cards",
      "saveFailed": "The tactics could not be added to your practice."
    },
    "gameReview": {
      "title": "Where the game turned",
      "lead": "Stockfish checks every move in your browser and finds the moments that decided the game. Free. Save the game and its analysis is saved with it, ready the next time you open it.",
      "checkFirst": "Check the flagged moves first, then analyze the game — one misread move would send the analysis the wrong way.",
      "start": "Analyze game",
      "fromStorage": "Loaded from this game's saved analysis.",
      "runAgain": "Run again",
      "none": "No turning points: no move gave away much winning chance.",
      "winChance": "Winning chance for the side that moved, before → after",
      "phase": {
        "opening": "Opening",
        "middlegame": "Middlegame",
        "endgame": "Endgame"
      },
      "side": {
        "white": "White",
        "black": "Black"
      },
      "pieces": {
        "p": "pawn",
        "n": "knight",
        "b": "bishop",
        "r": "rook",
        "q": "queen",
        "k": "king"
      },
      "sentence": {
        "allowedMate": "{{played}} allowed a forced mate, starting with {{refutation}}. {{best}} was the move.",
        "missedMate": "{{best}} forced mate; {{played}} let the chance go.",
        "hungPiece": "{{played}} left the {{piece}} on {{square}} to be taken: {{refutation}}.",
        "missedFork": "{{best}} would have won material with a fork: the {{piece}} on {{square}} attacks {{targets}} at once.",
        "missedCapture": "{{best}} would have won the {{piece}} on {{square}}.",
        "missedPromotion": "{{best}} promoted a pawn; {{played}} missed it.",
        "allowedFork": "{{played}} allowed a fork, starting with {{refutation}}: the {{piece}} on {{square}} attacks {{targets}} at once.",
        "missedPin": "{{best}} would have won the {{piece}} on {{square}}, pinned to its king.",
        "allowedPin": "{{played}} let the {{piece}} on {{square}} be pinned to its king and won, starting with {{refutation}}.",
        "missedSkewer": "{{best}} would have won material with a skewer: the {{piece}} on {{square}} has to move and the piece behind it falls.",
        "missedDiscovered": "{{best}} started a discovered attack; {{played}} missed it.",
        "allowedDiscovered": "{{played}} allowed a discovered attack, starting with {{refutation}}. {{best}} was the move.",
        "missedBackRank": "{{best}} forced a back-rank mate; {{played}} let the chance go.",
        "allowedBackRank": "{{played}} allowed a back-rank mate, starting with {{refutation}}. {{best}} was the move.",
        "swing": {
          "winning": {
            "winning": "Still winning after {{played}}, but {{best}} kept a far bigger edge.",
            "equal": "{{played}} let a winning position slip back to equal. {{best}} kept the advantage.",
            "losing": "{{played}} turned a winning position into a losing one. {{best}} was the move."
          },
          "equal": {
            "equal": "{{played}} gave a little away; {{best}} was more accurate.",
            "losing": "{{played}} tipped a level game into a losing one. {{best}} kept the balance."
          },
          "losing": {
            "losing": "{{played}} made a difficult position worse; {{best}} put up more resistance."
          }
        }
      },
      "marks": "Move marks",
      "goTo": "Go to analysis",
      "countsMine": "Your mistakes:",
      "countsBoth": "Both sides:",
      "noneMine": "No turning points on your side: none of your moves gave away much winning chance.",
      "leadSaved": "Stockfish checks every move in your browser and finds the moments that decided the game. Free. The analysis is saved with this game, ready the next time you open it."
    },
    "coach": {
      "title": "AI coach explanation",
      "lead": "The coach explains each turning point in plain words: what happened, what your opponent could do, and what to play instead. Written only from the engine's facts.",
      "iPlayed": "I played",
      "explain": "Explain with the AI coach · {{count}} credit",
      "explainFree": "Explain with the AI coach · free today ({{count}} left)",
      "freeNote": "One explanation a day is free; after that it is {{cost}} credit per game.",
      "freeUsed": "Today's free explanation is used; the next one is free from {{time}}.",
      "getCredits": "Get credits",
      "checking": "Checking the key moments more deeply… {{done}}/{{total}}",
      "writing": "The coach is writing… (about 10 seconds)",
      "cleared": "On a deeper look none of these moves cost much, so there is nothing to explain and no credit was used.",
      "noCredits": "You don't have enough credits for the coach explanation.",
      "inProgress": "The coach is already explaining this game. Try again in a moment.",
      "verifyEmail": "Verify your email to use the AI coach — one explanation a day is free.",
      "signIn": "Sign in to use the AI coach — one explanation a day is free.",
      "createAccount": "Create a free account to use the AI coach — one explanation a day is free.",
      "refunded": "Part of this explanation could not be checked, so it shows the basic sentence instead — your credit was refunded.",
      "charged": "{{count}} credit used. Explaining this game again (the other side or another language) is free.",
      "free": "Already explained — no credit used.",
      "usedFree": "Today's free explanation used — no credit taken. Explaining this game again (the other side or another language) is free.",
      "refundedFree": "Part of this explanation could not be checked, so it shows the basic sentence instead — your free explanation was returned.",
      "afterFree": "Until then each new game costs {{count}} credit (balance: {{credits}}).",
      "nextFree": "Next free explanation: {{time}}.",
      "disclaimer": "AI-written from engine facts. It can still be wrong; the engine lines on the board are the reference.",
      "basis": "Engine basis (Stockfish, depth {{depth}}): best was {{best}} · winning chance {{before}}% → {{after}}%",
      "uncertain": "The engine's reason lies further ahead than these lines show, so the “why” is its judgement, not a proven line. Play the line on the board to check.",
      "addToPgn": "Add to PGN as comments",
      "addedToPgn": "Added to the PGN",
      "report": "Report a mistake",
      "reported": "Thanks — reported",
      "showLine": "Show this move on the board",
      "field": {
        "what": "What happened",
        "why": "Why it hurt",
        "instead": "Better was"
      },
      "sideWhite": "The coach explains White's moves.",
      "sideBlack": "The coach explains Black's moves.",
      "sideGuessed": "(Guessed from the result.)",
      "changeSide": "Change side"
    },
    "engineOn": "Engine on",
    "checkingMarks": "Double-checking flagged moves: {{done}} of {{total}}…",
    "repertoire": {
      "leftPlayer": "You left your repertoire “{{name}}” at move {{move}}: {{played}} instead of {{expected}}.",
      "leftOpponent": "Your opponent left your repertoire “{{name}}” at move {{move}} with {{played}}; you had prepared {{expected}}.",
      "lineEnded": "You followed your repertoire “{{name}}” to its end (move {{move}}).",
      "gameEnded": "The whole game stayed in your repertoire “{{name}}”.",
      "verdict": "Engine: {{kind}}",
      "show": "Show move {{move}}",
      "manage": "Repertoires"
    },
    "kindCount": {
      "inaccuracy_one": "Inaccuracy",
      "inaccuracy_other": "Inaccuracies",
      "mistake_one": "Mistake",
      "mistake_other": "Mistakes",
      "blunder_one": "Blunder",
      "blunder_other": "Blunders"
    }
  },
  "home": {
    "badge": "AI scoresheet OCR",
    "hero": {
      "titlePre": "Turn handwritten scoresheets into",
      "titleMid": "",
      "titleEm": "clean PGN",
      "lead": "Snap a photo of your chess scoresheet. ScanChess transcribes every move, checks each one against the rules, marks what it is unsure about, and hands you an editable PGN that works with Lichess, Chess.com, or your analysis tool.",
      "ctaPrimary": "Scan your scoresheet",
      "ctaSecondary": "See how it works",
      "trust": "10 free credits for new accounts — no card required.",
      "demoOriginal": "Handwritten · the original",
      "demoArrow": "AI reads & validates",
      "reviewBadge": "Rule-checked · editable"
    },
    "exportsLabel": "Works with",
    "steps": {
      "kicker": "How it works",
      "title": "From paper to PGN in three steps",
      "subtitle": "No typing, no manual transcription, no learning curve.",
      "s1title": "Photograph the scoresheet",
      "s1desc": "A clear, flat, well-lit photo is all it takes — phone or scanner, no app to install.",
      "s2title": "AI reads every move",
      "s2desc": "ScanChess transcribes the notation and validates each move against the board as it goes.",
      "s3title": "Check & export",
      "s3desc": "Fix flagged moves in the editor, then download your game or replay it move by move."
    },
    "features": {
      "kicker": "Why ScanChess",
      "title": "Everything you need to digitize your games",
      "f1title": "Reads your handwriting",
      "f1desc": "AI OCR turns a photo of a handwritten scoresheet into algebraic notation — messy pen included, with anything uncertain marked for you to check.",
      "f2title": "Catches mistakes",
      "f2desc": "Every move is rule-checked and editable: illegal or low-confidence entries are flagged so you can confirm them before you export.",
      "f3title": "Exports standard PGN",
      "f3desc": "Download a standard .pgn file that opens in Lichess, Chess.com, ChessBase, or SCID.",
      "f4title": "Faster than typing it",
      "f4desc": "A whole game usually comes back in well under a minute. Checking the few flagged moves takes far less time than typing the game out."
    },
    "blog": {
      "kicker": "From the journal",
      "title": "Guides on notation & PGN",
      "all": "All articles",
      "minRead": "min"
    },
    "cta": {
      "title": "Ready to digitize your scoresheets?",
      "desc": "Upload your first game and get a rule-checked, editable PGN in seconds.",
      "button": "Scan your scoresheet"
    }
  },
  "blog": {
    "pageTitle": "ScanChess Blog",
    "pageSubtitle": "Guides on chess notation, scoresheets, PGN, and digitizing your games.",
    "solutions": "Solutions",
    "allArticles": "All articles",
    "searchLabel": "Search articles",
    "searchPlaceholder": "Search articles",
    "clearSearch": "Clear search",
    "resultCount_one": "{{count}} article",
    "resultCount_other": "{{count}} articles",
    "noResults": "No articles match that. Try another word, or clear the filters.",
    "minRead": "min read",
    "keepReading": "Keep reading",
    "relatedTools": "Free tools for this topic",
    "diagramAlt": "Workflow diagram for {{title}}",
    "sources": "Sources and review notes",
    "reviewed": "Sources reviewed {{date}}",
    "ctaTitle": "Turn your scoresheet into PGN in seconds",
    "ctaDesc": "Upload a photo and let ScanChess do the transcription.",
    "ctaButton": "Scan your scoresheet",
    "categories": {
      "Improvement": "Improvement",
      "Guides": "Guides",
      "Notation": "Notation",
      "Comparison": "Comparison",
      "Rules": "Rules",
      "Tools": "Tools",
      "Billing": "Billing",
      "Statistics": "Statistics"
    },
    "helpTitle": "Help",
    "helpLead": "Credits, plans, canceling and refunds.",
    "helpFaq": "More answers in the FAQ"
  },
  "blogTools": {
    "pgnTitle": "Try a PGN on the board",
    "pgnLead": "The example is already loaded. Step through the moves, tap a move, or copy the FEN of any position.",
    "fenTitle": "Decode a FEN field by field",
    "fenLead": "Paste a complete six-field FEN. The board and explanation update locally in your browser.",
    "invalidFen": "Enter a complete, valid six-field FEN.",
    "placement": "Piece placement",
    "placementHint": "Ranks 8 to 1; letters are pieces and digits count consecutive empty squares.",
    "sideToMove": "Side to move",
    "sideToMoveHint": "w means White moves next; b means Black moves next.",
    "castling": "Castling rights",
    "castlingHint": "K/Q are White’s kingside/queenside rights; k/q are Black’s. A dash means none.",
    "enPassant": "En passant target",
    "enPassantHint": "The skipped square after a two-square pawn move, or none. It is not the pawn’s square.",
    "halfmove": "Halfmove clock",
    "halfmoveHint": "Moves by either side since the last pawn move or capture, used for the fifty-move rule.",
    "fullmove": "Fullmove number",
    "fullmoveHint": "Starts at 1 and increases after Black completes a move.",
    "white": "White",
    "black": "Black",
    "none": "None",
    "white-kingside": "White kingside",
    "white-queenside": "White queenside",
    "black-kingside": "Black kingside",
    "black-queenside": "Black queenside",
    "openEditor": "Open this FEN in the board editor",
    "sanTitle": "Read SAN on a board",
    "sanLead": "Tap each SAN move to see exactly how the compact notation changes the position.",
    "start": "Start"
  },
  "solution": {
    "faqTitle": "Frequently asked questions",
    "alsoTitle": "Other ways people use ScanChess",
    "freeCredits": "10 free credits on sign-up. Volume pricing:",
    "hubKicker": "Choose your workflow",
    "hubTitle": "Chess scoresheet and PGN solutions",
    "hubIntro": "Start with who you are: a player scanning your own games, a coach or club handling a group's games, or a parent keeping a child's.",
    "explore": "View solution",
    "diagramAlt": "ScanChess workflow for {{title}}",
    "clusters": {
      "players": {
        "title": "For players",
        "description": "Scan your own scoresheets and positions, then analyze and keep them. The scoresheet scanner is the place to start."
      },
      "coaches": {
        "title": "For coaches & clubs",
        "description": "Digitize a group's games, handle a tournament round and keep the archive."
      },
      "parents": {
        "title": "For parents",
        "description": "Keep a child's tournament games safe and ready to look at together."
      }
    },
    "startHere": "Start here:",
    "startHereHint": "the overview of scanning handwritten scoresheets to PGN, what it costs and which guide to read next.",
    "guidesTitle": "Guides for each part of the job",
    "spokes": {
      "convert-chess-scoresheet-to-pgn": "Step by step, from photo to PGN",
      "photo-to-pgn": "Getting the photo right",
      "scan-chess-notation": "Which notation styles it reads",
      "chess-game-scanner": "Photographing a real board for FEN"
    }
  },
  "howToUse": {
    "metaTitle": "How ScanChess Works - Chess Scoresheet Scanning Guide",
    "pageTitle": "How ScanChess works",
    "pageSubtitle": "Digitize your scoresheet in 5 easy steps",
    "demoAlt": "Handwritten scoresheet example",
    "demoCaption": "A typical handwritten tournament scoresheet, the kind ScanChess reads",
    "shotAlts": [
      "A handwritten tournament scoresheet, photographed flat",
      "The upload area on the Scan page with one scoresheet image added and the limits line",
      "The move list after a scan: two amber low-confidence moves, one red illegal move, a pencil beside every move",
      "Editing move 4 inline, with the two rule-legal alternatives the recognizer offered",
      "Save Game, Export PGN and Copy PGN buttons above the share card"
    ],
    "shotCaptions": [
      "What you start with",
      "Step 2 in the app",
      "Step 3 and 4 in the app",
      "Editing a flagged move",
      "Step 5 in the app"
    ],
    "ctaTitle": "Ready to get started?",
    "ctaSubtitle": "Upload your first scoresheet now",
    "ctaStart": "Start Scanning",
    "ctaFaq": "View FAQ",
    "schemaName": "How to Scan Chess Scoresheets with ScanChess",
    "schemaDesc": "Convert handwritten chess scoresheets to PGN using AI",
    "steps": [
      {
        "title": "1. Take a Photo",
        "description": "Use your phone or camera to photograph your handwritten scoresheet. Ensure good lighting and clear visibility of moves.",
        "tips": [
          "Keep the photo flat, avoid tilting",
          "Make sure all moves are in frame",
          "Multi-page scoresheets can be photographed separately"
        ]
      },
      {
        "title": "2. Upload images",
        "description": "Add photos from your phone or computer — tap the upload area to pick them, or drag files onto it on a desktop. JPG, PNG and WebP, up to 10 images per scan. HEIC (the iPhone default) is not supported yet, so convert it first.",
        "tips": [
          "Up to 15 MB per image",
          "Pages are read in the order shown; use the arrows to reorder them before you scan",
          "On a phone, take a photo and upload it straight away"
        ]
      },
      {
        "title": "3. AI Recognition",
        "description": "Press the Scan button (it shows the cost, 2 credits). The model reads every cell and replays the moves on a board as it goes. A full game usually comes back in well under a minute.",
        "tips": [
          "System validates each move legality",
          "Low-confidence moves are marked for you to check",
          "One scan costs 2 credits, however many pages you upload"
        ]
      },
      {
        "title": "4. Check & edit",
        "description": "Preview moves on the board and use the pencil button beside any move to edit. Shorthand input like \"dc\" auto-converts to \"dxc5\".",
        "tips": [
          "Red marks indicate illegal moves",
          "Yellow marks show low-confidence moves — check them against your sheet",
          "Tap a move to jump to it; on a desktop the arrow keys step through the game"
        ]
      },
      {
        "title": "5. Export & Save",
        "description": "When satisfied, export PGN file or copy to clipboard. Import directly to Chess.com, Lichess, and more.",
        "tips": [
          "Every successful scan is saved to your games automatically",
          "PGN includes full game info",
          "Share a link to the game after saving it"
        ]
      }
    ]
  },
  "seo": {
    "homeTitle": "ScanChess · Chess Images to FEN & Scoresheets to PGN",
    "homeDesc": "Chess OCR for board images and handwritten scoresheets: turn a photo into a position to analyze or a game to replay, check the result, then play on.",
    "scanTitle": "Scan a chess board or scoresheet | ScanChess",
    "scanDesc": "Chess image to an editable position, handwritten scoresheet to PGN. Try the preloaded examples: no sign-in, no recognition request, no credits spent.",
    "aboutTitle": "About ScanChess | AI Chess Scoresheet Scanner",
    "aboutDesc": "Learn how ScanChess helps chess players, arbiters, and clubs digitize handwritten scoresheets into PGN.",
    "faqTitle": "ScanChess FAQ | Scoresheet OCR and PGN Conversion",
    "faqDesc": "Answers about ScanChess: scanning scoresheets and board images, Stockfish analysis and the AI coach, daily practice, credits, plans and your data.",
    "blogTitle": "Chess Scoresheet & Notation Guides | ScanChess Blog",
    "blogDesc": "Guides on reading chess scoresheets, algebraic notation (SAN), PGN, FIDE rules, and digitizing your games with ScanChess.",
    "privacyTitle": "Privacy Policy – How ScanChess Handles Your Data",
    "privacyDesc": "How ScanChess collects, uses, stores, and deletes your data, including account email, uploaded scoresheet images, and credits.",
    "termsTitle": "Terms of Service – Accounts, Credits & Use | ScanChess",
    "termsDesc": "The terms governing your use of ScanChess, including accounts, credits and purchases, acceptable use, and account deletion.",
    "pricingTitle": "ScanChess Pricing – Free Credits, Pro & Pro+ Plans",
    "pricingDesc": "10 free credits to start. Pro adds 100 scan credits every 30 days for $4.99/month or $29.99/year; Pro+ adds 500 for $19.99/month or $119.99/year.",
    "refundsTitle": "Refund Policy – Payments, Credits & Canceling | ScanChess",
    "refundsDesc": "ScanChess does not offer refunds: all payments are final. The exceptions, what credits are, and how to cancel instead.",
    "contactTitle": "Contact ScanChess Support – Billing, Account & Scans",
    "contactDesc": "Reach ScanChess support at support@scanchess.com — billing, refunds, account deletion and scan problems, answered within two business days.",
    "settingsTitle": "Account Settings | ScanChess",
    "settingsDesc": "Credits, subscription, referral code, language, analytics consent, and exporting or deleting your data.",
    "statusTitle": "ScanChess Service Status – Website & Scanning API",
    "statusDesc": "A live check of the ScanChess website and scanning API, run from your own browser when you open the page: real response times, not a typed-in number.",
    "securityTitle": "Security & Vulnerability Reporting | ScanChess",
    "securityDesc": "How ScanChess protects your data — HTTPS everywhere, bcrypt-hashed passwords, HttpOnly sessions, no card details stored — and how to report a vulnerability.",
    "changelogTitle": "ScanChess Changelog – New Features, Fixes & Updates",
    "changelogDesc": "What changed in ScanChess and when: new scanning features, free chess tools, billing changes, recognition fixes and new languages, newest first.",
    "historyTitle": "Saved Games | ScanChess",
    "historyDesc": "Your saved chess games, synced across devices — reload one onto the board or export it as PGN.",
    "howToUseTitle": "How ScanChess Works: Board Image to FEN, Scoresheet to PGN",
    "howToUseDesc": "Step-by-step guide: upload a board image to get editable FEN, or the pages of a scoresheet to get PGN, then check flagged moves and export the result.",
    "toolsTitle": "Free Chess Tools – Best Move Finder, Analysis Board & More",
    "toolsDesc": "Free chess tools in your browser: find the best move from a FEN or screenshot, analyze games and positions with Stockfish, build your Chess Wrapped and more.",
    "solutionsTitle": "Chess Scoresheet Scanning & PGN Solutions | ScanChess",
    "solutionsDesc": "Choose the ScanChess workflow for scanning notation, converting photos to PGN, archiving tournament games, or preserving a player’s game history.",
    "deleteAccountTitle": "Delete Your Account | ScanChess",
    "deleteAccountDesc": "Permanently delete your ScanChess account, saved games and uploaded scoresheet images.",
    "authTitle": "Sign In | ScanChess",
    "authDesc": "Sign in to ScanChess to save scanned chess games and manage scan credits.",
    "resetTitle": "Reset Password | ScanChess",
    "resetDesc": "Set a new ScanChess account password.",
    "verifyEmailTitle": "Verify Email | ScanChess",
    "verifyEmailDesc": "Verify the email address on your ScanChess account.",
    "batchDesc": "Scan a whole tournament round at once: upload every scoresheet, group the pages, and file each game into your library.",
    "extensionTitle": "ScanChess Browser Extension · Webpage Chess Boards to FEN",
    "extensionDesc": "Select chess diagrams on webpages, check the position and copy FEN. Use your ScanChess account in Chrome or Edge; each board scan uses 1 credit.",
    "howItWorksTitle": "How ScanChess Works: Scan, Analyze and Practice Your Games",
    "howItWorksDesc": "Scan a scoresheet or board image and check the moves, then analyze the game with Stockfish and an AI coach and practice the tactics you missed."
  },
  "deleteAccount": {
    "title": "Delete your account",
    "intro": "This removes your ScanChess account and everything stored with it. If you only want to sign out, use the menu instead.",
    "warningTitle": "This cannot be undone",
    "warningGames": "Every saved game and PGN in your library is deleted.",
    "warningImages": "Every scoresheet image you uploaded is deleted.",
    "warningCredits": "Remaining credits are forfeited and are not refundable.",
    "warningSubscription": "Web renewal is canceled before deletion. An active App Store subscription must be canceled with Apple first, or deletion is blocked.",
    "manageSubscription": "Manage subscription",
    "warningIrreversible": "Deletion is immediate and permanent — we cannot restore the account afterwards.",
    "confirmPrompt": "To confirm, type your email address:",
    "passwordPrompt": "Enter your current password",
    "providerPrompt": "Or verify again with your sign-in provider",
    "providerVerified": "Identity verified for account deletion",
    "button": "Permanently delete my account",
    "signInFirst": "Sign in to the account you want to delete, then come back to this page.",
    "noAccessNote": "Locked out of the account? Email us and we will handle the request:",
    "doneTitle": "Account deleted",
    "doneDesc": "Your account and all associated data have been removed.",
    "failedTitle": "Could not delete the account",
    "failedDesc": "Something went wrong. Please try again, or email support@scanchess.com.",
    "proofRequired": "To delete the account we need proof it is yours: your current password, or a fresh Google sign-in.",
    "appleTitle": "Signed in with Apple?",
    "appleDesc": "This page cannot verify an account that only uses Sign in with Apple. Email us from the address on the account and we will delete it for you.",
    "requestByEmail": "Request deletion by email",
    "emailSubject": "Account deletion request ({{email}})",
    "emailBody": "Please delete my ScanChess account {{email}} and all data stored with it. I understand this cannot be undone."
  },
  "cookies": {
    "title": "Cookie choice",
    "body": "We use Google Analytics and Microsoft Clarity to see how the site is used. Clarity records how you move around a page.",
    "accept": "Accept",
    "decline": "Decline",
    "learnMore": "How we use your data",
    "currentlyOn": "Analytics are currently on.",
    "currentlyOff": "Analytics are currently off."
  },
  "pricing": {
    "title": "Simple pricing",
    "subtitle": "Credits pay for scans. The plans add the analysis, practice and preparation tools.",
    "perMonth": "/month",
    "yearlyNote": "{{price}} billed yearly · save 50%",
    "bestValue": "Best value",
    "billing": {
      "monthly": "Monthly",
      "yearly": "Yearly",
      "yearlySave": "−50%"
    },
    "tiers": {
      "pro": "Pro",
      "proplus": "Pro+"
    },
    "tierCredits": {
      "pro": "100 scan credits every 30 days — about 50 scoresheets",
      "proplus": "500 scan credits every 30 days — about 250 scoresheets"
    },
    "subscribe": "Subscribe",
    "signInToSubscribe": "Sign in to subscribe",
    "smallPrint": "Billed in USD and renews automatically at the same price — monthly plans every month, yearly plans every year — until you cancel. Cancel any time on this page: Pro stays active until the end of the period you have paid for, and you are not charged again. All payments are final and non-refundable except where the law requires otherwise — see our Refund Policy. Taxes are calculated at checkout by Waffo, our merchant of record, who is the seller for web purchases.",
    "manage": {
      "title": "Your subscription",
      "activeUntil": "Pro is active until {{date}}. It renews automatically unless you cancel.",
      "cancel": "Cancel subscription",
      "cancelNote": "Canceling stops the next charge. You keep Pro — and the credits already in your balance — until the paid period ends.",
      "canceledTitle": "Subscription canceled",
      "canceledDesc": "You will not be charged again. Pro stays active until the end of the period you have paid for.",
      "cancelFailedTitle": "Could not cancel",
      "cancelFailedDesc": "Please try again, or email support@scanchess.com and we will cancel it for you.",
      "titleWithPlan": "You're on {{plan}}",
      "appStoreNote": "This subscription was bought in the iOS app. Manage or cancel it in your Apple ID subscription settings.",
      "passTitle": "You hold a {{plan}}",
      "passActiveUntil": "Pro is active until {{date}}. Nothing renews or is charged when it ends.",
      "passNote": "To extend it, buy another pass below — the days you have left carry over."
    },
    "plans": {
      "pro_monthly": "Pro Monthly",
      "pro_yearly": "Pro Yearly",
      "proplus_monthly": "Pro+ Monthly",
      "proplus_yearly": "Pro+ Yearly",
      "pro_pass_365": "Pro Yearly Pass"
    },
    "free": {
      "name": "Free",
      "price": "$0",
      "period": "to start",
      "note": "10 credits when you sign up — no card required",
      "cta": "Scan a scoresheet",
      "signUpCta": "Start free — sign up",
      "includedNote": "What every account starts with, before Pro.",
      "priceCn": "¥0"
    },
    "credits": {
      "title": "How credits work",
      "intro": "Credits are the only thing you spend on ScanChess. Every new account starts with 10 free credits, and credits never expire.",
      "colAction": "What you do",
      "colCost": "Cost",
      "rows": {
        "scoresheet": "Scoresheet photo → PGN",
        "scoresheetCost": "2 credits",
        "board": "Board photo → FEN",
        "boardCost": "1 credit",
        "coach": "AI explanations: the game coach, a position, an event report summary",
        "coachCost": "1 free a day, then 1 credit each",
        "other": "Editing, replay, PGN export, game history",
        "otherCost": "Free",
        "bestMove": "Best move finder: reading a photo of a real board (up to {{n}} per 24 hours)",
        "bestMoveCost": "Free with a verified free account"
      },
      "topUp": "Pro adds 100 credits every 30 days — about 50 scoresheets — and Pro+ adds 500. The grant lands when you sign in after the 30 days are up, and unused credits stay in your balance.",
      "perScanMonthly": "On the monthly plans that works out to about $0.05 per credit on Pro and $0.04 on Pro+ — roughly $0.10 per scoresheet on Pro and $0.08 on Pro+.",
      "perScanYearly": "On the yearly plans that works out to about $0.025 per credit on Pro and $0.02 on Pro+ — roughly $0.05 per scoresheet on Pro and $0.04 on Pro+, half the monthly rate.",
      "perScanPass": "The Pro yearly pass works out to about ¥0.08 per credit — roughly ¥0.17 per scoresheet.",
      "bestMoveNote": "Screenshots are read in your browser, free and without an account. A board scan in the workspace costs 1 credit because it saves an editable position to your account; the best move finder only reads the picture to show the engine's answer."
    },
    "support": {
      "title": "Questions about billing?",
      "body": "Questions about a charge, a refund or your credit balance — write to us at"
    },
    "help": {
      "credits": "How credits work",
      "cancel": "How to cancel",
      "compare": "Free vs Pro",
      "refunds": "Refund policy (no refunds)"
    },
    "currentPlan": "Your plan",
    "currentPlanButton": "Current plan",
    "switchPlan": "Switch to this plan",
    "switchNote": "Switching opens checkout for the new plan; nothing changes until you complete it. Afterwards we stop the previous plan from renewing on request, and moving up releases the larger credit allowance straight away.",
    "appStoreSwitchDesc": "This subscription was bought in the iOS app, so Apple has to change it. Open your Apple ID subscription settings to switch plans.",
    "overlapTitle": "You already have active Pro access",
    "overlapDesc": "Cancel the current subscription and wait for its paid period to end before buying another plan. This prevents overlapping charges.",
    "subscriptionUnknownTitle": "Could not check your subscription",
    "subscriptionUnknownDesc": "We could not load your subscription details. Try again before changing plans.",
    "retry": "Try again",
    "switchDoneDesc": "Your new plan is active. Your previous plan ({{previous}}) is still set to renew — see below to stop it.",
    "switchDoneNote": "Your previous plan ({{previous}}) is still set to renew. We will stop it for you — send us the request below and it is done the same day, before any further charge.",
    "switchStopPrevious": "Ask us to stop the previous plan",
    "switchEmailSubject": "Stop renewal of my previous plan ({{previous}})",
    "switchEmailBody": "I switched from {{previous}} to {{current}} on ScanChess ({{email}}). Please stop the previous plan from renewing.",
    "switchPreviousCanceledDesc": "Your new plan is active. Your previous plan ({{previous}}) has been stopped and will not renew.",
    "switchPreviousNoneDesc": "Your new plan is active. Your previous plan ({{previous}}) was already stopped — nothing further will be charged for it.",
    "switchPreviousCancelFailedTitle": "New plan active, but the previous one is still renewing",
    "switchPreviousCancelFailedDesc": "We could not stop {{previous}} automatically. Use the request below and we will stop it before any further charge.",
    "market": {
      "label": "Store",
      "global": "International",
      "globalDetail": "USD · card / Apple Pay / Google Pay",
      "cn": "Mainland China",
      "cnDetail": "CNY · WeChat Pay",
      "showingGlobal": "Prices in USD, billed by card, Apple Pay or Google Pay.",
      "switchToCn": "In mainland China? Show CNY pricing with WeChat Pay.",
      "showingCn": "Prices for mainland China in CNY, paid once with WeChat Pay.",
      "switchToGlobal": "Not in mainland China? Show international pricing."
    },
    "pass": {
      "period": "/year, paid once",
      "noRenew": "Does not renew",
      "buy": "Pay with WeChat",
      "extend": "Add another year",
      "signInToBuy": "Sign in to buy",
      "note": "A pass is paid once and lasts 365 days; nothing is charged when it ends. To extend it, buy another — the days you have left carry over.",
      "holderSwitchDesc": "Your pass is still running. Subscribe once it ends so you are not paying twice for the same days.",
      "listPrice": "List price {{price}}",
      "proplusNote": "Pro+ for clubs and coaches is not sold in the Mainland China store yet. Email {{email}} if you need it."
    },
    "smallPrintCn": "The Mainland China store is priced in CNY and paid once with WeChat Pay. You are buying a 365-day Pro pass: it does not renew and there is nothing to cancel; buy again to extend it and the days you have left carry over. All payments are final and non-refundable except where applicable law requires otherwise — see the Refund Policy. Tax is calculated at checkout by our reseller Waffo, which is the merchant of record for web purchases.",
    "tierTagline": {
      "free": "Scan, analyze and practice",
      "pro": "For your own games and preparation",
      "proplus": "For clubs and coaches"
    },
    "cards": {
      "freeBasics": "Scans, editing, replay, PGN export and your games library",
      "freeAnalysis": "Stockfish analysis, one free AI explanation a day and daily practice",
      "proFeatures": "Full insights, opening repertoires, opponent scouting and event reports",
      "proPractice": "Unlimited daily practice",
      "proplusEverything": "Everything in Pro, with higher report and repertoire limits",
      "proplusClub": "Club player roster, student pages and public report links"
    },
    "compare": {
      "title": "Compare plans",
      "feature": "Feature",
      "yes": "Included",
      "no": "Not included",
      "groups": {
        "credits": "Credits",
        "analysis": "Analysis & AI explanations",
        "practice": "Practice",
        "insights": "Insights",
        "preparation": "Preparation",
        "events": "Events & reports",
        "clubs": "Clubs"
      },
      "rows": {
        "credits": "Credits",
        "basics": "Scans, editing, replay, PGN export, games library",
        "engine": "Stockfish analysis of every game",
        "explain": "AI explanations: game coach, a position, an event report summary",
        "practice": "Daily practice from your own mistakes",
        "insightsBasic": "Insights summary, online vs over-the-board",
        "insightsDeep": "Full profile: accuracy over time, phases, mistake types, openings, filters",
        "repertoire": "Opening repertoires with deviation alerts",
        "scouting": "Opponent scouting reports",
        "eventReport": "Event reports",
        "reportShare": "Public share links for reports",
        "clubPlayers": "Player roster, student pages, assigning a round scan's games to players"
      },
      "cells": {
        "signup": "10 on sign-up",
        "every30": "{{n}} every 30 days",
        "perDay": "{{n}} a day",
        "perMonth": "{{n}} a month",
        "upTo": "Up to {{n}}",
        "unlimited": "Unlimited",
        "preview": "Preview",
        "explain_one": "{{free}} free a day, then {{count}} credit each",
        "explain_other": "{{free}} free a day, then {{count}} credits each"
      },
      "clubNote": "Club features work in a club workspace whose plan is Pro+. Credits never expire, and unused ones stay in your balance."
    }
  },
  "checkout": {
    "opening": "Opening secure checkout…",
    "failed": "Checkout did not open. {{reason}} Nothing has been charged. If it keeps happening, email",
    "trust": {
      "secure": "Secure checkout by Waffo",
      "methodsCard": "Card, Apple Pay or Google Pay",
      "methodsWechat": "WeChat Pay",
      "cancelAnyTime": "Cancel any time",
      "oneTime": "One-time payment",
      "chargeMonthly": "{{price}} today, then {{price}} every month until you cancel. Any tax is calculated at checkout.",
      "chargeYearly": "{{price}} today, then {{price}} every year until you cancel. Any tax is calculated at checkout.",
      "chargePass": "{{price}} once for 365 days of Pro. It never renews. Any tax is calculated at checkout.",
      "final": "All payments are final — see the Refund Policy",
      "returnHere": "You come back to this page afterwards."
    },
    "confirm": {
      "processingTitle": "Confirming your payment…",
      "processingDesc": "Waffo is letting us know about your payment. This usually takes under a minute; keep this page open.",
      "processingDescStay": "This usually takes under a minute. Everything on this page stays as it was.",
      "pendingTitle": "Payment received — still being processed",
      "pendingDesc": "Its confirmation has not reached us yet. Your plan switches on by itself as soon as it does, so there is no need to pay again. If nothing has changed in a few minutes, email {{email}} and we will sort it out.",
      "refresh": "Check again",
      "emailSupport": "Email support",
      "confirmedTitle": "Payment confirmed",
      "confirmedPlan": "Payment confirmed — you're on {{plan}}",
      "confirmedClubPlan": "Payment confirmed — {{plan}} is active for the club",
      "creditsAdded_one": "{{count}} credit has been added to your balance.",
      "creditsAdded_other": "{{count}} credits have been added to your balance.",
      "creditsAddedClub_one": "{{count}} credit has been added to the club's balance.",
      "creditsAddedClub_other": "{{count}} credits have been added to the club's balance.",
      "startScan": "Scan a scoresheet",
      "openWorkspace": "Open your workspace",
      "resume": "Everything you were working on is still here."
    }
  },
  "settings": {
    "title": "Settings",
    "subtitle": "Your account, your plan, and what happens to your data.",
    "account": "Account",
    "memberSince": "Member since",
    "password": "Password",
    "sendReset": "Email me a reset link",
    "resetSent": "Reset link sent",
    "resetSentDesc": "Check your inbox and follow the link to set a new password.",
    "resetFailed": "Could not send the reset email",
    "plan": "Plan and credits",
    "currentPlan": "Current plan",
    "upgrade": "See plans",
    "refresh": "Refresh",
    "referral": "Invite friends",
    "preferences": "Preferences",
    "analytics": "Analytics cookies",
    "analyticsAccepted": "Accepted",
    "analyticsDeclined": "Declined",
    "analyticsUnset": "Not chosen yet",
    "analyticsOn": "Analytics enabled",
    "analyticsOff": "Analytics turned off",
    "analyticsNote": "Google Analytics and Microsoft Clarity run only while this is on. Where prior consent is required — the EEA, the UK, Switzerland — they stay off until you accept. Details in the",
    "yourData": "Your data",
    "yourDataDesc": "Take your games with you, or ask us for everything we hold.",
    "exportGames": "Download all games ({{count}})",
    "exportEmpty": "No saved games to export yet",
    "exportDone": "Exported {{count}} games",
    "exportFailed": "Could not export your games. Please try again.",
    "dangerZone": "Account actions",
    "displayName": "Display name",
    "displayNamePlaceholder": "Your name",
    "nameSaved": "Name updated",
    "nameFailed": "Could not save the name",
    "passwordDesc": "Changing it needs your current password. Signed in with Apple or Google? Use the reset link instead.",
    "currentPassword": "Current password",
    "newPassword": "New password",
    "changePassword": "Change password",
    "passwordChanged": "Password changed",
    "passwordChangedDesc": "You have been signed out on every device. Sign in again with the new password.",
    "passwordFailed": "Could not change the password",
    "passwordMismatch": "The new passwords do not match",
    "passwordTooShort": "The new password must be at least 6 characters",
    "billingHistory": "Billing history",
    "billingHistoryDesc": "What we recorded against your account. Receipts are emailed by Waffo.",
    "payment": {
      "paid": "Paid",
      "canceled": "Canceled",
      "refunded": "Refunded"
    },
    "receiptNote": "Need a receipt or an invoice? Reply to the Waffo email, or write to support with the order id.",
    "analyticsDefaultOn": "On by default in your region",
    "analyticsDefaultOff": "Off until you accept",
    "passwordSignsOutNote": "Changing your password signs you out on every device, including this one.",
    "passwordConfirmTitle": "Change password and sign out everywhere?",
    "passwordConfirmDesc": "Every device signed in to this account, including this one, will be signed out. You will be taken to the sign-in page to continue with the new password.",
    "exportGamesAll": "Download all games",
    "requestData": "Request a copy of my data",
    "dataRights": "For any other data right, write to "
  },
  "status": {
    "title": "Service status",
    "subtitle": "Checked live from your browser when you open this page — not a number we typed in.",
    "website": "Website",
    "api": "Scanning and account API",
    "checking": "Checking",
    "up": "Reachable",
    "down": "Not reachable",
    "recheck": "Check again",
    "checkedAt": "Last checked {{time}}",
    "footnote": "The website figure is the response time of this page’s HTML (the browser’s own timing on first load, a fresh request on re-check); the API figure is a live /api/health request.",
    "failingHint": "A scan itself failing? See the ",
    "downTitle": "The API is not answering from here",
    "downBody": "Scanning and sign-in will fail until it comes back. If this persists for more than a few minutes, tell us at",
    "honestTitle": "What this page is, honestly",
    "honestBody": "We do not publish an uptime percentage, because we do not measure one. This page asks the API the same question your browser does when you scan, and shows the answer. A failure here could also be your own network or a blocked request."
  },
  "changelog": {
    "title": "Changelog",
    "subtitle": "What changed, and when.",
    "feedback": "Something you would like changed?"
  },
  "savedGame": {
    "title": "Saved game",
    "body": "You are looking at a game from your library. Editing and export are free — scanning it again would only spend credits on a game you already have.",
    "newScan": "Scan a new scoresheet",
    "backToLibrary": "Back to my games"
  },
  "tools": {
    "common": {
      "home": "ScanChess",
      "load": "Load",
      "clear": "Clear",
      "copy": "Copy",
      "copied": "Copied to clipboard",
      "copyFailed": "Could not copy — please select and copy manually",
      "download": "Download",
      "share": "Share link",
      "shareCopied": "Share link copied",
      "embed": "Embed",
      "embedCopied": "Embed code copied",
      "openInEditor": "Open in board editor",
      "openInViewer": "Open in PGN viewer",
      "analyzeLichess": "Analyze on Lichess",
      "flipBoard": "Flip board",
      "chooseFile": "Choose file",
      "dropHint": "or drop a file here",
      "pasteHint": "or paste the moves above",
      "loadSample": "Load example",
      "navStart": "First position",
      "navPrev": "Previous move",
      "navNext": "Next move",
      "navEnd": "Last position",
      "featuresTitle": "What this tool does",
      "faqTitle": "Frequently asked questions",
      "relatedTools": "More free tools",
      "relatedGuides": "Guides for this tool",
      "allTools": "All tools",
      "white": "White",
      "black": "Black",
      "fen": "FEN",
      "privacyNote": "Runs in your browser. Nothing is uploaded.",
      "openTool": "Open tool",
      "scanStripBoard": "Have a screenshot or photo of this position? Scan it and the board sets itself up.",
      "scanStripScoresheet": "Is the game on a paper scoresheet? Scan it into PGN instead of typing it.",
      "scanStripAction": "Scan an image",
      "scanStripSample": "Try the free example",
      "pasteFirst": "Paste a PGN above, choose a file, or load the example first.",
      "scanStripPrintable": "After the game, scan the filled-in sheet and get the moves as a PGN, with no retyping.",
      "pgnInputLabel": "PGN or move list",
      "exampleGame": "Example game",
      "pasteYourGame": "Paste your game",
      "changeGame": "Change game",
      "cancel": "Cancel"
    },
    "viewer": {
      "placeholder": "Paste PGN here — for example:\n\n[Event \"Casual game\"]\n[White \"Anderssen\"]\n[Black \"Kieseritzky\"]\n\n1. e4 e5 2. f4 exf4 3. Bc4 Qh4+ ...",
      "gameSelect": "Game",
      "gameCount": "{{count}} games in file",
      "movesTitle": "Moves",
      "headersTitle": "Game details",
      "noMoves": "No moves loaded yet. Paste a PGN above and press Load.",
      "parseFailed": "No moves could be read from that text.",
      "stoppedAt": "Stopped at {{label}} {{token}} — that move is not legal here. Open the validator for details.",
      "downloadPgn": "Download PGN",
      "currentFen": "Current position",
      "result": "Result",
      "openValidator": "Check in validator",
      "startPosition": "Start position"
    },
    "editor": {
      "startPosition": "Start position",
      "emptyBoard": "Empty board",
      "fenInput": "Paste a FEN to load it",
      "fenLoad": "Load FEN",
      "turn": "Side to move",
      "white": "White",
      "black": "Black",
      "castling": "Castling rights",
      "epSquare": "En passant square",
      "epNone": "None",
      "downloadPng": "Download PNG",
      "swapColours": "Swap colors",
      "tray": "Pieces",
      "trayHint": "Drag a piece onto the board, or select one and tap squares. Drag a piece off the board to remove it.",
      "eraser": "Eraser",
      "playable": "Position is legal and playable",
      "notPlayable": "Position is not playable",
      "status": {
        "checkmate": "Checkmate: {{side}} is mated.",
        "stalemate": "Stalemate: {{side}} has no legal move.",
        "check": "{{side}} to move, in check.",
        "normal": "{{side}} to move."
      },
      "problems": {
        "pawn-back-rank": "Pawns cannot stand on the first or eighth rank.",
        "white-king-count": "White must have exactly one king.",
        "black-king-count": "Black must have exactly one king.",
        "opponent-in-check": "The side not to move is in check.",
        "unplayable": "The position cannot be loaded by a chess engine."
      },
      "selectedPiece": "Placing: {{piece}}",
      "pieceNames": {
        "wK": "white king",
        "wQ": "white queen",
        "wR": "white rook",
        "wB": "white bishop",
        "wN": "white knight",
        "wP": "white pawn",
        "bK": "black king",
        "bQ": "black queen",
        "bR": "black rook",
        "bB": "black bishop",
        "bN": "black knight",
        "bP": "black pawn"
      },
      "pngFailed": "Could not render the image in this browser."
    },
    "validator": {
      "placeholder": "Paste a PGN or a plain move list, e.g.\n\n1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. 0-0 Be7 ...",
      "validate": "Validate",
      "okTitle": "All {{count}} moves are legal",
      "okBody": "The game plays out cleanly from the starting position. Result: {{result}}.",
      "errorTitle": "Illegal move at {{label}} {{token}}",
      "errorBody_one": "{{count}} move was legal before this one. The moves that are legal in that position are listed below.",
      "errorBody_other": "{{count}} moves were legal before this one. The moves that are legal in that position are listed below.",
      "warningsTitle": "Notation fixed automatically",
      "warningsBody": "{{count}} tokens were rewritten to standard SAN.",
      "legalMoves": "Legal moves here",
      "rewritten": "{{token}} → {{replacement}}",
      "trailing": "{{count}} moves after the error were not checked.",
      "unknownToken": "Ignored unrecognized token \"{{token}}\".",
      "cleanedTitle": "Cleaned PGN",
      "partialTitle": "Moves before the error",
      "partialNote": "Everything from the illegal move on is left out, and the result is set to “*”. Fix that move to keep the whole game.",
      "downloadPgn": "Download PGN",
      "empty": "Paste some moves first.",
      "openViewer": "Replay in viewer",
      "boardAtError": "Position where it stopped",
      "movesPlayed": "Moves played",
      "tokens": "Tokens read",
      "notPgn": "That doesn't look like a PGN or a move list. Paste moves such as 1. e4 e5 2. Nf3, or a PGN with [Event \"…\"] tags.",
      "didYouMean": "Did you mean <move>{{san}}</move>?",
      "replaceWith": "Replace {{token}} with {{san}}",
      "pickToReplace": "Pick one to put it in place of {{token}} and check again.",
      "foreignLetters": "These moves seem to be written with another language’s piece letters: {{language}} ({{letters}}). Translate them into English SAN, then check them again here.",
      "foreignLettersAction": "Translate into English SAN"
    },
    "analysis": {
      "summaryTitle": "Analysis summary",
      "white": "White",
      "black": "Black",
      "accuracy": "Accuracy",
      "jumpToFirst": "Go to the first one",
      "save": {
        "button": "Save to my games",
        "lead": "Keep this game with its analysis, and get practice from your mistakes.",
        "saved": "Saved to your games.",
        "savedWithAnalysis": "Saved to your games, with its analysis.",
        "open": "Open the game",
        "signup": "Sign up free to save this game and get practice from your mistakes"
      }
    },
    "rating": {
      "currentRating": "Your current rating",
      "kFactor": "Development coefficient",
      "kReasons": {
        "new-player": "first 30 games",
        "junior": "junior under 2300",
        "reached-2400": "has reached 2400",
        "standard": "standard",
        "manual": "set by hand"
      },
      "newPlayer": "Still completing my first 30 rated games",
      "junior": "Junior (until the end of the year I turn 18)",
      "reached2400": "My rating has reached 2400",
      "budgetNote": "K is reduced to {{k}} from {{base}} because K times the number of games may not exceed 700.",
      "minimumNote": "FIDE publishes ratings from {{minimum}} up; below that a player is shown as unrated.",
      "opponents": "Games",
      "addGame": "Add a game",
      "round": "#",
      "opponentRating": "Opponent",
      "opponentRatingFor": "Opponent rating in round {{round}}",
      "result": "Result",
      "expected": "Expected (D)",
      "removeGame": "Remove round {{round}}",
      "results": {
        "win": "1",
        "draw": "½",
        "loss": "0"
      },
      "noGames": "Add a game to see the rating change.",
      "newRating": "New rating",
      "scored": "Scored",
      "expectedTotal": "Expected total",
      "deltaSum": "Sum of score minus expectation",
      "rawChange": "Before rounding",
      "performance": "Performance rating",
      "howTitle": "How this is worked out",
      "howBody": "Each game's expected score comes from FIDE's table 8.1.2, not from the logistic curve, so the figures match the published rating list. The differences are added up and multiplied by K, then rounded to a whole number with a half going away from zero.",
      "capNote": "A rating difference wider than 400 points counts as 400 for players rated below {{threshold}}. From {{threshold}} up the real difference is used, a change that took effect on 1 October 2025.",
      "list": "Rating list",
      "lists": {
        "standard": "Standard",
        "rapid": "Rapid",
        "blitz": "Blitz"
      },
      "enterRating": "Enter your published rating to see the change.",
      "ratingClamped": "{{typed}} is outside the range FIDE ratings fall in, so the calculation uses {{used}}. Check the number.",
      "rowEmpty": "Enter the opponent's rating",
      "rowUnrated": "Below {{minimum}} is unrated: not counted",
      "rowGap600": "600+ apart with a player above 2600: not rated",
      "rowClamped": "Counted as {{used}}",
      "noRatedGames": "None of these games counts towards a rating: check the opponents' ratings.",
      "capNoteRapidBlitz": "On the rapid and blitz lists a rating difference wider than 400 points always counts as 400; the 2650 exception is standard-only. Since 1 December 2024 a game is not rated at all when the players are 600 or more points apart and either is rated above 2600."
    },
    "diagram": {
      "previewAlt": "The position as a board diagram",
      "startPosition": "Starting position",
      "sizeLabel": "Image size",
      "themeLabel": "Board colors",
      "themes": {
        "classic": "Classic brown",
        "green": "Tournament green",
        "blue": "Blue",
        "walnut": "Walnut",
        "slate": "Slate"
      },
      "coordinates": "Show coordinates",
      "downloadPng": "Download PNG",
      "downloadSvg": "Download SVG",
      "copySvg": "Copy SVG markup",
      "exportNote": "The diagram is drawn in your browser from vector pieces. No watermark, no attribution required."
    },
    "gif": {
      "previewAlt": "The game as an animated board",
      "firstFrameAlt": "The first frame of the GIF",
      "rendering": "Drawing frame {{done}} of {{total}}",
      "fileSize": "{{px}} × {{px}} px · {{size}} KB",
      "fromMove": "Start at",
      "toMove": "End at",
      "startPosition": "Starting position",
      "frameLimit": "Trimmed to {{max}} frames; narrow the range to animate a different part.",
      "sizeLabel": "Frame size",
      "speedLabel": "Speed",
      "speeds": {
        "slow": "Slow",
        "normal": "Normal",
        "fast": "Fast"
      },
      "highlight": "Tint the squares each move touched",
      "download": "Download GIF",
      "privacyNote": "Frames are drawn and the GIF is encoded on your device. Nothing is uploaded.",
      "failed": "The GIF could not be built. Try a smaller size or a shorter range.",
      "downloadFailed": "The GIF could not be saved. Try Download again, or save the preview image directly.",
      "rangeReversed": "\"Start at\" comes after \"End at\". Swap them to build the GIF.",
      "play": "Play",
      "pause": "Pause",
      "scrub": "Position in the animation",
      "scanPrompt": "Game on a paper scoresheet? Scan it into PGN"
    },
    "print": {
      "columnsLabel": "Columns",
      "columns": "{{count}} columns",
      "diagramsLabel": "Diagrams",
      "diagramModes": {
        "none": "No diagrams",
        "final": "Final position only",
        "every10": "Every 10 moves",
        "every20": "Every 20 moves"
      },
      "paperLabel": "Paper",
      "letter": "US Letter",
      "showTags": "Include the PGN tags",
      "printButton": "Print / Save as PDF",
      "saveHint": "In the print dialog, set the destination to Save as PDF.",
      "afterMove": "After {{move}} {{san}}"
    },
    "hub": {
      "title": "Free chess tools",
      "trustNoAccount": "No account needed",
      "faq": {
        "q1": "Are these chess tools completely free with no sign-up required?",
        "a1": "Yes, free with no usage limits. Every tool works without an account. A free account is needed only for optional extras: reading a photo of a real board in the best move finder (screenshots are read in your browser and need no account), the AI explanation of a position (one a day free, then 1 credit), saving a position to your account, and Save to my games in game analysis, which keeps the game and its analysis in your account.",
        "q2": "Does ScanChess upload my PGN files or custom board positions to a server?",
        "a2": "No. PGN parsing, move validation, engine analysis and diagram rendering all happen inside your browser. Something is sent only when you ask for it: a photo the best move finder cannot read on your device, the position and engine lines behind an AI explanation, a position you save to your account, a game and its analysis you save to your games, and the Chess.com or Lichess username Chess Wrapped looks up on those sites.",
        "q3": "How do I convert a physical, handwritten paper scoresheet into digital PGN?",
        "a3": "Photograph the scoresheet and upload it to the ScanChess scanner. It reads the handwriting, replays every move against the rules, marks anything it is unsure of for you to check, and gives you a PGN to export. A scoresheet scan costs 2 credits; new accounts get 10 free.",
        "q4": "Can I use these tools on my phone or tablet?",
        "a4": "Yes. Every tool works in the browser on phones and tablets as well as on a computer."
      },
      "lead": "Find the best move, analyze a game, convert PGN and FEN, and print scoresheets, all in your browser."
    },
    "printable": {
      "selectLayout": "1. Select a scoresheet layout",
      "selectLayoutDesc": "Formats are precision-engineered for A4 & US Letter paper, ready for physical printing or \"Save as PDF\".",
      "printButton": "Print scoresheet (save as PDF)",
      "signInToPrint": "Sign in to print (save as PDF)",
      "clearAll": "Clear all fields",
      "signInRequiredTitle": "Sign in Required",
      "signInRequiredDesc": "Please sign in to print or export official scoresheets.",
      "layouts": {
        "standard60Badge": "FIDE Standard",
        "standard60Title": "Standard 60 Moves",
        "standard60Desc": "2 columns, official layout",
        "classical80Badge": "Classical",
        "classical80Title": "Classical 80 Moves",
        "classical80Desc": "Extended match length",
        "junior40Badge": "Kids & Beginners",
        "junior40Title": "Junior 40 Moves",
        "junior40Desc": "Large row spacing for easy writing",
        "rapid2in1Badge": "Rapid 2-in-1",
        "rapid2in1Title": "Two 30-move sheets",
        "rapid2in1Desc": "2 games on 1 page with cut-line"
      },
      "prefillTitle": "2. Optional: Pre-fill Tournament Info (Prints on the sheet)",
      "prefillHint": "Leave empty for players to write",
      "club": "Club or organizer (optional)",
      "clubPlaceholder": "Printed under the title, e.g. Riverside Chess Club",
      "paper": "Paper",
      "event": "Event name (optional)",
      "eventPlaceholder": "e.g. Club Open",
      "date": "Date (optional)",
      "datePlaceholder": "e.g. 2026-09-08",
      "round": "Round (optional)",
      "table": "Table # (optional)",
      "whitePlayer": "White player (optional)",
      "blackPlayer": "Black player (optional)",
      "fieldOptional": "Optional",
      "printTip": "Tip: In browser print dialog, choose Destination: \"Save as PDF\" to export digital PDF. Keep \"Background graphics\" checked.",
      "digitizeCta": "Have a completed sheet? Digitize now →",
      "sheet": {
        "title": "Chess Scoresheet",
        "subtitle": "ScanChess.com · FIDE Standard Notation Sheet",
        "badgeStandard": "60 Moves · Match",
        "badgeClassical": "80 Moves · Classical",
        "badgeJunior": "40 Moves · Junior Grid",
        "eventLabel": "Event:",
        "roundLabel": "Round:",
        "tableLabel": "Table:",
        "dateLabel": "Date:",
        "whiteLabel": "White:",
        "blackLabel": "Black:",
        "ratingLabel": "Rating:",
        "resultLabel": "Result:",
        "whiteSignLabel": "White Sign:",
        "blackSignLabel": "Black Sign:",
        "signLabel": "Sign:",
        "signLine": "White ________ Black ________",
        "white": "White",
        "black": "Black",
        "game1": "Game 1 · 30 Moves",
        "game2": "Game 2 · 30 Moves",
        "cutHere": "✂ Cut Here",
        "digitize": "⚡ Digitize this scoresheet in seconds with AI:",
        "digitizeBody": "Photograph this sheet with your smartphone camera. ScanChess converts handwriting into digital PGN & FEN for Lichess and Chess.com.",
        "footerNote": "Free Scoresheet Template",
        "signInToPrint": "Please sign in to scanchess.com to print or save official scoresheets",
        "qrLabel": "QR code: opens the ScanChess scoresheet scanner"
      },
      "previewCaption": "Print preview. Moves are written by hand on the printed sheet; the optional fields above are printed onto it."
    },
    "board": {
      "promoteTo": "Promote to",
      "undo": "Take back the last move",
      "reset": "Back to the starting position",
      "whiteToMove": "White to move",
      "blackToMove": "Black to move",
      "inputLabel": "Start from a FEN or PGN",
      "inputPlaceholder": "Paste a FEN or a PGN",
      "inputEmpty": "Paste a FEN or a PGN first.",
      "inputInvalid": "That is neither a FEN nor a PGN with a legal first move.",
      "copyFen": "Copy FEN",
      "copyPgn": "Copy PGN",
      "engineHint": "The engine switches on at your first move.",
      "movesTitle": "Moves",
      "noMoves": "Move a piece to start. Moves appear here.",
      "findBestMove": "Find the best move",
      "navGroup": "Move through the line",
      "editGroup": "Change the board",
      "linkFenError": "The FEN in this link could not be set up: {{reason}} The board shows the starting position instead.",
      "linkPgnError": "The game in this link could not be read: {{reason}} The board shows the starting position instead.",
      "fenInvalid": "That FEN could not be set up: {{reason}}",
      "fenError": {
        "fields": "a FEN needs the piece placement (eight ranks separated by /) and the side to move, w or b.",
        "ranks": "the placement has {{ranks}} ranks; it needs 8, separated by /.",
        "character": "“{{detail}}” is not a piece letter (KQRBNP, kqrbnp) or a digit from 1 to 8.",
        "rankLength": "the rank “{{detail}}” does not add up to 8 squares.",
        "side": "the side to move must be w or b, not “{{detail}}”.",
        "kings": "each side needs exactly one king.",
        "pawnBackRank": "a pawn cannot stand on the first or eighth rank.",
        "opponentInCheck": "the side that has just moved is in check, which cannot happen in a game.",
        "other": "it is not a legal position."
      },
      "moveInputLabel": "Type a move",
      "moveInputHint": "Use algebraic notation, such as Nf3, exd5 or O-O, and press Enter.",
      "moveInputPlaceholder": "Nf3",
      "playMove": "Play",
      "moveInputEmpty": "Type a move first, for example Nf3.",
      "moveInputIllegal": "{{move}} is not a legal move in this position.",
      "boardLabel": "Chess board. {{turn}}. {{pieces}}",
      "pieceOn": "{{piece}} on {{square}}",
      "lastMove": "Last move: {{move}}",
      "startPosition": "Starting position",
      "evaluation": "Evaluation: {{score}}"
    },
    "bestMove": {
      "answerTitle": "Best move",
      "sideToMove": "Side to move",
      "whiteToMove": "White to move",
      "blackToMove": "Black to move",
      "find": "Find the best move",
      "engineNote": "Stockfish 18 runs in your browser. The first search downloads the engine, about seven megabytes.",
      "playIt": "Play it on the board",
      "inputTitle": "Position",
      "uploadTitle": "Upload a screenshot or photo",
      "uploadHint": "Drop, paste or choose a picture of the position. Screenshots are read right here in your browser, free and without an account.",
      "reading": "Reading the position…",
      "readDone": "Position read. Check the board and the side to move.",
      "signInToRead": "Photos of real boards, and pictures your browser cannot read with confidence, go to our server reader. Sign in to use it; it is free and uses no credits.",
      "verifyToRead": "Photos of real boards, and pictures your browser cannot read with confidence, go to our server reader. Verify your email address to use it for free.",
      "signIn": "Sign in free",
      "readFailedTitle": "Could not read the position",
      "readFailed": "Something went wrong reading that image. Try again, or paste a FEN.",
      "readNoBoard": "No chessboard was found in that image. Try a tighter crop.",
      "readLimit": "The image-reading limit for the past 24 hours has been reached. Try again later, or paste a FEN to keep analyzing without a limit.",
      "readVerify": "Verify your email address first, then try again.",
      "fenLabel": "Or paste a FEN",
      "sideImpossible": "That side cannot be to move here: the other king would be in check.",
      "editPosition": "Edit position",
      "openAnalysisBoard": "Analysis board",
      "uncertain": "Check these squares: {{squares}}",
      "readDoneLocal": "Read in your browser; nothing was uploaded. Check the board and the side to move.",
      "localFailedTitle": "Your browser could not read this picture",
      "rotate": "Turn position around",
      "rotateImpossible": "Turned around, this would not be a legal position.",
      "readDoneLocalTurn": "Read in your browser; nothing was uploaded. The highlighted last move set whose turn it is; check the board.",
      "fenPlaceholder": "Paste a FEN, e.g. from Lichess or Chess.com",
      "scoreWhiteView": "+ is good for White",
      "checkmate": "Checkmate: {{side}} has won. There is no move left to find.",
      "stalemate": "Stalemate: {{side}} has no legal move, so the game is a draw.",
      "mateIn_one": "{{side}} mates in {{count}} move",
      "mateIn_other": "{{side}} mates in {{count}} moves"
    },
    "wrapped": {
      "form": {
        "platform": "Platform",
        "username": "Username",
        "placeholder": "e.g. {{name}}",
        "year": "Year",
        "yearSoFar": "{{year}} (so far)",
        "submit": "Build my Wrapped",
        "privacy": "Works for any public Chess.com or Lichess account. No sign-in, no password.",
        "examples": "Try:",
        "exampleAria": "Build the Wrapped for {{name}}"
      },
      "progress": {
        "profile": "Looking up {{name}} on {{site}}…",
        "archives": "Finding your {{site}} game archives…",
        "month": "Loaded {{month}} · {{done}} of {{total}} months · {{games}} games",
        "stream_one": "Streaming games from Lichess… {{games}} so far",
        "stream_other": "Streaming games from Lichess… {{games}} so far",
        "lichessHint": "Lichess sends about 20 games a second, so a year with thousands of games takes several minutes.",
        "stopEarly": "Show results now",
        "streamOf_one": "Streaming games from Lichess… {{games}} of about {{expected}}",
        "streamOf_other": "Streaming games from Lichess… {{games}} of about {{expected}}",
        "lessThanMinute": "Less than a minute left",
        "minutesLeft_one": "About {{count}} minute left",
        "minutesLeft_other": "About {{count}} minutes left"
      },
      "errors": {
        "invalidUsername": "That doesn't look like a username. Use letters, numbers, _ or -.",
        "emptyUsername": "Type a Chess.com or Lichess username first.",
        "notFound": "We couldn't find \"{{name}}\" on {{site}}. Check the spelling, or try the other platform.",
        "rateLimited": "{{site}} asked us to slow down. Try again in a minute.",
        "network": "We couldn't reach {{site}}. Check your connection and try again.",
        "aborted": "Stopped.",
        "tryOther": "Try {{site}} instead",
        "refused": "{{site}} found “{{name}}” but would not send the games just now. Try again in a few minutes."
      },
      "empty": {
        "title": "No games for {{name}} in {{year}}",
        "body": "We found the account, but {{site}} has no finished games for it in that year.",
        "tryYear": "See {{year}} instead"
      },
      "small_one": "Only {{count}} game in {{year}} so far: not enough for the full story yet. Play a few more and come back.",
      "small_other": "Only {{count}} games in {{year}} so far: not enough for the full story yet. Play a few more and come back.",
      "partial_one": "Stopped early: this covers your {{games}} most recent game of the year.",
      "partial_other": "Stopped early: this covers your {{games}} most recent games of the year.",
      "hero": {
        "eyebrow": "{{site}} · {{year}} Wrapped"
      },
      "ready": "{{name}}’s {{year}} Chess Wrapped is ready.",
      "archetype": {
        "label": "Your chess personality",
        "also": "Also: {{list}}",
        "speedDemon": {
          "name": "Speed Demon",
          "tagline": "You think fast and premove faster.",
          "why": "{{value}}% of your games were bullet."
        },
        "giantSlayer": {
          "name": "Giant Slayer",
          "tagline": "Higher-rated opponents are just bigger targets.",
          "why": "{{value}} rated wins against players 200+ points above you."
        },
        "wall": {
          "name": "The Wall",
          "tagline": "Hard to beat, harder to break.",
          "why": "{{value}}% of your games ended in a draw."
        },
        "loyalist": {
          "name": "Opening Loyalist",
          "tagline": "You found your opening and you're not letting go.",
          "why": "The {{detail}} in {{value}}% of your games with that color."
        },
        "deepThinker": {
          "name": "Deep Thinker",
          "tagline": "You take your time, and it shows.",
          "why": "{{value}}% of your games were rapid, classical or daily."
        },
        "grinder": {
          "name": "The Grinder",
          "tagline": "One more game. Then another one.",
          "why": "{{value}} games in a single year."
        },
        "allRounder": {
          "name": "The All-Rounder",
          "tagline": "No single habit defines your chess.",
          "why_one": "A balanced year across {{value}} time control.",
          "why_other": "A balanced year across {{value}} time controls."
        }
      },
      "stories": {
        "games": {
          "eyebrow": "Games played",
          "line_one": "Spread across {{days}} day at the board.",
          "line_other": "Spread across {{days}} days at the board."
        },
        "winRate": {
          "eyebrow": "Win rate",
          "line": "{{wins}} wins · {{draws}} draws · {{losses}} losses"
        },
        "rating": {
          "eyebrow": "{{timeClass}} rating",
          "line": "{{start}} → {{end}}, peaking at {{peak}}."
        },
        "bestWin": {
          "eyebrow": "Best win",
          "eyebrowRating": "Best win · opponent's rating",
          "line": "Beat {{name}} in {{timeClass}} on {{date}}.",
          "gap": "{{gap}} points above your rating at the time.",
          "open": "Open the game"
        },
        "streak": {
          "eyebrow": "Longest win streak",
          "line": "Wins in a row, from {{from}} to {{to}}."
        },
        "opening": {
          "white": "Favorite opening as White",
          "black": "Favorite opening as Black",
          "line_one": "{{games}} game, {{share}} of your games with this color. You scored {{score}}.",
          "line_other": "{{games}} games, {{share}} of your games with this color. You scored {{score}}.",
          "then": "Then: {{list}}"
        },
        "firstMove": {
          "eyebrow": "Favorite first move",
          "line": "Your choice in {{share}} of your games as White."
        },
        "month": {
          "eyebrow": "Busiest month",
          "line_one": "{{games}} game that month.",
          "line_other": "{{games}} games that month."
        },
        "weekday": {
          "eyebrow": "Favorite day to play",
          "line": "Most often around {{hour}}, your time.",
          "day_one": "Biggest day: {{date}}, with {{games}} game.",
          "day_other": "Biggest day: {{date}}, with {{games}} games."
        },
        "opponent": {
          "eyebrow": "Most-played opponent",
          "line": "{{games}}: {{wins}}, {{draws}}, {{losses}}.",
          "unique_one": "Out of {{opponents}} different opponent this year.",
          "unique_other": "Out of {{opponents}} different opponents this year."
        },
        "time": {
          "eyebrow": "Time at the board",
          "value_one": "≈{{hours}} hour",
          "value_other": "≈{{hours}} hours",
          "days": "That's about {{days}} full days of live chess.",
          "perDay": "About {{minutes}} minutes on each day you played."
        },
        "accuracy": {
          "eyebrow": "Average accuracy",
          "line_one": "Across {{games}} game the site analyzed.",
          "line_other": "Across {{games}} games the site analyzed."
        }
      },
      "timeClass": {
        "bullet": "Bullet",
        "blitz": "Blitz",
        "rapid": "Rapid",
        "classical": "Classical",
        "daily": "Daily"
      },
      "timeClasses": {
        "title": "By time control",
        "timeClass": "Time control",
        "games": "Games",
        "record": "W / D / L",
        "rating": "Rating (start → end, peak)",
        "wdl": "{{wins}} / {{draws}} / {{losses}}",
        "ratingLine": "{{start}} → {{end}} ({{peak}})",
        "variants_one": "Includes {{games}} variant game (Chess960 and the like). It counts towards your record, not your ratings or openings.",
        "variants_other": "Includes {{games}} variant games (Chess960 and the like). They count towards your record, not your ratings or openings."
      },
      "counts": {
        "games_one": "{{n}} game",
        "games_other": "{{n}} games",
        "wins_one": "{{n}} win",
        "wins_other": "{{n}} wins",
        "draws_one": "{{n}} draw",
        "draws_other": "{{n}} draws",
        "losses_one": "{{n}} loss",
        "losses_other": "{{n}} losses"
      },
      "card": {
        "eyebrow": "Chess Wrapped",
        "eyebrowSoFar": "Chess Wrapped · so far",
        "games": "Games",
        "winRate": "Win rate",
        "wdl": "{{wins}}W · {{draws}}D · {{losses}}L",
        "bestWin": "Best win",
        "opponentRating": "{{name}}'s rating",
        "streak": "Win streak",
        "peak": "Peak rating",
        "openings": "Favorite openings",
        "asWhite": "White: {{name}}",
        "asBlack": "Black: {{name}}",
        "activeDays_one": "on {{days}} day",
        "activeDays_other": "across {{days}} days",
        "streakSub": "wins in a row",
        "peakIn": "{{timeClass}} peak",
        "ratingRange": "{{start}} → {{end}} this year",
        "hours": "Hours played",
        "hoursSub": "in live games",
        "months": "Games by month"
      },
      "share": {
        "heading": "Share your year",
        "body": "Download the image for Instagram, X or your club chat, or copy a link that rebuilds this page for anyone who opens it.",
        "download": "Download PNG",
        "copyLink": "Copy link",
        "native": "Share…",
        "failed": "Your browser couldn't draw the image. The link still works.",
        "title": "My Chess Wrapped",
        "text": "My {{year}} in chess: {{games}} games. {{archetype}}",
        "previewAlt": "Chess Wrapped {{year}} summary image for {{name}}",
        "formatLabel": "Format",
        "saveImage": "Save image",
        "downloadShort": "Download",
        "preparing": "Preparing HD image…",
        "saved": "Saved to downloads",
        "shared": "Shared",
        "linkCopied": "Link copied",
        "meta": "PNG · {{width}} × {{height}} px",
        "formats": {
          "story": {
            "name": "Story",
            "hint": "Instagram, TikTok"
          },
          "post": {
            "name": "Post",
            "hint": "Instagram feed"
          },
          "square": {
            "name": "Square",
            "hint": "WhatsApp, X"
          }
        },
        "tapAgain": "Ready — tap to share"
      },
      "crossSell": {
        "text": "Played over-the-board tournaments this year? Scan your scoresheets to add those games too.",
        "cta": "Scan a scoresheet"
      },
      "disclaimer": "Not affiliated with Chess.com or Lichess. Data comes from their public APIs straight to your browser; nothing is stored on our servers.",
      "partialMark_one": "Partial · {{games}} game",
      "partialMark_other": "Partial · {{games}} games",
      "partialNoArchetype_one": "No chess personality from part of a year: it is worked out from every game, and this covers only your most recent one.",
      "partialNoArchetype_other": "No chess personality from part of a year: it is worked out from every game, and this covers only your {{games}} most recent."
    },
    "convert": {
      "linksLabel": "Related chess tools",
      "linkFenToPgn": "FEN to PGN",
      "linkPgnToFen": "PGN to FEN",
      "linkBoardImage": "Board image to FEN",
      "linkViewer": "PGN viewer",
      "linkValidator": "PGN validator",
      "pgnPlaceholder": "Paste a PGN or a move list, for example 1. e4 e5 2. Nf3",
      "fenPlaceholder": "Paste a FEN, for example rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1",
      "start": "Start",
      "afterMove": "After {{move}}",
      "emptyPgn": "Paste a PGN or a move list.",
      "notPgn": "That does not look like a PGN or a move list.",
      "badFenHeader": "The FEN header in this PGN is not a legal position: {{reason}}",
      "badFen": "That FEN cannot be used: {{reason}}",
      "emptyFen": "Paste a FEN.",
      "fenReady": "Position accepted. The PGN below starts here. Play on the board to add moves.",
      "placementOnly": "Only the piece placement was given, so White is assumed to move, with no castling or en passant rights.",
      "stopped": "Stopped at {{label}} {{token}}. Every FEN before that move is still valid.",
      "copyFen": "Copy FEN",
      "copyAll": "Copy every FEN",
      "downloadAll": "Download FEN list",
      "downloadPgn": "Download PGN",
      "copyPgn": "Copy PGN",
      "plyCount": "{{count}} positions, including the start",
      "everyPly": "FEN after every ply",
      "openFenToPgn": "Open in FEN to PGN",
      "openPgnToFen": "Open in PGN to FEN",
      "pgnOutput": "PGN",
      "addMoves": "Drag a piece to add the moves that follow. They are written into the PGN.",
      "nameOptional": "Optional"
    },
    "links": {
      "boardEditor": "Board editor",
      "fenToImage": "FEN to image",
      "flipFen": "Flip or mirror a FEN",
      "fenValidator": "FEN validator",
      "whatIsFen": "What is FEN?",
      "scanNotation": "Scan chess notation",
      "scoresheetScanner": "Scoresheet scanner",
      "notationExplained": "Chess notation explained",
      "howLong": "How long is a chess game?",
      "printableScoresheets": "Printable scoresheets",
      "ratingCalculator": "FIDE rating calculator"
    },
    "fenValidator": {
      "validate": "Check FEN",
      "validTitle": "This FEN is valid",
      "invalidTitle": "This FEN is not valid. Problems found: {{n}}",
      "invalidBody": "Each problem below says what to change.",
      "status": {
        "normal": "{{side}} to move.",
        "check": "{{side}} to move, and in check.",
        "checkmate": "{{side}} to move, and checkmated.",
        "stalemate": "{{side}} to move, and stalemated: the game is a draw."
      },
      "fixLabel": "Fix:",
      "repairedTitle": "Corrected FEN",
      "repairedBody": "The same position with the castling, en passant and move counter fields fixed. Check that it is what you meant.",
      "useRepaired": "Check this FEN",
      "fullFen": "Full FEN",
      "openImage": "Make an image",
      "openFlip": "Flip or mirror",
      "issue": {
        "tooManyFields": "The FEN has {{n}} fields separated by spaces; it has at most 6.",
        "missingFields": "The last {{n}} of the six FEN fields are missing.",
        "whiteKings": "White kings on the board: {{n}}. There must be exactly one.",
        "blackKings": "Black kings on the board: {{n}}. There must be exactly one.",
        "whitePawns": "White pawns on the board: {{n}}. A side has at most 8.",
        "blackPawns": "Black pawns on the board: {{n}}. A side has at most 8.",
        "whitePieces": "White pieces and pawns on the board: {{n}}. A side has at most 16.",
        "blackPieces": "Black pieces and pawns on the board: {{n}}. A side has at most 16.",
        "whitePromotions": "White has more queens, rooks, bishops or knights than its missing pawns could have promoted to.",
        "blackPromotions": "Black has more queens, rooks, bishops or knights than its missing pawns could have promoted to.",
        "castlingSyntax": "The castling field “{{detail}}” is not valid: it is - or some of K, Q, k and q, each at most once.",
        "castlingRight": "The castling right {{detail}} does not match the board: its king and rook are not both on their starting squares.",
        "enPassantSyntax": "The en passant field “{{detail}}” is neither - nor a square on the third or sixth rank.",
        "enPassantRank": "The en passant square {{detail}} is on the wrong rank for the side to move.",
        "enPassantPawn": "The en passant square {{detail}} does not follow a two-square pawn move: that pawn is not in front of it, or the squares it crossed are not empty.",
        "halfmove": "The halfmove clock “{{detail}}” is not a whole number of 0 or more.",
        "fullmove": "The move number “{{detail}}” is not a whole number of 1 or more."
      },
      "fix": {
        "fields": "Write the placement, a space, then w or b, for example rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w.",
        "ranks": "Write exactly eight ranks, from the eighth to the first, separated by /.",
        "character": "Use K Q R B N P for White, k q r b n p for Black, and the digits 1 to 8 for empty squares.",
        "rankLength": "The pieces plus the digits in each rank must add up to 8. Count the empty squares again.",
        "side": "Write w if White is to move, b if Black is.",
        "tooManyFields": "Remove the extra text after the move number.",
        "missingFields": "Nothing to fix: no castling rights, no en passant square and move 1 are assumed. Add the fields if they matter.",
        "whiteKings": "Leave exactly one K on the board.",
        "blackKings": "Leave exactly one k on the board.",
        "pawnBackRank": "Move or remove the pawn on {{detail}}. A pawn that reaches the last rank is promoted.",
        "whitePawns": "Remove White pawns until 8 or fewer are left.",
        "blackPawns": "Remove Black pawns until 8 or fewer are left.",
        "whitePieces": "Remove White pieces until 16 or fewer are left.",
        "blackPieces": "Remove Black pieces until 16 or fewer are left.",
        "whitePromotions": "Remove the extra pieces, or some White pawns: each piece beyond the starting set needs a pawn that promoted.",
        "blackPromotions": "Remove the extra pieces, or some Black pawns: each piece beyond the starting set needs a pawn that promoted.",
        "castlingSyntax": "Write - for no castling, otherwise only K, Q, k and q, in that order.",
        "castlingRight": "Remove {{detail}} from the castling field.",
        "enPassantSyntax": "Write -, or the square behind a pawn that has just moved two squares, such as e3 or d6.",
        "enPassantRank": "With White to move the square is on the sixth rank, with Black to move on the third. Otherwise write -.",
        "enPassantPawn": "Write - in the en passant field.",
        "halfmove": "Write 0 if you do not know it.",
        "fullmove": "Write 1 if you do not know it.",
        "opponentInCheck": "Change the side to move, or move the piece that gives check: the side that is not to move cannot be in check.",
        "other": "Set the position up in the board editor and copy the FEN it writes."
      }
    },
    "flipFen": {
      "inputLabel": "FEN to flip",
      "opsTitle": "Transform",
      "rotate": {
        "label": "Rotate 180°",
        "hint": "The board turned around, as seen from Black's side. Colors kept."
      },
      "mirror": {
        "label": "Mirror a↔h",
        "hint": "The a-file and the h-file swapped. Colors kept."
      },
      "swapColors": {
        "label": "Swap colors",
        "hint": "Ranks mirrored and every piece given the other color. The other side is to move."
      },
      "reset": "Reset",
      "resultLabel": "New FEN",
      "droppedCastling": "Castling rights dropped: {{rights}}.",
      "droppedEnPassant": "En passant square {{square}} dropped.",
      "notLegal": "Other tools may refuse the new position. {{reason}}",
      "downloadPng": "Download PNG",
      "viewOnlyNote": "Flip board only turns the diagram. It does not change the FEN.",
      "openValidator": "Check in the FEN validator"
    },
    "notation": {
      "directionLabel": "Direction",
      "toEnglish": "To English",
      "fromEnglish": "From English",
      "languageLabel": "Letters the moves are written with",
      "auto": "Detect automatically",
      "targetLabel": "Translate into",
      "inputLabel": "Moves to translate",
      "inputEnglishLabel": "Moves in English SAN",
      "placeholder": "Paste moves, for example 1. e4 e5 2. Sf3 Sc6 3. Lb5",
      "placeholderEnglish": "Paste moves, for example 1. e4 e5 2. Nf3 Nc6 3. Bb5",
      "startFenLabel": "Start position (optional FEN)",
      "startFenPlaceholder": "Standard starting position",
      "empty": "Paste moves to translate.",
      "noMoves": "No moves found in that text.",
      "detected": "Detected: {{language}} ({{letters}}).",
      "readAs": "Read as {{language}} ({{letters}}).",
      "movesRead": "Moves read: {{read}} of {{total}}.",
      "stopped": "Stopped at {{label}} {{token}}: it is not a legal move in that position.",
      "stoppedHint": "Check the move on the scoresheet, or pick the language by hand.",
      "stoppedHintEnglish": "Check that move, then translate again.",
      "sanTitle": "English SAN",
      "copyMoves": "Copy moves",
      "openValidator": "Check in the PGN validator",
      "translatedTitle": "Moves in {{language}}",
      "languages": {
        "en": "English",
        "de": "German",
        "es": "Spanish",
        "fr": "French",
        "it": "Italian",
        "pt": "Portuguese",
        "nl": "Dutch",
        "ru": "Russian",
        "pl": "Polish",
        "cs": "Czech"
      }
    },
    "timeControl": {
      "inputLabel": "Time control",
      "placeholder": "For example 90+30, 15|10 or 90/40+30+30",
      "movesLabel": "Moves in the game",
      "presetsLabel": "Common time controls",
      "formatsHint": "Minutes first, then seconds added per move: 15+10 and 15|10 are the same. 90/40+30+30 is 90 minutes for 40 moves, then 30 minutes, with 30 seconds a move. Add d5 for a 5-second delay.",
      "readAs": "Read as: {{text}}.",
      "period": {
        "first": "{{minutes}} min for the first {{moves}} moves",
        "whole": "{{minutes}} min each for the whole game",
        "next": "then {{minutes}} min for the next {{moves}} moves",
        "rest": "then {{minutes}} min for the rest of the game",
        "increment": "{{seconds}} s added per move from move 1",
        "delay": "{{seconds}} s delay per move",
        "separator": ", "
      },
      "error": {
        "empty": "Type a time control, such as 90+30.",
        "invalid": "That does not read as a time control. Try 90+30, 15|10 or 90/40+30+30.",
        "noFinalPeriod": "Add the time for the rest of the game after the move control, for example 90/40+30.",
        "tooLong": "That is longer than any chess clock is set to. Check the numbers."
      },
      "waiting": "The result appears here once the time control can be read.",
      "maxTitle": "Longest game, {{moves}} moves",
      "perPlayer": "Up to {{time}} on each player's clock.",
      "typicalTitle": "Typical game",
      "about": "≈ {{time}}",
      "typicalBody": "A median over-the-board game lasts {{moves}} moves and uses about 85% of the time those moves allow.",
      "fideTitle": "FIDE",
      "fideBody": "{{minutes}} min: base time + 60 × increment",
      "fide": {
        "blitz": "Blitz",
        "rapid": "Rapid",
        "standard": "Standard (classical)"
      },
      "lichess": {
        "ultraBullet": "UltraBullet",
        "bullet": "Bullet",
        "blitz": "Blitz",
        "rapid": "Rapid",
        "classical": "Classical"
      },
      "chesscom": {
        "bullet": "Bullet",
        "blitz": "Blitz",
        "rapid": "Rapid"
      },
      "estimateBody": "Estimate: {{time}}",
      "duration": {
        "hm": "{{h}} h {{m}} min",
        "h": "{{h}} h",
        "m": "{{m}} min",
        "ms": "{{m}} min {{s}} s",
        "s": "{{s}} s"
      },
      "onlineNote": "Lichess and Chess.com estimate a game as base time + 40 × increment. Chess.com: bullet under 3 min, blitz 3 to under 10, rapid 10 or more (Chess.com Help Center, “Why are there different ratings in live chess?”). Lichess: bullet under 3 min, blitz under 8, rapid under 25, classical 25 or more.",
      "movesError": "Enter a number of moves from 1 to 300. Until then the longest game is worked out for {{moves}} moves.",
      "shareFallback": "The browser blocked copying. The link below is selected — copy it from there."
    },
    "splitter": {
      "modeLabel": "What to do",
      "mode": {
        "split": "Split one file",
        "merge": "Merge several files"
      },
      "sourceLabel": "PGN file with several games",
      "placeholder": "Paste one or more games in PGN, or choose a .pgn file",
      "gameCount": "Games found: {{count}}",
      "downloadAll": "Download each game",
      "downloadZip": "Download as .zip",
      "downloadAllHint": "Each game is saved as its own .pgn file. Your browser may ask once whether this page may save several files.",
      "empty": "No games yet. Paste a PGN, choose a file, or load the example.",
      "event": "Event",
      "date": "Date",
      "result": "Result",
      "moves": "Moves",
      "actions": "Actions",
      "listLimited": "Showing the first {{shown}} of {{count}} games. The .zip still contains every game.",
      "mergeSources": "Files to merge, in order",
      "addFiles": "Add .pgn files",
      "pasteLabel": "Or paste games to add",
      "addPasted": "Add pasted games",
      "pastedName": "Pasted text {{n}}",
      "remove": "Remove",
      "dedupe": "Leave out a game that is already in the file",
      "mergedCount": "Games in the merged file: {{count}}",
      "duplicatesRemoved": "Duplicates left out: {{count}}",
      "mergedLabel": "Merged PGN",
      "mergeEmpty": "Add two or more files, or paste games, and the merged PGN appears here.",
      "notPgn": "That doesn't look like a PGN or a move list. Paste moves such as 1. e4 e5 2. Nf3, or a PGN with [Event \"…\"] tags.",
      "downloadAllLimit": "That's {{count}} games. Browsers block a long run of separate downloads, so these are packed into one .zip."
    },
    "opening": {
      "inputLabel": "PGN, move list or FEN",
      "placeholder": "Paste a game (1. e4 c5 2. Nf3 …) or a FEN",
      "empty": "Paste a game, a move list or a FEN.",
      "notInput": "That does not look like a PGN, a move list or a FEN.",
      "badFen": "That FEN is not a legal position.",
      "stopped": "Replay stopped at {{label}} {{token}}, which is not a legal move. The opening below is the one reached before it.",
      "pathTitle": "Named positions on the way",
      "resultKicker": "Opening",
      "deepest": "Deepest named position: after {{move}} (ply {{ply}} of {{total}}).",
      "fenMatch": "This exact position is a named opening position.",
      "copyName": "Copy name and ECO",
      "openAnalysis": "Open in analysis board",
      "openGameAnalysis": "Analyze the game",
      "noMatch": "No named opening position was reached. The first move may be rare, or the game starts from a set-up position.",
      "noMatchFen": "This position is not one of the named opening positions. Paste the moves that led to it to find the opening the game left.",
      "waiting": "The opening name and ECO code appear here."
    },
    "descriptive": {
      "inputLabel": "Moves in descriptive notation",
      "placeholder": "1. P-K4 P-K4 2. N-KB3 N-QB3 3. B-N5 P-QR3",
      "unreadable": "{{label}} “{{token}}” could not be read as a descriptive move. Check the spelling, for example N-KB3 or PxP.",
      "noMove": "{{label}} {{token}} is not a legal move in this position. The moves before it are converted.",
      "ambiguous": "{{label}} {{token}} fits more than one legal move: {{moves}}. Name the piece or file, for example KPxP or QR-Q1, then continue.",
      "assumedQueen": "A promotion without a piece named was read as a queen.",
      "syntaxHint": "Files are named after the pieces that start on them (QR, QN, QB, Q, K, KB, KN, KR) and ranks are counted from the side of the player moving, so Black's P-K4 is e5. Write captures with x (PxP, NxB), checks with ch or +, en passant with e.p., castling as O-O or O-O-O, and promotions as P-K8=Q. Kt for a knight works too.",
      "converted": "Moves converted: {{count}}",
      "sanLabel": "Algebraic notation (SAN)",
      "descriptiveColumn": "Descriptive",
      "algebraicColumn": "Algebraic",
      "finalPosition": "Position after the last converted move",
      "linkBook": "Chess book to PGN",
      "linkArticle": "Descriptive vs algebraic notation"
    },
    "tiebreak": {
      "tableTitle": "Crosstable",
      "number": "No.",
      "name": "Name",
      "round": "R{{n}}",
      "cellLabel": "Round {{n}}, player {{player}}",
      "addPlayer": "Add player",
      "addRound": "Add round",
      "removeRound": "Remove last round",
      "copyTable": "Copy table as text",
      "cellHelp": "One cell per round: opponent's number, color optional, then the result. 12w1 is a win with White against player 12, 7b½ a draw with Black, 3b0 a loss. 9+ and 9- are a forfeit win or loss against player 9. On their own: + is a pairing-allocated or full-point bye, H a requested half-point bye, - a zero-point bye or absence.",
      "invalidCells": "Cells to fix before the standings can be worked out: {{count}} (outlined in red).",
      "importTitle": "Paste a crosstable",
      "importHelp": "One player per line: the starting number, the name, then one cell per round, separated by tabs, semicolons, commas or spaces. A heading line and trailing columns such as points are skipped.",
      "importButton": "Use this table",
      "importErrors": "Lines that could not be read: {{lines}}.",
      "optionsTitle": "Tie-breaks",
      "systemLabel": "Unplayed games",
      "systemFide": "FIDE 2026 (dummy opponent)",
      "systemVirtual": "Virtual opponent (before 2023)",
      "systemFideHelp": "FIDE Tie-Break Regulations effective 1 March 2026, Article 16: an unplayed round counts as a game against a dummy with the player's own score.",
      "systemVirtualHelp": "The older FIDE rule: an unplayed round counts against a virtual opponent who has the player's score before the round and draws the rest; opponents' unplayed games count as draws.",
      "orderTitle": "Order, after points",
      "moveUp": "Move up",
      "moveDown": "Move down",
      "keys": {
        "BH": "Buchholz",
        "BH-C1": "Buchholz Cut-1",
        "BH-M1": "Median Buchholz",
        "SB": "Sonneborn-Berger",
        "DE": "Direct encounter",
        "WIN": "Number of wins"
      },
      "standingsTitle": "Standings",
      "rank": "Rank",
      "points": "Pts",
      "copyCsv": "Copy CSV",
      "downloadCsv": "Download CSV",
      "deNote": "DE is worked out inside each group still tied when it is applied; — means it could not separate that group. A shared rank is marked =.",
      "fixFirst": "Fix the outlined cells and the standings appear here.",
      "warnMismatch": "Round {{round}}: players {{player}} and {{opponent}} do not show the same game.",
      "warnUnknown": "Round {{round}}: player {{player}}'s opponent {{opponent}} is not in the table.",
      "warnSelf": "Round {{round}}: player {{player}} is paired with themselves.",
      "warnRounds": "Player {{player}} has {{rounds}} rounds; the table has {{expected}}. Missing rounds count as absences.",
      "linkArchiving": "Tournament scoresheet archiving"
    }
  },
  "sharedGame": {
    "eyebrow": "Shared game",
    "scoresheet": "Scoresheet",
    "scoresheetPage": "Scoresheet page {{page}}",
    "moveCount": "Moves",
    "noMoves": "This game has no replayable moves.",
    "ctaTitle": "Scan your own scoresheet",
    "ctaBody": "ScanChess turns a photo of a handwritten scoresheet into a replayable game and a PGN file. Free credits when you sign up.",
    "ctaButton": "Try it free",
    "notFoundTitle": "This link is no longer available",
    "notFoundBody": "The share link was revoked, or the game was deleted.",
    "replayStops": "Replay stops at move {{ply}}: {{san}} could not be played from the previous position. The full move list is shown below.",
    "playableCount": "Replayable",
    "unplayableMove": "{{san}} could not be played",
    "pgnPartial": "The PGN contains the {{playable}} moves that could be played, out of {{total}} on the scoresheet.",
    "claimButton": "Save to my library",
    "claimSaving": "Saving…",
    "claimed": "Saved to your library",
    "claimedDesc": "A copy of this game is now in your games. The sender's photos stay with the sender.",
    "claimedOpen": "In your games · open it",
    "claimAlready": "This game is already in your library",
    "claimFailed": "Could not save the game",
    "metaTitle": "{{white}} vs {{black}} | ScanChess",
    "metaDesc": "Replay this game move by move: {{white}} vs {{black}}, {{count}} moves, scanned from a handwritten scoresheet by ScanChess."
  },
  "apiErrors": {
    "RATE_LIMITED": "Too many requests. Please wait a few minutes and try again.",
    "RATE_LIMITED_RETRY_one": "Too many requests. Try again in 1 minute.",
    "RATE_LIMITED_RETRY_other": "Too many requests. Try again in {{count}} minutes.",
    "NOT_FOUND": "That game no longer exists. It may have been deleted.",
    "INVALID_INPUT": "The request was not accepted. Please check the data and try again.",
    "PERMISSION_DENIED": "You do not have access to that game.",
    "EMAIL_NOT_VERIFIED": "Your free scan before email verification has been used. Verify your email to keep scanning.",
    "INSUFFICIENT_CREDITS": "Not enough credits for this scan.",
    "SCAN_IN_PROGRESS": "This scan is still being processed. Please wait a moment.",
    "UPLOAD_LIMIT_REACHED": "Your image storage is full. Delete some saved games to free space.",
    "IMAGE_TOO_LARGE": "One of the images is too large. Please use a smaller photo.",
    "PAYLOAD_TOO_LARGE": "The request is too large. Please try with fewer or smaller images.",
    "AI_GATEWAY_ERROR": "The recognition service could not process the image. Your credits were refunded.",
    "AI_INVALID_RESPONSE": "The recognition service returned an unexpected result. Your credits were refunded.",
    "NO_SCORESHEET_FOUND": "No chess moves could be read from the photo. Make sure the whole scoresheet is in frame, in focus and well lit. Your credits were refunded.",
    "NO_BOARD_FOUND": "No chessboard could be read from the photo. Make sure the whole board and every piece is in frame. Your credits were refunded.",
    "server": "The server ran into a problem. Please try again shortly.",
    "network": "Could not reach the server. Check your connection and try again.",
    "unknown": "Something went wrong. Please try again."
  },
  "annotations": {
    "title": "Notes & variations",
    "needMoves": "Scan or load a game to annotate it.",
    "beforeGame": "before the game",
    "afterMove": "after {{number}}{{ellipsis}} {{move}}",
    "commentOn": "Comment {{position}}",
    "commentPlaceholder": "What is worth remembering about this position?",
    "commentHint": "The comment follows this move into the exported PGN. Navigate the board to annotate another position.",
    "variations": "Recorded variations",
    "insteadOfFirst": "instead of the first move",
    "variationFrom": "Add a variation {{position}}",
    "variationPlaceholder": "e.g. Nf3 d5 exd5",
    "addVariation": "Add",
    "variationHint": "Type the line in SAN, separated by spaces; it becomes an alternative to the position on the board.",
    "illegalLine": "{{move}} is not a legal move here.",
    "variationRejected": "That line does not replay from this position.",
    "previewVariation": "Show this variation on the board",
    "deleteVariation": "Delete this variation"
  },
  "batch": {
    "title": "Scan a whole round at once",
    "intro": "For arbiters and club organizers: upload every scoresheet from a round, group double-sided or multi-page sheets into one game each, and every game is scanned and filed into your library on its own.",
    "signInRequired": "Round scan needs an account — the credits are spent per game.",
    "fileRejectedCount": "{{name}}: this batch is full ({{max}} photos).",
    "groups": "Games in this batch",
    "gameLabel": "Game {{number}}",
    "pageAlt": "Photo {{number}}",
    "joinPrevious": "This photo continues the previous game",
    "separateGame": "Start a new game with this photo",
    "sharedMeta": "Shared details",
    "sharedMetaHint": "Filled in when a sheet does not say: the event's name, the venue and the date are attached to every game the batch produces.",
    "eventPlaceholder": "Spring Club Championship",
    "sitePlaceholder": "Club venue, city",
    "balance": "balance {{credits}}",
    "stop": "Stop after this game",
    "summary": "{{saved}} saved, {{failed}} failed.",
    "state": {
      "pending": "Waiting",
      "scanning": "Scanning…",
      "saved": "Saved",
      "failed": "Failed",
      "blocked": "Not enough credits"
    },
    "open": "Open",
    "retry": "Retry",
    "moveCount": "{{count}} moves",
    "signInCta": "Sign in",
    "tournament": {
      "title": "Pairings",
      "hint": "Upload the round's pairing list and every game is filed under the right players, ratings, round and board. Photos named like R3B7.jpg are grouped and placed on their own.",
      "formats": "CSV or tab-separated exports with a header row, a PGN roster, or a JSON pairing file.",
      "placed": "Round {{round}}, board {{board}}",
      "parseFailed": "{{name}} could not be read as a pairing list.",
      "exportPgn": "Round PGN",
      "exportCsv": "Audit CSV"
    }
  },
  "extensionImport": {
    "title": "From the ScanChess extension",
    "loading": "Receiving your capture…",
    "error": "Could not receive or import this content. Retry here, or discard and capture it again. Your current work is kept.",
    "imageHint": "Check this image before importing. AI recognition starts only when you choose to recognize the image, using your website account and credits.",
    "textHint": "Import into this tool to validate and edit the notation.",
    "replaceHint": "Importing replaces the current work in this view. Save anything you want to keep first.",
    "board": "Board position → FEN",
    "scoresheet": "Scoresheet → PGN",
    "imageAlt": "Image received from the ScanChess extension",
    "accept": "Import this content",
    "discard": "Discard",
    "retry": "Retry",
    "cleanupPending": "Finishing temporary transfer cleanup…",
    "cleanupError": "Could not confirm cleanup. Retrying only cleans the transfer; it will not change your current game.",
    "analysisHint": "Run the free full analysis of this game: Stockfish works in your browser, with no credits and no account.",
    "analyze": "Analyze this game"
  },
  "policy": {
    "effectiveDate": "Effective date",
    "updated": "Updated",
    "seeAlso": "See also:"
  },
  "privacyPage": {
    "title": "Privacy Policy",
    "intro": "ScanChess (\"we\", \"us\") respects and protects your privacy. This Privacy Policy explains how we collect, use, store, and disclose your information when you use the ScanChess website and browser extension (the \"Service\").",
    "sections": [
      {
        "heading": "Information We Collect",
        "paragraphs": [
          "To provide our chess-scanning service, we collect the following information:"
        ],
        "bullets": [
          "Account information: When you create an account with an email address and password, or sign in with Google (or with Apple, for accounts that use it), we receive your email address and a basic account identifier to create and manage your account.",
          "Content you upload: Photos of scoresheets, chessboards, and related images you capture or upload. Scoresheet images are sent to an AI model provider to be read into PGN. Board images are sent first to Chessvision.ai's recognition service; if it is unavailable or cannot read the board, they go to our own recognizer and then to an AI model provider. The result is standard chess notation (PGN or FEN).",
          "Games and analysis: The games you save or import, the engine analysis stored with them, practice positions built from your mistakes, opening repertoires, positions you save, and the reports you create.",
          "AI explanations: When you ask for an explanation of a game, a position or an event report, the moves, positions and engine lines it is based on are sent to an AI model provider to write it, and the text is kept with your game, position or report.",
          "Linked online accounts and scouting: If you link a Lichess or Chess.com username, we read that account's public games through the sites' public APIs and keep a summary of the statistics with your account; removing the link deletes it. An opponent scouting report reads the opponent's public games the same way and is kept in your account.",
          "Club workspaces: Coaches and clubs can keep a roster of the players they teach — name, the names they appear under on scoresheets, FIDE ID, rating and whether the player is a junior — together with the games and reports linked to them.",
          "Shared links: A public link to a game or a report is created by you, shows only what that page shows, and can be withdrawn at any time. Report links also expire on the date you choose.",
          "Credits and transactions: Your credit balance, purchase records, and consumption history, used for billing and abuse prevention.",
          "Usage and device information: For security and product improvement, we may log basic data such as device type, browser or extension version, and error reports.",
          "Website analytics: Google Analytics 4 and Microsoft Clarity may collect page views, referral sources, approximate city-level location and page interactions under the cookie rules and choices described below."
        ]
      },
      {
        "id": "browser-extension",
        "heading": "Browser Extension Sign-in and Scanning",
        "paragraphs": [
          "Connect your ScanChess website account to the extension. A session credential and basic profile stay in protected extension storage and are cleared on disconnection or expiry. Earlier releases may offer popup sign-in; passwords are sent only to the ScanChess authentication API and are not stored.",
          "The extension captures visible webpage content only after you request a board scan. Selection and cropping happen locally; the selected image is sent to api.scanchess.com and the board-recognition providers described in this policy (Chessvision.ai, our own recognizer, an AI model provider) for recognition.",
          "Scan progress and results use browser session storage and clear when the session ends or you disconnect. Saved positions are stored in your ScanChess account. The extension does not collect browsing history in the background or include analytics scripts.",
          "Opening a result on scanchess.com is optional. The transfer is bound to its destination and browser tab and expires after 30 minutes. Account, image and notation data are used only for the disclosed account connection, recognition, review and saving features."
        ]
      },
      {
        "heading": "How We Use Information",
        "bullets": [
          "To provide core functionality: recognizing your uploaded images, analyzing your games, and writing the explanations and reports you ask for.",
          "To manage your account, credit balance, and transactions.",
          "To keep the Service secure and prevent fraud and abuse.",
          "To respond to your support requests and improve the product.",
          "To build your insights and practice positions from the games in your account."
        ]
      },
      {
        "heading": "Third-Party Services",
        "paragraphs": [
          "We share the minimum necessary data with the following third parties to operate the Service:"
        ],
        "bullets": [
          "AI model providers (currently Google, Anthropic and OpenAI): the images you upload for recognition, and the moves, positions and engine lines behind an AI explanation you ask for, are sent to them for processing.",
          "Chessvision.ai: board images you upload are sent to Chessvision.ai's recognition service to be read into a FEN. If it is unavailable or cannot read the board, our own recognizer (operated by us) or an AI model provider reads it instead.",
          "Lichess and Chess.com: when you link a username, ask for a scouting report or use Chess Wrapped, that account's public games are requested from their public APIs.",
          "Google Sign-In (and Sign in with Apple, for accounts that use it): used for authentication.",
          "Waffo (Waffo Pancake): The merchant of record for web subscriptions. Your payment details are collected and processed by Waffo — we never see or store your card details. We receive only the order id, billing email, and subscription status, which we use to grant Pro.",
          "Google Analytics 4 and Microsoft Clarity: Website analytics subject to the cookie rules and choices described below.",
          "Cloudflare: Hosting, CDN, and email routing for the site and API, which processes the connection logs this requires.",
          "We do not sell your personal information, and we do not use it for advertising unrelated to the Service."
        ]
      },
      {
        "heading": "Cookies and Analytics",
        "paragraphs": [
          "Your web sign-in session is kept in a secure, server-only cookie. Browser storage holds interface preferences and, after you confirm an import, may hold game data and images to restore your work. These drafts use session storage first and local storage when session storage is unavailable. The necessary session cookie cannot be turned off: without it you cannot stay signed in on the web.",
          "Beyond that we use two analytics services, and both set cookies. Where prior consent is required by law — the EEA, the UK, and Switzerland — neither loads until you press \"Accept\" in the prompt. Elsewhere they are on by default and you can turn them off at any time (see below):"
        ],
        "bullets": [
          "Google Analytics 4: Visit counts, referral sources, and page performance. Processed by Google and may be transferred outside your country, including to the United States.",
          "Microsoft Clarity: Records clicks, scrolling, and mouse movement within a page (session replay) plus heatmaps, so we can find interface problems. We do not use it to identify you personally."
        ],
        "paragraphsAfter": [
          "You can change your mind at any time from \"Cookie settings\" in the footer of every page, or from your account settings. When analytics are off, none of these scripts load at all. Turning them off does not stop a script that is already running in the tab you are on — reload the page and it will not come back."
        ]
      },
      {
        "heading": "Data Retention",
        "paragraphs": [
          "We retain your account information, game history, and images only for as long as necessary to provide the Service. When the data is no longer needed, or when you request deletion, we delete it."
        ]
      },
      {
        "heading": "Data Deletion and Account Deletion",
        "paragraphs": [
          "You can delete your account at any time on the web at https://scanchess.com/delete-account. This deletes your account information along with the uploaded images, games and scan data associated with your account. Once deleted, this data cannot be recovered.",
          "If you need help deleting your data, you can also email us at {{email}}."
        ]
      },
      {
        "heading": "Data Security",
        "paragraphs": [
          "We use reasonable technical and organizational measures to protect your data in transit and at rest. However, no method of transmission over the Internet or electronic storage is completely secure."
        ]
      },
      {
        "heading": "Your Rights",
        "paragraphs": [
          "Wherever you live, you can exercise the following rights over the personal data we hold. To use any of them, email {{email}} and we will respond within 30 days."
        ],
        "bullets": [
          "Access: find out what data we hold about you and get a copy.",
          "Correction: ask us to fix data that is inaccurate.",
          "Deletion: delete your account yourself at any time, or ask us to do it.",
          "Restriction and objection: object to processing we base on legitimate interests, such as analytics.",
          "Portability: receive your game data in a common format — you can also export PGN yourself at any time.",
          "Withdraw consent: turn off analytics cookies at any time, without affecting processing carried out before you withdrew."
        ],
        "paragraphsAfter": [
          "EU/UK visitors: we process data to perform our contract with you (account, scanning, billing), for our legitimate interests (security and abuse prevention), and on your consent (analytics cookies). You have the right to complain to your local data protection authority.",
          "California residents: we do not \"sell\" or \"share\" personal information as those terms are defined by the CCPA/CPRA, and we will not treat you differently for exercising your rights.",
          "International transfers: our providers (the AI model providers, Chessvision.ai, Cloudflare, Google, Microsoft, and Waffo) may process data outside your country, including in the United States and the EU."
        ]
      },
      {
        "heading": "Children's Privacy",
        "paragraphs": [
          "The Service is not directed to children under 13. We do not knowingly collect personal information from children. If you believe a child has given us personal information, contact {{email}} and we will delete it.",
          "Coaches and clubs can add the players they teach, including junior players, to a club workspace, and are responsible for having the right to do so. A player is treated as a junior unless the club says otherwise: a shared report about a junior player never shows their full name, and its link lasts at most 30 days. A parent or guardian can ask us to delete a junior player's records by emailing {{email}}."
        ]
      },
      {
        "heading": "Changes to This Policy",
        "paragraphs": [
          "We may update this Privacy Policy from time to time. Material changes will be posted on this page with an updated effective date at the top."
        ]
      },
      {
        "heading": "Contact Us",
        "paragraphs": [
          "If you have any questions about this Privacy Policy, contact us by email at {{email}}."
        ]
      }
    ]
  },
  "termsPage": {
    "title": "Terms of Service",
    "intro": "Welcome to ScanChess. These terms (\"Terms\") govern your access to and use of the ScanChess website and browser extension (the \"Service\"). By using the Service, you agree to these Terms.",
    "sections": [
      {
        "heading": "Description of the Service",
        "paragraphs": [
          "ScanChess is an AI-powered tool that recognizes photos of handwritten scoresheets and chessboards and converts them into standard chess notation (PGN and FEN), and helps you study the games: engine analysis, AI-written explanations, practice and reports. AI recognition results and AI explanations may contain errors, so please verify them before relying on them."
        ]
      },
      {
        "heading": "Accounts and Age",
        "paragraphs": [
          "You need an account — with an email address and password, or Google sign-in — to use certain features. You are responsible for safeguarding your account and for all activity that occurs under it.",
          "The Service is not for children under 13. If you are under 18 (or the age of majority where you live), you may use the Service only with a parent or guardian's consent, and any purchase must be made by an adult able to enter a contract, or with their explicit consent.",
          "Coaches and clubs can add the players they teach, including junior players, to a club workspace. Whoever adds a player is responsible for having the right to do so, for example the consent of the player or of a parent or guardian."
        ]
      },
      {
        "heading": "Subscriptions, Credits and Purchases",
        "bullets": [
          "The Service uses credits: a scoresheet scan costs 2 credits and a board photo costs 1 credit, one AI explanation a day is free and further ones cost 1 credit each, and every new account starts with 10 free credits. Current prices, credit rules and what each plan includes are listed on our pricing page at scanchess.com/pricing.",
          "Pro and Pro+ are subscriptions. They renew automatically at the same price for the period you chose — monthly or yearly — until you cancel.",
          "On the Mainland China store, Pro is sold as a 365-day pass priced in CNY and paid once with WeChat Pay. A pass does not renew and nothing further is charged when it ends; buying another extends it and the days you have left carry over.",
          "You can cancel yourself at any time at scanchess.com/pricing. Canceling stops future charges; Pro stays active until the end of the period you have already paid for.",
          "Waffo is the merchant of record for web subscriptions: it is the seller, it appears on your statement, and it calculates tax at checkout.",
          "All payments are final and non-refundable — including the unused remainder of a period and unspent credits — except where applicable law requires otherwise. Use the free credits that come with your account to check the Service suits you before subscribing. The full terms are in our Refund Policy at scanchess.com/refunds.",
          "Purchases made through a third-party app store are also subject to that store's terms, and refunds for them must be requested from the store."
        ]
      },
      {
        "heading": "Acceptable Use",
        "paragraphs": [
          "When using the Service, you agree not to:"
        ],
        "bullets": [
          "Upload any content that is unlawful, infringing, or that you do not have the right to process.",
          "Attempt to disrupt, reverse engineer, or abuse the Service or its underlying systems.",
          "Make excessive automated requests or circumvent the credit and billing mechanisms."
        ]
      },
      {
        "heading": "Term and Termination",
        "paragraphs": [
          "These Terms apply from the moment you start using the Service until you or we end them. If you breach the Acceptable Use rules above, we may take one or more of the following actions, depending on how serious the breach is and whether it is repeated:"
        ],
        "bullets": [
          "Issue a warning, or remove or restrict access to the offending content.",
          "Suspend your account, or limit specific features such as scanning.",
          "Terminate your account immediately and without prior notice for serious breaches — for example unlawful content, attacks on the Service, or circumventing the credit and billing mechanisms.",
          "If your account is terminated for a breach of these Terms, any unused credits are forfeited without refund and any active subscription stops renewing, except where a refund is required by applicable law or the relevant app store policy."
        ],
        "paragraphsAfter": [
          "We will notify you at the email address on your account when we suspend or terminate it, unless we are legally prevented from doing so. If you believe we acted in error, you may appeal by emailing {{email}} within 30 days of the notice, and we will review the decision.",
          "You may also stop using the Service at any time and delete your account and its data using the \"Delete account\" feature. Sections that by their nature should survive termination — including Disclaimer, Limitation of Liability, and Governing Law — remain in effect."
        ]
      },
      {
        "heading": "Your Content",
        "paragraphs": [
          "You retain ownership of the images and games you upload. To provide the Service, you grant us a limited license necessary to process them, including transmitting images to the third-party recognition providers we use, and sending the moves, positions and engine lines of a game or position to an AI model provider when you ask for an explanation. If you create a public link to a report, anyone with the link can read it until it expires or you withdraw it. See our Privacy Policy for details."
        ]
      },
      {
        "heading": "Account Deletion",
        "paragraphs": [
          "You can delete your account and associated data at any time on the \"Delete account\" page at scanchess.com/delete-account. Once deleted, this data cannot be recovered."
        ]
      },
      {
        "heading": "Disclaimer",
        "paragraphs": [
          "The Service is provided on an \"as is\" and \"as available\" basis, without warranties of any kind, express or implied. We do not guarantee that recognition results are fully accurate or that the Service will be uninterrupted or error-free."
        ]
      },
      {
        "heading": "Limitation of Liability",
        "paragraphs": [
          "To the maximum extent permitted by applicable law, ScanChess shall not be liable for any indirect, incidental, or consequential damages arising from your use of or inability to use the Service."
        ]
      },
      {
        "heading": "Intellectual Property and Complaints",
        "paragraphs": [
          "The ScanChess software, interface, and documentation are ours. The images you upload and the notation we produce from them are yours; we process them only to provide the Service.",
          "If you believe something on the Service infringes your copyright or other rights, email {{email}} with: how to contact you, what the material is and where it appears, a statement of your rights in the work, and a statement that you believe in good faith the use is not authorized. We investigate promptly, remove material where warranted, and may terminate accounts that infringe repeatedly."
        ]
      },
      {
        "heading": "Changes to the Service",
        "paragraphs": [
          "We may improve, change, or discontinue parts of the Service. If a change materially disadvantages you — a price increase, a reduction in what Pro includes, or shutting the Service down — we will give at least 30 days' notice by email to the address on your account or by notice in the app, so subscribers can cancel before the change takes effect rather than renew on the new terms.",
          "The Service may be interrupted briefly for maintenance, fixes, or to deal with a security incident. We keep those interruptions as short as we can."
        ]
      },
      {
        "heading": "Changes to These Terms",
        "paragraphs": [
          "We may update these Terms from time to time. Material changes will be posted on this page with an updated effective date at the top, and subscribers will be notified by email or in-app notice before they take effect. Continued use of the Service means you accept the updated Terms."
        ]
      },
      {
        "heading": "Disputes and Governing Law",
        "paragraphs": [
          "If something goes wrong, email {{email}} first — almost everything is settled that way within 30 days.",
          "These Terms are governed by the laws of Singapore, and disputes arising from them are subject to the courts of Singapore.",
          "If you are a consumer, the mandatory consumer protection law of the country where you habitually live applies to these Terms, and you may bring a claim in your local courts. Nothing here takes those rights away.",
          "If any part of these Terms is found invalid or unenforceable, that part is adjusted or removed only as far as necessary, and the rest stays in effect."
        ]
      },
      {
        "heading": "Contact Us",
        "paragraphs": [
          "If you have any questions about these Terms, contact us by email at {{email}}."
        ]
      }
    ]
  },
  "refundsPage": {
    "title": "Refund Policy",
    "sections": [
      {
        "heading": "All sales are final",
        "paragraphs": [
          "Subscription payments are not refundable. That includes the unused remainder of a period, a renewal you forgot to cancel, and credits you bought but did not spend.",
          "This is what lets us price the way we do, and in exchange every new account starts with 10 free credits — five scoresheets — with no card required. Use them to check that the recognition copes with your handwriting before you subscribe."
        ]
      },
      {
        "heading": "Exceptions",
        "paragraphs": [
          "The above does not apply to:"
        ],
        "bullets": [
          "Anything applicable law requires us to refund. This policy does not reduce rights given to you by the mandatory consumer protection law where you live; EU/UK customers keep their statutory withdrawal rights where those conditions are met.",
          "Purchases made through a third-party app store. Those are refunded by the store under its own policy — request it there. We can neither approve nor block them.",
          "Technical errors on our side or the payment provider's, such as a duplicate charge or the wrong amount. That is not a refund, it is a correction: contact us and we will fix it."
        ]
      },
      {
        "heading": "What to do instead",
        "paragraphs": [
          "Cancel rather than wait for the charge and then ask for it back. Canceling is self-serve: sign in, open the pricing page, press Cancel subscription. Two clicks, no email to anyone.",
          "Canceling stops all future charges. You keep Pro until the end of the period you have already paid for, and the credits in your balance stay yours — they never expire. Step by step: \"How to cancel a ScanChess subscription\".",
          "Cancel before the renewal date. For a yearly plan, dealing with it as soon as you get the renewal reminder is the safest habit."
        ]
      },
      {
        "heading": "What credits are",
        "bullets": [
          "Credits are the internal unit for using the Service. They are not stored value and have no cash value.",
          "They cannot be refunded, paid out, or transferred to another account.",
          "The same is true of credits given for free through sign-up or referrals.",
          "Canceling does not wipe the credits already in your balance."
        ]
      },
      {
        "heading": "Ask us anyway",
        "paragraphs": [
          "If a scan comes back unusable, if your account was charged in a way that looks wrong, or if you think your situation should not be handled by the rule above, email {{email}} with your account address and the order id from your Waffo receipt. We reply within 2 business days and look at cases on their facts — a policy is a policy, and a person is a person."
        ]
      },
      {
        "heading": "Who you are buying from",
        "paragraphs": [
          "Waffo is the merchant of record for web subscriptions and is what appears on your statement. Any refund we are legally required to make is initiated by us and carried out by Waffo.",
          "The 365-day pass sold on the Mainland China store and paid with WeChat Pay is also collected by Waffo and covered by this policy: paid once, not refundable. A pass never renews, so there is no forgotten renewal to dispute."
        ]
      }
    ],
    "intro": "ScanChess does not offer refunds. We put that at the top, and next to the buy button, because you should know it before you pay rather than discover it afterwards. Below: why, the exceptions, and what to do instead if you no longer want to be charged.",
    "stopCharges": "Want to stop being charged? Cancel on the <pricing>pricing page</pricing>, or email <mail>{{email}}</mail>."
  },
  "securityPage": {
    "title": "Security",
    "sections": [
      {
        "heading": "Reporting a vulnerability",
        "paragraphs": [
          "Email {{email}} with \"Security\" in the subject. Describe how to reproduce it and what it lets someone do. We reply within 3 business days and tell you the outcome once it is fixed.",
          "We will not pursue legal action over good-faith research, provided you do not access, change, or exfiltrate anyone else's data, do not run denial-of-service or spam tests, and give us a chance to fix the issue before disclosing it. There is no paid bounty program, but we will credit you by name if you want that."
        ]
      },
      {
        "heading": "How your data is protected",
        "bullets": [
          "Everything travels over HTTPS; the site and API sit behind Cloudflare.",
          "Passwords are stored as salted bcrypt hashes — we cannot read yours.",
          "Web sessions use signed JWTs in HttpOnly cookies; changing a password revokes previously issued sessions and password-reset tokens.",
          "We never handle payment details: web checkout is hosted by Waffo, our merchant of record, and we receive only an order id and subscription status.",
          "Deleting an account really deletes it — profile, games, and uploaded images go, and cannot be recovered."
        ]
      },
      {
        "heading": "The images you upload",
        "paragraphs": [
          "Scoresheet photos are sent to the third-party AI model provider we use for recognition; the Privacy Policy sets out exactly what is shared. Images belong to your account: delete a single game at any time, or delete the account to remove all of them."
        ]
      },
      {
        "heading": "What we do not have",
        "paragraphs": [
          "Plainly: no SOC 2, no ISO 27001, no third-party audit, and no paid bounty program. ScanChess is built by a small team. If your school, federation, or employer needs compliance paperwork, write to us and we will tell you honestly what we can and cannot provide."
        ]
      }
    ]
  },
  "contactPage": {
    "title": "Contact us",
    "subtitle": "We are a small team, and a person reads every message.",
    "emailHeading": "Support email",
    "replyTime": "We reply within 2 business days, and usually the same day for anything about billing.",
    "includeHeading": "What to include",
    "include": [
      "The email address on your account.",
      "For billing: the order id from the receipt Waffo sent you.",
      "For a bad scan: the scoresheet photo, and which move came out wrong."
    ],
    "shortcutsHeading": "You might not need us",
    "shortcuts": {
      "pricing": "Pricing, credits and canceling",
      "refunds": "Refund policy (no refunds)",
      "deleteAccount": "Delete your account and data",
      "faq": "Frequently asked questions"
    },
    "operatorHeading": "Who runs ScanChess",
    "operatorBody": "ScanChess is operated by SudoAI. Web subscriptions are sold by Waffo as merchant of record, which is what appears on your statement."
  },
  "faqPage": {
    "title": "Frequently asked questions",
    "subtitle": "Scanning, analysis, daily practice, plans and your account: the answers in one place.",
    "items": [
      {
        "question": "What is ScanChess?",
        "answer": "ScanChess turns a photo of a handwritten chess scoresheet into a PGN file, and an image of a chess board — a photo, screenshot or diagram — into a FEN position. Every move it reads is replayed on a board, and illegal or uncertain moves are flagged for you to check. Then it helps you learn from the game: Stockfish analysis, an AI coach that explains the turning points, and daily practice built from your own mistakes. It runs on the website, with a browser extension for Chrome and Edge that reads boards on web pages. A scoresheet scan costs 2 credits and a board image 1; new accounts get 10 free credits. It is made by SudoAI."
      },
      {
        "question": "What notation formats are supported?",
        "answer": "We support Standard Algebraic Notation (SAN) in various handwriting styles. Shorthand forms like \"dc\" (pawn captures) are automatically converted to standard format like \"dxc5\"."
      },
      {
        "question": "Is it free to use?",
        "answer": "Every new account gets 10 free credits, no card required. A scoresheet scan costs 2 credits and a board photo costs 1. Editing, replay, PGN export, Stockfish analysis and your games library cost nothing, one AI explanation a day is free, and free accounts get daily practice too. You can also earn credits by inviting friends."
      },
      {
        "question": "What does Pro cost, and what do I get?",
        "answer": "Pro is {{proMonthly}}/month or {{proYearly}}/year. It adds 100 credits every 30 days (about 50 scoresheets) and unlocks the full insights profile, unlimited daily practice, opening repertoires, opponent scouting and event reports. Pro+ ({{proPlusMonthly}}/month or {{proPlusYearly}}/year) is the plan for clubs and coaches: 500 credits every 30 days, higher report and repertoire limits, a club player roster with student pages, and public share links for reports. Scanning, editing, replay, PGN export, engine analysis and your games library work on every account, and unused credits stay in your balance. The full comparison is on the pricing page at /pricing."
      },
      {
        "question": "How do I pay, and what shows on my statement?",
        "answer": "Sign in, open the pricing page, and press Subscribe — that opens a checkout hosted by Waffo. Waffo is the merchant of record for web subscriptions: it takes the payment, calculates tax, and is what appears on your statement rather than ScanChess. We never see or store your card details. In mainland China the pricing page shows the Mainland China store, where Pro is a 365-day pass in CNY paid once with WeChat Pay and never renewing. Pro+ is not sold there yet; email support@scanchess.com if you need it."
      },
      {
        "question": "How do I cancel?",
        "answer": "Sign in and open /pricing — a \"Your subscription\" panel appears at the top with a Cancel subscription button. No need to email anyone. Canceling stops the next charge; Pro and the credits already in your balance stay until the paid period ends."
      },
      {
        "question": "Can I get a refund?",
        "answer": "No. All payments are final and non-refundable, including the unused remainder of a period and unspent credits, except where applicable law requires otherwise. That is why every account starts with 10 free credits and no card: use them to check the recognition suits you before subscribing. If you no longer want to be charged, cancel: it is self-serve and takes two clicks. Full terms at /refunds."
      },
      {
        "question": "How accurate is the recognition?",
        "answer": "Recognition quality depends on handwriting, lighting, camera angle, and notation style, so we do not promise a fixed accuracy rate. Chess-rule validation flags low-confidence or illegal moves for you to check."
      },
      {
        "question": "Can I scan multiple pages at once?",
        "answer": "Yes! You can upload up to 10 images in one scan (JPG, PNG or WebP; HEIC is not supported yet). Pages are read in the order shown, so a double-sided or multi-page scoresheet becomes one game, and it still costs a single scan."
      },
      {
        "question": "How do I export my game?",
        "answer": "After scanning, click \"Export PGN\" to download a standard PGN file. You can also copy PGN to clipboard and paste directly into Chess.com or Lichess."
      },
      {
        "question": "What if the recognition has errors?",
        "answer": "Use the pencil button beside a move to edit it. The system validates moves in real-time. You can use shorthand input (like \"dc\"), and it will auto-convert to full notation."
      },
      {
        "question": "Are my games saved?",
        "answer": "A successful scoresheet scan is saved automatically to your games library (Games in your workspace). If you edit moves or game details afterward, “Save Game” updates the same record instead of creating a duplicate. Scanning requires an account."
      },
      {
        "question": "How long do you keep my photos and games, and how do I delete them?",
        "answer": "Scoresheet photos are stored with the recognized game in your account until you delete them. Deleting a game from your games library removes its photos with it; deleting your account removes every game, photo and credit record. Deletion takes effect in the live database immediately, and routine backup copies expire within 90 days."
      }
    ],
    "ctaTitle": "Still have questions?",
    "ctaBody": "Try ScanChess now and experience AI scoresheet recognition",
    "ctaButton": "Start Scanning"
  },
  "changelogEntries": {
    "2026-10-12": {
      "title": "From scan to study: games library, insights, preparation and club tools",
      "items": [
        "The games library lists every game with its source, time control, your side and opening. \"Analyze all\" queues Stockfish for the games not yet analyzed, and the analysis is saved with each game.",
        "Insights build a profile from your analyzed games, and you can link a Lichess or Chess.com username to compare your online and over-the-board play. The full profile — accuracy over time, phases, mistake types, openings and filters — comes with Pro.",
        "Opening repertoires (Pro): keep the lines you play and see where a game left them.",
        "Opponent scouting (Pro): enter an opponent's Lichess or Chess.com username to see what they play, how they score with it and where to aim.",
        "Explain a position: on the analysis board, the best move finder and any game, the AI coach explains what is going on. It shares the free explanation a day; positions you save go into your notebook.",
        "Event reports can have an AI-written summary, and on Pro+ a report can be shared by a public link that you can withdraw at any time.",
        "Clubs on Pro+ get a player roster and a page per student, and the games of a round scan can be assigned to the players in one step.",
        "When the way moves are judged improves, your saved analyses are brought up to date overnight, along with the practice positions built from them."
      ]
    },
    "2026-10-11": {
      "title": "Daily practice, a free AI explanation a day, and event reports",
      "items": [
        "One AI coach explanation a day is now free for accounts with a verified email; after that it costs 1 credit per game.",
        "A scan opens straight into the full game analysis, and the analysis is saved with the game so it reopens without running the engine again.",
        "Daily practice turns the positions where you went wrong into short exercises. Free accounts get 15 a day; Pro has no limit.",
        "Event reports (Pro) sum up one player's tournament: accuracy and the biggest mistake in each round, the openings, the mistakes that came back and what to practice next. They can be printed."
      ]
    },
    "2026-10-08": {
      "title": "Screenshots read in your browser",
      "items": [
        "The best move finder now reads screenshots and digital diagrams in your browser: free, no account, nothing uploaded. Photos of real boards still go to our recognizer, free for accounts with a verified email.",
        "A scoresheet uploaded as a board image, or a board uploaded as a scoresheet, is caught before and after the scan, so credits are not spent on the wrong kind of read."
      ]
    },
    "2026-10-05": {
      "title": "An AI coach for your games",
      "items": [
        "Game analysis shows where the game turned, and the AI coach explains those moments in plain words: what happened, what was better and why, grounded in the engine's lines."
      ]
    },
    "2026-10-01": {
      "title": "Best move finder, analysis board and Chess Wrapped",
      "items": [
        "New free tool: the best move finder. Paste a FEN, or sign in and upload a screenshot or photo, and Stockfish 18 names the best move with its top three lines. Reading a position from an image is free for signed-in accounts and uses no credits.",
        "New free tool: an analysis board. Play moves from any position and Stockfish evaluates each one in your browser; copy the FEN or PGN when you are done.",
        "New free tool: Chess Wrapped. Type a Chess.com or Lichess username and get the year in review, with a card to download or share."
      ]
    },
    "2026-09-15": {
      "title": "Tactics from the games you actually played",
      "items": [
        "After a Stockfish analysis, ScanChess now pulls the forcing shots you missed — captures, checks and mates you had and did not play — and lets you solve them on the board. Save a set to practice again later. The positions come from your own games, including scanned scoresheets, not from a public puzzle bank."
      ]
    },
    "2026-09-10": {
      "title": "The site in eight languages, a sharper eye for doubtful moves, and pairings for a whole round",
      "items": [
        "ScanChess now reads in Spanish, German, French, Portuguese, Italian and Russian as well as English and Chinese. Pick yours from the globe in the header, or from Language in Settings.",
        "A misread move is usually still a legal move, so legality alone never caught it. Scans are now also checked for material behaving in a way no real game does — a piece left to be taken for nothing that nobody takes — and the plies involved are flagged for review with the reason. Nothing is rewritten.",
        "Notation people actually write is now understood rather than rejected: a pawn written with a P prefix, long algebraic like e2-e4, a capture that names the piece taken (BxN), and file-takes-file (cxd).",
        "When a move is doubtful, the check step now offers the legal moves that look closest to the ink instead of an open question, and an answer that would stop the game replaying is dropped rather than saved.",
        "Batch scanning learned the arbiter's workflow. Photos named like R3B7p2.jpg or filed under Round 3/Board 7 are grouped and placed on their own, and a pairing list — CSV, a PGN roster or JSON, from any program — files every game under the right players, ratings, round and board. Download the round as one PGN, plus a CSV of what still needs a human eye."
      ]
    },
    "2026-09-07": {
      "title": "Lines on the board, notes on the game, and a batch mode for whole rounds",
      "items": [
        "Click an engine line and it plays out on the board — step through it move by move, and while the engine is on, the board shows its best move as an arrow for the position you are looking at.",
        "Annotate your game: write a comment on any position, and record alternative lines — typed in, or saved straight from an engine preview. Comments and variations are saved with the game, travel with share links, and export inside the PGN.",
        "Scanning a whole round? The new batch page takes the stack of scoresheets at once, groups multi-page sheets into one game each, and files every game into your library on its own."
      ]
    },
    "2026-09-06": {
      "title": "Engine analysis, opening names, and games that belong to both players",
      "items": [
        "Stockfish runs in your browser. Turn it on under the board to see the evaluation and best lines, or analyze the whole game to have every inaccuracy, mistake and blunder marked with an accuracy score per side. Nothing is uploaded.",
        "Every game now names its opening (ECO code and Lichess name) in the workbench, the share page, the library and the PGN header.",
        "Scoresheets written with German, Spanish, French, Portuguese, Dutch, Polish, Czech, Hungarian, Russian or Chinese piece letters, and figurine notation, are read as such and translated to standard SAN.",
        "One click sends a game to Lichess and opens it there. On a share link, \"Save to my library\" files a copy under your own account.",
        "The library sorts by saved time, game date or player name, and filters by result."
      ]
    },
    "2026-09-04": {
      "title": "The fixes from the September review",
      "items": [
        "You can upload a scoresheet and run your first scan before verifying your email; verification is asked for from the second scan on.",
        "A game you are still correcting survives a reload: the moves and images come back where you left them.",
        "Low-confidence moves are flagged again, each with the alternatives the rules allow, and you can insert or delete a move instead of only retyping one. A game can be saved while corrections are still pending.",
        "Game details (players, event, date, result) are editable after a scan, and a saved game can be exported as PGN straight from History.",
        "Share links can be turned off again, and a link you have revoked stops working immediately.",
        "Fixed: the mobile menu would not open; sessions expired mid-visit instead of refreshing quietly; the pricing page described the plans incorrectly.",
        "Honest copy: the home page no longer implies error-free output, the About page says who builds ScanChess and what it does not do, the tool pages load faster and never show an empty board, and Chinese articles show a real reading time."
      ]
    },
    "2026-08-23": {
      "title": "A link your opponent can open",
      "items": [
        "Every saved game can have a public link. Whoever opens it sees the board, the moves and the PGN without an account.",
        "Scans that were refused because of where the AI request came from are retried from a US route automatically, instead of failing and refunding."
      ]
    },
    "2026-08-19": {
      "title": "No more confident guesses",
      "items": [
        "When a scanned game stops making sense, the move that breaks it is marked and the rest is left as written. Automatic correction is off; changes are yours to make.",
        "Board photos are read twice and cross-checked before a position is reported, and an unreadable image is now reported as unreadable rather than as a plausible-looking position.",
        "Board mode shows a real photo → position demo, and the free tools sit above the fold on their pages."
      ]
    },
    "2026-08-17": {
      "title": "Free tools, and Pro+",
      "items": [
        "Three tools that need no account: a PGN viewer, a board editor that produces FEN, and a PGN validator that finds the move that breaks a game.",
        "Pro+ ($19.99/month or $119.99/year) adds 500 credits every 30 days for clubs and coaches who scan a lot. Web subscribers can move between Pro and Pro+.",
        "Scanning the same photo twice no longer charges twice: the earlier result is returned for free.",
        "The scan-complete email is back, and the API now runs on Cloudflare, closer to you."
      ]
    },
    "2026-08-12": {
      "title": "Accounts, billing and consent",
      "items": [
        "A settings page: your plan and credits, display name, password, referral code, language, billing history, and one button that downloads every game you have saved.",
        "Subscriptions can be canceled on the pricing page in two clicks. Canceling stops the next charge; Pro and your credits last out the period you paid for.",
        "Analytics now ask first. Google Analytics and Microsoft Clarity do not load until you accept, and the choice can be changed in settings at any time.",
        "A pricing page that shows what a scan actually costs, a refund policy, a contact page, and a security page.",
        "The first Chinese translations of the guides, and a language link on every article that has one."
      ]
    },
    "2026-08-11": {
      "title": "Pay on the web",
      "items": [
        "Pro can now be bought on the website. Checkout is handled by Waffo, our merchant of record.",
        "Scoresheets that quote a number — \"1.d4\" written with the move number attached — no longer break the rest of the scan."
      ]
    },
    "2026-08-10": {
      "title": "Delete your account yourself",
      "items": [
        "Account deletion moved out of email and onto a page: /delete-account removes your profile, games and uploaded images for good.",
        "Email from ScanChess now goes through Cloudflare, which fixed the verification messages that were landing in spam."
      ]
    }
  },
  "toolCopy": {
    "pgn-viewer": {
      "name": "PGN Viewer",
      "seoTitle": "PGN Viewer – Open and Replay PGN Files Online, Free",
      "seoDescription": "Paste or upload a PGN file and replay any chess game move by move. Free online PGN viewer with keyboard navigation, FEN export and share links. No sign-up.",
      "kicker": "Free tool · No account needed",
      "h1": "Online PGN Viewer",
      "tagline": "Paste a PGN, replay the game move by move, copy any position as FEN.",
      "intro": "Paste a PGN (Portable Game Notation) file or open a .pgn to step through the game on an interactive board. Every position can be copied as FEN, opened in the board editor, or shared with a link. Everything runs in your browser — nothing is uploaded. New to the format? See what is PGN for tags, movetext, and how .pgn files open.",
      "features": [
        {
          "title": "Multi-game files",
          "body": "Load a tournament file with dozens of games and switch between them from a list."
        },
        {
          "title": "Tap or keyboard navigation",
          "body": "Tap any move to jump to it. On a desktop, ← → step through the game and Home/End jump to the start or the final position."
        },
        {
          "title": "Position tools",
          "body": "Copy the FEN of any position, open it in the board editor, or analyze it on Lichess in one click."
        },
        {
          "title": "Forgiving parser",
          "body": "Comments, variations, NAGs and even scoresheet shorthand like 0-0 or dc are understood. Illegal moves are flagged, not silently dropped."
        }
      ],
      "howToTitle": "How to use the PGN viewer",
      "howTo": [
        "Paste PGN text into the box, or use Choose file to pick a .pgn — on a desktop you can also drag one onto the box.",
        "Tap Load. The board shows the starting position, with the move list beside it on a wide screen and below it on a phone.",
        "Tap any move to jump to that position; on a desktop the arrow keys work too.",
        "Use Copy FEN, Open in editor or Share to take the position elsewhere."
      ],
      "faq": [
        {
          "question": "What is a PGN file?",
          "answer": "PGN (Portable Game Notation) is the standard plain-text format for recording chess games. It contains a header with tags such as Event, White, Black and Result, followed by the moves in algebraic notation. Chess.com, Lichess and every chess database can import and export PGN."
        },
        {
          "question": "Is my PGN uploaded to a server?",
          "answer": "No. The viewer parses and replays the game entirely in your browser. Nothing you paste or open here leaves your device."
        },
        {
          "question": "Can I view a PGN with several games?",
          "answer": "Yes. When the file contains more than one game a selector appears above the board so you can switch between them."
        },
        {
          "question": "What if the PGN has an illegal move?",
          "answer": "The viewer replays every legal move up to the problem and highlights the move it could not play. Use the PGN validator to see the legal alternatives and produce a cleaned file."
        },
        {
          "question": "How do I get a PGN from a paper scoresheet?",
          "answer": "Photograph the scoresheet and run it through ScanChess. The AI reads the handwriting, validates the moves and gives you a downloadable PGN you can open in this viewer."
        },
        {
          "question": "How is this different from viewing a PGN on Lichess or Chess.com?",
          "answer": "Both sites show a game once it is imported into an account or a study. This viewer needs no account and no import, keeps the game on your device, and gives you an embed code to show the game on your own website."
        }
      ],
      "cta": {
        "title": "Have a handwritten scoresheet instead?",
        "body": "ScanChess turns a photo of your scoresheet into a validated PGN in seconds. New accounts get free credits — no card required.",
        "button": "Scan a scoresheet"
      }
    },
    "board-editor": {
      "name": "Board Editor & FEN Generator",
      "seoTitle": "Chess Board Editor & FEN Generator – Free, No Sign-up",
      "seoDescription": "Free chess board editor and FEN generator: drag pieces, paste a FEN or drop a screenshot, then export the FEN, a link or a PNG. No account needed.",
      "kicker": "Free tool · No account needed",
      "h1": "Chess Board Editor",
      "tagline": "Set up any position, copy the FEN, export a PNG, or hand a screenshot to image-to-FEN scanning.",
      "intro": "Use this chess board editor like a lightweight alternative to a Lichess board editor: tap or drag pieces, paste a FEN, or drop a screenshot above the board to continue in image-to-FEN scanning. The FEN updates as you edit. When the position is playable, the panel shows whether the side to move is in check, checkmated, or stalemated. Copy the FEN, share a link, download a PNG, or open the position for analysis.",
      "features": [
        {
          "title": "Live FEN",
          "body": "The FEN string updates with every change, and a paste box lets you load one to start from."
        },
        {
          "title": "Position checks",
          "body": "Castling rights, side to move and en passant are set from the panel; the tool warns when a position is not playable."
        },
        {
          "title": "Board to image",
          "body": "Download the diagram as a crisp PNG for a blog, worksheet or social post."
        },
        {
          "title": "Touch friendly",
          "body": "Tap a piece in the tray, then tap squares to place it. Tap the eraser to clear squares."
        }
      ],
      "howToTitle": "How to use the board editor",
      "howTo": [
        "Start from the initial position, an empty board, or paste a FEN.",
        "Tap a piece in the tray, then tap a square to place it — or drag it across on a desktop. Tap the eraser, or drag a piece off the board, to remove it.",
        "Choose the side to move and castling rights in the panel.",
        "Copy the FEN, download the PNG, share the link or open the position for analysis."
      ],
      "faq": [
        {
          "question": "What is FEN and how does this chess board editor use it?",
          "answer": "FEN (Forsyth–Edwards Notation) is a standard one-line description of a chess position. In this chess board editor, the FEN string updates live with every piece you move, and you can copy it or open it in analysis."
        },
        {
          "question": "Why does the tool say my position is not playable?",
          "answer": "A legal position needs exactly one king per side, no pawns on the first or eighth rank, and the side that is not to move must not be in check. You can still copy the FEN, but engines and analysis boards may reject it."
        },
        {
          "question": "Can I edit a board from a photo or screenshot?",
          "answer": "Yes — ScanChess includes an AI board recognizer that turns a photo or screenshot of a physical or digital chessboard into an editable position right inside this board editor."
        },
        {
          "question": "How do I tell if a FEN is checkmate?",
          "answer": "Paste the FEN into this chess board editor. When the position is playable, the status line under the board shows check, checkmate, or stalemate for the side to move. There is no checkmate field in FEN itself—the rules follow from the pieces and whose turn it is."
        },
        {
          "question": "How do I turn a FEN into an image?",
          "answer": "Paste the FEN into the editor and click Download PNG. The image is rendered locally at high resolution with coordinates. For more export options, open the same FEN in the FEN to Image tool."
        },
        {
          "question": "How is this different from the Lichess board editor?",
          "answer": "The Lichess editor is free and good. This one also tells you why a position cannot be played, such as a pawn on the back rank or both kings in check, exports the board as a PNG diagram, and can start from a screenshot instead of an empty board."
        }
      ],
      "cta": {
        "title": "Snap a real board instead",
        "body": "ScanChess reads a photo of a physical chessboard and gives you the FEN, ready to edit here or analyze. Free credits on sign-up.",
        "button": "Recognize a board photo"
      }
    },
    "pgn-validator": {
      "name": "PGN Validator & Cleaner",
      "seoTitle": "PGN Validator – Check and Fix a Chess PGN Online",
      "seoDescription": "Paste chess notation to check every move for legality, spot the exact error, and download a clean, standards-compliant PGN. Free, instant, no login.",
      "kicker": "Free tool · No account needed",
      "h1": "PGN Validator & Cleaner",
      "tagline": "Find the first move that does not work, get a clean seven-tag PGN back.",
      "intro": "Paste a PGN or a bare list of moves. The validator plays them out on a real board, points at the first move that does not work and lists the legal alternatives, then rewrites the game as a clean seven-tag PGN. Shorthand such as 0-0, dc or e8Q is normalized automatically. For what each header tag means, see what is PGN.",
      "features": [
        {
          "title": "Exact error location",
          "body": "See the move number, the token that failed, and every legal move in that position."
        },
        {
          "title": "Notation clean-up",
          "body": "Castling with zeros, missing check marks, lowercase pieces and promotion shorthand are corrected to standard SAN."
        },
        {
          "title": "Standard output",
          "body": "The result is a Seven Tag Roster PGN wrapped at 80 columns that Chess.com, Lichess and ChessBase accept."
        },
        {
          "title": "Nothing leaves your browser",
          "body": "Validation runs locally with chess.js. Paste tournament games without worrying about privacy."
        }
      ],
      "howToTitle": "How to validate a PGN",
      "howTo": [
        "Paste the PGN, or just the moves, into the box.",
        "Click Validate. Green means every move is legal; red points at the first problem.",
        "Fix the move in your source (or in the PGN viewer) and validate again.",
        "Copy or download the cleaned PGN."
      ],
      "faq": [
        {
          "question": "What does the validator check?",
          "answer": "It parses the header tags, strips comments and variations, then plays each move on a board that enforces the rules of chess. Any move that is illegal, ambiguous or malformed is reported with its move number and the legal moves in that position."
        },
        {
          "question": "Does it fix errors automatically?",
          "answer": "It fixes notation errors — 0-0 for O-O, dc for dxc5, e8Q for e8=Q, missing + and # signs. It cannot guess what a genuinely illegal move was meant to be; that is why it shows the legal alternatives for you to choose from."
        },
        {
          "question": "Can I paste moves without headers?",
          "answer": "Yes. A bare move list such as \"1. e4 e5 2. Nf3 Nc6\" is enough. The cleaned output adds placeholder headers you can fill in."
        },
        {
          "question": "Why do handwritten scoresheets produce invalid PGN?",
          "answer": "Players skip a move, write the wrong file, or forget to mark a capture. If you are typing up a scoresheet, ScanChess can read the photo, apply the same validation and let you correct moves on the board."
        }
      ],
      "cta": {
        "title": "Typing up scoresheets by hand?",
        "body": "Skip the typing. ScanChess reads handwritten scoresheets, validates every move the same way and lets you fix mistakes on the board. Free credits on sign-up.",
        "button": "Scan a scoresheet"
      }
    },
    "printable-scoresheets": {
      "name": "Printable Scoresheet Generator",
      "seoTitle": "Printable Chess Score Sheet (PDF) – Free Notation Sheets",
      "seoDescription": "Free printable chess score sheets and notation sheets (PDF): 60-move tournament, 80-move classical, large-grid kids and two-game rapid. A4 and US Letter.",
      "kicker": "Free PDF · A4 and US Letter",
      "h1": "Free Chess Notation Sheets",
      "tagline": "Print a chess score sheet or scorebook page, then scan the filled sheet to PGN.",
      "intro": "A chess score sheet (also called a notation sheet, or a scorebook page) is where both players write every move of a tournament game. Choose from four layouts: a 60-move sheet in the two-column tournament format, an 80-move sheet for long classical games, a 40-move sheet with large rows for kids and beginners, and a rapid page that fits two 30-move games. Add the event, round and club, check the live preview, then print it or save it as a PDF. Write moves in algebraic notation—White in the left column, Black in the right—as covered in how to fill out a chess scoresheet. When the game is over, photograph the filled-in sheet and ScanChess turns the handwriting into a validated PGN.",
      "features": [
        {
          "title": "Four layouts",
          "body": "60 moves for club and tournament games, 80 moves for classical time controls, 40 large rows for juniors, and two 30-move games on one page for rapid events."
        },
        {
          "title": "Event details printed in",
          "body": "Fill in the tournament, date, round, table, players and club before printing, or leave any field blank for players to write by hand."
        },
        {
          "title": "Sharp on A4 and US Letter",
          "body": "The sheets are drawn as vectors in black and white, so lines and move numbers stay crisp on any office printer and use little toner."
        },
        {
          "title": "Ready to scan afterwards",
          "body": "The grid keeps White and Black moves in separate, numbered columns, which is the layout a scoresheet scanner reads most reliably."
        }
      ],
      "howToTitle": "How to print a chess score sheet",
      "howTo": [
        "Choose a layout: 60 moves, 80 moves, 40 moves for kids, or two rapid games on one page.",
        "Optionally type the tournament, round, club or player names to print them on every sheet.",
        "Click \"Print Scoresheet\" and print, or choose \"Save as PDF\" in the print dialog to keep a file.",
        "After the game, photograph the completed sheet and let ScanChess turn the handwriting into a PGN."
      ],
      "faq": [
        {
          "question": "What is a chess notation sheet?",
          "answer": "It is the same thing as a score sheet: a form with numbered rows where both players record each move in algebraic notation, plus boxes for the event, round, players and result. A scorebook is simply many of these sheets bound together."
        },
        {
          "question": "Do these sheets follow FIDE conventions?",
          "answer": "The 60-move and 80-move sheets use the usual tournament layout: a header for White, Black, event, date, round, table and result, numbered move rows with White and Black columns, and signature lines for both players. An arbiter can still require the official sheet of a particular event."
        },
        {
          "question": "How do I fill out a chess score sheet?",
          "answer": "Write the move number once per row, White's move in the left column and Black's in the right, using algebraic notation such as Nf3 or exd5. Under FIDE rules you make the move on the board first and then write it down. See the related guide below, How to Fill Out a Chess Scoresheet, for a full worked example."
        },
        {
          "question": "How can I save the sheet as a PDF file?",
          "answer": "Click \"Print Scoresheet\" (or press Ctrl+P / Cmd+P) and pick \"Save as PDF\" as the print destination instead of a printer."
        },
        {
          "question": "What paper size should I use?",
          "answer": "Choose A4 (210 x 297 mm) or US Letter (8.5 x 11 in) in the paper setting. Both print with standard margins."
        },
        {
          "question": "How do I turn a filled-in score sheet into a PGN?",
          "answer": "Take a clear, flat photo of the sheet and upload it to ScanChess. It reads the handwriting, replays every move on a board to check it is legal, and lets you correct anything before you download the PGN."
        }
      ],
      "cta": {
        "title": "Already filled out your score sheet?",
        "body": "Skip the typing. ScanChess reads the handwritten moves, checks each one against the rules, and gives you a PGN to replay or import into Lichess.",
        "button": "Scan a score sheet"
      }
    },
    "game-analysis": {
      "name": "Game Analysis",
      "seoTitle": "Free Chess Game Analysis – Stockfish in Your Browser",
      "seoDescription": "Paste a PGN and have Stockfish analyze the game: accuracy for both sides, every inaccuracy, mistake and blunder. Free, no sign-up, nothing uploaded.",
      "kicker": "Free tool · No account needed",
      "h1": "Free Chess Game Analysis",
      "tagline": "Paste a game, get a Stockfish analysis of every move without signing in.",
      "intro": "Load a PGN and Stockfish runs in this tab, not on a server. Switch the engine on, analyze the whole game, and the move list fills with the verdict on each move: an accuracy figure per side, and a mark against every inaccuracy, mistake and blunder. Step through any position to see the engine’s lines and the move it preferred.",
      "features": [
        {
          "title": "The engine runs on your device",
          "body": "Stockfish 18 is downloaded once and searches in your browser. Your games are never sent anywhere, and there is no queue and no daily limit."
        },
        {
          "title": "A verdict on every move",
          "body": "The whole-game analysis walks each position and scores the move that was played against the one the engine wanted, in winning chances rather than raw centipawns."
        },
        {
          "title": "Accuracy for both sides",
          "body": "Each side gets a single accuracy figure, plus counts of inaccuracies, mistakes and blunders, so a post-mortem has somewhere to start."
        },
        {
          "title": "Lines you can walk into",
          "body": "Any variation the engine suggests can be played out on the board and stepped through move by move, then dropped to return to the game."
        }
      ],
      "howToTitle": "How to analyze a game",
      "howTo": [
        "Paste the PGN into the box, or open a .pgn file. The example game loads with one tap if you just want to see how it works.",
        "Flip the Turn on the engine switch. The engine is about seven megabytes and is fetched once, so the first run takes a moment.",
        "Press Analyze the whole game. Progress runs along the move list as each position is searched.",
        "Tap any move to see its verdict, the engine’s preferred move, and the lines from that position."
      ],
      "faq": [
        {
          "question": "Is the analysis really free, with no account?",
          "answer": "Yes. The engine runs in your browser, so there is nothing to meter. No sign-up, no credits, no daily cap on how many games you analyze."
        },
        {
          "question": "Which engine is this, and how strong is the analysis?",
          "answer": "Stockfish 18, the lite single-threaded WebAssembly build. The whole-game analysis gives every position the same fixed amount of search from a clean start, so the same game always gets the same marks, and every move about to be marked a mistake or blunder is searched again, deeper, before the mark is shown. Stepping to a single position searches it deeper still. For serious opening preparation a desktop engine given minutes per move will always see further."
        },
        {
          "question": "Does my game get uploaded?",
          "answer": "No. The PGN is parsed in the page and the engine searches on your own processor. Nothing about the game leaves your device."
        },
        {
          "question": "What do the accuracy numbers mean?",
          "answer": "Each move is scored by how much winning chance it gave away compared with the engine’s choice, and the accuracy figure is the average across a side’s moves. It is a summary, not a rating: a quiet game with few decisions will score higher than a sharp one played just as well."
        },
        {
          "question": "Why is the first analysis slow?",
          "answer": "The WebAssembly engine has to be downloaded before it can search. After that it is cached, and later visits start immediately."
        },
        {
          "question": "How is this different from Chess.com Game Review or Lichess analysis?",
          "answer": "Chess.com limits how many full Game Reviews a free account can run, and Lichess analyzes a game once it has been imported into the site. This tool needs neither an account nor an import: paste any PGN, including one scanned from a paper scoresheet, and Stockfish reviews it in your browser with no daily limit."
        },
        {
          "question": "How do I analyze a game I played on paper?",
          "answer": "Photograph the scoresheet and run it through the ScanChess scanner first. It reads the handwriting, checks every move against the rules and gives you a PGN you can paste straight in here."
        }
      ],
      "cta": {
        "title": "The game you want to analyze is on paper",
        "body": "ScanChess reads a photographed scoresheet into a validated PGN, ready to analyze. New accounts start with free credits.",
        "button": "Scan a scoresheet"
      }
    },
    "missed-tactics": {
      "name": "Missed Tactics",
      "seoTitle": "Missed Chess Tactics from Your Own Games – Free Trainer",
      "seoDescription": "Analyze a PGN and practice the captures, checks and mates you missed. Built for games scanned from a scoresheet, not a puzzle bank. Free, in your browser.",
      "kicker": "Free tool · No account needed",
      "h1": "Missed Tactics from Your Own Games",
      "tagline": "Turn the shots you missed over the board into puzzles you can solve again tomorrow.",
      "intro": "A public tactics trainer drills someone else's combinations. This one drills yours. Load a PGN — paste one, or scan a scoresheet first — run the same Stockfish analysis the game analysis tool uses, and ScanChess keeps only the misses that were actually tactics: a capture, a check, a mate or a promotion the engine wanted and you did not play. Quiet positional slips stay out. Save a set in this browser to come back to tomorrow.",
      "features": [
        {
          "title": "From your scoresheet, not a bank",
          "body": "The positions are the ones you played. Scan the paper, analyze the game, and the forcing shots you missed become the set. Lichess cannot do this, because it never saw the sheet."
        },
        {
          "title": "Only forcing shots",
          "body": "A 20-point squeeze that wanted a quiet king move is not a puzzle. The extractor keeps captures, checks, mates and promotions, and drops near-duplicate collapses so a lost game does not dump the same wreck twice."
        },
        {
          "title": "Solve it on the board",
          "body": "Play the first move of the solution; the opponent's reply from the engine line appears on its own. Two wrong tries unlock the answer, and the move you played in the game is shown only after."
        },
        {
          "title": "Saved on this device",
          "body": "Keep a set to practice later. Nothing is uploaded; the list lives in this browser until you clear it."
        }
      ],
      "howToTitle": "How to train missed tactics",
      "howTo": [
        "Paste a PGN, or scan a scoresheet first and export the game here.",
        "Press Find my missed tactics. The engine switches itself on and Stockfish analyzes every position in this tab; the first run fetches about seven megabytes.",
        "The result appears right under the button: practice the forcing shots on the board, or save them and come back tomorrow.",
        "On each position, find the move that was missed. The line continues until the shot is complete."
      ],
      "faq": [
        {
          "question": "Is this a tactics puzzle trainer like Lichess?",
          "answer": "No. There is no public puzzle database. Every position comes from a game you load — typically one you played over the board and scanned from a scoresheet."
        },
        {
          "question": "Which mistakes become puzzles?",
          "answer": "Mistakes and blunders whose engine move is a capture, a check, a mate or a promotion. Quiet inaccuracies and opening book moves are left out, and two shots a ply or two apart on the same side keep only the larger one."
        },
        {
          "question": "Do I need an account?",
          "answer": "No. The engine runs in your browser and saved tactics stay in this browser's storage. Sign in only if you want scanned games in your library."
        },
        {
          "question": "How do I get a PGN from a paper scoresheet?",
          "answer": "Photograph the scoresheet and run it through ScanChess. After the moves are checked, analyze the game here and the missed shots become the set."
        },
        {
          "question": "Why was a blunder I remember not turned into a puzzle?",
          "answer": "If the better move was a quiet improvement — a retreat, a prophylactic king move — it is not a tactic. The analysis still marks it on the move list; this trainer is only for shots."
        }
      ],
      "cta": {
        "title": "The shots you missed are still on paper",
        "body": "Scan the scoresheet, analyze the game, and practice the tactics that actually cost you the point. New accounts start with free credits.",
        "button": "Scan a scoresheet"
      }
    },
    "rating-calculator": {
      "name": "FIDE Rating Calculator",
      "seoTitle": "FIDE Rating Calculator – Elo Change & Performance Rating",
      "seoDescription": "Free FIDE rating calculator: work out your Elo change and tournament performance rating with the official Table 8.1.2, K-factor rules and 2025 changes.",
      "kicker": "Free tool · No account needed",
      "h1": "FIDE Rating Calculator",
      "tagline": "Free FIDE calculator: official Elo rating change and tournament performance.",
      "intro": "Enter your published rating, add a row per game with your opponent’s rating and the result. This free online FIDE calculator applies the official FIDE Rating Regulations as written: the expected score for each game comes from Table 8.1.2, the development coefficient follows the rules in article 8.3.3, and the total is rounded according to article 8.3.4, alongside tournament performance rating.",
      "features": [
        {
          "title": "The official table, not the formula",
          "body": "FIDE converts a rating difference into an expected score with a lookup table whose steps round to two decimals. Calculators that use the logistic curve instead disagree by a point or more over a long event."
        },
        {
          "title": "The 2650 rule",
          "body": "On the standard list, since 1 October 2025 the 400-point cap on the rating difference applies only below 2650. Above it the real gap is used, which changes what a draw against a much weaker opponent costs. Rapid and blitz keep the cap for everyone."
        },
        {
          "title": "Every K-factor case",
          "body": "Forty while you are completing your first thirty games, forty for juniors under 2300, ten once 2400 has been reached, twenty otherwise, and the ceiling that keeps K times the number of games at 700 or less."
        },
        {
          "title": "Performance rating too",
          "body": "The opponents’ average plus the rating difference for your fractional score, from table 8.1.1 — the number tournament reports print."
        }
      ],
      "howToTitle": "How to work out your rating change",
      "howTo": [
        "Type in the rating you are published at. If you are still completing your first thirty rated games, or you are a junior, tick the box that applies.",
        "Add one row per game: the opponent’s rating, and whether you won, drew or lost.",
        "Read the expected score beside each row; the number in brackets is the rating difference actually used after the cap.",
        "The panel shows your new rating, the change, and the event’s performance rating."
      ],
      "faq": [
        {
          "question": "How does this FIDE rating calculator determine Elo changes?",
          "answer": "For each game it takes the rating difference, reads the expected score from table 8.1.2, and subtracts it from what you actually scored. Those differences are added up across the event and multiplied by your development coefficient K. The result is rounded to a whole number, with a half rounding away from zero."
        },
        {
          "question": "What K-factor applies to me?",
          "answer": "K is 40 while you are completing events totalling your first 30 rated games, and 40 for a player until the end of the year of their 18th birthday as long as their rating is under 2300. It is 10 once a published rating has reached 2400, and stays there even if the rating later drops. Otherwise it is 20."
        },
        {
          "question": "Why is the difference capped at 400 points?",
          "answer": "To stop a single result against a far weaker or far stronger opponent from moving a rating too far. Since 1 October 2025 the cap only applies to players rated below 2650; from 2650 up the true difference is used in every case."
        },
        {
          "question": "Does this work for rapid and blitz ratings?",
          "answer": "Yes, with the rapid or blitz list selected. The FIDE Rapid and Blitz Rating Regulations use the same probability table and the same K rules as the standard list (K = 40, 20 or 10 on the same conditions). Two things differ: the 400-point cap applies to every player, with no 2650 exception, and since 1 December 2024 a game is not rated when the players are 600 or more points apart and either is rated above 2600. The selector applies both."
        },
        {
          "question": "Is this an official FIDE calculator?",
          "answer": "No. It implements the published FIDE Rating Regulations and Table 8.1.2 directly in your browser, matching published rating lists. The official FIDE rating list remains the ultimate authority, and your national federation may use different rules."
        },
        {
          "question": "Where do I get my opponents’ ratings from?",
          "answer": "The pairing sheet or the tournament’s published start list carries them, and they are the ratings used for the calculation, not whatever the opponent is rated by the time the list is published."
        },
        {
          "question": "Can I use it for a Chess.com or Lichess rating?",
          "answer": "Only as a rough guide. Chess.com uses the Glicko system and Lichess uses Glicko-2, where the change also depends on how settled each rating is, so the same result moves an online rating by a different amount. This calculator follows FIDE's Elo rules for over-the-board ratings."
        }
      ],
      "cta": {
        "title": "The scoresheets from that event are still in your bag",
        "body": "ScanChess turns a photographed scoresheet into a validated PGN, so the games behind the rating change are searchable instead of stacked in a drawer.",
        "button": "Scan a scoresheet"
      }
    },
    "fen-to-image": {
      "name": "FEN to Image",
      "seoTitle": "FEN to Image – Free Chess Diagram Maker (PNG, SVG)",
      "seoDescription": "Turn any FEN into a chess board image. Choose the size, square colors and orientation, then download a PNG or SVG. Free, no sign-up, nothing uploaded.",
      "kicker": "Free tool · No account needed",
      "h1": "FEN to Image",
      "tagline": "Paste a FEN, get a board diagram to download as PNG or SVG.",
      "intro": "Paste a FEN and the position is drawn as a board you can download. Pick a size up to 1600 pixels, choose the square colors, turn the board round or drop the coordinates, then take it as a PNG for a post or as an SVG that stays sharp at any size. The board is drawn from vector pieces in the page, so the file has no external images in it and nothing is uploaded to make one.",
      "features": [
        {
          "title": "PNG or vector SVG",
          "body": "PNG for anywhere that wants a picture; SVG for print, slides and anything that will be resized later."
        },
        {
          "title": "Sizes up to 1600 pixels",
          "body": "Small enough for a forum post, large enough for a printed page or a lesson handout."
        },
        {
          "title": "Five board colors",
          "body": "Classic brown, tournament green, blue, walnut and slate, with coordinates you can switch off."
        },
        {
          "title": "Any position, not just legal ones",
          "body": "A study fragment with no kings, or a puzzle with pieces on half the board, renders the same way. Only the placement field is needed."
        }
      ],
      "howToTitle": "How to turn a FEN into an image",
      "howTo": [
        "Paste the FEN into the box. Only the first field, the piece placement, is used for the picture.",
        "Choose a size, a board color and which side is at the bottom.",
        "Download the PNG, or take the SVG if the diagram will be printed or resized.",
        "Need to change the position first? Open it in the board editor, drag the pieces and come back."
      ],
      "faq": [
        {
          "question": "What is a FEN?",
          "answer": "FEN (Forsyth-Edwards Notation) is a single line of text that describes one chess position: where the pieces stand, whose turn it is, the castling rights, the en passant square, and the two move counters. It is how a single position travels between programs, the way PGN carries a whole game."
        },
        {
          "question": "Should I download the PNG or the SVG?",
          "answer": "PNG if it is going into a post, a chat or a document that wants a picture. SVG if it will be printed, projected, or scaled up later, because a vector stays sharp at any size."
        },
        {
          "question": "Is the image uploaded or watermarked?",
          "answer": "Neither. The board is drawn in your browser and the file is written on your device. There is no watermark and no attribution requirement."
        },
        {
          "question": "Can I use these diagrams in a book or a course?",
          "answer": "Yes. The pieces are drawn from our own vector set and the images carry no restrictions, so they can go into lessons, articles and printed material."
        },
        {
          "question": "How do I get a FEN from a photo of a board?",
          "answer": "Photograph the position and let the ScanChess board reader work it out. It returns the FEN, which you can paste straight in here to make a clean diagram."
        }
      ],
      "cta": {
        "title": "The position is on a real board in front of you",
        "body": "Photograph it and ScanChess reads the position into a FEN. Recognizing one board costs a single credit.",
        "button": "Scan a board"
      }
    },
    "pgn-to-gif": {
      "name": "PGN to GIF",
      "seoTitle": "PGN to GIF – Free Animated Chess Game Maker",
      "seoDescription": "Paste a PGN and download the game as an animated GIF. Choose the size, speed, board colors and move range. Free, no sign-up, encoded in your browser.",
      "kicker": "Free tool · No account needed",
      "h1": "Chess GIF Maker",
      "tagline": "Turn a PGN into an animated GIF you can post anywhere.",
      "intro": "Load a game and the tool draws every position, encodes them into an animated GIF and hands you the file. Pick the size and speed, choose the board colors, highlight the squares each move touched, and trim the animation to the part of the game worth showing. The frames are drawn and the GIF is encoded in this page, so a game never leaves your device to become a picture.",
      "features": [
        {
          "title": "Encoded in your browser",
          "body": "No upload, no queue and no watermark. The GIF is written on your device from the first frame to the last."
        },
        {
          "title": "Only the moves that matter",
          "body": "Set a first and last move to animate just the combination, rather than eighty plies of manoeuvring nobody will watch."
        },
        {
          "title": "Three sizes and three speeds",
          "body": "480, 640 or 800 pixels square, sharp enough for a phone screen or a chat window, at roughly half a second to a second and a half per move, with a longer hold on the first and last frames so a loop reads."
        },
        {
          "title": "The move is easy to follow",
          "body": "The squares a piece left and arrived on are tinted, so the eye finds each move instead of hunting for what changed."
        }
      ],
      "howToTitle": "How to make a chess GIF",
      "howTo": [
        "Paste the PGN, or open a .pgn file. The example game loads with one tap.",
        "Trim the range if you only want part of the game, then pick a size, a speed and the board colors.",
        "The GIF builds itself as you change the settings; the progress bar counts the frames as they are drawn.",
        "Check the preview and press Download to save the GIF."
      ],
      "faq": [
        {
          "question": "How large will the file be?",
          "answer": "Each frame stores only the squares that changed, so a full forty-move game at 640 pixels is usually a few hundred kilobytes and stays well under the limits of chat apps and social networks. If a site still refuses it, trim the range or drop to 480 pixels."
        },
        {
          "question": "Why is there a limit on the number of moves?",
          "answer": "Beyond a couple of hundred frames a GIF stops being shareable: it grows past what most sites accept and nobody watches it to the end. The range is clamped rather than refusing the game."
        },
        {
          "question": "Is my game uploaded to make the GIF?",
          "answer": "No. The board is drawn and the GIF is encoded in your browser, which is also why the work happens on your device rather than instantly."
        },
        {
          "question": "Can I use the GIF commercially?",
          "answer": "Yes. The pieces are our own vector set, there is no watermark, and nothing about the output is restricted."
        },
        {
          "question": "Can I make a GIF from a game I played over the board?",
          "answer": "Scan the scoresheet with ScanChess first. Once the game is a PGN, paste it in here and animate whichever part of it you want to show."
        }
      ],
      "cta": {
        "title": "The game worth animating is on a scoresheet",
        "body": "ScanChess reads a photographed scoresheet into a PGN in seconds, and the PGN is all this tool needs.",
        "button": "Scan a scoresheet"
      }
    },
    "pgn-to-pdf": {
      "name": "PGN to PDF",
      "seoTitle": "PGN to PDF – Print a Chess Game with Diagrams",
      "seoDescription": "Paste a PGN and lay it out for paper: two or three move columns, board diagrams where you want them, A4 or Letter. Save as PDF. Free, no sign-up.",
      "kicker": "Free tool · No account needed",
      "h1": "PGN to PDF",
      "tagline": "Lay a game out for paper, with diagrams, and save it as a PDF.",
      "intro": "Paste a PGN and the game is set as a printed game score: the players and event across the top, the moves in columns, and board diagrams at the points you choose. Print it, or pick Save as PDF in the print dialog to keep the file. Because it goes through the browser’s own printer, the moves stay as selectable text and the diagrams stay as vectors, so the PDF is sharp at any zoom and small enough to email. PGN is the plain-text chess game format—see what is PGN if you need a primer before you paste.",
      "features": [
        {
          "title": "A game score, not a screenshot",
          "body": "The moves are text and the diagrams are vector drawings, so the file prints cleanly and can be searched and copied from."
        },
        {
          "title": "Diagrams where you want them",
          "body": "Final position only, every ten moves, every twenty, or none at all. Each diagram tints the squares the move touched."
        },
        {
          "title": "A4 or Letter",
          "body": "The page is set for either, with margins that keep the columns off the edge on a home printer."
        },
        {
          "title": "Two or three columns",
          "body": "Two columns for a game with notes to add by hand, three to fit a long game on a single sheet."
        }
      ],
      "howToTitle": "How to save a game as a PDF",
      "howTo": [
        "Paste the PGN, or open a .pgn file.",
        "Choose two or three columns, where diagrams should appear, and the paper size.",
        "Press Print. In the dialog that opens, set the destination to Save as PDF.",
        "Everything except the page itself is left out of the print, so the file starts at the game score."
      ],
      "faq": [
        {
          "question": "Where is the download button?",
          "answer": "There is no separate download: the print dialog is the download. Choose Save as PDF as the destination and pick where the file goes. This produces a smaller, sharper file than generating a PDF in the page would."
        },
        {
          "question": "Will the moves be selectable in the PDF?",
          "answer": "Yes. The game score is real text, so it can be searched, copied and read by a screen reader. A PDF made from a screenshot cannot do any of that."
        },
        {
          "question": "Can I print several games at once?",
          "answer": "One game per sheet, and a multi-game PGN puts a selector above the box so you can move between them. Print each one in turn."
        },
        {
          "question": "Does it print the comments and variations in my PGN?",
          "answer": "No. The layout is the game score: the moves that were played, with the tags and the result. Comments, variations and annotation symbols are left out to keep the sheet readable on paper."
        },
        {
          "question": "Can I print a blank scoresheet instead?",
          "answer": "Yes, the printable scoresheets tool has layouts for different time controls, with space for the event, round and player names."
        }
      ],
      "cta": {
        "title": "Going the other way, from paper to PGN",
        "body": "ScanChess reads a photographed scoresheet into a validated PGN. New accounts get free credits, no card required.",
        "button": "Scan a scoresheet"
      }
    },
    "best-move": {
      "name": "Best Move Finder",
      "seoTitle": "Best Chess Move Finder – Free Next Move Calculator",
      "seoDescription": "Find the best move in any chess position. Paste a FEN or upload a screenshot or photo, and Stockfish 18 shows the top three lines. Free, in your browser.",
      "kicker": "Free tool · Stockfish 18",
      "h1": "Find the Best Chess Move",
      "tagline": "Paste a FEN or upload a screenshot, and Stockfish names the best move.",
      "privacyNote": "The engine and the screenshot reader run in your browser. Photos of real boards, AI explanations and saving need a free account and send the picture or position to our server.",
      "intro": "Give the finder a position and Stockfish 18 searches it in this tab, then names the best move, its evaluation and the next two candidates. A position can come from a FEN, from the board editor, or from a picture: drop in a screenshot and the position is read in your browser, with no account and nothing uploaded. Photos of real boards are read by our server recognizer, free once you sign in. You choose the side to move right beside the answer; when the picture shows the last move, it is set for you.",
      "features": [
        {
          "title": "From a screenshot or photo",
          "body": "Drop in a screenshot of an online game or a digital diagram and your browser reads it into a FEN, with any doubtful squares outlined. Photos of real boards go to our server recognizer, free with a verified free account."
        },
        {
          "title": "Stockfish 18 on your device",
          "body": "The engine is downloaded once and searches in your browser. Positions you type in stay on your device unless you ask for an AI explanation or save them, and there is no daily limit."
        },
        {
          "title": "Three lines, not one",
          "body": "The best move comes with its evaluation and the next two candidates, each with the line the engine expects, so you can see how close the alternatives are."
        },
        {
          "title": "Play it and keep going",
          "body": "Play the best move on the board and the engine looks at the new position, or open the position in the analysis board to try your own ideas."
        }
      ],
      "howToTitle": "How to find the best move",
      "howTo": [
        "Paste a FEN into the box, or drop in a screenshot of the position. Signed in, you can also upload a photo of a real board.",
        "Check the board. If a square is outlined, the reader was unsure about it; fix it in the board editor if needed.",
        "Choose who is to move: White or Black.",
        "Press Find the best move. The engine is about seven megabytes and is fetched once; the answer and the top three lines appear as it searches."
      ],
      "faq": [
        {
          "question": "Is the best move finder free?",
          "answer": "Yes. Pasting a FEN or reading a screenshot is free, needs no account and has no daily limit. Photos of real boards, and pictures your browser cannot read, use our server recognizer: free with no credits, but it needs an account with a verified email and has a limit based on attempts in the past 24 hours, including failed reads."
        },
        {
          "question": "How does it read a position from a screenshot?",
          "answer": "A small model running in your browser finds the board, looks at each of the 64 squares and builds the FEN; the picture never leaves your device. If the last move is highlighted, it also tells whose move it is. Squares it was unsure about are outlined on the board. When it cannot read a picture with confidence, such as a photo of a real board, the picture can go to the same recognizer the ScanChess scanner uses. That needs a free account; take board photos from above, with all 64 squares in the frame."
        },
        {
          "question": "Why do I have to choose whose move it is?",
          "answer": "A picture shows where the pieces are, not always whose turn it is. When a screenshot highlights the last move, the reader sets the side to move from it; otherwise it assumes the side at the bottom of the picture is to move. Either way the choice sits right next to the answer, because the best move for the wrong side is a confident wrong answer."
        },
        {
          "question": "Which engine is this, and how strong is it?",
          "answer": "Stockfish 18, the single-threaded WebAssembly build, searching up to depth 18 or four seconds per position. That is far stronger than any human, though a desktop engine given minutes will see further in sharp positions."
        },
        {
          "question": "How is this different from the Lichess analysis board?",
          "answer": "Lichess's analysis board is free and excellent, but you set the position up by hand or paste a FEN. Here a screenshot or photo does that step, and the answer is shown as one clear best move with its alternatives."
        },
        {
          "question": "Can I use it during a game?",
          "answer": "No. Engine help during a game you are playing is cheating under the fair-play rules of Chess.com, Lichess and FIDE, and gets accounts closed. Use it afterwards, to understand what you missed."
        }
      ],
      "cta": {
        "title": "Keep the positions you find",
        "body": "In the ScanChess workspace a board photo becomes a saved position you can edit, share and come back to later.",
        "button": "Open the board scanner"
      }
    },
    "analysis-board": {
      "name": "Analysis Board",
      "seoTitle": "Free Chess Analysis Board – Stockfish 18 Online",
      "seoDescription": "A free online chess analysis board: play moves from the start or paste a FEN or PGN, and Stockfish 18 evaluates every position in your browser. No sign-up.",
      "kicker": "Free tool · No account needed",
      "h1": "Chess Analysis Board",
      "tagline": "Move the pieces, and Stockfish 18 evaluates every position in your browser.",
      "intro": "Play moves for both sides from the starting position, or paste a FEN or a PGN to start somewhere else. At your first move Stockfish 18 switches on in this tab and evaluates every position you reach, with its three best lines. Step back through the moves, try a different one, and the rest of the line is replaced. When you are done, copy the FEN or the PGN, or analyze the whole line for mistakes.",
      "features": [
        {
          "title": "Play any line",
          "body": "Drag or tap pieces for either side. Go back to any move and play something else; the new move replaces what came after, the way you would on a real board."
        },
        {
          "title": "An evaluation for every position",
          "body": "Stockfish 18 runs in your browser and follows the board: an evaluation bar, the best move as an arrow, and three lines you can step through."
        },
        {
          "title": "Start from any FEN or PGN",
          "body": "Paste a position or a whole game. A PGN is played up to its last legal move, so one typo does not throw the game away."
        },
        {
          "title": "Copy it back out",
          "body": "Copy the current FEN or the line as a PGN, open the position in the board editor, or send it to the best move finder."
        }
      ],
      "howToTitle": "How to use the analysis board",
      "howTo": [
        "Move a piece. The engine loads at your first move, about seven megabytes, fetched once.",
        "Read the evaluation and the three lines. Tap a line to play it out on the board.",
        "Use the arrows or the move list to go back, then try another move.",
        "Paste a FEN or PGN to start from a different position, and copy the FEN or PGN when you are done."
      ],
      "faq": [
        {
          "question": "Is the analysis board free?",
          "answer": "Yes, with no account and no daily limit. The engine runs on your own device, so there is nothing to meter. The optional AI explanation of a position needs a free account with a verified email: one a day is free, then 1 credit."
        },
        {
          "question": "How is this different from the Lichess analysis board?",
          "answer": "Lichess's board is free too, and better for opening study with its explorer and cloud evaluations. This one is lighter: the engine runs on your device, so the moves you play stay in your browser unless you ask for an explanation or save the position; it links straight to the best move finder and the scanner, and a PGN with a typo still loads up to the mistake."
        },
        {
          "question": "Does it keep variations?",
          "answer": "No, it keeps one line. Playing a different move from an earlier position replaces the moves after it. To keep variations in a game, use the PGN viewer, which reads and writes them."
        },
        {
          "question": "How strong is the engine?",
          "answer": "Stockfish 18, the single-threaded WebAssembly build, searching each position up to depth 18 or four seconds. A desktop engine given minutes per move will see further in sharp positions."
        },
        {
          "question": "Is my analysis saved?",
          "answer": "Only if you choose to. Signed in, \"Save to my positions\" keeps the position in your account; otherwise copy the FEN or PGN, or share a link: /tools/analysis-board?fen= followed by the position opens it directly."
        }
      ],
      "cta": {
        "title": "Start from a photo instead",
        "body": "Photograph a board or screenshot a diagram, and ScanChess sets the position up for you, ready to analyze.",
        "button": "Scan a board image"
      },
      "privacyNote": "The engine runs in your browser. Optional AI explanations and saving need a free account and send the position to our server."
    },
    "chess-wrapped": {
      "name": "Chess Wrapped",
      "seoTitle": "Chess Wrapped {{year}} – Chess.com & Lichess Year in Review",
      "seoDescription": "Your chess year in review for Chess.com or Lichess: games played, win rate, rating peak, favorite openings, best win and a shareable card. Free, no sign-up.",
      "kicker": "Free tool · No account needed",
      "h1": "Chess Wrapped: Your Year in Chess",
      "tagline": "Enter a Chess.com or Lichess username and get your year in numbers.",
      "privacyNote": "Runs in your browser. Games come straight from Chess.com or Lichess.",
      "intro": "Chess Wrapped reads a player's games for the year from the Chess.com or Lichess public archive and turns them into a year in review: how many games, the win rate, how the rating moved in each time control, the openings played most, the best win, the longest winning streak and the busiest month. It works for any public username, yours or a friend's, and ends with a card you can download or share.",
      "features": [
        {
          "title": "Chess.com and Lichess",
          "body": "Both sites publish game archives for every public account. Pick the site, type the username and choose the year."
        },
        {
          "title": "Rating, per time control",
          "body": "Where the rating started, where it peaked and where it ended, separately for bullet, blitz, rapid and daily or classical."
        },
        {
          "title": "Openings, best win and streaks",
          "body": "The openings played most as White and as Black, the highest-rated opponent beaten, the longest run of wins and the most-played opponent."
        },
        {
          "title": "A card to share",
          "body": "Download your summary as an image, copy a link that rebuilds it, or share it straight from your phone."
        }
      ],
      "howToTitle": "How to make your Chess Wrapped",
      "howTo": [
        "Choose Chess.com or Lichess.",
        "Type the username and pick the year.",
        "Press Build my Wrapped. Large accounts take a little longer while each month is fetched.",
        "Scroll through the cards, then download or share the summary."
      ],
      "faq": [
        {
          "question": "Is Chess Wrapped free, and do I need an account?",
          "answer": "It is free and needs no account, here or on the chess site. It reads the public game archive, so it works for any public username."
        },
        {
          "question": "Is this made by Chess.com or Lichess?",
          "answer": "No. It is an independent tool that reads the public APIs both sites provide, and it is not affiliated with either."
        },
        {
          "question": "Is my data stored anywhere?",
          "answer": "No. Your browser fetches the games from Chess.com or Lichess and works out the numbers itself. ScanChess never receives the games or the username."
        },
        {
          "question": "Why are some games missing?",
          "answer": "The archives only include finished games; aborted games are left out. Lichess sends games at about 20 a second, so an account with thousands of games in a year takes several minutes. The progress bar shows roughly how many games to expect and how long is left, and you can show the results so far at any time; those are marked as partial."
        },
        {
          "question": "Can I see a previous year?",
          "answer": "Yes. Choose the year before building it. The current year covers the games played so far."
        },
        {
          "question": "What about my over-the-board games?",
          "answer": "Tournament games played on paper are not in any online archive. Scan the scoresheets with ScanChess and they become PGN files you can analyze and keep."
        }
      ],
      "cta": {
        "title": "Your over-the-board games count too",
        "body": "Tournament games on paper are in no online archive. Scan the scoresheets and they become PGN you can analyze and keep.",
        "button": "Scan a scoresheet"
      }
    },
    "pgn-to-fen": {
      "name": "PGN to FEN",
      "seoTitle": "PGN to FEN Converter – Free, Every Ply, in Your Browser",
      "seoDescription": "Paste a PGN and get the FEN after any move, plus a FEN for every ply. Free, no sign-up, converted in your browser. Nothing is uploaded.",
      "kicker": "Free tool · No account needed",
      "h1": "PGN to FEN Converter",
      "tagline": "Paste a PGN, pick a move, copy the FEN.",
      "intro": "Paste a game and this page replays it in your browser, one ply at a time. Pick any move and copy the FEN of the position after it, or copy a FEN for every ply in one list. Use it to check a game you typed from a book you own, to lift the position before a combination, or to hand a diagram tool the FEN it expects. It only replays the moves you already have. It does not suggest a move in a game you are playing.",
      "features": [
        {
          "title": "A FEN for every ply",
          "body": "The list runs from the position before the first move through the position after the last legal one. Pick a row, or copy the whole list."
        },
        {
          "title": "Stops at the first illegal move",
          "body": "A typo ends the replay there and names the move. Every FEN before it is still valid, and the PGN validator lists the legal moves at that point."
        },
        {
          "title": "Several games in one file",
          "body": "Paste a file of games and choose which one to convert. A PGN that already has a FEN header starts from that position, not from the opening array."
        },
        {
          "title": "Converted on your device",
          "body": "The replay happens in the page. The PGN is not uploaded, and you do not need an account."
        }
      ],
      "howToTitle": "How to turn a PGN into FEN",
      "howTo": [
        "Paste a PGN or a plain move list, drop a .pgn file, or load the example.",
        "Pick a move in the list. The board shows the position after that move, and the FEN sits under the board.",
        "Copy that FEN, or copy and download the FEN of every ply.",
        "Have a diagram instead of a game? Scan the board image to a FEN, then open FEN to PGN if you want a file that starts there."
      ],
      "faq": [
        {
          "question": "What is the difference between PGN and FEN?",
          "answer": "PGN is the whole game: the players, the moves and the result. FEN is one position: where the pieces stand, whose turn it is, the castling rights, the en passant square and the two move counters. This page walks a PGN and writes the FEN after each ply."
        },
        {
          "question": "Which position does the FEN describe?",
          "answer": "The FEN is the position after the move you select. The first row, before any move, is the opening array, or the position in the PGN's FEN header if it has one."
        },
        {
          "question": "What happens if a move is illegal?",
          "answer": "Replay stops at that move. The FENs before it stay. Open the same game in the PGN validator to see the moves that were legal there."
        },
        {
          "question": "Can I convert a game from a chess book?",
          "answer": "Yes, a game you type out from a book you own, for your own study. This page does not host book text and it does not download books."
        },
        {
          "question": "Does it work on a phone?",
          "answer": "Yes. The PGN field, the board and the move list stack on a narrow screen, and each row is a tap target."
        }
      ],
      "cta": {
        "title": "The position is a diagram in a book you own",
        "body": "Photograph the diagram and ScanChess reads it into a FEN you can correct. One board image costs one credit.",
        "button": "Scan a board image"
      }
    },
    "fen-to-pgn": {
      "name": "FEN to PGN",
      "seoTitle": "FEN to PGN Converter – Free SetUp Header, in Your Browser",
      "seoDescription": "Paste a FEN and get a PGN with SetUp and FEN headers. Add moves from that position on the board. Invalid FENs are explained. Free, no sign-up, nothing uploaded.",
      "kicker": "Free tool · No account needed",
      "h1": "FEN to PGN Converter",
      "tagline": "Paste a FEN and get a PGN that starts from that position.",
      "intro": "Paste a position and this page writes a PGN with [SetUp \"1\"] and a [FEN] tag, the standard way to store a game that does not start from the opening array. Play further moves on the board and they are added to that PGN, numbered from the position's move number, including when Black is to move. A FEN that is missing a rank, has no side to move, or leaves a king in check is refused with the reason. Use it for a diagram you scanned from a book you own, or for a position you set up yourself. It does not suggest a move in a game you are playing.",
      "features": [
        {
          "title": "SetUp and FEN on every file",
          "body": "The header is written even for the opening array, so the file states where it starts instead of leaving a reader to assume the initial position."
        },
        {
          "title": "Add the moves that follow",
          "body": "Drag pieces on the board. The movetext is appended to the same PGN. Undo removes the last move."
        },
        {
          "title": "A reason for a bad FEN",
          "body": "Eight ranks, a side to move of w or b, one king each, no pawn on the first or eighth rank, and the side that has just moved must not be left in check."
        },
        {
          "title": "Nothing is uploaded",
          "body": "Validation and the PGN are produced in the browser. No account is required."
        }
      ],
      "howToTitle": "How to turn a FEN into a PGN",
      "howTo": [
        "Paste a FEN. When the position is legal, the board shows it.",
        "Copy the PGN. It starts with the seven-tag roster, then SetUp and FEN.",
        "Optional: play the moves that follow on the board. A Black-to-move position is numbered as Black's move.",
        "Replay the file in the PGN viewer, or check a move that will not play in the PGN validator."
      ],
      "faq": [
        {
          "question": "Why does the PGN contain SetUp and FEN?",
          "answer": "A PGN without them is assumed to start from the initial array. SetUp \"1\" plus a FEN tag tells a database, Lichess, ChessBase or the PGN viewer that the game starts at your position."
        },
        {
          "question": "What counts as an invalid FEN?",
          "answer": "The placement needs eight ranks of eight squares, the side to move must be w or b, each side needs one king, a pawn cannot stand on the first or eighth rank, and the side that has just moved cannot be in check. The message names which of these failed."
        },
        {
          "question": "Can I add moves from the position?",
          "answer": "Yes. Drag a piece, or tap a piece and then its destination. Promotions ask which piece. The moves are written into the same PGN. This records the line you enter. It does not look up a move for you."
        },
        {
          "question": "Where do I get a FEN from a picture?",
          "answer": "From the board image scanner, including a diagram in a chess book you own. One board image costs one credit. Correct the position, set the side to move, then paste the FEN here."
        },
        {
          "question": "Does the opening position work?",
          "answer": "Yes. You still get SetUp and FEN, so the file states the start position explicitly. An en passant square that is not legal is dropped when the FEN is normalized."
        }
      ],
      "cta": {
        "title": "The FEN is a diagram in a book you own",
        "body": "Photograph the diagram and ScanChess reads the position into a FEN. One board image costs one credit. Then bring it back here for a PGN.",
        "button": "Scan a board image"
      }
    },
    "fen-validator": {
      "name": "FEN Validator",
      "seoTitle": "FEN Validator: Check a Chess FEN String Online",
      "seoDescription": "Paste a FEN to check if it is legal: piece counts, kings, castling rights, en passant and side to move, with a plain-language fix for each error.",
      "kicker": "Free tool · No account needed",
      "h1": "FEN Validator",
      "tagline": "Paste a FEN to see whether it is legal, and how to fix it if it is not.",
      "intro": "A FEN describes one chess position in a single line: where the pieces stand, whose move it is, the castling rights, the en passant square and two move counters. One wrong character is enough for a chess program to refuse it, usually with a message like “invalid FEN” and nothing more. This page checks every part of the string and lists each problem in plain words, with what to change. A FEN that passes shows its board, the side to move, and whether that side is in check, checkmated or stalemated.",
      "features": [
        {
          "title": "Every problem, not just the first",
          "body": "Ranks that do not add up to eight squares, stray characters, a missing king, nine pawns, castling rights the pieces do not allow, a wrong en passant square, bad move counters: all are listed at once, each with its own fix."
        },
        {
          "title": "Checks the rules, not only the syntax",
          "body": "A FEN can be well formed and still impossible: the side that has just moved left in check, a pawn on the back rank, more queens than promotions could explain. These are caught too."
        },
        {
          "title": "A corrected FEN when the fix is certain",
          "body": "If only the castling, en passant or counter fields are wrong, the page offers the FEN with those fields fixed. A wrong king count or piece placement is left for you to decide."
        },
        {
          "title": "Checked on your device",
          "body": "The FEN is checked in the page. Nothing is uploaded, and you do not need an account."
        }
      ],
      "howToTitle": "How to check a FEN",
      "howTo": [
        "Paste the FEN into the box, or open this page from a link that ends in ?fen= and the FEN.",
        "Press Check FEN. A green result means the position is legal; a red one lists each problem.",
        "Apply the fix shown under each problem, or use the corrected FEN when one is offered.",
        "Once it is valid, copy the full FEN or open it in the board editor, FEN to Image or FEN to PGN."
      ],
      "faq": [
        {
          "question": "What makes a FEN valid?",
          "answer": "Six fields separated by spaces: the piece placement (eight ranks from the eighth to the first, separated by slashes), the side to move (w or b), the castling rights (for example KQkq, or -), the en passant square (for example e3, or -), the halfmove clock and the move number. The position must also be possible: one king each, no pawn on the first or eighth rank, and the side that has just moved not in check."
        },
        {
          "question": "Why are my castling rights reported as wrong?",
          "answer": "A castling letter is only possible while that king and rook stand on their starting squares: K needs the white king on e1 and a rook on h1, Q needs e1 and a1, k needs the black king on e8 and a rook on h8, q needs e8 and a8. Remove the letter for any pair that has moved."
        },
        {
          "question": "Which en passant square should a FEN have?",
          "answer": "The square a pawn skipped over on the last move, and only right after a two-square pawn move: on the sixth rank with White to move, on the third with Black to move. Otherwise write -. Some programs write it only when an en passant capture is actually possible; both forms are valid."
        },
        {
          "question": "Is a FEN with only the placement and side to move valid?",
          "answer": "Many programs accept it and assume no castling rights, no en passant square and move 1. The validator accepts it too, with a warning, and shows the full six-field FEN."
        },
        {
          "question": "Can a valid FEN still be a position no game could reach?",
          "answer": "Yes. The validator checks the rules every position must obey, not whether a real game could have led to it. A few positions pass every check and still could not arise from the starting position."
        }
      ],
      "cta": {
        "title": "The position is in a screenshot or a book diagram",
        "body": "Scan the image and ScanChess sets up the board and writes the FEN for you to check. Free credits on sign-up.",
        "button": "Scan a board image"
      }
    },
    "flip-fen": {
      "name": "Flip FEN",
      "seoTitle": "Flip or Mirror a Chess Position (FEN)",
      "seoDescription": "Flip a FEN to view it from Black's side, mirror it horizontally, or swap colors, then copy the new FEN or download an image.",
      "kicker": "Free tool · No account needed",
      "h1": "Flip or Mirror a Chess Position",
      "tagline": "Rotate, mirror or swap colors, then copy the new FEN.",
      "intro": "Turning a position around is useful more often than it sounds. A diagram printed from Black's side gets typed in upside down; a study is easier to compare once the colors are swapped; an engine test wants the same position mirrored to check that the evaluation is symmetric. This page applies three transforms to any FEN and rewrites everything that depends on them: the piece placement, the side to move, the castling rights and the en passant square. Rights that a transform makes impossible are dropped and named, so other tools accept the new FEN.",
      "features": [
        {
          "title": "Rotate 180 degrees",
          "body": "Turns the board around and keeps the colors, as if seen from Black's side. Use it when a diagram printed with Black at the bottom was entered as if White were at the bottom."
        },
        {
          "title": "Mirror the files",
          "body": "Swaps the a-file and the h-file and keeps the colors. Castling rights go, because the kings leave their starting squares."
        },
        {
          "title": "Swap colors",
          "body": "Mirrors the ranks and gives every piece the other color, with the side to move, castling rights and en passant square following. The result is the same position for the other player."
        },
        {
          "title": "Copy, download or open",
          "body": "Copy the new FEN, save the board as a PNG, or open it in FEN to Image, the board editor or the FEN validator."
        }
      ],
      "howToTitle": "How to flip a FEN",
      "howTo": [
        "Paste a FEN, or load the example.",
        "Switch on rotate, mirror or swap colors. They can be combined, and switching one off undoes it.",
        "Check the new board, and read the note about any castling right or en passant square that was dropped.",
        "Copy the new FEN or download the image."
      ],
      "faq": [
        {
          "question": "How do I view a FEN from Black's side?",
          "answer": "If you only want to look at the position from Black's side, use Flip board under the diagram. The FEN does not change, because a FEN does not store which way the board faces. Rotating the FEN moves the pieces themselves, which is only right when the position was entered upside down."
        },
        {
          "question": "What is the difference between rotating and swapping colors?",
          "answer": "Rotating turns the board 180 degrees and keeps every piece's color, so White's pawns end up moving the wrong way. Swapping colors mirrors the ranks and changes the colors, so the pieces still move the right way and the other side is to move: the same position seen from the other player's chair."
        },
        {
          "question": "Why were the castling rights removed?",
          "answer": "A castling right needs the king and the rook on their starting squares. After a rotation or a mirror they are not, so the right cannot stand. Swapping colors keeps the rights, with White's and Black's exchanged."
        },
        {
          "question": "Does the move number change?",
          "answer": "No. The halfmove clock and the move number stay as they were. Only the side to move changes, and only when the colors are swapped."
        }
      ],
      "cta": {
        "title": "Is the position in a screenshot or a book?",
        "body": "Scan a screenshot, a diagram or a photo of a board, and ScanChess writes the FEN for you, the right way up. Free credits on sign-up.",
        "button": "Scan a board image"
      }
    },
    "chess-notation-translator": {
      "name": "Chess Notation Translator",
      "seoTitle": "Chess Notation Translator: Any Language to English",
      "seoDescription": "Paste moves written in German, Spanish, French, Russian or other piece letters and get standard English SAN and PGN instantly. Free, no signup.",
      "kicker": "Free tool · No account needed",
      "h1": "Chess Notation Translator",
      "tagline": "Moves written with any language's piece letters, turned into English SAN and a PGN.",
      "intro": "Algebraic notation is the same everywhere except for the piece letters. A German scoresheet writes Sf3 for the knight move, a Spanish or French one Cf3, a Russian one Кf3, and most chess programs only read Nf3. Swapping letters one for one gets it wrong: R is the king in Spanish, Italian, French and Portuguese but a rook in English, and К is a knight in Russian while Кр is the king. This page reads each move with one language's letters and replays it on a board, so every move is checked against the position it was played in. The result is standard English SAN and a PGN any chess program opens.",
      "features": [
        {
          "title": "Ten letter sets, detected for you",
          "body": "English, German, Spanish, French, Italian, Portuguese, Dutch, Russian, Polish and Czech, plus figurines such as ♘f3. The set that replays the most moves is chosen, or you pick it yourself."
        },
        {
          "title": "Every move checked",
          "body": "The game is replayed from the starting position, or from a FEN you give. The first move that is not legal is named, so a misread letter or a slip on the scoresheet is easy to find."
        },
        {
          "title": "Short and long notation",
          "body": "Reads Sf3, Sg1-f3 and g1-f3, captures written with x or a colon, promotions such as e8D or e8=Ф, and castling written with zeros or with the letter O."
        },
        {
          "title": "Both directions",
          "body": "Turn English SAN into German, Spanish, Russian or any of the other letter sets, for a club bulletin or a scoresheet in your own language."
        }
      ],
      "howToTitle": "How to translate chess notation",
      "howTo": [
        "Paste the moves, with or without move numbers. Comments and variations are skipped.",
        "Leave the language on automatic, or pick the letters the moves were written with.",
        "If the game did not start from the usual position, paste its FEN in the start position field.",
        "Copy the English moves or the PGN, download the PGN, or open it in the PGN viewer."
      ],
      "faq": [
        {
          "question": "What are the chess piece letters in other languages?",
          "answer": "In the order king, queen, rook, bishop, knight, pawn: English K Q R B N P; German K D T L S B; Spanish and Italian R D T A C P; French R D T F C P; Portuguese R D T B C P; Dutch K D T L P, with no pawn letter; Russian Кр Ф Л С К п; Polish K H W G S P; Czech K D V S J P. Pawn moves are normally written without a letter."
        },
        {
          "question": "How does it know which language I used?",
          "answer": "It replays the moves with every letter set and keeps the one that gets furthest without an illegal move. When several fit equally well, as in a game of only pawn moves, it prefers the set whose letters appear in the text. Spanish and Italian use the same letters, so either gives the same English moves."
        },
        {
          "question": "Why does it stop at a move?",
          "answer": "Because that move is not legal in the position reached when it is read with the chosen letters. Often a letter was misread or the move was written down wrong. Check it against the scoresheet, or pick another language by hand."
        },
        {
          "question": "Can it read a handwritten scoresheet?",
          "answer": "It translates typed moves. The ScanChess scoresheet scanner reads handwritten scoresheets written with English piece letters (K, Q, R, B, N) and checks every move; a scoresheet in other letters can be typed in and translated here."
        },
        {
          "question": "Does it handle descriptive notation such as P-K4?",
          "answer": "No. Descriptive notation names squares from each player's side of the board. English descriptive such as P-K4 is converted by Descriptive to Algebraic. This tool reads algebraic notation, whatever the language of its piece letters."
        }
      ],
      "cta": {
        "title": "Typing up a scoresheet by hand?",
        "body": "If it is written with English piece letters, ScanChess reads the handwriting into a PGN and checks every move. Free credits on sign-up.",
        "button": "Scan a scoresheet"
      }
    },
    "time-control-calculator": {
      "name": "Time Control Calculator",
      "seoTitle": "Chess Time Control Calculator: How Long a Game Lasts",
      "seoDescription": "Enter a time control like 90+30 or 15+10 and see the maximum and typical game length, plus its FIDE category (classical, rapid, blitz).",
      "kicker": "Free tool · No account needed",
      "h1": "Chess Time Control Calculator",
      "tagline": "How long a game at 90+30, 15+10 or 3+2 can last, and which category it is.",
      "intro": "A time control such as 90+30 gives each player 90 minutes for the game plus 30 seconds after every move. How long the game takes then depends on how many moves are played and how much of the clock the players use. This page works out the longest the game can take for the number of moves you set, a typical length based on the 347,741 over-the-board games we measured, and how the control is classed: blitz, rapid or standard under the FIDE Laws of Chess, and its category on Lichess and Chess.com.",
      "features": [
        {
          "title": "Any common notation",
          "body": "90+30, 15|10, 3+2, 90/40+30+30 for a move control followed by a second period, or G/90;d5 with a delay."
        },
        {
          "title": "Longest and typical length",
          "body": "The longest game is both clocks run down to zero over the moves you choose. The typical length is what a median 41-move game takes: about 85% of the time those moves allow."
        },
        {
          "title": "FIDE category",
          "body": "Blitz is 10 minutes or less per player, rapid more than 10 and less than 60, standard 60 or more, counting the base time plus 60 times the increment."
        },
        {
          "title": "Online categories",
          "body": "Lichess and Chess.com estimate a game as the base time plus 40 times the increment. On Chess.com, under 3 minutes is bullet, 3 to under 10 is blitz and 10 or more is rapid, as its Help Center sets out."
        }
      ],
      "howToTitle": "How to work out how long a chess game lasts",
      "howTo": [
        "Type the time control, or pick one of the common ones.",
        "Check the line under the box: it says how the control was read.",
        "Set the number of moves for the longest game. 60 moves cover about 85% of classical games.",
        "Read the longest and the typical length, each player's time and the categories."
      ],
      "faq": [
        {
          "question": "How long does a 90+30 chess game last?",
          "answer": "Each player has 90 minutes plus 30 seconds a move, so a 60-move game can take up to 4 hours on the two clocks together, and a 41-move game up to about 3 hours 41 minutes. In the over-the-board games we measured, the median game at 90+30 took 3 hours 3 minutes."
        },
        {
          "question": "Is 15+10 rapid or blitz?",
          "answer": "Rapid. FIDE counts the base time plus 60 times the increment: 15 minutes plus 60 × 10 seconds is 25 minutes, which is more than 10 and less than 60. Blitz is 10 minutes or less, so 3+2 (5 minutes) and 5+3 (8 minutes) are blitz."
        },
        {
          "question": "What does 90/40+30+30 mean?",
          "answer": "90 minutes for the first 40 moves, then 30 more minutes for the rest of the game, with 30 seconds added for every move from move 1. It is the classical control of many FIDE-rated events. Some write 40/90 instead of 90/40; the calculator takes the larger number as the minutes."
        },
        {
          "question": "Why do FIDE and Lichess class the same control differently?",
          "answer": "They count the increment differently. FIDE adds 60 increments to the base time, Lichess and Chess.com add 40. So 10+0 is blitz for FIDE (10 minutes or less) but rapid on Lichess and Chess.com."
        },
        {
          "question": "Is 2|1 bullet or blitz on Chess.com?",
          "answer": "Bullet. Chess.com estimates each player’s time as the base minutes plus 40 times the increment in seconds, so 2|1 comes to 2 min 40 s, short of the 3 minutes where blitz begins. Its Help Center puts bullet under 3 minutes, blitz from 3 to under 10 and rapid at 10 or more: 1|0 is bullet, 3|0, 5|0 and 4|4 are blitz, and 10|0, 2|12 and 15|10 are rapid. Daily chess, played in days per move, is a separate category."
        },
        {
          "question": "How is a delay counted?",
          "answer": "A delay, as in G/90;d5, gives a few seconds each move before the clock starts running. Unused delay is not added to the clock, so the longest possible game is the same as with an equal increment, and the calculator counts it like one for the categories."
        }
      ],
      "cta": {
        "title": "Playing a long game this weekend?",
        "body": "Print a scoresheet for the round, and afterwards scan it: ScanChess reads the handwriting into a PGN you can replay and analyze.",
        "button": "Scan a scoresheet"
      }
    },
    "pgn-splitter": {
      "name": "PGN Splitter",
      "seoTitle": "PGN Splitter & Merger: Split or Combine PGN Files",
      "seoDescription": "Split a multi-game PGN into one file per game, or merge several PGN files into one. Lists White, Black, Event and Date. Free, runs in your browser.",
      "kicker": "Free tool · No account needed",
      "h1": "PGN Splitter & Merger",
      "tagline": "One file per game, or one file from many.",
      "intro": "A tournament download, a club database or a week of online games usually arrives as one PGN file with every game in it. This page cuts that file into one PGN per game, named after the players and the date, and lists each game's White, Black, Event, Date and result so you can find the one you want. It also works the other way: add several PGN files and get one file with every game, with repeated games left out if you want. Comments, variations, Windows line ends and a byte-order mark at the start of the file are all handled, and nothing leaves your browser.",
      "features": [
        {
          "title": "Splits only between games",
          "body": "A comment that spans lines or a variation in brackets never cuts a game in two. Games exported without tags are told apart by their result."
        },
        {
          "title": "Every game's tags at a glance",
          "body": "The list shows White, Black, Event, Date, result and the number of moves, so a game can be found before it is saved."
        },
        {
          "title": "Copy, download or open",
          "body": "Copy one game, save it as its own .pgn file, open it in the PGN viewer, or save every game as a separate file in one go."
        },
        {
          "title": "Merge with duplicates removed",
          "body": "Add .pgn files or pasted games in the order you want them. A game that is already in the merged file can be left out."
        }
      ],
      "howToTitle": "How to split or merge PGN files",
      "howTo": [
        "To split, paste a PGN with several games or choose a .pgn file. The games are listed as soon as they are read.",
        "Copy a game, download it, open it in the PGN viewer, or download each game as its own file.",
        "To merge, switch to Merge several files and add .pgn files or pasted games in the order you want.",
        "Copy the merged PGN or download it as merged.pgn."
      ],
      "faq": [
        {
          "question": "How do I split a PGN file with many games?",
          "answer": "Paste the PGN or choose the .pgn file. Each game is listed with its players, event and date, and Download each game saves every game as its own .pgn file, named with its number, the players and the date."
        },
        {
          "question": "How do I combine several PGN files into one?",
          "answer": "Choose Merge several files, add the files (or paste games), and copy or download the result. Games keep their tags and moves, separated by a blank line, in the order the files were added."
        },
        {
          "question": "Are comments and variations kept?",
          "answer": "Yes. Each game is saved as written, with its comments, variations and annotation symbols. The splitter only decides where one game ends and the next begins."
        },
        {
          "question": "What if a game has no tags?",
          "answer": "Games without tags are separated by their result (1-0, 0-1, 1/2-1/2 or *). When such a game is saved or merged, the seven standard tags are added with question marks, so other programs can read it."
        },
        {
          "question": "Is there a limit on file size?",
          "answer": "There is no upload, so the limit is your device's memory. Files with thousands of games split fine; the list shows the first 200, and every game can still be downloaded."
        }
      ],
      "cta": {
        "title": "Your games are on paper scoresheets",
        "body": "Photograph a scoresheet and ScanChess reads the moves into a PGN you can check and add to your file. A scoresheet scan costs 2 credits; new accounts get 10 free.",
        "button": "Scan a scoresheet"
      }
    },
    "opening-identifier": {
      "name": "Opening Identifier",
      "seoTitle": "Chess Opening Identifier: Find Opening Name & ECO",
      "seoDescription": "Paste a PGN, moves or a FEN and get the chess opening name and ECO code, from the deepest named position. Finds transpositions. Free, no sign-up.",
      "kicker": "Free tool · No account needed",
      "h1": "Chess Opening Identifier",
      "tagline": "Paste a game or a FEN, get the opening and its ECO code.",
      "intro": "Paste a game, a bare move list or a FEN and this page names the opening: its ECO code (B90, C65…) and its full name, down to the variation. It replays the game and looks up every position, not the move order, so a game that reaches the Queen's Gambit Declined by 1. Nf3 and 2. c4 is still called the Queen's Gambit Declined. The answer is the deepest named position the game reached, with the move that reached it and every named position before it. The names and codes come from the Lichess chess-openings data set, which is in the public domain.",
      "features": [
        {
          "title": "Matched by position",
          "body": "Each position of the game is looked up, so transpositions are found and the name is the one the position deserves, whatever the move order."
        },
        {
          "title": "The deepest named line",
          "body": "The result is the last named position the game passed through, with the move that reached it and the board as it stood."
        },
        {
          "title": "PGN, move list or FEN",
          "body": "Paste a full PGN with tags and comments, a plain move list, or a single FEN. A file with several games lets you pick one."
        },
        {
          "title": "Thousands of named lines",
          "body": "ECO codes A00 to E99 and the Lichess names for each line, matched in your browser. Nothing is uploaded."
        }
      ],
      "howToTitle": "How to identify a chess opening",
      "howTo": [
        "Paste a PGN, a move list such as 1. e4 c5 2. Nf3, or a FEN. You can also choose a .pgn file.",
        "Read the ECO code and the name of the deepest named position, and the move that reached it.",
        "Check the list of named positions to see where the game went on the way.",
        "Open the position in the analysis board, or analyze the whole game."
      ],
      "faq": [
        {
          "question": "What is an ECO code?",
          "answer": "The Encyclopaedia of Chess Openings classifies openings into five volumes, A to E, with codes from A00 to E99. B90, for example, is the Najdorf Sicilian. Several named lines can share one code."
        },
        {
          "question": "Why does the name change as I add moves?",
          "answer": "Each named line is a position. A game first reaches King's Pawn Game, then Sicilian Defense, then a variation of it. The page shows the deepest one, and lists the ones before it."
        },
        {
          "question": "Does it find transpositions?",
          "answer": "Yes. Positions are compared, not move orders, so the same position reached by a different order of moves gets the same name."
        },
        {
          "question": "Can I paste a FEN instead of moves?",
          "answer": "Yes. A FEN that is itself a named position gets its name. A position from the middlegame has no opening name of its own; paste the moves that led to it to see which opening the game came from."
        },
        {
          "question": "Where do the names come from?",
          "answer": "From the Lichess chess-openings data set, which its authors dedicate to the public domain (CC0). The names are in English, as in the data set."
        }
      ],
      "cta": {
        "title": "The game is on a paper scoresheet",
        "body": "Photograph the scoresheet and ScanChess reads the moves into a PGN, opening name included. A scoresheet scan costs 2 credits; new accounts get 10 free.",
        "button": "Scan a scoresheet"
      }
    },
    "descriptive-to-algebraic": {
      "name": "Descriptive to Algebraic",
      "seoTitle": "Descriptive to Algebraic Notation Converter",
      "seoDescription": "Convert old descriptive chess notation (P-K4, N-KB3, PxP, O-O) to algebraic SAN and PGN. Every move is checked on a board. Free, in your browser.",
      "kicker": "Free tool · No account needed",
      "h1": "Descriptive to Algebraic Notation Converter",
      "tagline": "Type P-K4 N-KB3, get e4 Nf3 and a PGN.",
      "intro": "English and American chess books printed games in descriptive notation until the 1970s and 1980s: P-K4, N-KB3, PxP, QxN ch. Each square is named from the side of the player moving, so White's K4 is e4 and Black's K4 is e5, and a book leaves out whatever the position makes obvious. This converter replays every move on a board as it reads it, works out which piece moved and where, and writes algebraic notation (SAN) and a PGN you can open anywhere. When a move could mean two things, such as PxP with two pawns able to capture, it says so and names both instead of guessing.",
      "features": [
        {
          "title": "Read from the side to move",
          "body": "Ranks are counted from each player's side and files are named QR to KR, so P-K4 is e4 for White and e5 for Black."
        },
        {
          "title": "Short forms resolved on the board",
          "body": "N-B3, B-N5 and PxP leave a file or a piece out. The legal moves in the position decide which one is meant, and a check sign breaks a tie."
        },
        {
          "title": "Ambiguity reported, not guessed",
          "body": "If more than one legal move fits, conversion stops at that move and lists the candidates, so a wrong guess never runs on through the game."
        },
        {
          "title": "Castling, en passant, promotion",
          "body": "O-O and O-O-O, PxP e.p., P-K8=Q or P-K8(Q), and the old Kt for a knight are all read. The result is a PGN for any viewer."
        }
      ],
      "howToTitle": "How to convert descriptive notation to algebraic",
      "howTo": [
        "Type or paste the moves as the book prints them, for example 1. P-K4 P-K4 2. N-KB3 N-QB3.",
        "Read the algebraic moves beside each descriptive one. The board shows the position after the last move.",
        "If a move stops the conversion, add the missing file or piece (KPxP, QR-Q1) or fix the typo, and it continues.",
        "Copy the PGN, download it, or open it in the PGN viewer to play through the game."
      ],
      "faq": [
        {
          "question": "How is P-K4 for Black e5?",
          "answer": "Descriptive notation counts ranks from the side of the player moving. Black's fourth rank is White's fifth, so Black's P-K4 is e5. The files are the same for both: the king file is the e-file."
        },
        {
          "question": "What do QB, KN and the other file names mean?",
          "answer": "Each file is named after the piece that starts on it: QR is a, QN b, QB c, Q d, K e, KB f, KN g and KR h. A book often writes only B, N or R, and the position decides which side is meant."
        },
        {
          "question": "What happens with PxP when two pawns can capture?",
          "answer": "The converter stops and lists both moves. A book of the time would write KPxP or BPxP, or rely on the reader; add that file and conversion goes on."
        },
        {
          "question": "Can it read promotions and en passant?",
          "answer": "Yes. P-K8=Q, P-K8(Q) and P-K8/Q are read as promotions; a promotion with no piece named is read as a queen, and the page says so. Write en passant as PxP e.p."
        },
        {
          "question": "Does it work for Spanish, German or French descriptive notation?",
          "answer": "No. It reads English descriptive notation, with the English piece letters K, Q, R, B, N (or Kt) and P. Algebraic moves that only change the piece letters, such as German Sf3 or Spanish Cf3, go in the Chess Notation Translator."
        }
      ],
      "cta": {
        "title": "The game is in a chess book you own",
        "body": "Photograph a diagram and ScanChess reads it into a FEN you can correct. One board image costs one credit.",
        "button": "Scan a board image"
      }
    },
    "tiebreak-calculator": {
      "name": "Tiebreak Calculator",
      "seoTitle": "Chess Tiebreak Calculator: Buchholz & Sonneborn-Berger",
      "seoDescription": "Work out Buchholz, Buchholz Cut-1, Median, Sonneborn-Berger, direct encounter and wins for a Swiss crosstable, per FIDE rules. Free, CSV export.",
      "kicker": "Free tool · No account needed",
      "h1": "Chess Tiebreak Calculator",
      "tagline": "Enter the crosstable, get every tie-break and the final ranking.",
      "intro": "When players finish on the same points, a Swiss tournament is ranked by tie-breaks. Enter each player's results round by round, or paste a crosstable, and this page works out points, Buchholz, Buchholz Cut-1, Median Buchholz, Sonneborn-Berger, direct encounter and the number of wins, then ranks the players in the order of tie-breaks you choose. Byes and forfeits follow Article 16 of the FIDE Tie-Break Regulations effective 1 March 2026: a player's own unplayed round counts as a game against a dummy opponent with the player's own score, and a requested bye at the end of the event counts as a draw for the opponents' Buchholz. The older virtual-opponent rule is available for events run under it.",
      "features": [
        {
          "title": "The usual Swiss tie-breaks",
          "body": "Buchholz, Buchholz Cut-1, Median Buchholz, Sonneborn-Berger, direct encounter and number of wins, side by side for every player."
        },
        {
          "title": "Byes and forfeits by the rules",
          "body": "Pairing-allocated and requested byes, forfeit wins and losses and absences are valued as FIDE Article 16 says, with Cut-1 taking a voluntary unplayed round first."
        },
        {
          "title": "Your order of tie-breaks",
          "body": "Switch tie-breaks on or off and move them up or down to match the tournament regulations. Ties left after all of them share a rank."
        },
        {
          "title": "Checks the crosstable",
          "body": "A game entered differently for the two players, or an opponent missing from the table, is pointed out. Copy the standings as CSV for a spreadsheet."
        }
      ],
      "howToTitle": "How to calculate chess tie-breaks",
      "howTo": [
        "Enter each player's name and one cell per round, such as 12w1 for a win with White against player 12, or paste a crosstable.",
        "Mark byes and forfeits: + for a pairing bye, H for a half-point bye, - for an absence, 9+ or 9- for a forfeit.",
        "Choose the tie-breaks and their order as the tournament regulations list them.",
        "Read the ranked standings and copy or download them as CSV."
      ],
      "faq": [
        {
          "question": "What is Buchholz in chess?",
          "answer": "The sum of the final scores of a player's opponents. Buchholz Cut-1 leaves out the lowest of those scores; Median Buchholz leaves out the lowest and the highest. A higher Buchholz means stronger opposition."
        },
        {
          "question": "What is Sonneborn-Berger?",
          "answer": "For each game, the opponent's final score multiplied by the points scored against them, added up: a full win counts the whole score, a draw half of it, a loss nothing. It rewards results against the players who finished high."
        },
        {
          "question": "How are byes and forfeits counted?",
          "answer": "Under the FIDE rules effective 1 March 2026 (Article 16), a player's own unplayed round is valued as a game against a dummy opponent with the player's own score, capped for a forfeit at the scheduled opponent's score. For opponents' tie-breaks, unplayed rounds count with the points awarded, except a requested bye in the last round or followed only by absences, which counts as a draw."
        },
        {
          "question": "How does direct encounter work?",
          "answer": "Among the players still tied, the points each scored in games against the others decide, if they all played each other. If not all of them met, it separates a player only when that player would be ahead whatever the missing games had been. Forfeits do not count."
        },
        {
          "question": "Can I use it for a round robin?",
          "answer": "The FIDE regulations say Buchholz-type tie-breaks must not be used in round robins. There, use direct encounter, Sonneborn-Berger and number of wins, which this page also works out."
        }
      ],
      "cta": {
        "title": "The round's games are on paper",
        "body": "Photograph the scoresheets of a round and ScanChess reads each game into a PGN for the tournament archive. A scoresheet scan costs 2 credits; new accounts get 10 free.",
        "button": "Scan a scoresheet"
      }
    }
  },
  "experience": {
    "startWithImage": "Start with the image you have",
    "heroTitle": "Chess images to FEN. Handwritten scoresheets to PGN.",
    "heroLead": "Upload a board image or a handwritten scoresheet. Check the result, then analyze the game with Stockfish and the AI coach, replay it or export it.",
    "boardTitle": "Chess image to an editable position",
    "boardLead": "Paste or upload one clear screenshot, 2D diagram, or top-down board photo to get editable FEN. Angled photos and physical 3D pieces can need correction; always check the result and side to move.",
    "sheetTitle": "Handwritten scoresheets to PGN",
    "sheetLead": "Upload the pages of one game in order. Check the moves beside the original, then export PGN. Use Round scan for several separate games.",
    "samples": "No image ready? Try an example.",
    "sampleHint": "Preloaded examples: no sign-in, no OCR request, no credits spent. Explore the result and try editing it.",
    "sample_board": "Board photo → editable position",
    "sample_scoresheet": "Scoresheet → first 8 moves",
    "sample_review": "Practice checking a flagged move",
    "sampleNotice": "Preloaded example / checking exercise, not a live scan. The scoresheet example covers only its first 8 moves. A flagged move in the exercise is a teaching aid, not an OCR measurement.",
    "importNotice": "Imported notation. No image recognition was performed. Check the content before using it.",
    "checkPosition": "Rule checks do not prove a match with the original. Compare the result with your image and correct anything that differs.",
    "newTask": "New scan",
    "continueTask": "Continue your task",
    "replaceTitle": "Keep your current work?",
    "replaceHint": "Your current images or result are still here. Continue working on them, or replace them to start the requested task. Export any result you want to keep first.",
    "replace": "Replace and start",
    "keep": "Continue current task",
    "reviewTitle": "Check your game",
    "reviewNext": "Check next move",
    "reviewRemaining_one": "{{count}} move to check",
    "reviewRemaining_other": "{{count}} moves to check",
    "sourceImage": "Original image",
    "zoom": "Zoom",
    "extras": "Game details, notes and sharing",
    "editPosition": "Correct pieces and position",
    "applyPosition": "Use this position",
    "turnHint": "Which side is to move? Board orientation does not answer this. Castling and other history may also need correction in the position editor.",
    "confirmPosition": "I have checked the position",
    "reviewed": "Checked by you",
    "unreviewed": "Not yet checked by you. You can still copy this FEN.",
    "outputTitle": "One position. Or an entire game.",
    "boardCost": "Image recognition requires sign-in: 1 credit per board. New accounts receive 10 free credits.",
    "sheetCost": "Image recognition requires sign-in: 2 credits per scoresheet scan, including the pages of one game.",
    "lowBalance": "{{balance}} credits left, enough for {{count}} scans in this mode.",
    "boardWaiting": "Reading the pieces and board orientation. You can check and correct the position once the result arrives.",
    "freeAllowance": "10 free credits on sign-up: up to 10 boards or 5 scoresheet scans. No card required.",
    "pricingUsage": "Credits can be mixed: 100 credits cover 100 boards or 50 scoresheet scans. Editing, replay, PGN export and saved game history remain free.",
    "selectedPlan": "Your selected plan: {{plan}}. Review the price below to continue.",
    "toolsTitle": "Already have PGN or FEN?",
    "toolsLead": "Replay, check, analyze or prepare your chess material for sharing. These tools run in your browser without an account.",
    "tournamentTitle": "A whole round of scoresheets?",
    "tournamentLead": "Group the pages by game, add a pairing list and prepare a round for checking and PGN export. Keep individual game scans and tournament work separate.",
    "faqBoard": "Which board images can I use?",
    "faqBoardComparison": "How does this compare with FENShot or Chessify?",
    "boardComparison": "They solve the same image-to-FEN job with different tradeoffs. FENShot focuses on free local screenshot recognition, while Chessify includes board scanning in its service. ScanChess accepts screenshots, diagrams, and clear photos, then keeps correction beside the result; recognition requires sign-in and 1 credit. Check every tool’s output before analysis.",
    "faqSheet": "Can I upload several pages of a game?",
    "faqCorrection": "Can I correct the result?",
    "faqExample": "Do examples spend credits?",
    "correctionHelp": "Open a marked move or the position editor to correct the result. Editing does not spend credits.",
    "analysisHint": "Try legal moves by dragging, or tap a piece and its destination. Exploration does not change the original position.",
    "resetAnalysis": "Return to the original position",
    "partialTitle": "Some moves still need correction",
    "partialHint": "The full game cannot be replayed yet. You can export only the playable beginning with an unfinished result. Your original moves remain available for correction.",
    "partialConfirm": "Export playable beginning",
    "sheetCostSignedIn": "2 credits per scoresheet scan, including all pages of one game.",
    "boardCostSignedIn": "1 credit per board image.",
    "homeFaqTitle": "Questions about ScanChess",
    "homeFaq": [
      {
        "q": "Is ScanChess free?",
        "a": "Signing up gives 10 free credits, enough for up to 10 board images or 5 scoresheet scans, with no card required. A board costs 1 credit and a scoresheet scan 2, however many pages the game has. The free tools need no account; reading a photo of a real board in the best move finder and asking for an AI explanation need a free account."
      },
      {
        "q": "Can it read a handwritten scoresheet?",
        "a": "Yes. Upload the pages of one game in order and the moves are read, checked against the rules and shown beside the original, so a doubtful move can be fixed before you export the PGN. It reads algebraic notation; descriptive notation such as P-K4 is not converted."
      },
      {
        "q": "Which board images can I use?",
        "a": "A screenshot of an online game, a diagram from a book or a clear top-down photo of a real board. You get an editable FEN and choose the side to move; angled photos and carved 3D pieces may need a square or two corrected."
      },
      {
        "q": "Why not just type the game into Lichess or Chess.com?",
        "a": "Both import a PGN, but someone has to type it first, and a single typo stops the import. ScanChess turns the photo into that PGN, checks that every move is legal, and the result imports into Lichess, Chess.com or ChessBase."
      },
      {
        "q": "What do I get after scanning?",
        "a": "The game is saved to your games library with its photo. Stockfish analysis is free and shows each side's accuracy and the turning points, and the AI coach explains them: one game a day free, then 1 credit. Missed tactics become daily practice (15 a day free), and your analyzed games build an insights profile. Pro adds opening repertoires, opponent scouting and event reports; Pro+ adds the club tools."
      }
    ],
    "exampleBoardCaption": "Prepared example with a preloaded position. This preview does not run recognition.",
    "exampleScoresheetCaption": "Prepared scoresheet illustration: the first 8 moves, with a preloaded result. No recognition is run.",
    "group_analyze": "Analyze & practice",
    "group_convert": "Convert & export",
    "group_tournament": "Tournament & scoresheets",
    "group_fun": "Fun",
    "afterScan": {
      "title": "After you scan",
      "lead": "A scan is where the work on a game starts. This is what happens to it next.",
      "steps": {
        "save": {
          "title": "Saved to your games",
          "text": "A scanned game goes into your games library with its original photo, on every device you sign in from. Export the PGN whenever you like.",
          "link": "Digitize your games"
        },
        "analyze": {
          "title": "Analyzed for free",
          "text": "Stockfish finds each side's accuracy and the moments the game turned. The AI coach explains them in plain words: one game a day free, then 1 credit.",
          "link": "Analyze a game"
        },
        "practice": {
          "title": "Missed tactics become practice",
          "text": "The shots you missed turn into short daily practice cards from your own games: 15 a day free, unlimited on Pro.",
          "link": "Practice missed tactics"
        },
        "insights": {
          "title": "Your insights profile",
          "text": "Your analyzed games add up to a profile of your play that you can compare with your Lichess or Chess.com games. The full profile, with accuracy over time, phases and mistake types, comes with Pro.",
          "link": "Open insights"
        },
        "prepare": {
          "title": "Prepare for the next opponent",
          "text": "Keep opening repertoires and see where a game left them, and scout an opponent's online games before you sit down. Pro: 5 repertoires and 30 scouting reports a month; Pro+: 20 and 100.",
          "link": "Compare plans"
        },
        "clubs": {
          "title": "Clubs and coaches",
          "text": "A player roster with a page per student, round scan games assigned to players in one step, and event reports with public share links you can withdraw.",
          "link": "For coaches & clubs"
        }
      }
    }
  },
  "refinement": {
    "preparing": "Preparing your images…",
    "boardInputHint": "Screenshots, diagrams, photos",
    "sheetInputHint": "One game, one or more pages",
    "fileGuide": "JPG, PNG, WebP · up to 15 MB per image",
    "playablePosition": "Editable position",
    "tryResult": "Try this position",
    "sampleHint": "Free examples. No account or credits needed.",
    "useOwnImage": "Use my own image",
    "portable": "Export your result to the chess tools you already use.",
    "position": "Position",
    "correct": "Correct",
    "needTurn": "Choose the side to move before analysis. This FEN currently has {{side}} to move.",
    "reviewHint": "Check the pieces or flagged moves. Corrections are free.",
    "analyse": "Analyze position",
    "notChecked": "Not yet checked by you",
    "moreOptions": "More options",
    "stepImage": "Image",
    "stepReview": "Check",
    "stepUse": "Use",
    "boardReview": "Check your position",
    "sample": "Example",
    "imported": "Imported",
    "unsaved": "Unsaved changes",
    "saved": "Saved",
    "reviewPending": "Ready to check",
    "boardSampleHint": "Try editing and analyzing this example.",
    "sheetSampleHint": "First 8 moves. The flag is part of the exercise.",
    "next": "Next issue",
    "save": "Save",
    "export": "Export",
    "guideLead": "Choose your material and follow it from upload to checking and export.",
    "exportHint": "Download or copy PGN after checking. If a move is still invalid, choose whether to export the playable beginning."
  },
  "scanFlow": {
    "signInToScan_one": "Sign in to scan · {{cost}} credit",
    "pagesReady_one": "1 page ready. Add more pages of this game or start scanning.",
    "replaceImage": "Replace image",
    "addPages": "Add more pages",
    "boardReady": "Image ready. Check it, then start recognition below.",
    "pagesReady": "{{count}} pages ready. Put them in game order before scanning.",
    "signInToScan": "Sign in to scan · {{cost}} credits",
    "readyLead": "Check your images, then start recognition. You can change the image type without uploading again."
  },
  "dashboard": {
    "seo": {
      "overviewTitle": "Overview · ScanChess workspace",
      "gamesTitle": "Games · ScanChess workspace",
      "reviewTitle": "To check · ScanChess workspace",
      "eventsTitle": "Events · ScanChess workspace",
      "positionsTitle": "Positions · ScanChess workspace",
      "clubTitle": "Club members · ScanChess workspace",
      "billingTitle": "Credits & plan · ScanChess workspace",
      "joinTitle": "Join a club · ScanChess",
      "description": "Your ScanChess workspace: scans, games, events and credits.",
      "playersTitle": "Club players · ScanChess workspace",
      "trainingTitle": "Daily practice · ScanChess workspace",
      "insightsTitle": "My insights · ScanChess workspace",
      "repertoireTitle": "Opening repertoire · ScanChess workspace",
      "scoutingTitle": "Opponent scouting · ScanChess workspace",
      "gameTitle": "{{game}} · ScanChess workspace",
      "settingsTitle": "Settings · ScanChess workspace",
      "batchTitle": "Round scan · ScanChess workspace",
      "notFoundTitle": "Page not found · ScanChess workspace",
      "eventTitle": "{{name}} · Events · ScanChess workspace",
      "scoutingReportTitle": "{{name}} · Opponent scouting · ScanChess workspace",
      "playerTitle": "{{name}} · Club players · ScanChess workspace",
      "scanTitle": "New scan · ScanChess workspace",
      "scanBoardTitle": "Board image · ScanChess workspace",
      "scanSheetTitle": "Scoresheet · ScanChess workspace",
      "tournamentsTitle": "My tournaments · ScanChess workspace",
      "tournamentTitle": "{{name}} · My tournaments · ScanChess workspace",
      "inviteTitle": "Invite friends · ScanChess workspace"
    },
    "nav": {
      "label": "Workspace",
      "scan": "New scan",
      "overview": "Overview",
      "review": "To check",
      "games": "Games",
      "events": "Events",
      "positions": "Positions",
      "members": "Members",
      "clubBilling": "Credits & billing",
      "clubHeading": "Club",
      "billing": "Credits & plan",
      "settings": "Settings",
      "tools": "Free tools",
      "more": "More",
      "players": "Players",
      "training": "Daily practice",
      "insights": "My insights",
      "repertoire": "Repertoire",
      "scouting": "Scouting",
      "new": "New",
      "groupGames": "My games",
      "groupImprove": "Improve",
      "groupPrepare": "Prepare",
      "myTournaments": "My tournaments",
      "practiceShort": "Practice",
      "invite": "Invite friends"
    },
    "userMenu": {
      "workspace": "Workspace"
    },
    "workbench": {
      "board": "Board",
      "addBoard": "Add board",
      "whiteElo": "White rating",
      "addWhiteElo": "Add White's rating",
      "blackElo": "Black rating",
      "addBlackElo": "Add Black's rating",
      "section": "Section",
      "addSection": "Add section",
      "tab": {
        "board": "Board",
        "details": "Details",
        "notes": "Notes",
        "share": "Share"
      }
    },
    "guest": {
      "title": "Not signed in",
      "body": "Examples are free. Sign in to scan your own images and keep your games. New accounts get 10 free credits."
    },
    "workspace": {
      "switch": "Switch workspace",
      "heading": "Workspaces",
      "personal": "Personal",
      "pro": "Pro",
      "free": "Free",
      "clubMembers_one": "Club · {{count}} member",
      "clubMembers_other": "Club · {{count}} members",
      "clubDetail_one": "{{role}} · {{count}} credit",
      "clubDetail_other": "{{role}} · {{count}} credits",
      "personalPro_one": "Pro · {{count}} credit",
      "personalPro_other": "Pro · {{count}} credits",
      "personalFree_one": "Free · {{count}} credit",
      "personalFree_other": "Free · {{count}} credits",
      "create": "Create a club",
      "join": "Join with an invite link",
      "hint": "New scans, games and credits follow the workspace you pick here."
    },
    "roles": {
      "owner": "Owner",
      "admin": "Admin",
      "member": "Member"
    },
    "credits": {
      "count_one": "{{count}} credit",
      "count_other": "{{count}} credits",
      "enoughScoresheets_one": "Enough for {{count}} scoresheet",
      "enoughScoresheets_other": "Enough for {{count}} scoresheets",
      "enoughBoards_one": "Enough for {{count}} board image",
      "enoughBoards_other": "Enough for {{count}} board images",
      "nextGrant": "Pro · next credits on {{date}}",
      "free": "Free plan",
      "clubBalance": "Shared by the club",
      "pro": "Pro plan"
    },
    "creditHistory": {
      "activity": {
        "scoresheet": "Scoresheet scan",
        "board": "Board recognition",
        "coachExplanation": "Coach explanation",
        "reportSummary": "Report summary",
        "positionExplanation": "Position explanation"
      },
      "refund": "Refund: {{what}}",
      "free": "{{what}} (free daily)",
      "freeReturned": "{{what}} (free daily, returned)"
    },
    "status": {
      "toCheck_one": "{{count}} to check",
      "toCheck_other": "{{count}} to check",
      "illegalFrom": "Illegal from move {{move}}",
      "noFlags": "No flags",
      "ruleChecked": "Every move replays by the rules; nobody has confirmed it yet",
      "checked": "Checked",
      "filterFlagged": "To check"
    },
    "progress": {
      "checked": "{{count}} checked",
      "noFlags": "{{count}} no flags",
      "toCheck": "{{count}} to check",
      "notScanned": "{{count}} not scanned"
    },
    "game": {
      "round": "Round {{round}}",
      "board": "Board {{board}}",
      "missingTitle": "This game is not in this workspace",
      "missingBody": "It may have been deleted, or it belongs to another workspace. Switch workspace or open your games.",
      "breadcrumb": "Breadcrumb",
      "startChecking": "Check moves"
    },
    "overview": {
      "personalDescription": "Personal workspace",
      "continue": "Continue",
      "savedToday": "Saved today",
      "savedOn": "Saved {{date}}",
      "today": "Today",
      "dropTitle": "Drop, paste or choose an image",
      "dropCosts": "Board image 1 credit · scoresheet 2 credits",
      "scoresheet": "Scoresheet",
      "recentGames": "Recent games",
      "allGames": "All games",
      "allPositions": "All positions",
      "noGamesTitle": "No games yet",
      "noGamesBody": "Scan a scoresheet and the game is saved here, ready to check, replay and export.",
      "scanFirst": "Scan a scoresheet",
      "credits": "Credits",
      "inviteLine": "Invite a friend: you both get 5 credits",
      "copyLink": "Copy link",
      "extensionHint": "Boards you save from the site or the extension land here",
      "continueChecking": "Continue checking",
      "openAnalysis": "Open analysis",
      "toCheckTitle_one": "{{count}} game to check",
      "toCheckTitle_other": "{{count}} games to check",
      "toCheckBody": "Some scanned moves were hard to read. Compare them with the sheet before you analyze or share the game.",
      "toCheckAction": "Start checking",
      "nextStep": "Next step",
      "practiceTitle_one": "1 practice card is due today",
      "practiceTitle_other": "{{count}} practice cards are due today",
      "insightsTitle": "See what your games say about your play",
      "latestAnalyzed": "Your latest game, {{game}}, is analyzed.",
      "openInsights": "Open insights"
    },
    "lowBalance": {
      "body": "Pro adds 100 credits every 30 days — about 50 scoresheets — for $2.50 a month, billed $29.99 yearly.",
      "seePro": "See Pro",
      "invite": "Invite a friend · +5 each",
      "notNow": "Not now"
    },
    "upgrade": {
      "cta": "Upgrade to Pro",
      "title": "Keep scanning with Pro",
      "titlePass": "Keep scanning with the Pro Yearly Pass",
      "subtitle": "Credits land in your balance as soon as payment is confirmed.",
      "usage": "In the last 30 days you used {{credits}} credits: {{scoresheets}} scoresheets and {{boards}} board images.",
      "billing": "Billing",
      "planLabel": "Plan",
      "fits": "Fits how you scan",
      "tierDetail": {
        "pro": "100 credits every 30 days · about 50 scoresheets",
        "proplus": "500 credits every 30 days · about 250 scoresheets · for clubs and coaches who scan a lot"
      },
      "monthlyEquivalent": "{{monthly}} a month, billed {{yearly}} yearly",
      "perYear": "/ year",
      "perMonth": "/ month",
      "totalBeforeTax": "Total before tax",
      "continue": "Continue to checkout",
      "smallPrint": "Renews automatically at the same price until you cancel. All payments are final and non-refundable except where the law requires otherwise. Credits never expire. Tax is calculated at checkout by Waffo, our merchant of record.",
      "refundPolicy": "Refund Policy",
      "clubPlan": "Pro+ is the plan for clubs and coaches: everything in Pro, more credits, and the features you share with others.",
      "cnNoProPlus": "Pro+ isn't available in the CNY store yet. Contact support and we'll help you get it.",
      "contactSupport": "Contact support",
      "quota": {
        "notIncluded": "Not included"
      },
      "topics": {
        "insights": {
          "title": "See your full profile with Pro",
          "subtitle": "Where your games are won and lost, across every game you've analyzed.",
          "points": {
            "0": "Accuracy over time, by game phase and by mistake type",
            "1": "Your openings with each color, won positions converted, and what to practice next",
            "2": "Filters by period, source and time control, and the deeper online vs over-the-board comparison"
          },
          "included": "Full profile and filters"
        },
        "repertoire": {
          "title": "Keep opening repertoires with Pro",
          "subtitle": "Keep the lines you prepare, and see where each game left them.",
          "points": {
            "0": "Import a repertoire from PGN, or build one from your own games",
            "1": "See the move where each game left your preparation"
          },
          "quota_one": "{{count}} repertoire",
          "quota_other": "{{count}} repertoires"
        },
        "scouting": {
          "title": "Scout your opponents with Pro",
          "subtitle": "Before a game: what your opponent plays online, how they score with it, and where to aim.",
          "points": {
            "0": "Reads their latest public games on Lichess or Chess.com",
            "1": "Their openings with each color, and how they score with them"
          },
          "quota_one": "{{count}} scouting report a month",
          "quota_other": "{{count}} scouting reports a month"
        },
        "eventReport": {
          "title": "Get the full event report with Pro",
          "subtitle": "A printable summary of one player's event, built from the engine analysis saved with each game.",
          "points": {
            "0": "The biggest mistake in each round, the openings, and mistakes that came back",
            "1": "Won positions not converted, and what to practice next"
          },
          "quota_one": "{{count}} event report a month",
          "quota_other": "{{count}} event reports a month"
        },
        "reportShare": {
          "title": "Share reports with Pro+",
          "subtitle": "Send parents or another coach a private link to a report, with an expiry you choose.",
          "points": {
            "0": "Anyone with the link can read it without an account",
            "1": "Player names stay hidden unless you choose to show them"
          },
          "included": "Share links to reports"
        },
        "clubPlayers": {
          "title": "Keep a player roster with Pro+",
          "subtitle": "A club on Pro+ keeps a roster of its students and files each scanned game under the players who played it.",
          "points": {
            "0": "Each student's profile, games and reports in one place",
            "1": "A round's scoresheets filed under the right players"
          },
          "included": "The club's player roster"
        },
        "training": {
          "title": "Practice without a daily limit",
          "subtitle_one": "Free accounts get {{count}} practice card a day; Pro and Pro+ have no daily limit.",
          "subtitle_other": "Free accounts get {{count}} practice cards a day; Pro and Pro+ have no daily limit.",
          "points": {
            "0": "Positions from your own games where a winning shot was missed",
            "1": "Each card comes back just before you would forget it"
          },
          "included": "Unlimited practice"
        },
        "coach": {
          "title": "Keep the coach explaining",
          "subtitle_one": "{{count}} explanation a day is free.",
          "subtitle_other": "{{count}} explanations a day are free.",
          "points": {
            "1": "Pro and Pro+ add credits every 30 days, and credits never expire",
            "0_one": "After that, each explanation costs {{count}} credit",
            "0_other": "After that, each explanation costs {{count}} credits"
          }
        }
      }
    },
    "needCredits": {
      "title_one": "This scan needs {{cost}} credits. You have {{count}}.",
      "title_other": "This scan needs {{cost}} credits. You have {{count}}.",
      "keep": "Your photos stay here, and checkout brings you straight back to this scan.",
      "proTitle": "Pro · yearly",
      "proBody": "100 credits every 30 days · about 50 scoresheets · or {{monthly}} a month",
      "inviteTitle": "Invite a friend",
      "inviteBody": "You both get 5 credits when a new friend signs up with your link and confirms their email.",
      "freeStays": "Editing, replay, PGN export and examples stay free.",
      "proNext": "Your next {{credits}} credits arrive on {{date}}.",
      "proPlus": "Pro+ adds 500 every 30 days — about 250 scoresheets.",
      "seeProPlus": "See Pro+",
      "clubTitle": "{{name}} is out of credits",
      "clubBody": "This scan needs {{cost}} credits; the club has {{balance}}.",
      "buyForClub": "Buy credits for the club",
      "usePersonal": "Scan in my personal workspace · {{count}} credits",
      "personalNote": "A scan in your personal workspace is saved to your own library, not the club's."
    },
    "games": {
      "count_one": "{{count}} game",
      "count_other": "{{count}} games",
      "exportAll": "Export all",
      "exportFiltered": "Export these",
      "exported_one": "Exported {{count}} game",
      "exported_other": "Exported {{count}} games",
      "exportTruncated": "Only the first 1,000 games fit in one file. Narrow the filters to export the rest.",
      "searchLabel": "Search games",
      "searchPlaceholder": "Search players or event",
      "event": "Event",
      "round": "Round",
      "status": "Status",
      "result": "Result",
      "sort": "Sort",
      "any": "Any",
      "sortSaved": "Recently saved",
      "sortDate": "Game date",
      "sortBoard": "Board",
      "sortFlagged": "Most flagged",
      "selected_one": "{{count}} selected",
      "selected_other": "{{count}} selected",
      "markChecked": "Mark checked",
      "markedChecked_one": "Marked {{count}} game checked",
      "markedChecked_other": "Marked {{count}} games checked",
      "illegalNotChecked_one": "{{count}} game has an illegal move and was left to check.",
      "illegalNotChecked_other": "{{count}} games have an illegal move and were left to check.",
      "moveToEvent": "Move to event",
      "delete": "Delete",
      "deleted_one": "Deleted {{count}} game",
      "deleted_other": "Deleted {{count}} games",
      "deleteTitle_one": "Delete {{count}} game?",
      "deleteTitle_other": "Delete {{count}} games?",
      "deleteBody": "The games and their scoresheet photos are removed for good. Exported PGN files are not affected.",
      "clear": "Clear",
      "clearFilters": "Clear filters",
      "noMatchTitle": "No games match these filters",
      "emptyTitle": "No games yet",
      "emptyBody": "Every scoresheet you scan is saved here. Scan one game, or a whole round at once.",
      "selectAll": "Select all games on this page",
      "select": "Select {{game}}",
      "boardShort": "Bd",
      "opening": "Opening",
      "saved": "Saved",
      "showing": "Showing {{from}}–{{to}}",
      "previous": "Previous page",
      "next": "Next page",
      "moveTitle_one": "Move {{count}} game to an event",
      "moveTitle_other": "Move {{count}} games to an event",
      "moveBody": "The games take the event's name, and the round if you give one.",
      "noEvents": "There are no events in this workspace yet. Create one under Events.",
      "roundOptional": "Round (optional)",
      "moveConfirm": "Move",
      "moved_one": "Moved {{count}} game to {{event}}",
      "moved_other": "Moved {{count}} games to {{event}}",
      "scannedBy": "Scanned by",
      "deleteOwnOnly": "As a member you can delete only games you scanned.",
      "viewLabel": "Show",
      "checkOneByOne": "Check one by one",
      "analysis": {
        "column": "Analysis",
        "analyzed": "Analyzed",
        "none": "Not analyzed",
        "outdated": "Outdated",
        "outdatedHint": "The stored analysis was made for other moves or an older version of the analysis. Analyze the game again to update it."
      }
    },
    "review": {
      "gamesCount_one": "{{count}} game",
      "gamesCount_other": "{{count}} games",
      "filterLabel": "Filter by event",
      "allEvents": "All events",
      "noEvent": "No event",
      "sortedBy": "Most flagged moves first",
      "queueLabel": "Games to check",
      "paneLabel": "View",
      "pane": {
        "moves": "Moves",
        "image": "Image",
        "board": "Board"
      },
      "noImage": "This game was saved without a photo.",
      "pickGame": "Pick a game to check",
      "keyNext": "next flagged move",
      "keyChecked": "mark checked",
      "fixIllegal": "Fix the illegal move first",
      "remaining_one": "{{count}} move to check",
      "remaining_other": "{{count}} moves to check",
      "nothingLeft": "Nothing left to check",
      "position": "game {{index}} of {{total}}",
      "unsaved": "unsaved edits",
      "skip": "Skip",
      "nextIssue": "Next flagged move",
      "markChecked": "Mark checked & next",
      "checkedToast": "{{game}} is checked",
      "emptyTitle": "Nothing to check",
      "emptyBody": "Every game in this workspace is either checked or has no flags."
    },
    "positions": {
      "description": "Positions you keep from books, videos, scans and games — explain them and add them to practice.",
      "scanBoard": "Scan a board",
      "filterLabel": "Filter by source",
      "filter": {
        "all": "All"
      },
      "source": {
        "extension": "Extension",
        "board_scan": "Upload",
        "editor": "Board editor",
        "game": "From a game",
        "book": "Book",
        "video": "Video"
      },
      "whiteToMove": "White to move",
      "blackToMove": "Black to move",
      "fromHost": "From {{host}}",
      "analyse": "Analyze on Lichess",
      "openGame": "Open the game",
      "delete": "Delete position",
      "loadMore": "Show more",
      "save": "Save to positions",
      "saved": "Saved to positions",
      "savedToast": "Position saved. Find it under Positions.",
      "emptyTitle": "No saved positions",
      "emptyBody": "Save a position from a scan, the best-move tool or the analysis board — with the book page or the moment in the video — and study it here.",
      "untitled": "Untitled position",
      "close": "Close",
      "study": "Study",
      "openBoard": "Open on the analysis board",
      "engineLines": "Engine lines",
      "startEngine": "Run the engine",
      "details": "Notebook details",
      "edit": "Edit",
      "saveDetails": "Save details",
      "updated": "Saved",
      "openSource": "Open the source",
      "page": "p. {{page}}",
      "at": "at {{time}}",
      "watchAt": "Watch from {{time}}",
      "fromTools": "Find the best move"
    },
    "billing": {
      "freeDescription": "You are on Free. Credits are the only thing you spend on ScanChess.",
      "proDescription": "Your plan, your balance and what you have scanned lately.",
      "balance": "Balance",
      "balanceWorth": "About {{scoresheets}} scoresheets or {{boards}} board images",
      "last30": "Last 30 days",
      "scoresheets": "Scoresheets",
      "boards": "Board images",
      "scans_one": "{{count}} scan",
      "scans_other": "{{count}} scans",
      "noUsage": "No scans in the last 30 days.",
      "coachUsage": "AI coach: {{free}} free and {{paid}} paid explanations",
      "inviteTitle": "Invite friends",
      "inviteBody": "You both get 5 credits when a new friend signs up with your link and confirms their email.",
      "copyInvite": "Copy your invite link",
      "coach": "AI explanations",
      "explanations_one": "{{count}} paid explanation",
      "explanations_other": "{{count}} paid explanations",
      "myPlan": "My plan",
      "activeUntil": "Active until {{date}}",
      "nextCredits": "next credits on {{date}}",
      "freePlanLine": "Pro adds {{count}} credits every 30 days and the full analysis features.",
      "seePlans": "See plans",
      "managePlan": "Change or cancel",
      "changePlan": "Change plan",
      "upgrade": "Upgrade",
      "seeInvites": "See who joined"
    },
    "club": {
      "overviewDescription_one": "Games and credits here are shared by {{count}} member",
      "overviewDescription_other": "Games and credits here are shared by {{count}} members",
      "openEvent": "Open event",
      "reviewGames_one": "Check {{count}} game",
      "reviewGames_other": "Check {{count}} games",
      "needsCheck": "To check",
      "openQueue": "Check one by one",
      "newEvent": "New event",
      "noEvents": "No events yet",
      "billingDescription": "Credits belong to the club. Every member's scan in this workspace draws from this balance.",
      "plan": "Plan",
      "planActive": "Active",
      "noPlan": "No plan",
      "planUntil": "Paid through {{date}}",
      "planHint": "Buy a plan for the club below",
      "nextGrant": "Next grant",
      "neverExpire": "Credits never expire",
      "usageByEvent": "Used in the last 30 days, by event",
      "coachUsage": "AI coach",
      "coachPaidUses": "Paid uses: {{uses}}",
      "buyTitle": "Buy credits for the club",
      "buyBody": "Buy a plan for the club: its credits go into the club's balance, and nobody gets Pro personally.",
      "planCredits": "{{count}} credits every 30 days",
      "receipts": "Receipts are emailed by Waffo, our merchant of record.",
      "askTitle": "Need more credits?",
      "askBody": "Only owners and admins can buy credits for the club. We can let them know now.",
      "askAdmins": "Ask admins to top up",
      "askedAdmins_one": "We told {{count}} owner or admin",
      "askedAdmins_other": "We told {{count}} owners and admins",
      "transactions": "Transactions",
      "when": "When",
      "what": "What",
      "member": "Member",
      "creditsColumn": "Credits",
      "noTransactions": "No transactions yet.",
      "createTitle": "Create a club",
      "createBody": "A club is a shared workspace: members sign in with their own accounts, scan with the club's credits and keep the club's games in one library.",
      "nameLabel": "Club name",
      "createCta": "Create club",
      "created": "{{name}} is ready. Invite your members next.",
      "membersDescription": "Everyone signs in with their own account. Nobody shares a password.",
      "inviteTitle": "Invite link",
      "inviteBody": "Anyone who opens it joins with the role you pick. Links expire after 7 days.",
      "joinsAs": "Joins as",
      "createInvite": "Create invite link",
      "copy": "Copy",
      "inviteOnce": "Copy it now: for safety the link is shown only once. It expires on {{date}}.",
      "inviteRow_one": "{{role}} link · created {{created}} · expires {{expires}} · used {{count}} time",
      "inviteRow_other": "{{role}} link · created {{created}} · expires {{expires}} · used {{count}} times",
      "revoke": "Revoke",
      "revoked": "Invite link revoked",
      "memberCount_one": "{{count}} member",
      "memberCount_other": "{{count}} members",
      "noMembers": "No members yet",
      "role": "Role",
      "gamesThisPeriod": "Games · 30 days",
      "creditsThisPeriod": "Credits · 30 days",
      "lastActive": "Last active",
      "you": "you",
      "roleFor": "Role for {{name}}",
      "roleChanged": "Role changed",
      "memberActions": "Actions for {{name}}",
      "leave": "Leave club",
      "makeOwner": "Make owner",
      "transferred": "Ownership transferred",
      "remove": "Remove from club",
      "removed": "Member removed",
      "removeTitle": "Remove {{name}}?",
      "removeBody": "They lose access to the club's games and credits. The games they scanned stay with the club.",
      "leaveTitle": "Leave {{name}}?",
      "leaveBody": "You lose access to the club's games and credits. The games you scanned stay with the club.",
      "roleHelp": {
        "owner": "Everything an admin can do, plus transferring ownership and deleting the club.",
        "admin": "Invites and removes members, buys credits, manages events and pairings, deletes any game.",
        "member": "Scans with club credits, checks and edits any club game, exports PGN. Deletes only games they scanned."
      },
      "deleteTitle": "Delete the club",
      "deleteBody": "Removes the club, its games, events and remaining credits for everyone.",
      "deleteCta": "Delete club",
      "deleteConfirmTitle": "Delete {{name}}?",
      "deleteConfirmBody": "Every game, event and credit that belongs to the club is deleted for all members. This cannot be undone.",
      "transferTitle": "Make {{name}} the owner?",
      "transferBody": "{{name}} will be able to change every role and delete the club. You become an admin, and only the new owner can hand ownership back."
    },
    "join": {
      "pasteTitle": "Join a club",
      "pasteBody": "Paste the invite link a club owner or admin sent you.",
      "linkLabel": "Invite link",
      "continue": "Continue",
      "badLink": "That does not look like a ScanChess invite link.",
      "invalidTitle": "This invite no longer works",
      "invalidBody": "It may have expired or been revoked. Ask the club for a new link.",
      "tryAnother": "Use another link",
      "title": "Join {{name}}",
      "role": "You join as {{role}}. This invite expires on {{date}}.",
      "accept": "Join club",
      "alreadyMember": "You are already a member — open the workspace",
      "joined": "Welcome to {{name}}"
    },
    "events": {
      "description": "Tournaments and club nights, round by round.",
      "count_one": "1 event",
      "count_other": "{{count}} events",
      "new": "New event",
      "newTitle": "New event",
      "newBody": "Name the event now. Pairings are optional: with them, every scanned game is filed under the right players, ratings, round and board.",
      "create": "Create event",
      "created": "{{name}} created",
      "emptyTitle": "No events yet",
      "emptyBody": "Create an event to scan its rounds against the pairings, see which boards are still missing, and share the games with your players.",
      "form": {
        "name": "Event name",
        "site": "Venue",
        "startDate": "Starts",
        "endDate": "Ends",
        "endBeforeStart": "The end date is before the start date."
      },
      "list": {
        "event": "Event",
        "rounds": "Rounds",
        "games": "Games",
        "progress": "Progress",
        "eventPage": "Event page",
        "public": "Public",
        "private": "Private",
        "noGames": "No games scanned yet"
      },
      "pairings": {
        "title": "Pairings",
        "choose": "Import pairings (CSV, TSV, PGN or JSON)",
        "remove": "Remove",
        "readAs": "We read your file as {{format}}.",
        "format": {
          "csv": "a spreadsheet (CSV or TSV)",
          "pgn": "a PGN roster",
          "json": "a JSON pairing file"
        },
        "found_one": "1 pairing, {{rounds}}.",
        "found_other": "{{count}} pairings, {{rounds}}.",
        "rounds_one": "round {{list}}",
        "rounds_other": "rounds {{list}}",
        "none": "No pairings were found in it.",
        "moreWarnings_one": "1 more warning",
        "moreWarnings_other": "{{count}} more warnings"
      },
      "personal": {
        "new": "Add a tournament",
        "description": "Tournaments you played, each with its report.",
        "emptyTitle": "No tournaments yet",
        "emptyBody": "Add a tournament you played and file its games under it. The event report then sums it up: your score and accuracy round by round, the openings, the mistakes that came back and what to practice next.",
        "organizerHint": "Running a tournament? Scan a whole round of scoresheets against the pairings.",
        "newBody": "Name a tournament you played. Then import its games or file saved games under it, and its report sums it up.",
        "create": "Add tournament",
        "created": "{{name}} added",
        "nameLabel": "Tournament name",
        "namePlaceholder": "City Open",
        "organizerPairings": "Running this tournament? Import its pairings"
      }
    },
    "event": {
      "gameCount_one": "1 game",
      "gameCount_other": "{{count}} games",
      "roundCount_one": "1 round",
      "roundCount_other": "{{count}} rounds",
      "roundsLabel": "Rounds",
      "tabGames_one": "1 game",
      "tabGames_other": "{{count}} games",
      "uploadRound": "Upload round {{round}} photos",
      "uploadPhotos": "Upload photos",
      "uploadHint": "Files named like R3B5.jpg go straight to their board.",
      "stillMissing": "Still missing:",
      "boardList_one": "board {{boards}}",
      "boardList_other": "boards {{boards}}",
      "allScanned": "Every paired board is scanned.",
      "notScanned": "Not scanned",
      "resultConflict": "pairings: {{result}}",
      "resultConflictHint": "The pairing file records a different result. The result on the sheet is kept.",
      "open": "Open",
      "review": "Check",
      "upload": "Upload",
      "actions": "Actions",
      "sideLabel": "Event tools",
      "emptyTitle": "Nothing in this round yet",
      "emptyBody": "Import the pairings to see every board, or upload the round's scoresheet photos.",
      "missingTitle": "This event is not available",
      "missingBody": "It was deleted, or it belongs to another workspace.",
      "backToEvents": "Back to events",
      "share": {
        "title": "Event page",
        "body": "Anyone with the link sees the games with no open flags, round by round. Games that still have flags stay hidden until they are checked.",
        "on": "Event page is public",
        "off": "Event page is private again",
        "copy": "Copy event page link",
        "open": "Open event page in a new tab"
      },
      "export": {
        "title": "Export",
        "roundPgn": "Round {{round}} PGN",
        "eventPgn": "Whole event PGN",
        "auditCsv": "Audit CSV",
        "auditCsvDetail": "Round {{round}}: every board and its status",
        "nothing": "No games to export yet"
      },
      "edit": {
        "button": "Edit event",
        "title": "Edit event",
        "body": "A new name is applied to every game in the event.",
        "saved": "Event updated"
      },
      "pairings": {
        "import": "Import",
        "replace": "Replace",
        "importTitle": "Import pairings",
        "replaceTitle": "Replace pairings",
        "body": "The file replaces the pairings stored for this event. Saved games keep their names and results.",
        "importConfirm": "Import pairings",
        "replaceConfirm": "Replace pairings",
        "none": "No pairings yet. Without them, boards come from file names and names from the sheets.",
        "saved_one": "1 pairing saved",
        "saved_other": "{{count}} pairings saved"
      },
      "delete": {
        "button": "Delete event",
        "title": "Delete {{name}}?",
        "body": "The event, its pairings and its public page are deleted. The games stay in your library with their names, rounds and boards.",
        "confirm": "Delete event",
        "done": "{{name}} deleted"
      },
      "gamesTab": "Games",
      "uploadAbove": "Use “{{action}}” at the top of the page",
      "personal": {
        "missingTitle": "This tournament is not available",
        "back": "Back to my tournaments",
        "importGames": "Import this tournament's games",
        "emptyTitle": "No games in this tournament yet",
        "emptyBody": "Import its games as PGN, scan your scoresheets, or move games you already saved here from Games.",
        "edit": "Edit tournament",
        "editBody": "A new name is applied to every game in the tournament.",
        "delete": "Delete tournament",
        "deleteBody": "The tournament and its public page are deleted. The games stay in your games with their names and rounds."
      }
    },
    "report": {
      "tab": "Report",
      "title": "Event report",
      "intro": "A printable summary of one player's event: accuracy and the biggest mistake in each round, the openings, mistake types that came back, won positions not converted, and what to practice next. It is built from the engine analysis saved with each game.",
      "generate": "Make report",
      "previewButton": "See the free preview",
      "existing": "Nothing has changed since this report was made, so it is shown again and nothing was counted.",
      "created": "Report ready",
      "print": "Print",
      "allowanceHint": "Making the same report again is not counted.",
      "forPlayer": "For {{name}}",
      "changePlayer": "Change",
      "emptyTitle": "No games in this event yet",
      "emptyBody": "Upload the event's scoresheets first; the report is made from its games.",
      "noneTitle": "No report yet",
      "noneBody": "Make one once the event's games are in. Any game without a saved analysis is listed first.",
      "noneBodyFree": "The free preview shows your accuracy in each round. Pro adds the full report.",
      "eyebrow": "Event report",
      "playerUnknown": "Player",
      "madeOn": "Made {{date}}",
      "roundN": "Round {{round}}",
      "roundUnknown": "No round",
      "boardN": "board {{board}}",
      "notAnalysed": "no moves to analyze",
      "noMistake": "No mistakes",
      "evidence": "Examples",
      "footnote": "Made with ScanChess (scanchess.com) from Stockfish analysis of the saved games. Mistake types come from fixed board rules; a mistake with no clear tactic behind it is called positional rather than given a name it may not deserve.",
      "colour": {
        "white": "White",
        "black": "Black"
      },
      "outcome": {
        "win": "Win",
        "draw": "Draw",
        "loss": "Loss",
        "unknown": "Result unknown"
      },
      "kind": {
        "mistake": "mistake",
        "blunder": "blunder"
      },
      "stats": {
        "score": "Score",
        "scoreValue": "{{score}} / {{games}}",
        "wdl": "{{wins}} won · {{draws}} drawn · {{losses}} lost",
        "accuracy": "Average accuracy",
        "analysed": "{{done}} of {{total}} games analyzed",
        "opponents": "Average opponent rating",
        "errors": "Mistakes / blunders",
        "errorsHint_one": "plus {{count}} inaccuracy",
        "errorsHint_other": "plus {{count}} inaccuracies",
        "games": "Games"
      },
      "table": {
        "round": "Round",
        "colour": "Color",
        "opponent": "Opponent",
        "result": "Result",
        "accuracy": "Accuracy",
        "biggestMistake": "Biggest mistake",
        "opening": "Opening",
        "leftBook": "Left the book",
        "preparation": "Preparation"
      },
      "rounds": {
        "title": "Round by round",
        "hint": "Accuracy is the engine's 0–100 score for your moves. The biggest mistake is the move that cost the most winning chance."
      },
      "openings": {
        "title": "Openings",
        "hint": "Where each game left known opening theory, and who left it first.",
        "leftByYou": "Move {{move}}, by you",
        "leftByOpponent": "Move {{move}}, by your opponent",
        "stayedInBook": "Stayed in book",
        "unknown": "Not recognized"
      },
      "recurring": {
        "title": "Mistakes that came back",
        "hint": "Mistake types that showed up in two or more games.",
        "none": "No mistake type came up in more than one game.",
        "tooFew": "This needs at least two analyzed games.",
        "line_one": "{{count}} game · {{mistakes}} mistakes and blunders · {{loss}} points of winning chance lost",
        "line_other": "{{count}} games · {{mistakes}} mistakes and blunders · {{loss}} points of winning chance lost"
      },
      "conversion": {
        "title": "Won positions not converted",
        "hint": "Games where you had a clearly winning position (80% or more for at least three moves) and did not win.",
        "none": "You did not reach a clearly winning position in any game.",
        "all_one": "You converted the {{count}} winning position you had.",
        "all_other": "You converted all {{count}} winning positions you had.",
        "some_one": "You reached a winning position in {{count}} game and did not win it.",
        "some_other": "You reached a winning position in {{count}} games and did not win {{failures}} of them.",
        "peak": "up to {{win}}% at move {{move}}"
      },
      "practice": {
        "title": "What to practice next",
        "hint": "Picked by rule: the mistake types that cost you the most compared with players of similar accuracy.",
        "small": "Suggestions need at least {{min}} analyzed games; this report has {{count}}.",
        "none": "No mistake type came up often enough to suggest.",
        "stats_one": "{{count}} time, {{loss}} points of winning chance lost on average.",
        "stats_other": "{{count}} times, {{loss}} points of winning chance lost on average.",
        "above": "This costs you more than it costs most players at your accuracy.",
        "notAbove": "About what is typical at your accuracy, but still your costliest."
      },
      "preview": {
        "title": "Accuracy by round",
        "hint": "The free preview. The full report adds the sections below."
      },
      "locked": {
        "ctaProPlus": "See Pro+",
        "rounds": "Biggest mistake in each round",
        "openings": "Openings and where they left the book",
        "recurring": "Mistakes that came back",
        "conversion": "Won positions not converted",
        "practice": "What to practice next"
      },
      "pending": {
        "title_one": "{{count}} game has no saved analysis yet",
        "title_other": "{{count}} games have no saved analysis yet",
        "body": "The report is built from the engine analysis saved with each game. Analyze the remaining games here: the engine runs in this browser, one game after another, and saves each analysis with its game. Free.",
        "saving": "You can keep working meanwhile; the analysis waits whenever you use the engine yourself. When it finishes, the report appears here by itself.",
        "open": "Open game",
        "others_one": "{{count}} more game from this event",
        "others_other": "{{count}} more games from this event",
        "retry": "Check again",
        "analyzeRemaining_one": "Analyze the remaining game",
        "analyzeRemaining_other": "Analyze the remaining {{count}} games",
        "progress": "{{done}} of {{total}} analyzed",
        "done": "All games analyzed and saved. Press “Check again” to make the report.",
        "state": {
          "analyzed": "Analyzed",
          "waiting": "Waiting",
          "analyzing": "Analyzing…",
          "fixMoves": "Fix moves first",
          "notSaved": "Not saved"
        }
      },
      "side": {
        "title": "Which side were you?",
        "titleClub": "Whose report is it?",
        "body_one": "The game does not say which player is you. Pick your color.",
        "body_other": "The games do not say which player is you in {{count}} games. Pick your color in each.",
        "bodyClub": "Pick a player from the club roster, or choose a color game by game. Games you leave out are not in the report.",
        "rosterLabel": "Club player",
        "rosterNone": "Choose a player",
        "rosterSubmit": "Make their report",
        "rosterHint": "Uses the games assigned to this player.",
        "quick": "Quick pick:",
        "iAm": "I'm {{name}}",
        "gameLabel": "Round {{round}}: {{white}} – {{black}}",
        "skip": "Leave out",
        "more_one": "{{count}} more game also needs a side; it is asked after these.",
        "more_other": "{{count}} more games also need a side; they are asked after these.",
        "submit": "Make report",
        "remembered": "Your picks are remembered in this browser.",
        "unassigned": "No game in this event is assigned to {{name}} yet. Choose their color in the games they played."
      },
      "noGames": {
        "title": "Nothing to report on",
        "body": "None of this event's games can go into a report yet."
      },
      "account": {
        "title": "Reports need a ScanChess account",
        "body": "You are using a trial session. Create a free account to keep your games and make reports.",
        "cta": "Create a free account"
      },
      "limit": {
        "title": "This month's reports are used up",
        "body_one": "Your plan includes {{count}} event report a month. Reports you made before can still be opened and printed.",
        "body_other": "Your plan includes {{count}} event reports a month. Reports you made before can still be opened and printed."
      },
      "list": {
        "title": "Earlier reports",
        "empty": "Reports you make for this event appear here.",
        "accuracy": "accuracy {{value}}",
        "delete": "Delete report",
        "deleteTitle": "Delete this report?",
        "deleteBody": "The report is deleted for everyone in this workspace. The games and their analyses stay.",
        "deleteConfirm": "Delete report",
        "deleted": "Report deleted",
        "emptyAfterPreview": "No saved reports yet. The free preview isn't saved; full reports you make are kept here."
      },
      "category": {
        "hanging": {
          "name": "Hanging pieces",
          "hint": "Left a piece where the opponent could win it."
        },
        "allowed-tactic": {
          "name": "Allowed a tactic",
          "hint": "Gave the opponent a forcing blow: a fork, pin, discovered attack or mate."
        },
        "missed-tactic": {
          "name": "Missed a tactic",
          "hint": "A forcing blow that won material or mated was there, and another move was played."
        },
        "conversion": {
          "name": "Let a win slip",
          "hint": "A clearly winning position was given back."
        },
        "endgame": {
          "name": "Endgame mistakes",
          "hint": "A mistake in the endgame with no tactic to name."
        },
        "opening": {
          "name": "Early mistakes after the opening",
          "hint": "A mistake within the first moves after leaving opening theory."
        },
        "quiet": {
          "name": "Positional mistakes",
          "hint": "No clear tactic behind it: a plan, piece placement or pawn move that made the position worse."
        }
      },
      "preparation": {
        "leftPlayer": "You left at move {{move}} ({{played}})",
        "leftOpponent": "Opponent left at move {{move}} ({{played}})",
        "lineEnded": "Followed to the end (move {{move}})",
        "hit": "Whole game in preparation"
      },
      "narrative": {
        "title": "Summary",
        "lead": "A few sentences on how the event went, written by the AI coach from this report’s numbers and checked against them before you see them.",
        "writeFree": "Write the summary · free today ({{count}} left)",
        "writeCredit": "Write the summary · {{count}} credit",
        "writeNoCharge": "Write the summary in this language · no charge",
        "freeNote": "Uses the free daily AI coach explanation (shared with the game coach); after that it is {{count}} credit.",
        "freeUsed": "Today’s free explanation is used; the next one is free from {{time}}. Until then it is {{count}} credit.",
        "paidNote": "This report’s summary is already paid for, so another language costs nothing.",
        "writing": "Writing the summary and checking every sentence against the report…",
        "disclaimer": "Written by the AI coach from this report’s facts and checked against them. The tables below are the source.",
        "outdated": "Written with an earlier version of the summary writer. Writing it again is free.",
        "rewrite": "Write it again",
        "usedFree": "Today’s free explanation used — no credit taken. Opening this report again shows the summary at no charge.",
        "charged": "{{count}} credit used. Opening this report again shows the summary at no charge.",
        "noCharge": "No charge.",
        "noCredits": "You don’t have enough credits for the summary.",
        "getCredits": "Get credits",
        "inProgress": "The summary is already being written. Try again in a minute.",
        "failed": "The summary did not pass its fact check, so it is not shown. Nothing was charged — please try again.",
        "verifyEmail": "Verify your email to get the written summary — one AI coach explanation a day is free.",
        "createAccount": "Create a free account to get the written summary."
      },
      "previewRefresh": "Refresh the preview"
    },
    "batch": {
      "title": "Round scan",
      "description": "Scan a whole round. Each sheet is matched to its pairing and filed under the event.",
      "event": "Event",
      "noEvent": "No event",
      "noEventHint": "Without an event, type the details below and add a pairing file if you have one.",
      "createEvent": "Create an event first",
      "eventPairings_one": "1 pairing imported",
      "eventPairings_other": "{{count}} pairings imported",
      "eventNoPairings": "No pairings imported. Boards come from file names.",
      "round": "Round",
      "roundPlaceholder": "e.g. 3",
      "roundHint": "Used for photos whose file name has no round.",
      "roundScanned": "{{scanned}} of {{total}} boards already scanned",
      "roundGames_one": "1 game already in this round",
      "roundGames_other": "{{count}} games already in this round",
      "dropTitle": "Drop photos or a whole folder",
      "limits": "Up to {{max}} photos per batch, {{size}} MB each · JPG, PNG or WebP (no HEIC) · both sides of a sheet are one game",
      "choosePhotos": "Choose photos",
      "chooseFolder": "Choose folder",
      "photoCount_one": "1 photo",
      "photoCount_other": "{{count}} photos",
      "gameCount_one": "1 game",
      "gameCount_other": "{{count}} games",
      "fromPairings": "Names, Elo and board come from the pairing file",
      "matched": "Board {{board}} · {{white}} – {{black}}",
      "matchedNoBoard": "{{white}} – {{black}}",
      "boardOnly": "Board {{board}}",
      "noBoard": "No board in file name",
      "chooseBoard": "Choose board",
      "chooseBoardFor": "Board for game {{number}}",
      "pages_one": "1 page",
      "pages_other": "{{count}} pages",
      "removeGame": "Remove game {{number}}",
      "creditsReturned_one": "1 credit returned",
      "creditsReturned_other": "{{count}} credits returned",
      "failure": {
        "noScoresheet": "No scoresheet found",
        "looksLikeBoard": "This photo looks like a chessboard, not a scoresheet. Round scan reads scoresheets only; the credits were returned.",
        "recognition": "The sheet could not be read"
      },
      "footerHint": "Games with flagged moves are marked To check as they finish",
      "cost_one": "1 game · {{credits}} credits",
      "cost_other": "{{count}} games · {{credits}} credits",
      "scan_one": "Scan 1 game",
      "scan_other": "Scan {{count}} games",
      "clear": "Clear batch",
      "openEvent": "Open event",
      "blockedTitle": "Not enough credits.",
      "blockedBody_one": "The other game stays in this batch. Run it once you have credits.",
      "blockedBody_other": "The other {{count}} games stay in this batch. Run them once you have credits.",
      "rewritten_one": "1 game updated from the pairings",
      "rewritten_other": "{{count}} games updated from the pairings",
      "attachFailed_one": "1 game could not be added to {{event}}. Add it from Games.",
      "attachFailed_other": "{{count}} games could not be added to {{event}}. Add them from Games.",
      "resume": {
        "title": "Resume your last batch?",
        "body_one": "{{saved}} of 1 game saved · last worked on {{time}}",
        "body_other": "{{saved}} of {{count}} games saved · last worked on {{time}}",
        "action": "Resume batch",
        "discard": "Discard",
        "missing_one": "1 photo could not be restored and was left out",
        "missing_other": "{{count}} photos could not be restored and were left out"
      }
    },
    "publicEvent": {
      "published_one": "1 game published so far",
      "published_other": "{{count}} games published so far",
      "copyLink": "Copy link",
      "downloadAll": "Download all games (PGN)",
      "downloadPgn": "Download PGN",
      "inLibrary": "In your library",
      "roundNote_one": "1 game",
      "roundNote_other": "{{count}} games",
      "stillToCheck_one": "1 still to check",
      "stillToCheck_other": "{{count}} still to check",
      "otherGames": "Other games",
      "checked": "Checked",
      "ruleChecked": "Rule-checked",
      "ruleCheckedHint": "Every move is legal and nothing was flagged. Nobody has compared it with the sheet yet.",
      "start": "Start",
      "viewer": "Game viewer",
      "emptyTitle": "No games published yet",
      "emptyBody": "Games appear here once they have been scanned and have no open flags.",
      "unavailableTitle": "This event page is not available",
      "unavailableBody": "The organizer turned the page off, or the event was deleted.",
      "metaTitle": "{{name}} | ScanChess",
      "metaDesc": "Replay and download the games of {{name}}: {{count}} games, round by round."
    },
    "players": {
      "description": "The students and members whose games the club scans. Their names and aliases let a round's scoresheets be filed under the right player.",
      "clubOnlyTitle": "Player rosters belong to clubs",
      "clubOnlyBody": "Switch to a club workspace, or create a club, to keep a roster of its players.",
      "lockedBody": "With Club Pro+, a club keeps a roster of its students and files each scanned game under the players who played it.",
      "showArchived": "Show archived",
      "addTitle": "Add a player",
      "addCta": "Add player",
      "editTitle": "Edit {{name}}",
      "name": "Name",
      "fideId": "FIDE ID",
      "rating": "Rating",
      "aliases": "Other spellings",
      "aliasesPlaceholder": "A. Kovacevic, Kovacevic Ana",
      "aliasesHelp": "How the name appears on scoresheets and pairing lists, separated by commas.",
      "minorLabel": "Under 18",
      "privacyNote": "Only the name is needed. Players are treated as under 18 unless you untick it; no birth dates or parent contacts are stored.",
      "added": "Player added",
      "saved": "Player saved",
      "count_one": "{{count}} player",
      "count_other": "{{count}} players",
      "emptyTitle": "No players yet",
      "emptyBody": "Add the club's students to file their scanned games under their names.",
      "emptyBodyMember": "An owner or admin adds the club's players here.",
      "games": "Games",
      "minorBadge": "Under 18",
      "archivedBadge": "Archived",
      "alsoWritten": "Also written: {{aliases}}",
      "actionsFor": "Actions for {{name}}",
      "edit": "Edit",
      "archive": "Archive",
      "restore": "Restore",
      "archived": "Player archived",
      "restored": "Player restored",
      "remove": "Remove",
      "removed": "Player removed",
      "archivedInstead_one": "Archived instead: {{count}} game still names this player",
      "archivedInstead_other": "Archived instead: {{count}} games still name this player",
      "removeTitle": "Remove {{name}}?",
      "removeBody": "The player is deleted from the roster.",
      "removeBodyGames_one": "{{count}} game names this player, so they will be archived instead: the game keeps its player, and the roster no longer lists them.",
      "removeBodyGames_other": "{{count}} games name this player, so they will be archived instead: the games keep their player, and the roster no longer lists them.",
      "fideTaken": "Another player in this club already has this FIDE ID. Restore or edit that player instead.",
      "rosterFull": "This club has reached the roster limit. Remove players it no longer needs.",
      "accuracy": "Accuracy",
      "form": "Recent form",
      "lastGame": "Last game",
      "form_up": "Up {{change}} points over the last {{games}} games against the ones before",
      "form_down": "Down {{change}} points over the last {{games}} games against the ones before",
      "form_flat": "About the same over the last {{games}} games as the ones before",
      "formNoPrevious_one": "Accuracy of the last analyzed game; nothing earlier to compare with yet",
      "formNoPrevious_other": "Accuracy of the last {{count}} analyzed games; nothing earlier to compare with yet",
      "analysedOf": "{{analysed}} of {{count}} games analyzed",
      "studentsTruncated": "Accuracy and form come from the club's newest {{count}} games with students."
    },
    "training": {
      "title": "Daily practice",
      "description": "Positions from your own games where a winning shot was missed. Find the move; each card comes back just before you would forget it.",
      "statsLabel": "Practice so far",
      "streak_one": "day streak",
      "streak_other": "day streak",
      "dueToday": "due today",
      "longest": "longest streak",
      "motifFilter": "Pattern",
      "allMotifs": "All patterns",
      "progress": "Card {{current}} of {{total}}",
      "tally_one": "{{correct}} of {{count}} right",
      "tally_other": "{{correct}} of {{count}} right",
      "progressLabel": "Session progress",
      "findTheShot": "Find the move that was missed. You get one try per card.",
      "checking": "Checking your move…",
      "right": "Right, that's the shot.",
      "wrong": "Not this time.",
      "wrongDetail": "You tried {{tried}}; the move was {{answer}}.",
      "solution": "Line: {{line}}",
      "comesBack": "This card comes back in about 10 minutes.",
      "fromGame": "From your game",
      "yourGame": "your game",
      "moveNumber": "move {{number}}",
      "fromSaved": "Saved from",
      "fromSavedNoGame": "Saved from the missed tactics tool",
      "youPlayed": "In the game you played {{san}}.",
      "next": "Next card",
      "finish": "Finish",
      "suspend": "Stop showing this card",
      "suspended": "Card taken out of practice",
      "undo": "Undo",
      "suspendFailed": "Could not take the card out",
      "answerFailed": "Your move could not be checked",
      "loadFailed": "Practice could not be loaded.",
      "retry": "Try again",
      "sessionDone_one": "Session done: {{correct}} of {{count}} right",
      "sessionDone_other": "Session done: {{correct}} of {{count}} right",
      "noneForMotif": "Nothing due for this pattern.",
      "allDone": "Nothing due right now.",
      "moreDue_one": "1 more card is due today.",
      "moreDue_other": "{{count}} more cards are due today.",
      "comeBack": "You are done for today. Come back tomorrow to keep the streak going.",
      "continue": "Keep going",
      "limit": {
        "title": "That's today's {{count}} free cards",
        "body": "More free cards tomorrow. Pro practices without a daily limit.",
        "bodyAt": "More free cards from {{time}}. Pro practices without a daily limit.",
        "upgrade": "See Pro"
      },
      "empty": {
        "title": "No practice cards yet",
        "body": "Cards come from your analyzed games: every forcing shot you missed on your side becomes a position to solve here. ScanChess needs to know which side was yours, so add the names you play under below.",
        "games": "Go to my games",
        "tool": "Find missed tactics in a game"
      },
      "aliases": {
        "title": "Names I play under",
        "why": "Scoresheets and online games spell your name in different ways. List them here, and games where no side is set are matched to you, so your missed shots become practice cards.",
        "short": "Games with no side set are matched to you by these names.",
        "none": "No names yet.",
        "add": "Add name",
        "placeholder": "e.g. Zheng, Y.",
        "hint": "Up to {{count}} names. Order and accents don't matter.",
        "remove": "Remove {{name}}",
        "saved": "Names saved",
        "failed": "Names could not be saved",
        "tooLong": "A name can be at most {{count}} characters.",
        "tooMany": "At most {{count}} names.",
        "editInSettings": "Edit in Settings"
      },
      "accuracy": {
        "title": "First-try accuracy",
        "row": "{{percent}}% of {{count}}",
        "note": "Only the first try at a card each day counts."
      },
      "import": {
        "title": "Tactics saved in this browser",
        "body_one": "You saved 1 missed tactic here before signing in. Add it to your practice cards so it follows your account.",
        "body_other": "You saved {{count}} missed tactics here before signing in. Add them to your practice cards so they follow your account.",
        "action_one": "Add 1 to practice",
        "action_other": "Add {{count}} to practice",
        "notNow": "Not now",
        "done_one": "1 card added to your practice",
        "done_other": "{{count}} cards added to your practice",
        "doneDetail": "{{existing}} already in your practice, {{invalid}} could not be read.",
        "failed": "The tactics could not be added. They are still saved in this browser."
      },
      "overview": {
        "title": "Daily practice",
        "empty": "Missed shots from your analyzed games turn into puzzles here, one short set a day.",
        "start_one": "Practice 1 card",
        "start_other": "Practice {{count}} cards",
        "done": "Done for today",
        "open": "Open practice"
      },
      "motifs": {
        "allowed-back-rank": "Allowed back-rank mate",
        "allowed-mate": "Allowed mate",
        "missed-back-rank": "Missed back-rank mate",
        "missed-mate": "Missed mate",
        "hung-piece": "Hung a piece",
        "allowed-fork": "Allowed a fork",
        "allowed-discovered": "Allowed a discovered attack",
        "allowed-pin": "Allowed a pin",
        "missed-fork": "Missed fork",
        "missed-skewer": "Missed skewer",
        "missed-discovered": "Missed discovered attack",
        "missed-pin": "Missed pin",
        "missed-capture": "Missed capture",
        "missed-promotion": "Missed promotion",
        "other": "Other tactic"
      }
    },
    "insights": {
      "title": "My insights",
      "description": "Your strengths and weak spots across your analyzed games.",
      "loadFailed": "Your insights could not be loaded.",
      "aliasesWhy": "Games that do not say which color you played are matched by these names: how your name is written on scoresheets, and your online usernames.",
      "chart": {
        "label": "Accuracy per game, oldest first",
        "point": "{{date}} · vs {{opponent}} · accuracy {{accuracy}} · {{outcome}}"
      },
      "recent": {
        "label_one": "Last game",
        "label_other": "Last {{count}} games",
        "noPrevious": "Analyze more games to compare with your earlier form.",
        "up": "Up {{change}} points on the 10 games before ({{previous}}).",
        "down": "Down {{change}} points on the 10 games before ({{previous}}).",
        "flat": "About the same as the 10 games before ({{previous}})."
      },
      "accuracy": {
        "label": "Average accuracy",
        "detail_one": "Over 1 analyzed game",
        "detail_other": "Over {{count}} analyzed games"
      },
      "top": {
        "label": "Most common mistake type",
        "none": "No mistakes found",
        "stats_one": "{{count}} time · {{share}} of your mistakes",
        "stats_other": "{{count}} times · {{share}} of your mistakes"
      },
      "results": {
        "score": "Score",
        "wdl": "{{wins}} won · {{draws}} drawn · {{losses}} lost",
        "errors": "Mistakes / blunders per game",
        "errorsHint": "Plus {{inaccuracies}} inaccuracies per game"
      },
      "colour": {
        "white": "Accuracy with White",
        "black": "Accuracy with Black",
        "games_one": "1 game",
        "games_other": "{{count}} games"
      },
      "trend": {
        "title": "Accuracy over time",
        "hint_one": "Your last game. Each bar opens its game.",
        "hint_other": "Your last {{count}} games, oldest on the left. Each bar opens its game.",
        "months": "Accuracy by month",
        "month": "Month",
        "games": "Games",
        "accuracy": "Accuracy"
      },
      "phases": {
        "title": "Where you lose winning chances",
        "hint": "Winning chance lost per game in each phase, in percentage points.",
        "weakest": "Costliest",
        "loss": "{{loss}} per game",
        "counts": "Mistakes: {{mistakes}} · blunders: {{blunders}}"
      },
      "phase": {
        "opening": "Opening",
        "middlegame": "Middlegame",
        "endgame": "Endgame"
      },
      "categories": {
        "title": "Mistake types",
        "hint": "Every mistake and blunder of yours, by type, costliest first.",
        "none": "No mistakes or blunders in your analyzed games.",
        "stats_one": "{{count}} time · {{loss}} lost on average",
        "stats_other": "{{count}} times · {{loss}} lost on average",
        "motif": "Most often: {{motif}}"
      },
      "motifs": {
        "title": "Tactical patterns behind them"
      },
      "openings": {
        "title": "Openings",
        "hint": "How you score with each opening family (ECO code), as White and as Black.",
        "none": "No games with a known opening.",
        "family": "Opening",
        "games": "Games",
        "wdl": "W–D–L",
        "score": "Score",
        "accuracy": "Accuracy",
        "asWhite": "As White",
        "asBlack": "As Black"
      },
      "conversion": {
        "title": "Turning won positions into wins",
        "hint": "Games in which you reached a winning position (80% or more for at least three moves).",
        "none": "No won positions in your analyzed games yet.",
        "rate_one": "{{converted}} of {{count}} won position converted",
        "rate_other": "{{converted}} of {{count}} won positions converted",
        "game": "vs {{opponent}}, {{date}}",
        "peak": "peak {{peak}}%"
      },
      "practice": {
        "small": "Suggestions need at least {{min}} analyzed games; you have {{count}}.",
        "cta": "Practice this",
        "example": "Example {{n}}"
      },
      "locked": {
        "trend": "Accuracy over time and by color",
        "phases": "Where you lose winning chances",
        "categories": "All mistake types and patterns",
        "openings": "Openings by ECO family and color",
        "conversion": "Won positions converted",
        "practice": "What to practice next"
      },
      "empty": {
        "title": "No analyzed games yet",
        "body": "Your profile is built from the engine analysis saved with your games. Open a game from your library and press “{{button}}”; the analysis is saved with the game and shows up here.",
        "games": "Go to my games",
        "noGamesTitle": "Add your first game",
        "noGamesBody": "Scan a scoresheet or import a game, then analyze it; your profile builds up from there.",
        "scan": "Scan a game",
        "noSideTitle": "Which side were you?",
        "noSideBody_one": "1 analyzed game does not say which color you played. Add the names you play under, then check again.",
        "noSideBody_other": "{{count}} analyzed games do not say which color you played. Add the names you play under, then check again.",
        "checkAgain": "Check again"
      },
      "coverage": {
        "based_one": "Based on 1 analyzed game.",
        "based_other": "Based on {{count}} analyzed games.",
        "pending_one": "1 more game has no saved analysis yet.",
        "pending_other": "{{count}} more games have no saved analysis yet.",
        "games": "Open your games",
        "sideUnknown_one": "1 analyzed game is left out because it does not say which color you played.",
        "sideUnknown_other": "{{count}} analyzed games are left out because they do not say which color you played.",
        "aliases": "Add the names you play under",
        "truncated": "Only your newest {{count}} analyzed games are included."
      },
      "overview": {
        "title": "My insights",
        "accuracy_one": "Accuracy over 1 game",
        "accuracy_other": "Accuracy over {{count}} games",
        "empty": "Analyze your saved games to see your accuracy, your most common mistakes and your trend.",
        "open": "Open insights"
      },
      "online": {
        "title": "Online vs over the board",
        "hint": "Link your Lichess or Chess.com account to set your recent online games beside your analyzed over-the-board games. Only public games are read; no password is needed.",
        "accounts": "Linked accounts",
        "online": "Online",
        "otb": "Over the board",
        "otbShort": "OTB",
        "loadFailed": "Your online games could not be loaded.",
        "waiting": "Your online games have not been read yet. We try again the next time you open this page.",
        "noOtb": "Analyze a few over-the-board games to compare them with how you play online. Over the board counts the games you scanned, typed in or claimed; imported PGN games are left out, since they may be online games or someone else's.",
        "accuracyNote": "Online accuracy is the site's own figure, where it computed one (Chess.com uses its own formula); over the board it is ScanChess's. The number in brackets is how many games have one.",
        "unlink": "Unlink {{site}} account {{name}}",
        "form": {
          "site": "Site",
          "username": "Username",
          "placeholder": "Your username or profile link",
          "submit": "Link account",
          "linking": "Reading games…",
          "hint": "We read your latest 100 public games and refresh them at most every 6 hours."
        },
        "status": {
          "pending": "Not read yet",
          "ready_one": "{{count}} recent game · updated {{date}}",
          "ready_other": "{{count}} recent games · updated {{date}}",
          "failed": "{{site}} could not be reached; trying again later",
          "notFound": "{{site}} no longer finds this player"
        },
        "errors": {
          "notFound": "{{site}} has no player with that name.",
          "invalid": "That does not look like a username.",
          "account": "Create a free account to link your online games.",
          "rateLimited": "Too many tries. Please wait a little and try again.",
          "generic": "The account could not be linked. Please try again.",
          "unlink": "The account could not be unlinked."
        },
        "sides": {
          "games": "Games",
          "score": "Score",
          "wdl": "W–D–L",
          "accuracy": "Accuracy"
        },
        "summary": {
          "better": "Your online score is {{points}} percentage points higher than over the board.",
          "worse": "Your online score is {{points}} percentage points lower than over the board.",
          "same": "You score about the same online and over the board.",
          "fewOtb": "Too few over-the-board games with a result to compare yet ({{count}} of the {{needed}} needed)."
        },
        "deep": {
          "timeControls": "By time control",
          "control": "Time control",
          "phases": "Mistakes / blunders per game, by phase",
          "phasesHint": "Online games with the site's analysis: {{online}} · analyzed over-the-board games: {{otb}}. In brackets: winning chance lost per game.",
          "noEvals": "None of your recent online games has the site's computer analysis yet. Request one on Lichess to compare your mistakes.",
          "phase": "Phase",
          "categories": "Mistake types (share of your mistakes)"
        },
        "locked": {
          "body": "Pro compares your results by time control, and where and how you go wrong online and over the board, phase by phase and mistake type by mistake type."
        },
        "unlinkTitle": "Unlink {{site}} account {{name}}?",
        "unlinkBody": "The games read from {{site}} are removed from your profile. You can link the account again later; its games are then read afresh.",
        "unlinkConfirm": "Unlink"
      },
      "filters": {
        "label": "Filter the games",
        "period": "Period",
        "periods": {
          "all": "All time",
          "30d": "Last 30 days",
          "3m": "Last 3 months",
          "12m": "Last 12 months",
          "custom": "Custom dates"
        },
        "from": "From",
        "to": "To",
        "source": "Source",
        "sources": {
          "all": "All sources",
          "scan": "Scanned (board or scoresheet)",
          "import": "Imported PGN",
          "online": "Lichess or Chess.com",
          "other": "Other"
        },
        "timeControl": "Time control",
        "timeControls": {
          "all": "All time controls",
          "bullet": "Bullet",
          "blitz": "Blitz",
          "rapid": "Rapid",
          "classical": "Classical",
          "daily": "Daily",
          "unknown": "Not recorded"
        },
        "clear": "Clear filters",
        "emptyTitle": "No analyzed games match these filters",
        "emptyBody": "Try a longer period, another source or another time control.",
        "lockedLine": "Narrow your profile to a period, a source or a time control with Pro."
      }
    },
    "analysisQueue": {
      "analyzeAll": "Analyze all ({{count}})",
      "analyzeAllHint": "Runs the engine on every saved game without an analysis, one after another, in this browser. Free.",
      "nothing": "Every saved game already has an analysis.",
      "startFailed": "Couldn't list the games to analyze",
      "progress": "{{done}} of {{total}} games analyzed",
      "running": "Analyzing your games in the background",
      "runningElsewhere": "Analyzing your games in another tab",
      "yielding": "Waiting while you use the engine",
      "hidden": "Paused while this tab is in the background",
      "paused": "Analysis paused",
      "away": "Analysis is waiting for the workspace it was started in",
      "signedOut": "Sign in again to keep saving analyses",
      "rateLimited": "Saving is held by the hourly limit and picks up again by itself",
      "errorEngine": "The engine couldn't start in this browser",
      "errorUpload": "The analyses couldn't be saved. Check your connection and try again",
      "finished_one": "{{count}} game analyzed and saved",
      "finished_other": "{{count}} games analyzed and saved",
      "skippedIllegal_one": "{{count}} game skipped: one of its moves doesn't play. Open the game to fix it.",
      "skippedIllegal_other": "{{count}} games skipped: a move in each doesn't play. Open the games to fix them.",
      "skippedOther_one": "{{count}} game not saved: it was edited or removed meanwhile.",
      "skippedOther_other": "{{count}} games not saved: they were edited or removed meanwhile.",
      "skippedInterrupted_one": "{{count}} game not saved: the tab analyzing it closed twice before it finished.",
      "skippedInterrupted_other": "{{count}} games not saved: the tab analyzing them closed twice before they finished.",
      "pause": "Pause",
      "resume": "Resume",
      "cancel": "Cancel",
      "retry": "Try again",
      "dismiss": "Dismiss",
      "free": "Free · runs in this browser, one game at a time · your own engine use always comes first · usually 5–20 seconds a game on a laptop, longer on a phone"
    },
    "reportShare": {
      "title": "Share this report",
      "body": "Anyone with the link can read this report without an account. Player names stay hidden unless you choose to show them.",
      "loadFailed": "Share links could not be loaded. Reload the page to try again.",
      "onlyMaker": "Only the member who made this report, or a club owner or admin, can share it.",
      "expiry": "Link expires after",
      "days_one": "{{count}} day",
      "days_other": "{{count}} days",
      "minorHint": "This report is about a junior player: links last at most 30 days and full names are never shown.",
      "showNames": "Show player names",
      "showNamesHint": "Off: the player appears as initials and opponents as “Opponent” with their rating.",
      "showNamesMinor": "For a junior player only the first name and last initial are shown; opponents stay hidden.",
      "note": "Note for the reader (optional)",
      "notePlaceholder": "E.g. Great event. Next we work on converting won endgames.",
      "create": "Create link",
      "created": "Link created and copied",
      "copy": "Copy link",
      "open": "Open link",
      "revoke": "Withdraw link",
      "revoked": "Link withdrawn",
      "revokeTitle": "Withdraw this link?",
      "revokeBody": "Anyone who opens it will see that it is no longer available. You can make a new link at any time.",
      "revokeConfirm": "Withdraw",
      "active_one": "{{count}} live link",
      "active_other": "{{count}} live links",
      "expires": "Expires {{date}}",
      "views_one": "{{count}} view",
      "views_other": "{{count}} views",
      "namesShown": "Names shown",
      "namesHidden": "Names hidden",
      "public": {
        "metaTitle": "{{name}}: shared event report | ScanChess",
        "metaTitleBare": "Shared event report | ScanChess",
        "metaDesc": "An event report shared through a private ScanChess link.",
        "banner": "Shared report · made {{made}} · link valid until {{until}}",
        "noteTitle": "A note from the person who shared this",
        "opponent": "Opponent",
        "player": "Player",
        "namesHidden": "Names are hidden in this shared copy: the player is shown by initials and opponents by their rating.",
        "ctaTitle": "Turn scoresheets into reports like this",
        "ctaBody": "ScanChess reads your scoresheets, analyzes every game and puts the event report together for you.",
        "cta": "Try ScanChess",
        "expiredTitle": "This link has expired",
        "expiredBody": "Shared reports are only available for a limited time. Ask the person who sent it for a new link.",
        "revokedTitle": "This link was withdrawn",
        "revokedBody": "The person who shared this report has withdrawn the link. Ask them for a new one if you still need it.",
        "missingTitle": "Report not found",
        "missingBody": "This link does not open a report. Check that it was copied in full, or ask for a new one."
      }
    },
    "repertoire": {
      "title": "Opening repertoire",
      "description": "Keep the lines you prepare, and see where each game left them.",
      "color": "Color",
      "colorName": {
        "white": "White",
        "black": "Black"
      },
      "name": "Name",
      "namePlaceholder": "e.g. Italian Game with White",
      "listTitle": "Your repertoires",
      "newTitle": "Add a repertoire",
      "emptyList": "None yet. Import a PGN of your lines, or let your own games show what you play.",
      "emptyTitle": "Pick or add a repertoire",
      "emptyBody": "Each saved game then says where it left your preparation, and event reports get a preparation column.",
      "loadFailed": "Your repertoires could not be loaded.",
      "moveCount_one": "{{count}} move",
      "moveCount_other": "{{count}} moves",
      "counts_one": "{{count}} move: {{player}} of yours, {{opponent}} opponent replies",
      "counts_other": "{{count}} moves: {{player}} of yours, {{opponent}} opponent replies",
      "origin": {
        "pgn": "Imported from PGN",
        "inferred": "Found in your games"
      },
      "rename": "Rename",
      "delete": "Delete",
      "confirmDelete": "Delete the repertoire “{{name}}”? This cannot be undone.",
      "locked": {
        "accountBody": "Repertoires belong to your account, so they need a registered one.",
        "fullTitle": "Every repertoire slot is in use",
        "fullBody_one": "Your plan holds {{count}} repertoire. Delete one to add another.",
        "fullBody_other": "Your plan holds {{count}} repertoires. Delete one to add another.",
        "reason": "Saving a repertoire is part of {{plan}}."
      },
      "errors": {
        "planRequired": "Repertoires are part of Pro. Upgrade to save this one.",
        "full": "Your plan's repertoire slots are all in use. Delete one first.",
        "empty": "There are no moves to keep: none of the moves play from the starting position, or your games do not show a clear habit yet.",
        "account": "Create an account to save repertoires."
      },
      "import": {
        "tab": "Import PGN",
        "lead": "Paste or open a PGN file. Every line counts, variations included; comments are ignored.",
        "file": "Open a .pgn file",
        "placeholder": "1. e4 e5 (1... c5 2. c3) 2. Nf3 Nc6 3. Bc4 *",
        "label": "PGN of the repertoire",
        "found_one": "{{count}} move found",
        "found_other": "{{count}} moves found",
        "skippedGames_one": "{{count}} game starts from a set-up position and was skipped.",
        "skippedGames_other": "{{count}} games start from a set-up position and were skipped.",
        "problems_one": "{{count}} move did not play; its line stops there.",
        "problems_other": "{{count}} moves did not play; their lines stop there.",
        "truncated": "Only the first {{count}} moves are kept, the most a repertoire holds.",
        "save": "Save repertoire"
      },
      "infer": {
        "tab": "From my games",
        "lead": "We read your saved games with one color and keep the moves you play most of the time, and the replies you meet often.",
        "depth": "Look at the first",
        "moves_one": "{{count}} move",
        "moves_other": "{{count}} moves",
        "find": "Find my repertoire",
        "none_one": "Nothing repeats often enough yet in your {{count}} game with this color. A move counts once you have played it in at least {{min}} games, most of the time.",
        "none_other": "Nothing repeats often enough yet in your {{count}} games with this color. A move counts once you have played it in at least {{min}} games, most of the time.",
        "found_one": "{{count}} move found in your games",
        "found_other": "{{count}} moves found in your games",
        "save": "Save as repertoire",
        "defaultName": {
          "white": "My White repertoire",
          "black": "My Black repertoire"
        },
        "noGames": {
          "white": "You have no saved games with White yet. Save or import a few, then look again.",
          "black": "You have no saved games with Black yet. Save or import a few, then look again."
        },
        "fewGames_one": "A move joins your repertoire once you have played it in {{min}} games. Save or import {{count}} more game with this color (you have {{games}}), then look again.",
        "fewGames_other": "A move joins your repertoire once you have played it in {{min}} games. Save or import {{count}} more games with this color (you have {{games}}), then look again."
      },
      "tree": {
        "title": "Lines",
        "hint": "Your moves are in bold. Removing a move removes everything that only follows it.",
        "empty": "No moves left. Add moves from a PGN below.",
        "expand": "Show the moves after {{move}}",
        "collapse": "Hide the moves after {{move}}",
        "remove": "Remove {{move}} and what follows",
        "confirmRemove": "Remove {{move}} and every move that only follows it?",
        "transposition": "transposes"
      },
      "add": {
        "open": "Add moves from PGN",
        "title": "Add moves from a PGN",
        "save": "Add moves"
      }
    },
    "student": {
      "back": "All players",
      "description": "Strengths and weak spots across the club games filed under this player, seen from their side.",
      "private": "Private to club members",
      "loadFailed": "This player's page could not be loaded.",
      "notFound": "This player is not in the club's roster.",
      "gamesTitle": "Games",
      "gamesEmpty": "No games are filed under this player yet. After scanning a round, assign each board to its players.",
      "gamesMore": "Showing the newest {{count}} games.",
      "asWhite": "White vs {{opponent}}",
      "asBlack": "Black vs {{opponent}}",
      "round": "Round {{round}}",
      "reportsTitle": "Event reports",
      "reportsEmpty": "No event reports about this player yet. Make one from an event's Report tab.",
      "reportUntitled": "Event report",
      "reportSummary_one": "{{count}} game · {{score}} points · accuracy {{accuracy}}",
      "reportSummary_other": "{{count}} games · {{score}} points · accuracy {{accuracy}}",
      "analyse_one": "Analyze 1 game",
      "analyse_other": "Analyze {{count}} games",
      "truncated": "Only the newest {{count}} analyzed games are included.",
      "empty": {
        "title": "No analyzed games yet",
        "body_one": "{{name}}'s page is built from the analysis saved with their games. 1 game is waiting for it.",
        "body_other": "{{name}}'s page is built from the analysis saved with their games. {{count}} games are waiting for it.",
        "noGamesTitle": "No games filed yet",
        "noGamesBody": "No games are filed under {{name}} yet. After scanning a round, assign each board to its players; their page builds up from there."
      },
      "insights": {
        "recent": {
          "noPrevious": "Analyze more games to compare with earlier form."
        },
        "top": {
          "stats_one": "{{count}} time · {{share}} of their mistakes",
          "stats_other": "{{count}} times · {{share}} of their mistakes"
        },
        "trend": {
          "hint_one": "Their last game. Each bar opens its game.",
          "hint_other": "Their last {{count}} games, oldest on the left. Each bar opens its game."
        },
        "phases": {
          "title": "Where winning chances are lost"
        },
        "categories": {
          "hint": "Every mistake and blunder of theirs, by type, costliest first.",
          "none": "No mistakes or blunders in their analyzed games."
        },
        "openings": {
          "hint": "How they score with each opening family (ECO code), as White and as Black."
        },
        "conversion": {
          "hint": "Games in which they reached a winning position (80% or more for at least three moves).",
          "none": "No won positions in their analyzed games yet."
        },
        "practice": {
          "small": "Suggestions need at least {{min}} analyzed games; they have {{count}}."
        }
      },
      "notFoundBody": "They may have been removed from the roster, or the link belongs to another club."
    },
    "roundStudents": {
      "title": "Students in this round",
      "analyseTitle": "Analyze this round",
      "body": "Check who played each board, then save. Each student's page and reports are built from the games filed under them.",
      "analyseHint": "Run the engine on the round's games in the background. Free.",
      "board": "Board {{board}}",
      "game": "Game {{number}}",
      "notOurs": "Not in the roster",
      "check": "Check",
      "twiceShort": "Twice",
      "twice": "Picked for more than one board: {{names}}",
      "save": "Save students",
      "saveAndAnalyse": "Save and analyze this round",
      "analyse": "Analyze this round",
      "saved_one": "1 game filed under its students",
      "saved_other": "{{count}} games filed under their students",
      "failed": "The students could not be saved",
      "queued_one": "The game is queued for analysis",
      "queued_other": "The round's {{count}} games are queued for analysis",
      "locked": "Filing games under students comes with the club Pro+ plan.",
      "lockedCta": "About the roster",
      "rosterFailed": "The roster could not be loaded.",
      "emptyRoster": "Add the club's students to the roster to file games under them.",
      "emptyRosterCta": "Open the roster"
    },
    "scouting": {
      "title": "Opponent scouting",
      "description": "Before a game: what your opponent plays online, how they score with it, and where to aim.",
      "privacy": "Reports are built only from the opponent's public games on Lichess or Chess.com. Only the summary is saved, for 90 days, and it is never shared.",
      "score": "Score",
      "form": {
        "title": "Scout an opponent",
        "site": "Site",
        "username": "Opponent's username",
        "placeholder": "Username or profile link",
        "timeClass": "Time control",
        "allTimeClasses": "All time controls",
        "submit": "Scout",
        "working": "Reading games…",
        "wait": "Reading their latest public games. This can take up to half a minute.",
        "hint": "We read their latest 200 public standard games through the site's public API. Scouting the same player again within an hour reopens the report for free."
      },
      "errors": {
        "notFound": "{{site}} has no player with that username.",
        "invalid": "That doesn't look like a username.",
        "noGames": "This player has no recent standard games in that time control.",
        "busy": "{{site}} is busy right now. Try again in a minute.",
        "limit": "You've used this month's scouting reports. More come with the next month or a higher plan.",
        "plan": "Opponent scouting needs Pro or Pro+.",
        "account": "Create a free account to scout opponents.",
        "rateLimited": "Too many scouting requests. Try again later.",
        "generic": "Scouting didn't work. Try again.",
        "load": "Your scouting reports couldn't be loaded.",
        "delete": "The report couldn't be deleted."
      },
      "list": {
        "title": "Saved reports",
        "empty": "No scouting reports yet. Scout your next opponent above.",
        "games_one": "{{count}} game",
        "games_other": "{{count}} games",
        "score": "score {{score}}",
        "delete": "Delete the report on {{name}}"
      },
      "delete": {
        "title": "Delete the report on {{name}}?",
        "body": "It is removed for everyone in this workspace. Scouting the player again counts as a new report.",
        "confirm": "Delete"
      },
      "hints": {
        "title": "Where to aim",
        "none": "Nothing stands out yet. More games would tell more.",
        "note": "Read off the numbers by fixed rules. Scores are the opponent's: 30% means they score badly.",
        "weakOpening": {
          "white": "With White they score only {{score}} in the {{opening}} ({{games}} games). If they go for it, you're in their weak spot.",
          "black": "With Black they score only {{score}} in the {{opening}} ({{games}} games). Steer towards it when you have White."
        },
        "strongOpening": {
          "white": "Their best weapon with White is the {{opening}}: {{score}} in {{games}} games. Prepare for it.",
          "black": "With Black they score {{score}} in the {{opening}} ({{games}} games). Consider sidestepping it."
        },
        "firstMove": "With White they open {{move}} in {{share}} of their games ({{games}} games).",
        "reply": "Against {{against}} they answer {{reply}} {{share}} of the time ({{games}} games).",
        "weakerColour": {
          "white": "They score clearly worse with White ({{score}}) than with Black ({{other}}).",
          "black": "They score clearly worse with Black ({{score}}) than with White ({{other}})."
        },
        "weakTimeControl": "Weakest time control: {{control}}, {{score}} in {{games}} games against {{best}} at their best.",
        "weakPhase": "Phase where they give the most away: {{phase}}, {{loss}} points of winning chance per game ({{games}} analyzed games). Keep the game going into it.",
        "commonError": "Most common mistake type: {{category}}, {{share}} of their mistakes ({{games}} analyzed games)."
      },
      "report": {
        "back": "All scouting reports",
        "sample_one": "Based on their latest {{count}} game, {{from}} – {{to}}.",
        "sample_other": "Based on their latest {{count}} games, {{from}} – {{to}}.",
        "partial": "The site was slow, so this covers the games read in time.",
        "small": "Few games: read these numbers with care.",
        "reused": "You scouted this player less than an hour ago, so this is that report. Nothing was counted.",
        "expires": "Saved until {{date}}, then deleted.",
        "profile": "Profile on {{site}}",
        "missing": "This report doesn't exist or has expired.",
        "missingTitle": "This scouting report is not available"
      },
      "tiles": {
        "score": "Their score",
        "white": "With White",
        "black": "With Black",
        "accuracy_one": "{{count}} game measured by the site",
        "accuracy_other": "{{count}} games measured by the site"
      },
      "colour": {
        "white": "Their games with White ({{games}})",
        "black": "Their games with Black ({{games}})"
      },
      "openings": {
        "title": "Openings",
        "none": "No games with this color.",
        "book": "Book",
        "bookHint": "Moves still in the opening book, on average (plies)",
        "mainLine": "Main line"
      },
      "lines": {
        "title": "Lines they repeat",
        "none": "No line repeats yet."
      },
      "tree": {
        "title": "Move tree",
        "hint": "The first {{moves}} moves; moves played in at least two games.",
        "node_one": "{{count}} game · {{score}}",
        "node_other": "{{count}} games · {{score}}"
      },
      "timeControls": {
        "title": "Time controls",
        "control": "Time control",
        "rating": "Rating"
      },
      "mistakes": {
        "title": "Where their mistakes are",
        "hint_one": "From {{count}} game the site analyzed, judged with ScanChess's rules.",
        "hint_other": "From {{count}} games the site analyzed, judged with ScanChess's rules.",
        "none": "None of these games carries the site's analysis, so mistakes can't be judged.",
        "noneChessCom": "Chess.com publishes no move-by-move analysis, so mistakes can't be judged here. Try their Lichess account if they have one.",
        "phase": "Phase",
        "perGame": "Mistakes / blunders per game",
        "loss": "Winning chance lost per game",
        "types": "Mistake types"
      },
      "preparation": {
        "title": "Against your repertoire",
        "none": "Add a repertoire to see where their lines meet your preparation.",
        "link": "Open my repertoires",
        "noMatch": "None of their repeated lines meets a repertoire of yours for the other color.",
        "leftOpponent": "They leave your “{{name}}” with {{played}}; you prepared {{expected}}.",
        "leftPlayer": "Your “{{name}}” plays {{expected}} where their games went {{played}}, so you steer away from this line there.",
        "covered": "Your “{{name}}” follows this whole line, through move {{moveNumber}}."
      }
    },
    "proLock": {
      "titles": {
        "insights": "The full profile is part of {{plan}}",
        "onlineDeep": "The deeper comparison is part of {{plan}}",
        "repertoire": "Opening repertoires are part of {{plan}}",
        "scouting": "Opponent scouting is part of {{plan}}",
        "eventReport": "The full event report is part of {{plan}}",
        "reportShare": "Report links are part of {{plan}}",
        "clubPlayers": "The player roster is part of {{plan}}"
      },
      "perPlan": "Pro: {{pro}} · Pro+: {{proplus}}",
      "bothPlans": "Pro · Pro+: {{quota}}",
      "proPlusOnly": "Pro+, the plan for clubs and coaches: {{quota}}",
      "cta": "Upgrade to {{plan}}",
      "ctaClub": "See club plans",
      "askAdmin": "Ask the club's owner or an admin to upgrade the club's plan.",
      "account": "Create a free account first; then you can upgrade."
    },
    "importPgn": {
      "action": "Import PGN",
      "lead": "Paste one or more games, or choose a .pgn file. They are saved to your games, ready to analyze.",
      "label": "PGN text",
      "chooseFile": "Choose a .pgn file",
      "found_one": "{{count}} game ready to import",
      "found_other": "{{count}} games ready to import",
      "skipped_one": "{{count}} game is skipped: it has an illegal move, no moves, or starts from a set-up position.",
      "skipped_other": "{{count}} games are skipped: each has an illegal move, no moves, or starts from a set-up position.",
      "tooMany": "Only the first {{max}} games are imported at once.",
      "none": "No games found. Paste PGN moves such as 1. e4 e5 2. Nf3.",
      "submit_one": "Import {{count}} game",
      "submit_other": "Import {{count}} games",
      "importing": "Importing {{done}} of {{total}}…",
      "done_one": "{{count}} game imported",
      "done_other": "{{count}} games imported",
      "partial": "Imported {{done}} of {{total}}. The rest were not saved: {{reason}}",
      "readFailed": "That file could not be read.",
      "submitEmpty": "Import",
      "intoEventTitle": "Import games into {{name}}",
      "intoEventLead": "Paste this tournament's games, or choose the .pgn file the organizer published. They are saved to your games and filed under this tournament, ready to analyze and for its report.",
      "notFiled_one": "{{count}} game imported, but it could not be added to {{event}}. Use “{{action}}” in Games.",
      "notFiled_other": "{{count}} games imported, but they could not be added to {{event}}. Use “{{action}}” in Games."
    },
    "notFound": {
      "body": "There is no workspace page at this address. It may be mistyped, or the page has moved.",
      "back": "Back to overview"
    },
    "newMenu": {
      "roundScanHint_one": "{{count}} credit a game",
      "roundScanHint_other": "{{count}} credits a game"
    },
    "invite": {
      "description_one": "Share your link with chess friends. For each one who joins, you each get {{count}} credit.",
      "description_other": "Share your link with chess friends. For each one who joins, you each get {{count}} credits.",
      "linkTitle": "Your invite link",
      "copy": "Copy link",
      "copied": "Copied",
      "copiedAnnouncement": "Invite link copied",
      "share": "Share",
      "sendWith": "Send it with",
      "orSendWith": "Or send it with",
      "channels": {
        "whatsapp": "WhatsApp",
        "telegram": "Telegram",
        "x": "X",
        "email": "Email",
        "wechat": "WeChat"
      },
      "shareMessage_one": "I use ScanChess to turn my scoresheets and board photos into games I can analyze. Join with my link and we both get {{count}} free credit:",
      "shareMessage_other": "I use ScanChess to turn my scoresheets and board photos into games I can analyze. Join with my link and we both get {{count}} free credits:",
      "shareSubject_one": "Join me on ScanChess: {{count}} free credit each",
      "shareSubject_other": "Join me on ScanChess: {{count}} free credits each",
      "unverifiedTitle": "Confirm your email to start earning",
      "unverifiedBody": "Friends can already join with your link, but an invite only earns credits while your own email is confirmed. Anyone who finishes signing up before then won't count.",
      "resend": "Resend email",
      "resent": "Email sent",
      "resendFailed": "Couldn't send the email. Try again in a minute.",
      "stats": {
        "joined": "Friends who joined",
        "earned": "Credits earned",
        "noneYet": "No one yet",
        "credited_one": "{{count}} credited",
        "credited_other": "{{count}} credited",
        "confirming_one": "{{count}} still confirming their email",
        "confirming_other": "{{count}} still confirming their email",
        "noBonus": "Joined before your email was confirmed",
        "perFriend_one": "{{count}} credit for each friend who joins",
        "perFriend_other": "{{count}} credits for each friend who joins"
      },
      "friendsTitle": "Friends",
      "status": {
        "pending": "Pending",
        "signed_up": "Signed up",
        "rewarded": "Rewarded"
      },
      "statusHint": {
        "pending_one": "They still need to confirm their email. You each get {{count}} credit when they do.",
        "pending_other": "They still need to confirm their email. You each get {{count}} credits when they do.",
        "signed_up_one": "They joined while your email wasn't confirmed, so this invite earned no credits.",
        "signed_up_other": "They joined while your email wasn't confirmed, so this invite earned no credits.",
        "rewarded_one": "Done: you each got {{count}} credit.",
        "rewarded_other": "Done: you each got {{count}} credits."
      },
      "joinedOn": "Joined {{date}}",
      "creditsFor_one": "{{count}} credit earned",
      "creditsFor_other": "{{count}} credits earned",
      "emptyTitle": "No friends have joined yet",
      "emptyBody_one": "Send your link to someone you play chess with. They'll show up here once they sign up, and you each get {{count}} credit.",
      "emptyBody_other": "Send your link to someone you play chess with. They'll show up here once they sign up, and you each get {{count}} credits.",
      "privacy": "Addresses are partly hidden to keep your friends' details private.",
      "showingLatest_one": "Showing the latest {{count}}.",
      "showingLatest_other": "Showing the latest {{count}}.",
      "rules": {
        "title": "How it works",
        "step1": "Send your link to a friend who's new to ScanChess.",
        "step2": "They sign up with it and confirm their email. Signing up with Google counts right away.",
        "step3_one": "You each get {{count}} credit, added to your balances automatically.",
        "step3_other": "You each get {{count}} credits, added to your balances automatically.",
        "goodToKnow": "Good to know",
        "newOnly": "Only new accounts count, and each account can be invited only once.",
        "verifiedInviter": "Invites earn credits only while your own email is confirmed.",
        "worth": "Credits pay for scans: {{costs}}."
      },
      "loadFailed": "Couldn't load your invites.",
      "retry": "Try again",
      "noCode": "Your account doesn't have an invite link yet. Please contact support and we'll add one.",
      "anonymousTitle": "Create an account to invite friends",
      "anonymousBody": "Your invite link comes with your account. Sign up for free and you can share it right away."
    }
  },
  "extensionPage": {
    "eyebrow": "Browser extension for Chrome and Edge",
    "title": "Turn webpage chess diagrams into positions you can analyze",
    "lead": "Select a board in an article or a paused video. Check the pieces, copy FEN, or open the position in Lichess or Chess.com.",
    "ctaInstall": "View in Chrome Web Store",
    "ctaUpload": "Upload an image on the website instead",
    "installNote": "Chrome and Edge 116+. Free to install. A ScanChess account is required; each board scan uses 1 credit.",
    "newTab": "opens the Chrome Web Store in a new tab",
    "screenshotAlt": "ScanChess board interface shown with a prepared example position",
    "stepsTitle": "How it works",
    "steps": [
      {
        "title": "Connect your account",
        "body": "Sign in on scanchess.com and connect that account from the extension. You use the same account and credits."
      },
      {
        "title": "Select a board",
        "body": "Open a webpage with a chess diagram. Select its area or right-click the image. Pause videos before scanning."
      },
      {
        "title": "Check, then analyze",
        "body": "Check the pieces and side to move. Correct the position, copy FEN, or open it in your preferred analysis tool."
      }
    ],
    "usesTitle": "What it is good for",
    "usesLead": "Chess you come across in the browser, where saving an image and uploading it again is the slow part.",
    "uses": [
      {
        "title": "Articles and forums",
        "body": "Diagrams and screenshots in a blog post, a forum thread or a newsletter."
      },
      {
        "title": "Paused videos",
        "body": "Pause a lesson or a stream on the position you want and capture the frame."
      },
      {
        "title": "Study positions and puzzles",
        "body": "Capture a visible diagram from a study page or puzzle collection. Use an uploaded screenshot for protected pages that cannot be captured."
      }
    ],
    "outputs": [
      {
        "title": "Board image → FEN",
        "body": "An editable position. Check the pieces and side to move before using it."
      },
      {
        "title": "Handwritten scoresheet → website",
        "body": "Use the website scanner for paper notation and PGN export; the extension focuses on webpage boards."
      }
    ],
    "creditsTitle": "Same account, same credits",
    "creditsBody": "Use your ScanChess account and credit balance. Each board recognition uses 1 credit. Handwritten scoresheets are available in the website scanner.",
    "creditsLink": "See pricing",
    "privacyTitle": "What the extension sees",
    "privacy": [
      "It captures the page only after you choose a scan action.",
      "Only the region you select is sent to api.scanchess.com for recognition.",
      "It does not collect your browsing history.",
      "It contains no analytics scripts.",
      "Your session token is kept in the extension's own storage."
    ],
    "privacyLink": "Browser extension section of the privacy policy",
    "faqTitle": "Questions about the extension",
    "faq": [
      {
        "q": "Is the ScanChess extension free?",
        "a": "Installation is free. You need a ScanChess account, and each board recognition uses 1 credit. Editing and copying a recognized position do not trigger another scan."
      },
      {
        "q": "Which browsers does it work in?",
        "a": "Google Chrome and Microsoft Edge, version 116 or later (Chromium 116+). There is no Firefox or Safari version, and phone browsers do not run extensions, so on a phone upload the image on the website."
      },
      {
        "q": "Does it work on every website?",
        "a": "On ordinary web pages, yes. Browsers do not let extensions capture their internal pages such as settings, the Chrome Web Store, or the built-in PDF viewer. For those, save the image and upload it on scanchess.com."
      },
      {
        "q": "Do I need an account?",
        "a": "Yes. Sign in on scanchess.com and connect your account from the extension. There is no separate extension account. Your ScanChess credit balance is shared."
      }
    ],
    "finalTitle": "Image already on your computer or phone?",
    "finalBody": "Upload board photos or handwritten scoresheets on the website. Check the result before analysis or export.",
    "screenshotCaption": "Interface example with a prepared position. No image recognition was run for this preview."
  },
  "extensionPromo": {
    "uploadHint": "Board on a web page? Capture it with the ScanChess extension",
    "cardEyebrow": "Browser extension",
    "cardTitle": "Scan boards straight from web pages",
    "cardBody": "Select a chess board on a webpage, check the position and copy FEN. Connect your ScanChess account; each board scan uses 1 credit.",
    "cardInstall": "Add to Chrome",
    "cardLearn": "Learn more",
    "cardDismiss": "Hide this suggestion"
  },
  "allowance": {
    "badge": {
      "leftToday": "{{count}} left today",
      "leftMonth": "{{count}} left this month",
      "left": "{{count}} left",
      "thenCredits_one": "then {{count}} credit",
      "thenCredits_other": "then {{count}} credits",
      "unlimited": "Unlimited",
      "needsPlan": "{{plan}} feature",
      "backAt": "more from {{time}}"
    }
  },
  "positionCoach": {
    "title": "Study this position",
    "lead": "Get a plain-words explanation written only from the engine's facts, or keep the position in your notebook to practice later.",
    "explain": "Explain this position",
    "explainFree": "Explain this position · free today ({{count}} left)",
    "explainCredit": "Explain this position · {{count}} credit",
    "explainExplained": "Explain this position · already explained (free)",
    "freeNote": "One explanation a day is free, shared with the game coach; after that it is {{cost}} credit.",
    "waitingEngine": "The engine is still thinking; the explanation starts as soon as it finishes.",
    "signInExplain": "Sign in to get the explanation — one a day is free.",
    "signInSave": "Sign in to keep positions in your notebook.",
    "rejected": "The explanation did not pass its fact check, so it is not shown. Nothing was charged — try again.",
    "inProgress": "This position is already being explained. Try again in a moment.",
    "save": "Save to my positions",
    "saved": "Saved to my positions",
    "savedToast": "Position saved. Find it under Positions.",
    "openNotebook": "Open my positions",
    "practiceTitle": "Practice this position",
    "practiceNeedsEngine": "The engine's best move becomes the answer; let the engine finish first.",
    "answer": "Answer:",
    "practice": "Add to practice",
    "practiceAdded": "Added to your practice cards.",
    "practiceExisting": "Already in your practice cards.",
    "openPractice": "Open practice",
    "field": {
      "position": "The position",
      "plan": "The plan",
      "watch": "Watch out for"
    },
    "basis": "Engine basis (Stockfish, depth {{depth}}): best is {{best}} · winning chance about {{win}}% for {{side}}",
    "basisMate": "Engine basis (Stockfish, depth {{depth}}): {{best}} starts a forced mate for {{side}}",
    "uncertain": "The engine's reason for its move lies further ahead than its line shows, so the plan is its judgement, not a proven line.",
    "charged": "{{count}} credit used. Asking again about this position, in any language, is free.",
    "usedFree": "Today's free explanation used — no credit taken.",
    "cached": "Already explained — nothing used.",
    "form": {
      "source": "Where is it from?",
      "title": "Title",
      "titleBook": "e.g. My System, chapter 3",
      "titleVideo": "e.g. the video's name",
      "optional": "Optional",
      "page": "Page",
      "pageInvalid": "Enter a page number.",
      "timestamp": "Time in the video",
      "timestampInvalid": "Use minutes and seconds, like 12:34.",
      "url": "Video link",
      "urlInvalid": "The link has to start with http:// or https://.",
      "note": "Note",
      "notePlaceholder": "What to remember about this position",
      "submit": "Save"
    },
    "outdated": "Written with an earlier version of the coach. Reading it is free; a new explanation is counted like any other.",
    "explainAgain": "Explain again"
  },
  "howItWorks": {
    "pageTitle": "How ScanChess works",
    "lead": "Three parts: scan the game, analyze it, then practice what it shows you. Scanning uses credits; checking, analysis, replay and export are free.",
    "partLabel": "Part {{number}}",
    "scan": {
      "title": "Scan",
      "intro": "Turn paper or a picture into a game or a position you can use.",
      "cta": "Scan a scoresheet",
      "secondary": "Scan a board image",
      "steps": [
        {
          "title": "Take the picture",
          "text": "Photograph a handwritten scoresheet flat and in even light, or use a screenshot, a book diagram or a top-down photo of a board. JPG, PNG or WebP up to 15 MB; HEIC is not supported."
        },
        {
          "title": "Upload and scan",
          "text": "Add the pages of one game in order, up to 10 images, or a single board image. A scoresheet scan costs 2 credits however many pages it has and a board 1; new accounts get 10 free credits."
        },
        {
          "title": "Check the result",
          "text": "Every move is replayed on a board: illegal moves are marked red and doubtful ones amber, with the closest legal moves to choose from. For a board, confirm the side to move. Corrections are free."
        },
        {
          "title": "Save or export",
          "text": "A scanned game is saved to your games library with its photo. Copy or download the PGN or FEN for Lichess, Chess.com or ChessBase."
        }
      ]
    },
    "analyze": {
      "title": "Analyze",
      "intro": "See where the game was won and lost.",
      "cta": "Analyze a game",
      "secondary": "Open the analysis board",
      "steps": [
        {
          "title": "Run the analysis",
          "text": "Stockfish analyzes the game for free and saves the result with it: each side's accuracy, every inaccuracy, mistake and blunder, and the moments the game turned."
        },
        {
          "title": "Ask the AI coach",
          "text": "The coach explains the turning points in plain words: what happened, what was better and why. One game a day is free with a verified email; after that it costs 1 credit per game."
        },
        {
          "title": "Replay and explore",
          "text": "Step through the moves, try your own ideas on the analysis board or open the game on Lichess. A game you already have as PGN can be imported and analyzed the same way."
        }
      ]
    },
    "practice": {
      "title": "Practice",
      "intro": "Turn your own mistakes into training.",
      "cta": "Practice missed tactics",
      "secondary": "Compare plans",
      "steps": [
        {
          "title": "Daily practice",
          "text": "Tactics you missed in your analyzed games become short exercises. Free accounts get 15 a day; Pro has no limit."
        },
        {
          "title": "Insights",
          "text": "Your insights profile shows the patterns across your games and can compare your over-the-board play with a linked Lichess or Chess.com account. The full profile, with accuracy over time, phases and mistake types, comes with Pro."
        },
        {
          "title": "Prepare (Pro)",
          "text": "Keep opening repertoires and see where a game left them, and scout an opponent's online games to see what they play and where to aim."
        }
      ]
    },
    "clubs": "Coaching a group or running a club? Pro+ adds a player roster with a page per student, round scan games assigned to players in one step, and event reports you can share by link.",
    "clubsLink": "For coaches & clubs"
  }
}
