From aa60acb1649d5d9cbe0508758e76bd2ee3f9853c Mon Sep 17 00:00:00 2001 From: AnRil Date: Sun, 17 May 2026 17:49:46 +0700 Subject: [PATCH] =?UTF-8?q?release(v0.3.2):=20=D0=BD=D0=BE=D0=B2=D1=8B?= =?UTF-8?q?=D0=B5=20=D1=88=D1=80=D0=B8=D1=84=D1=82=D1=8B,=20=D0=B8=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D0=BA=D0=B8=20=D1=81=D0=B0=D0=B9=D0=B4=D0=B1=D0=B0?= =?UTF-8?q?=D1=80=D0=B0,=20light=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB?= =?UTF-8?q?=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit == Шрифты == - Sans/display: Geist → Manrope (мягче, дружелюбнее, ближе к SF Rounded) - Serif (hero titles): Instrument Serif → Fraunces с opsz axis 144 - Mono: Geist Mono → JetBrains Mono с ss02/ss19/zero features == Размеры (iOS HIG calibration) == - Hero h1: 40-44px → 32-36px (ближе к настоящему iOS Large Title 34pt) - Reminder name: 32 → 28; reps counter: 64 → 56 - Match summary title: 22 → 24 - Dashboard stat value: 30 → 26 - Body line-height/letter-spacing подкручены под Manrope == Иконки сайдбара == - LayoutDashboard → Sun (Сегодня — утренняя энергия) - ListChecks → Dumbbell (Упражнения — спорт прямо) - Gamepad2 → Joystick (Игры — более игровая иконка) - Target → Flame (Челленджи — интенсивность) - Settings → Settings2 (немного объёмнее) - Размер плашки 28→32px, иконки 15→17px == Light theme == - DEFAULT_SETTINGS.theme: 'system' → 'light' (новые установки сразу получают светлую тему) - Light bg прогрет: 242,242,247 → 245,245,249 - surface-2 чуть темнее для лучшей сепарации полей ввода - text не pure black а 17,17,19 (легче глазам) - shadow-card получила тёплый slate-tinge Существующие пользователи с theme='system' продолжат следовать ОС. Для принудительного переключения — Settings → Тема → Светлая. Co-Authored-By: Claude Opus 4.7 --- package.json | 2 +- src/renderer/index.html | 2 +- src/renderer/src/ReminderApp.tsx | 8 +-- src/renderer/src/components/Sidebar.tsx | 45 ++++++++------- src/renderer/src/pages/Challenges.tsx | 2 +- src/renderer/src/pages/Dashboard.tsx | 4 +- src/renderer/src/pages/Exercises.tsx | 2 +- src/renderer/src/pages/Games.tsx | 2 +- src/renderer/src/pages/Settings.tsx | 2 +- src/renderer/src/styles/globals.css | 74 ++++++++++++------------- src/shared/types.ts | 2 +- tailwind.config.js | 10 ++-- 12 files changed, 77 insertions(+), 78 deletions(-) diff --git a/package.json b/package.json index 8f95b28..dc61103 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "laude", - "version": "0.3.1", + "version": "0.3.2", "description": "Exercise reminder — Windows desktop app", "main": "out/main/index.js", "author": "AnRil", diff --git a/src/renderer/index.html b/src/renderer/index.html index 949acdf..db70c3f 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -7,7 +7,7 @@ Exercise Reminder - +
diff --git a/src/renderer/src/ReminderApp.tsx b/src/renderer/src/ReminderApp.tsx index fccbcb3..c97b14e 100644 --- a/src/renderer/src/ReminderApp.tsx +++ b/src/renderer/src/ReminderApp.tsx @@ -142,15 +142,15 @@ function ExerciseReminder({
Время тренировки
-

+

{exercise.name}

- + {exercise.reps} - раз + раз
@@ -238,7 +238,7 @@ function MatchSummaryView({ )} -

+

{won ? 'Победа' : lost ? 'Поражение' : 'Матч завершён'}

diff --git a/src/renderer/src/components/Sidebar.tsx b/src/renderer/src/components/Sidebar.tsx index 5a94b62..d9e0543 100644 --- a/src/renderer/src/components/Sidebar.tsx +++ b/src/renderer/src/components/Sidebar.tsx @@ -1,38 +1,37 @@ import { NavLink } from 'react-router-dom' import { AnimatePresence, motion } from 'framer-motion' import { - LayoutDashboard, - ListChecks, - Gamepad2, - Target, - Settings as SettingsIcon, + Sun, + Dumbbell, + Joystick, + Flame, + Settings2, X } from 'lucide-react' type Item = { to: string label: string - icon: typeof LayoutDashboard + icon: typeof Sun end?: boolean tint?: string } -// Each item gets a tinted icon-square reminiscent of iOS Settings rows. +// Tinted icon plaques á la iOS Settings rows. const items: Item[] = [ + { to: '/', label: 'Сегодня', icon: Sun, end: true, tint: 'bg-accent' }, { - to: '/', - label: 'Сегодня', - icon: LayoutDashboard, - end: true, - tint: 'bg-accent' + to: '/exercises', + label: 'Упражнения', + icon: Dumbbell, + tint: 'bg-info' }, - { to: '/exercises', label: 'Упражнения', icon: ListChecks, tint: 'bg-info' }, - { to: '/games', label: 'Игры', icon: Gamepad2, tint: 'bg-accent-2' }, - { to: '/challenges', label: 'Челленджи', icon: Target, tint: 'bg-warning' }, + { to: '/games', label: 'Игры', icon: Joystick, tint: 'bg-accent-2' }, + { to: '/challenges', label: 'Челленджи', icon: Flame, tint: 'bg-warning' }, { to: '/settings', label: 'Настройки', - icon: SettingsIcon, + icon: Settings2, tint: 'bg-text/70' } ] @@ -98,16 +97,16 @@ function SidebarContent({ onNav }: { onNav?: () => void }): JSX.Element { <> {/* Brand */}

-
+
Laude
-
- Move with intention +
+ Двигайся осознанно
{/* Nav */} -
-

+

Челленджи

diff --git a/src/renderer/src/pages/Dashboard.tsx b/src/renderer/src/pages/Dashboard.tsx index 5517246..a738400 100644 --- a/src/renderer/src/pages/Dashboard.tsx +++ b/src/renderer/src/pages/Dashboard.tsx @@ -72,7 +72,7 @@ export default function Dashboard(): JSX.Element {

{today}
-

+

Сегодня

@@ -233,7 +233,7 @@ function HeroStat({
{label}
-
+
{value}
{subvalue && ( diff --git a/src/renderer/src/pages/Exercises.tsx b/src/renderer/src/pages/Exercises.tsx index cd0c2ac..2a04d57 100644 --- a/src/renderer/src/pages/Exercises.tsx +++ b/src/renderer/src/pages/Exercises.tsx @@ -25,7 +25,7 @@ export default function Exercises(): JSX.Element {
Программа
-

+

Упражнения

diff --git a/src/renderer/src/pages/Games.tsx b/src/renderer/src/pages/Games.tsx index 14b90f4..da230b6 100644 --- a/src/renderer/src/pages/Games.tsx +++ b/src/renderer/src/pages/Games.tsx @@ -64,7 +64,7 @@ export default function GamesPage(): JSX.Element {
Трекинг матчей
-

+

Игры

diff --git a/src/renderer/src/pages/Settings.tsx b/src/renderer/src/pages/Settings.tsx index e492ef8..ca0be39 100644 --- a/src/renderer/src/pages/Settings.tsx +++ b/src/renderer/src/pages/Settings.tsx @@ -24,7 +24,7 @@ export default function SettingsPage(): JSX.Element {

Конфигурация
-

+

Настройки

diff --git a/src/renderer/src/styles/globals.css b/src/renderer/src/styles/globals.css index 1ab54bb..8d006e6 100644 --- a/src/renderer/src/styles/globals.css +++ b/src/renderer/src/styles/globals.css @@ -2,34 +2,33 @@ @tailwind components; @tailwind utilities; -/* ===== Design tokens — Apple Human Interface Guidelines ===== */ +/* ===== Design tokens — Apple HIG with Manrope/Fraunces ===== */ :root { /* Brand & semantic colors (iOS system palette) */ --accent: 255 107 53; /* Apple Fitness Move orange */ --accent-2: 255 45 85; /* systemPink */ --success: 52 199 89; /* systemGreen */ - --warning: 255 159 10; /* systemOrange-dark */ + --warning: 255 159 10; /* systemOrange dark */ --destructive: 255 59 48; /* systemRed */ --info: 0 122 255; /* systemBlue */ color-scheme: light dark; } -/* Light — iOS groupedBackground feel */ +/* Light — polished iOS groupedBackground with warm undertone */ :root { - --bg: 242 242 247; /* systemGroupedBackground */ - --surface: 255 255 255; /* secondarySystemGroupedBackground (cards) */ - --surface-2: 242 242 247; /* tertiarySystemGroupedBackground */ - --text: 0 0 0; - --text-secondary: 60 60 67; /* used with opacity 0.6 */ - --text-tertiary: 60 60 67; /* used with opacity 0.3 */ - --hairline: 60 60 67; /* used with opacity 0.18 */ - --vibrancy: 255 255 255; /* sidebar translucent base */ + --bg: 245 245 249; /* slightly warmer than 242,242,247 */ + --surface: 255 255 255; + --surface-2: 240 240 245; /* subtle separation for inputs/sections */ + --text: 17 17 19; /* not pure black — softer */ + --text-secondary: 60 60 67; + --text-tertiary: 60 60 67; + --hairline: 60 60 67; + --vibrancy: 255 255 255; - /* Legacy tokens (mapped to keep some old utility classes working) */ --accent-soft: 255 107 53; - --bg-deep: 230 230 235; + --bg-deep: 232 232 238; --surface-elevated: 255 255 255; --border: 60 60 67; --muted: 60 60 67; @@ -38,11 +37,11 @@ --xp: 255 159 10; } -/* Dark — iOS true black for OLED, elevation via grey steps */ +/* Dark — true black with grey elevation */ .dark { - --bg: 0 0 0; /* systemBackground */ - --surface: 28 28 30; /* secondarySystemBackground */ - --surface-2: 44 44 46; /* tertiarySystemBackground */ + --bg: 0 0 0; + --surface: 28 28 30; + --surface-2: 44 44 46; --text: 255 255 255; --text-secondary: 235 235 245; --text-tertiary: 235 235 245; @@ -68,24 +67,26 @@ body, body { font-family: - 'Geist', + 'Manrope', -apple-system, 'SF Pro Text', 'Segoe UI Variable Text', 'Segoe UI', system-ui, sans-serif; - font-feature-settings: 'cv11', 'ss01', 'ss03'; /* Geist stylistic alts */ background-color: rgb(var(--bg)); color: rgb(var(--text)); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - letter-spacing: -0.01em; + font-size: 14px; + line-height: 1.45; + letter-spacing: -0.005em; } +/* Display — same Manrope but slightly tighter for headings */ .font-display { font-family: - 'Geist', + 'Manrope', -apple-system, 'SF Pro Display', 'Segoe UI Variable Display', @@ -94,17 +95,20 @@ body { letter-spacing: -0.02em; } +/* Serif — Fraunces for hero titles with optical-size axis */ .font-serif { - font-family: 'Instrument Serif', 'Iowan Old Style', 'Apple Garamond', Georgia, - serif; - letter-spacing: -0.01em; + font-family: 'Fraunces', 'Iowan Old Style', 'New York', Georgia, serif; + font-optical-sizing: auto; + font-variation-settings: 'opsz' 144; + letter-spacing: -0.025em; } .font-mono-num { - font-family: 'Geist Mono', ui-monospace, 'SF Mono', 'Cascadia Code', Menlo, - monospace; + font-family: 'JetBrains Mono', ui-monospace, 'SF Mono', 'Cascadia Code', + Menlo, monospace; font-variant-numeric: tabular-nums; - font-feature-settings: 'ss02'; + font-feature-settings: 'ss02', 'ss19', 'zero'; + letter-spacing: -0.01em; } /* Custom titlebar drag region */ @@ -117,7 +121,7 @@ body { app-region: no-drag; } -/* Thin iOS-style hairline (effectively 0.5px when device DPR allows) */ +/* iOS 0.5px-style hairlines */ .hairline-b { box-shadow: inset 0 -0.5px 0 rgb(var(--hairline) / 0.18); } @@ -129,19 +133,19 @@ body { box-shadow: inset 0 -0.5px 0 rgb(var(--hairline) / 0.4); } -/* Vibrancy panel (macOS Big Sur+ sidebar feel) */ +/* macOS vibrancy */ .vibrancy { background-color: rgb(var(--vibrancy) / 0.72); backdrop-filter: saturate(180%) blur(30px); -webkit-backdrop-filter: saturate(180%) blur(30px); } -/* iOS-style soft card shadow */ +/* Soft iOS card shadow with subtle warmth */ .shadow-card { box-shadow: 0 0.5px 0 rgb(0 0 0 / 0.03), - 0 1px 2px rgb(0 0 0 / 0.04), - 0 4px 12px rgb(0 0 0 / 0.04); + 0 1px 2px rgb(15 23 42 / 0.04), + 0 6px 14px -4px rgb(15 23 42 / 0.05); } .dark .shadow-card { box-shadow: @@ -149,7 +153,7 @@ body { 0 1px 2px rgb(0 0 0 / 0.4); } -/* Scrollbar — thin, iOS-style */ +/* Scrollbar */ ::-webkit-scrollbar { width: 8px; height: 8px; @@ -165,18 +169,15 @@ body { background: transparent; } -/* Selection */ ::selection { background: rgb(var(--accent) / 0.25); } -/* iOS focus ring */ *:focus-visible { outline: 2px solid rgb(var(--accent) / 0.55); outline-offset: 2px; } -/* Reminder window root — iOS sheet */ .reminder-shell { position: relative; border: 0.5px solid rgb(var(--hairline) / 0.25); @@ -189,7 +190,6 @@ body { height: 100%; } -/* Text helpers (semantic aliases) */ .text-secondary { color: rgb(var(--text-secondary) / 0.6); } diff --git a/src/shared/types.ts b/src/shared/types.ts index e9750f6..36f7e02 100644 --- a/src/shared/types.ts +++ b/src/shared/types.ts @@ -121,7 +121,7 @@ export const DEFAULT_SETTINGS: Settings = { startWithWindows: false, minimizeToTray: true, startMinimized: false, - theme: 'system', + theme: 'light', snoozeMinutes: 5 } diff --git a/tailwind.config.js b/tailwind.config.js index b08f37f..713962e 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -34,7 +34,7 @@ export default { }, fontFamily: { sans: [ - 'Geist', + 'Manrope', '-apple-system', 'SF Pro Text', 'Segoe UI Variable Text', @@ -43,7 +43,7 @@ export default { 'sans-serif' ], display: [ - 'Geist', + 'Manrope', '-apple-system', 'SF Pro Display', 'Segoe UI Variable Display', @@ -51,14 +51,14 @@ export default { 'sans-serif' ], serif: [ - 'Instrument Serif', + 'Fraunces', 'Iowan Old Style', - 'Apple Garamond', + 'New York', 'Georgia', 'serif' ], mono: [ - 'Geist Mono', + 'JetBrains Mono', 'ui-monospace', 'SF Mono', 'Cascadia Code',