kimi-code/apps/web/index.html
Jianxuan Xu 17ef185e03
feat: stepped font scale, kimi skin palette, and macOS frosted sidebar (#91)
* feat: polish UI and typography

* feat: drop the 2XL font-scale step

* fix(desktop): restore customizable shortcut keys in the sidebar

* feat(desktop): add a settings switch for the macOS frosted sidebar

* chore: add changesets

* feat: adopt the kimi.com palette as the single palette

The kimi skin becomes THE palette (neutral-gray surfaces, alpha label/
fill/separator ramp, KMBlue accent, #121212 dark ladder, production
composer + send recipes) and the skin switch goes away with the old
default palette. One deliberate exception: the status hues (success /
warning / danger / done) keep the app's own WCAG-tuned ramp — the
production status colours fall short of 4.5:1 on the neutral surfaces.
Terminal xterm background and the theme-color pins follow the new
dark #121212.

* fix(desktop): restore the internal-test badge in the sidebar

* fix: address codex review feedback

- guard the legacy px font-size migration against non-finite values
  (a corrupt kimi-web.ui-font-size no longer upgrades the UI to XL)
- pass visualEffectState 'inactive' even when vibrancy starts disabled,
  so a runtime re-enable in the same run re-pins the flat material
  instead of the focus-following one
- trim the vibrancy rationale out of window.ts (kept in
  apps/desktop/docs/native-todos.md)

* fix: address codex review feedback (round 3)

- honor ordered-list start/value attributes: lists with an explicit start
  fall back to native decimal markers instead of the custom counter
- replace the #000 mask stops with --color-text-strong and drop the hex
  literal from the SegmentedControl comment (check:style findings 34 -> 29)
- keep the active send fill while starting so the in-flight send doesn't
  read as a disabled button (spinner recolored onto it)

* docs(desktop): drop tool attribution from the vibrancy note

* fix(web): keep the frosted-sidebar tint desktop-only

* docs: trim the session-row fade rationale out of the stylesheet

* fix: address codex review feedback (round 4)

- run the send-button transition on the --duration-*/--ease-* motion tokens
- seed data-font-scale pre-paint in both boot paths, mirroring the
  useAppearance migration (xxlarge fallback + legacy px mapping), so a
  non-Medium user never flashes the Medium scale before the bundle runs
- pin the vibrancy opt-out into the renderer URL (kimi_vibrancy=0, same
  channel as kimi_onboarded) so an opted-out relaunch never flashes the
  frosted tint before the bridge answers

* fix: address codex review feedback (round 5)

- pin kimi_vibrancy on every boot and mirror it into sessionStorage, so
  the vibrancy opt-out survives SPA reloads that dropped the boot query
- drop the internal skill name and the misleading bubbleBlue line from
  the palette docs (the user bubble is neutral BubbleGray in both schemes)

* fix: address codex review feedback (round 6)

- mirror settings toggles into the kimi-vibrancy sessionStorage seed, so
  an SPA reload no longer repaints from the stale cached state
- honor per-item <li value> the same way as ol[start]: fall back to
  native decimal markers
- trim the useVibrancy header to the runtime invariants (rationale stays
  in apps/desktop/docs/native-todos.md)

* fix: address codex review feedback (round 7)

- create every macOS window with the (pinned inactive) material and
  remove it right after creation when vibrancy is opted out, so a
  same-run re-enable always restores the flat pinned state
- clear the settings scrollbar hide timer on unmount
- keep the disabled send button from taking the hover lift shadow
- trim the vibrancy options comment to the runtime invariants

* fix: seed the vibrancy paint class sessionStorage-first

A settings toggle after boot writes the sessionStorage seed, while the
address bar can still carry the boot-time kimi_vibrancy pin — a full
reload must not let the stale pin override the live per-tab choice.

---------

Co-authored-by: chengluyu <2239547+chengluyu@users.noreply.github.com>
2026-07-24 10:48:20 +08:00

22 lines
1.1 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" sizes="64x64" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover, interactive-widget=resizes-content" />
<meta name="color-scheme" content="light dark" />
<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)" />
<meta name="theme-color" content="#121212" media="(prefers-color-scheme: dark)" />
<!-- Apply persisted display prefs BEFORE the bundle loads: without this,
users can get a color-scheme/font flash before useKimiWebClient mirrors
the data attributes. Mirrors applyColorSchemeToDocument. Loaded from the
external /boot.js (a classic script, so still render-blocking) because
the server's Content-Security-Policy forbids inline scripts. -->
<script src="/boot.js"></script>
<title>Kimi Code Web</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>