Skip to content

feat(ui): Eclipse Minimal v2 — 全前端设计语言替换#145

Merged
sweetcornna merged 11 commits into
mainfrom
redesign/eclipse-minimal-v2
Jul 18, 2026
Merged

feat(ui): Eclipse Minimal v2 — 全前端设计语言替换#145
sweetcornna merged 11 commits into
mainfrom
redesign/eclipse-minimal-v2

Conversation

@sweetcornna

Copy link
Copy Markdown
Owner

概要

把 web 管理台的设计语言从 Spatial Glass(visionOS 彩色玻璃)整体替换为 Eclipse Minimal v2(claude.ai/design 设计项目 Corlinman Client 的现行语言,月之暗面/moonshot 风):纯黑画布 + 月升光晕、哑光炭面、月白五级墨阶、tint 只染"光"、日食珠签名、M PLUS 1 + MiSans + JetBrains Mono。

波次(每波一 commit,逐波门禁)

  1. Wave 0 基础层 — globals.css/token 全量换值(sg-* 名称不变,~5k 处引用自动重皮)、字体自托管、tailwind 禁 blur + 字重压平 + primary=tint、lib/tint.ts 取代 accent/theme-studio、强制测试重写(全仓零 backdrop-filter 等)
  2. Wave 1 图标 — 自绘 sprite(149 符号,24 网格/1.8 描边/圆头;设计签名符号逐字移植),lucide-react 依赖删除
  3. Wave 2 原语 — button/card/glass-panel/dialog/drawer/switch/alert 等按月照边/凹面/浮层光影语法;新 presence-orb(日食珠)
  4. Wave 3 壳层 — 炭面侧栏 + nav-active 选中态、canvas 色 appbar、品牌珠
  5. Wave 4 聊天 — 8 组件规范:气泡尾角、流式 thread + caret、凹面工具卡、虚线思考 chip、凹面 composer + 实心 tint 发送、审批 sheet、每屏 lively≤3
  6. Wave 5 公共页+长尾 — login/onboard hero 珠 + 全站唯一 grad-text、星云/极光/光标光全灭、白名单外发光降级
  7. Wave 6 收尾 — 视觉 QA(暗/Paper 亮/tint 联动)、README 换日食珠吉祥物(动画 SVG 小脸)、删 9MB 宣传片

验证

  • typecheck / vitest(1152)/ next build 全绿,每波提交时均过门禁
  • e2e:12 个失败 spec 与 main 基线逐一相同(本地环境预先存在,非回归)
  • playwright 截图 QA:login/dashboard/chat/security × 暗/亮 × tint 预设
  • 强制测试新增不变量:零 backdrop-filter、零 lucide import、grad-text 白名单、bloom 白名单、字重≤500

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@github-actions github-actions Bot added codex:needs-review A Codex review is needed for the current PR head. codex:review-requested A Codex review was requested or should be running automatically. status: 🔁 re-review loop A fresh Codex review was requested after the latest change or comment. codex:reviewed Codex posted a review result or thumbs-up after the latest request. status: 👀 ready for maintainer look No automation blocker is known; a maintainer should inspect the current result. and removed codex:review-requested A Codex review was requested or should be running automatically. codex:needs-review A Codex review is needed for the current PR head. status: 🔁 re-review loop A fresh Codex review was requested after the latest change or comment. labels Jul 18, 2026
…peline, zero-blur enforcement

- globals.css rewritten to Eclipse Minimal v2: pure-black canvas + moonrise
  halo on <html>, matte charcoal surfaces, moon-white ink, tint-only glow
  (--sg-tint* + bloom/edge/well/lift/scrim light grammar); sg-* names kept
  so ~5k call sites re-skin by value
- tailwind: backdropBlur/Saturate core plugins disabled, fontWeight
  semibold/bold flattened to 500, primary/ring routed to var(--sg-tint),
  MiSans/M PLUS 1/JetBrains Mono stacks, st-* radius/spacing tiers
- fonts self-hosted in app/fonts (MiSans Latin subsets pulled from the
  design project, JBM VF, M PLUS 1 latin-500) via next/font/local
- lib/tint.ts replaces accent.ts + theme-studio.ts: data-tint presets
  (dawn/ice/rose/moss/iris) + locked-L/C custom hue; BOOT purges Spatial
  Glass era localStorage CSS; accent-picker rewritten as tint picker
