# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## You Must
- Respond in the same language the user is writing in.
- Commit to Git only when instructed.
- If multiple requirements are given in a single instruction, divide the commits into appropriate sizes/granularities.
- When creating a pull request, use the `.claude/skills/create-pr` skill so the project's `.github/pull_request_template.md` is followed.
## Project Overview
Windows Forms application (.NET 9.0 / C#) distributed via the Microsoft Store. Runs as a system tray icon whose animation reflects system load.
**Top-level layout:**
- `RunCat365.sln` — Main solution
- `RunCat365/` — Main application project
- `WapForStore/` — Windows Application Packaging project for the Microsoft Store
**Build:** Open `RunCat365.sln` in Visual Studio. Supported platforms: x64, x86, ARM64. Target framework: .NET 9.0 (Windows 10.0.26100.0).
**Releasing — version numbers must be updated in two places:**
1. `RunCat365/RunCat365.csproj` — `X.Y.Z` (3-digit)
2. `WapForStore/Package.appxmanifest` — `Version="X.Y.Z.0"` in `` (4-digit)
## Architecture (patterns, not file lists)
- **Entry point:** `Program.cs` hosts the tray application context that owns the timers, the tray icon, and the context menu.
- **Repository pattern for system metrics:** Each metric has a `*Repository` class that produces a matching `*Info` struct (CPU / GPU / memory / storage / network / temperature). Add a new metric by adding a paired repository and info struct.
- **Animation loop:** A 1-second fetch timer refreshes the `*Info` structs; a separate animate timer advances frames at a rate derived from the `SpeedSource` setting. Theme-aware icon recoloring lives in `BitmapExtension`.
- **Custom runners:** User-defined animations are loaded from `profiles.json` and managed by the `CustomRunner*` classes; the active profile is stored in the `CustomRunnerName` setting.
- **EndlessGame:** Mini-game living in `EndlessGameForm` and its collaborator classes.
- **Settings & resources:** Persisted user preferences in `Properties/UserSettings.settings`; embedded images/icons in `Properties/Resources.resx`.
## Localization
- Localized strings live in `Properties/Strings.resx` (English default) and sibling `Properties/Strings.{locale}.resx` files. Any new string must be added to every variant.
- Per-locale font and culture settings live in `SupportedLanguage.cs`.
- When adding a brand-new locale (not just new strings), follow the `.claude/skills/add-locale` skill.
## Coding Rules
General contribution rules — indentation style, `var` usage, single-change PRs, English-only code, license, and the rest — are documented in [`CONTRIBUTING.md`](CONTRIBUTING.md). Follow those first.
Project-specific additions:
- Do not write comments within the source code. Use names that make intent obvious.
- Write abbreviations such as URL or ID in either all lowercase or all uppercase (do not use Upper Camel Case for them).
- Do not use abbreviations like `img` for `image` or `cnt` for `count`.