Create a mobile-friendly focus timer as ONE complete HTML file for Kapsula (https://kapsula.app/). Output the HTML only, with all CSS and JavaScript inline. No frameworks, CDNs, network calls or build step. The app runs inside Kapsula on Android/iOS. The shell injects window.kapsula before your script. Do not copy or implement the bridge yourself. All bridge methods return Promises: - K.app.info() -> {name, projectId, platform, version, lang}; lang is the shell interface language code, e.g. "en" or "ru". - K.storage.get(key) -> JSON value or null - K.storage.set(key, value) -> {} - K.notify.schedule({at, title, body}) -> {id}; at is a future Unix timestamp in MILLISECONDS. At most 16 pending notifications per project. - K.notify.cancel() -> cancels all pending notifications belonging to this project. Build buttons for Focus (25 minutes), Break (5 minutes), Test (30 seconds), and Stop. Only one interval may be active. Disable actions while an async operation is pending. Before replacing a timer, await cancellation of the previous notification. Save the absolute endAt and an interval key (focus, rest or test) under storage key focus-timer-v1, and restore them on every page load. Derive remaining seconds from endAt minus Date.now(), never from counting setInterval ticks. If saving after scheduling fails, try cancelling the new notification and display the error. Keep errors visible. Do not claim success when notification permission is denied. When an interval expires, show that it ended. Do NOT start another interval automatically. The page's JavaScript is not a background service. Starting a break always requires a user action. Use const K = window.kapsula || null. In Kapsula use only K.storage for persistence, not localStorage. In a normal browser use localStorage with error handling, and prominently label it Browser preview: no native background notification. Browser data and Kapsula project data are separate. Interface text: English by default; Russian when K.app.info().lang (inside Kapsula) or navigator.language (in a browser) starts with "ru". Keep both sets of strings in one object; the notification title and body use the same language. Keep the