- deleted: aurora-background, cursor-light, tilt-card, use-specular
- repo sweep: zero backdrop-* classes, zero lg-* optics, sg-noise gone,
  sg-grad-text confined to login/onboard heroes
- enforcement tests rewritten for the Eclipse invariants + new tint tests
…react

- components/icons/sprite.ts: 149 symbols, 24 grid / 1.8 stroke / round
  caps / currentColor; signature glyphs (spark, chevrons, arrows, warning,
  trash, pin, doc, mic, menu, download, offline…) transcribed verbatim
  from the design project's assets/icons.js, the rest re-set from lucide
  outlines (ISC) at the Eclipse stroke; directional family unified at
  stroke 2 per the design chevrons
- components/icons/index.tsx: <Icon name> over an inline <use> sprite +
  drop-in PascalCase exports and LucideIcon-compatible type, so all 152
  importing files switch via a one-line import change
- sprite inlined once in app/layout.tsx (static-export safe)
- lucide-react dependency removed; enforcement test forbids reimport
- button: solid tint pill (whitelisted glow) / ghost-border outline /
  matte secondary + quiet ghost / muted err destructive; weight 500;
  50px lg tier
- new presence-orb primitive (eclipse pearl, sm/md/hero, eclipse-turn)
- card/glass-panel/empty-state: resting surfaces carry the moon edge
  only; primary variant = selected treatment (edge + inset tint glow)
- dialog/drawer/command-palette/cmdk: floating tier unified on
  .sg-glass-overlay (opaque #111 + strong edge + elev-4)
- alert: matte charcoal band + 2px status left rule
- switch: checked = solid tint w/ tint-ink thumb; unchecked = well
- stat-chip/filter-chip: active state = nav-active selected treatment
- skeleton shimmer is now an opacity pulse (CSS-level, wave 0)
- sidebar: matte charcoal rail with moon edge only; elevation earned only
  while the mobile drawer floats; active item = nav-active selected
  treatment; indicator bar = tint + bloom-1; user chip = eclipse pearl
- topnav: canvas-colored .c-appbar (hairline bottom border + downward
  scrim) replacing the glass card
- brand-mark: mascot.png replaced by a static eclipse pearl + display-face
  wordmark
- message-bubble: user = raised charcoal bubble w/ bottom-right tail +
  strong moon edge; assistant = .c-bubble agent (600px cap, bottom-left
  tail); streaming = luminous thread + light seep via CSS; role-row
  assistant dot = tiny eclipse pearl; edit-in-place = sunken well with
  solid-tint save
- markdown caret: tint + bloom-1 (whitelisted)
- tool-call-card: running state = static tint dot (thread owns the
  motion budget); sunken well container
- reasoning-block: dashed quiet chip + left-rule body; shimmer/italic
  dropped
- composer: sunken input well (radius 24, well shadow), no lens/scale;
  send = solid tint circle w/ soft glow; segmented control selected =
  tint; emoji active = tint-soft
- chat-sidebar: active row = nav-active selected treatment; new-chat =
  solid tint pill; pin/rename de-accented
- approval-prompt: undecided = opaque sheet treatment (strong edge +
  elev); allow = solid tint pill / deny + always = ghost pills
- chat-area header: .c-appbar + app-bar pearl doubling as the typing
  indicator (spins while streaming); status dot static
- chat empty state: hero eclipse pearl replaces the mascot
- login/onboard: nebula/starfield/noise layers removed (moonrise on <html>
  is the canvas); hero = spinning eclipse pearl + the app's only grad-text
  (display face, 26px, +1% tracking); onboard steps = solid tint
- status page: page-local backdrop removed; hero pill/avatar de-glowed to
  edge treatments
- 404: eclipse pearl + display-face numerals; mascot.tsx deleted
- font-serif → font-display everywhere; GlassPanel lively prop usages
  stripped (stat-chip API simplified)
- glow demotions outside the whitelist (dashboard CTA, cost footer,
  env-var rows, message-list jump pill, status pill); dashboard hero
  nebula blobs removed; persona avatar fallback matte
…se pearl

- presence-orb: display inline-block (span width/height was collapsing to
  0 outside flex parents — the hero pearl was invisible)
- breadcrumbs: current page label nowrap (vertical squeeze in narrow bars)
- README: product-tour GIF removed (9MB), mascot = the eclipse pearl
  (docs/assets/eclipse-pearl.png, rendered from the design token CSS)
- visual QA pass (playwright, throwaway gateway): login/dashboard/chat/
  security dark + Paper light + data-tint=ice all verified; e2e baseline
  parity confirmed — the 12 failing specs fail identically on main
  (pre-existing local-stack issues, no redesign regressions)
Cute moon-white eyes (with pupils + periodic blink), a smile that
breathes, a slowly turning corona and a gentle bob — all CSS inside the
SVG so it animates right in the GitHub README <img>; reduced-motion
disables everything. Replaces the static PNG tile.
…aptures)

