diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9cea968..b235a3a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,6 +18,13 @@
- Локальная сборка помечается версией `0.0.0-dev` (реальную версию в релизные билды подставляет CI
из тега) — самосборный билд больше не выдаёт себя за релизный.
+### Исправлено
+- **Иконки режимов «Эко» и «Тихий» были перепутаны местами** с самых первых версий: Эко рисовался
+ луной со звёздами, Тихий — листом. Теперь как задумано: **лист — Эко** (экономия), **луна —
+ Тихий** (тишина). Поменялись местами и рисунок, и анимация (покачивание листа ↔ мерцание звёзд),
+ и акцент ячейки в панели (зелёный ↔ сизый) — в панели, OSD и трее. Первопричина была в
+ двусмысленной строке спецификации иконок «лист (эко/тихий)» — она переписана однозначно (XIC-14).
+
## [0.7.0] — 2026-07-28
### Добавлено
diff --git a/assets/svg/osd/perf-eco.svg b/assets/svg/osd/perf-eco.svg
index 0602202..f468b42 100644
--- a/assets/svg/osd/perf-eco.svg
+++ b/assets/svg/osd/perf-eco.svg
@@ -1,8 +1 @@
-
+
\ No newline at end of file
diff --git a/assets/svg/osd/perf-eco-moon.svg b/assets/svg/osd/perf-quiet-moon.svg
similarity index 100%
rename from assets/svg/osd/perf-eco-moon.svg
rename to assets/svg/osd/perf-quiet-moon.svg
diff --git a/assets/svg/osd/perf-eco-star1.svg b/assets/svg/osd/perf-quiet-star1.svg
similarity index 100%
rename from assets/svg/osd/perf-eco-star1.svg
rename to assets/svg/osd/perf-quiet-star1.svg
diff --git a/assets/svg/osd/perf-eco-star2.svg b/assets/svg/osd/perf-quiet-star2.svg
similarity index 100%
rename from assets/svg/osd/perf-eco-star2.svg
rename to assets/svg/osd/perf-quiet-star2.svg
diff --git a/assets/svg/osd/perf-quiet.svg b/assets/svg/osd/perf-quiet.svg
index f468b42..0602202 100644
--- a/assets/svg/osd/perf-quiet.svg
+++ b/assets/svg/osd/perf-quiet.svg
@@ -1 +1,8 @@
-
\ No newline at end of file
+
diff --git a/assets/svg/tray/tray-perf-eco.svg b/assets/svg/tray/tray-perf-eco.svg
index 698dcca..79871f5 100644
--- a/assets/svg/tray/tray-perf-eco.svg
+++ b/assets/svg/tray/tray-perf-eco.svg
@@ -1,4 +1 @@
-
+
\ No newline at end of file
diff --git a/assets/svg/tray/tray-perf-quiet.svg b/assets/svg/tray/tray-perf-quiet.svg
index 79871f5..698dcca 100644
--- a/assets/svg/tray/tray-perf-quiet.svg
+++ b/assets/svg/tray/tray-perf-quiet.svg
@@ -1 +1,4 @@
-
\ No newline at end of file
+
diff --git a/docs/08-icon-assets-spec.md b/docs/08-icon-assets-spec.md
index a643263..a440980 100644
--- a/docs/08-icon-assets-spec.md
+++ b/docs/08-icon-assets-spec.md
@@ -37,6 +37,18 @@
| `mode-turbo.svg` | **Молния** (турбо) | одна молния |
| `mode-full.svg` | **Две молнии** (полная мощность) | две отдельные, читаемые как две |
+> ⚠️ Формулировка «лист (эко/тихий)» выше — историческая и **двусмысленная**: из-за неё Эко и
+> Тихий разъехались по иконкам и приехали в релиз перепутанными (исправлено XIC-14). Актуальный
+> маппинг — однозначный, файлы называются по режиму:
+>
+> | Режим | Рисунок | Файлы (`assets/svg/`) | Анимация | Акцент ячейки |
+> |---|---|---|---|---|
+> | **Эко** | **лист** | `osd/perf-eco.svg`, `tray/tray-perf-eco.svg` | покачивание от ветерка (`DrawLeafSway`) | зелёный |
+> | **Тихий** | **луна со звёздами** | `osd/perf-quiet.svg` (+ части `perf-quiet-moon/-star1/-star2`), `tray/tray-perf-quiet.svg` | мерцание звёзд в противофазе (`DrawMoonTwinkle`) | сизый |
+>
+> Мнемоника: лист = экономия, луна = тишина/сон. Составные части (`-moon`, `-star1/2`) нужны
+> потому, что звёзды мерцают отдельно от луны — они всегда называются по тому же режиму, что и база.
+
### База / трей
| Файл | Что | Заметки |
|------|-----|---------|
diff --git a/docs/10-colors.md b/docs/10-colors.md
index 4ff7733..2efc7b1 100644
--- a/docs/10-colors.md
+++ b/docs/10-colors.md
@@ -45,7 +45,7 @@
### Зелёный — батарея/эко
| Hex | Material | Где |
|---|---|---|
-| `#8BC34A` | Light Green 500 | лист «Эко»/сбережения |
+| `#8BC34A` | Light Green 500 | лист «Эко»/сбережения (акцент ячейки Эко — зелёный; у «Тихого» луна и сизый `125,160,185`) |
| `#4CAF50` | Green 500 | уровень заряда, «здоровье» |
| `#558B2F` | Light Green 800 | тёмная зелень |
diff --git a/src/Ui/ModeUi.cs b/src/Ui/ModeUi.cs
index 02c4b82..309b3ec 100644
--- a/src/Ui/ModeUi.cs
+++ b/src/Ui/ModeUi.cs
@@ -8,8 +8,8 @@ internal static class ModeUi
/// Акцент ячейки режима в панели (палитра docs/10-colors.md).
public static Color Accent(PerfMode m) => m switch
{
- PerfMode.Eco => Color.FromArgb(125, 160, 185), // сизый
- PerfMode.Quiet => FlyoutPalette.Green,
+ PerfMode.Eco => FlyoutPalette.Green, // лист
+ PerfMode.Quiet => Color.FromArgb(125, 160, 185), // сизый — под луну
PerfMode.Auto => FlyoutPalette.Blue,
PerfMode.Turbo => FlyoutPalette.Orange,
PerfMode.FullSpeed => FlyoutPalette.Red,
diff --git a/src/Ui/OsdForm.cs b/src/Ui/OsdForm.cs
index 4ada0b0..8f46652 100644
--- a/src/Ui/OsdForm.cs
+++ b/src/Ui/OsdForm.cs
@@ -187,10 +187,10 @@ private void DrawBase(Graphics g, OsdKind kind, RectangleF r)
switch (kind)
{
case OsdKind.Auto: SvgIcons.DrawGauge(g, r, NeedleAngle()); return;
- case OsdKind.Quiet: SvgIcons.DrawLeafSway(g, r, _gaugeT, 1f); return;
+ case OsdKind.Quiet: SvgIcons.DrawMoonTwinkle(g, r, _gaugeT, 1f); return;
case OsdKind.Turbo: SvgIcons.DrawBoltPulse(g, r, _gaugeT, 1f); return;
case OsdKind.Full: SvgIcons.DrawRocket(g, r, _gaugeT, 1f); return;
- case OsdKind.Eco: SvgIcons.DrawMoonTwinkle(g, r, _gaugeT, 1f); return;
+ case OsdKind.Eco: SvgIcons.DrawLeafSway(g, r, _gaugeT, 1f); return;
case OsdKind.Charging: SvgIcons.DrawChargingPulse(g, r, _gaugeT); return;
case OsdKind.Travel: SvgIcons.DrawTravelPulse(g, r, _gaugeT); return;
}
diff --git a/src/Ui/QuickPanelForm.cs b/src/Ui/QuickPanelForm.cs
index 45885ce..421eafc 100644
--- a/src/Ui/QuickPanelForm.cs
+++ b/src/Ui/QuickPanelForm.cs
@@ -582,8 +582,8 @@ private void DrawModeIconAnimated(Graphics g, PerfMode m, RectangleF r, float op
{
switch (m)
{
- case PerfMode.Eco: SvgIcons.DrawMoonTwinkle(g, r, _gaugeT, k, opacity, saturation); break;
- case PerfMode.Quiet: SvgIcons.DrawLeafSway(g, r, _gaugeT, k, opacity, saturation); break;
+ case PerfMode.Eco: SvgIcons.DrawLeafSway(g, r, _gaugeT, k, opacity, saturation); break;
+ case PerfMode.Quiet: SvgIcons.DrawMoonTwinkle(g, r, _gaugeT, k, opacity, saturation); break;
case PerfMode.Auto: SvgIcons.DrawGauge(g, r, k * OsdForm.SweepAngle(_gaugeT), opacity, saturation); break;
case PerfMode.Turbo: SvgIcons.DrawBoltPulse(g, r, _gaugeT, k, opacity, saturation); break;
case PerfMode.FullSpeed: SvgIcons.DrawRocket(g, r, _gaugeT, k, opacity, saturation); break;
diff --git a/src/Ui/SvgIcons.cs b/src/Ui/SvgIcons.cs
index 9dce8e2..6ceae18 100644
--- a/src/Ui/SvgIcons.cs
+++ b/src/Ui/SvgIcons.cs
@@ -35,14 +35,14 @@ public static class SvgIcons
public const string PerfAuto = "perf-auto";
public const string PerfAutoDial = "perf-auto-dial"; // спидометр без стрелки
public const string PerfAutoNeedle = "perf-auto-needle"; // стрелка, пивот в центре
- public const string PerfEco = "perf-eco";
+ public const string PerfEco = "perf-eco"; // лист (экономия)
public const string PerfFull = "perf-full";
public const string PerfFullBody = "perf-full-body"; // ракета без пламени
public const string PerfFullFlame = "perf-full-flame"; // пламя отдельно
- public const string PerfEcoMoon = "perf-eco-moon"; // луна без звёзд
- public const string PerfEcoStar1 = "perf-eco-star1"; // звёзды по одной —
- public const string PerfEcoStar2 = "perf-eco-star2"; // мерцают в противофазе
- public const string PerfQuiet = "perf-quiet";
+ public const string PerfQuietMoon = "perf-quiet-moon"; // луна без звёзд
+ public const string PerfQuietStar1 = "perf-quiet-star1"; // звёзды по одной —
+ public const string PerfQuietStar2 = "perf-quiet-star2"; // мерцают в противофазе
+ public const string PerfQuiet = "perf-quiet"; // луна со звёздами (тишина)
public const string PerfTurbo = "perf-turbo";
public const string RefreshRate = "refresh-rate"; // монитор со стрелками — авто-герцовка вкл
public const string RefreshRateOff = "refresh-rate-off"; // то же серым — авто-герцовка выкл
@@ -151,7 +151,7 @@ private static void DrawBitmap(Graphics g, Bitmap bmp, RectangleF dest, float al
g.DrawImage(bmp, pts, src, GraphicsUnit.Pixel, attrs);
}
- /// Лист (Тихий): покачивание вокруг основания черешка, как от ветерка.
+ /// Лист (Эко): покачивание вокруг основания черешка, как от ветерка.
public static void DrawLeafSway(Graphics g, RectangleF r, float t, float k, float opacity = 1f, float saturation = 1f)
{
int size = (int)Math.Round(Math.Min(r.Width, r.Height));
@@ -160,7 +160,7 @@ public static void DrawLeafSway(Graphics g, RectangleF r, float t, float k, floa
float px = dest.X + dest.Width * 0.25f, py = dest.Y + dest.Height * 0.84f; // основание черешка
var st = g.Save();
g.TranslateTransform(px, py); g.RotateTransform(ang); g.TranslateTransform(-px, -py);
- DrawBitmap(g, Render(PerfQuiet, size), dest, opacity, 1f, saturation);
+ DrawBitmap(g, Render(PerfEco, size), dest, opacity, 1f, saturation);
g.Restore(st);
}
@@ -194,16 +194,16 @@ public static void DrawRocket(Graphics g, RectangleF r, float t, float k, float
DrawBitmap(g, Render(PerfFullBody, size), body, opacity, 1f, saturation);
}
- /// Луна (Эко): звёзды мерцают в противофазе.
+ /// Луна (Тихий): звёзды мерцают в противофазе.
public static void DrawMoonTwinkle(Graphics g, RectangleF r, float t, float k, float opacity = 1f, float saturation = 1f)
{
int size = (int)Math.Round(Math.Min(r.Width, r.Height));
var dest = CenteredDest(r, size);
- DrawBitmap(g, Render(PerfEcoMoon, size), dest, opacity, 1f, saturation);
+ DrawBitmap(g, Render(PerfQuietMoon, size), dest, opacity, 1f, saturation);
float a1 = 1f - 0.7f * k * (0.5f + 0.5f * MathF.Sin(t * 2.1f));
float a2 = 1f - 0.7f * k * (0.5f + 0.5f * MathF.Sin(t * 2.1f + 2.2f));
- DrawBitmap(g, Render(PerfEcoStar1, size), dest, opacity * a1, 1f, saturation);
- DrawBitmap(g, Render(PerfEcoStar2, size), dest, opacity * a2, 1f, saturation);
+ DrawBitmap(g, Render(PerfQuietStar1, size), dest, opacity * a1, 1f, saturation);
+ DrawBitmap(g, Render(PerfQuietStar2, size), dest, opacity * a2, 1f, saturation);
}
/// Батарея на зарядке: молния внутри мягко пульсирует.