A git add -A sweep in an earlier iteration of this branch briefly
committed local audit/playwright artifacts (history rewritten to purge
them); ignore the recurring patterns so it cannot happen again.
@sweetcornna
sweetcornna force-pushed the redesign/eclipse-minimal-v2 branch from 7fb859d to 445b291 Compare July 18, 2026 10:54
@github-actions github-actions Bot added codex:needs-rerun A new push or stale result means @codex review should be requested again. codex:review-requested A Codex review was requested or should be running automatically. status: 🔁 re-review loop A fresh Codex review was requested after the latest change or comment. and removed codex:reviewed Codex posted a review result or thumbs-up after the latest request. status: 👀 ready for maintainer look No automation blocker is known; a maintainer should inspect the current result. labels Jul 18, 2026
Findings from the 8-angle review pass:
- CRITICAL: bg-sg-card-grad token now carries fill + sheen in one
  background-image stack. tailwind-merge was silently dropping the base
  bg-* class wherever the pair was composed via cn() (GlassPanel, Card,
  EmptyState), and ~8 unmigrated bare consumers (session detail
  sub-surfaces) rendered transparent on the black canvas
- shadow-sg-selected token (--sg-shadow-selected) = single source for the
  selected treatment; .nav-active + GlassPanel primary now share it
- dangling var(--font-geist-mono) → var(--font-jetbrains-mono) in config
  raw view, agents detail, runner-node SVG labels (mono was silently
  falling back to sans/system)
- sidebar avatar initial forced white — the pearl disc is always #000,
  theme ink vanished on Paper light
- BOOT tint generator re-synced with buildTintCss (Math.round on hue)
- icon sprite externalized to public/icons-sprite.svg + <use href> —
  removes ~106KB of duplicated inline+flight sprite markup from every
  exported route's HTML
- dead recipe CSS removed (.thread/.caret/.c-tool/.c-reason/.c-composer/
  .c-banner/.c-sheet/.ghost-pill/.solid-pill had zero consumers); Paper
  light shadow overrides for chat bubbles; stat-chip dead ternary + tone
  map remapped to Eclipse; empty-state JS reduced-motion gate dropped
  (CSS owns it); className sweep residue cleaned
- switch tests now pin the tint-ink thumb contract; ui/README design
  section rewritten (was two design languages stale)
@sweetcornna
sweetcornna merged commit c75df11 into main Jul 18, 2026
9 checks passed
@github-actions github-actions Bot removed codex:review-requested A Codex review was requested or should be running automatically. codex:needs-rerun A new push or stale result means @codex review should be requested again. status: 🔁 re-review loop A fresh Codex review was requested after the latest change or comment. labels Jul 18, 2026
@sweetcornna
sweetcornna deleted the redesign/eclipse-minimal-v2 branch July 18, 2026 11:17
@github-actions github-actions Bot added the status: ✅ merge-ready Evidence and review are clear; normal merge gates may proceed. label Jul 18, 2026
sweetcornna added a commit that referenced this pull request Jul 18, 2026
Full-frontend design-language replacement (PR #145): pure-black
monochrome Eclipse system with the tint pipeline, eclipse-pearl
signature, self-drawn icon sprite, self-hosted MiSans/M PLUS 1/
JetBrains Mono, zero backdrop-filter, weight-500 discipline — all
vitest-enforced. README rides the animated eclipse-pearl mascot.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status: ✅ merge-ready Evidence and review are clear; normal merge gates may proceed.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant