Skip to content

feat: Apple-style console theme site-wide, IP copy formats and full names - #210

Merged
HTExplicit merged 1 commit into
mainfrom
release/codexrip-12
Sep 28, 2026
Merged

HTExplicit merged 1 commit into
mainfrom
release/codexrip-12

Conversation

@HTExplicit

Copy link
Copy Markdown
Owner

Summary

The site owner's follow-up to v0.2.8-codexrip.11: the console should read as "modern, minimal but refined — Apple-grade",
with colour only where official sub2api has colour. This ships the approved Apple-style console theme (v2) to every page,
plus the IP-management copy formats and two small fixes. Frontend and docs only: no backend code, no migrations, no API
changes. Net: 45 files, +6.3k / −1.3k lines (most of it style.css).

1. Console theme v2 (flat_theme_enabled)

  • Apple HIG / macOS Liquid Glass language: neutral tonal backdrop; Liquid Glass only on chrome that content moves beneath
    (floating sidebar, top-bar capsule, menus/popovers/tooltips, sticky table header, bulk bar, pagination, dialog scrim);
    white 20px cards with layered shadows; tactile controls (glass capsules, glossy blue primary, recessed fields, recessed
    tracks with glossy thumbs); layered near-black dark mode (#0B0B0C / #161618 / #1F1F22); prefers-reduced-transparency
    and prefers-reduced-motion respected.
  • Colour only where upstream has colour: upstream's teal primary becomes Apple blue (#0071E3 / text #0066CC, dark
    #0A84FF / #64B4FF); KPI and quick-action tiles, status/semantic badges, charts, switches and the current item keep
    colour; platform/type/plan badges use upstream's platform colours again (the neutral branches in
    PlatformTypeBadge.vue, GroupBadge.vue, utils/platformColors.ts are removed). The top-bar balance, avatar, .code
    tags, bulk-bar rule, quick-action hover, green KPI figures, the /redeem balance card and the profile header tint follow
    upstream's colour positions.
  • Site-wide sweep: every reachable admin, user, public and mobile page and its menus/dialogs/popovers was captured in
    light and dark and fixed where needed (≈800 full-size frames, pixel contrast audit on each). Shared recipes for
    tooltips/popovers (glass), announcement dialogs, ConfirmDialog buttons, menus (ProxySelector, column settings, group
    pickers), plain tables (DataTable look), ops-style cards, nested panels in dark, empty textareas (3:1 line), white text
    on light fills, the onboarding tour.
  • styles/onboarding.css is back to upstream's file; the console tour look lives under html.flat-theme. Charts read the
    theme's Apple series/semantic tokens with the theme on and upstream's original colours with it off (restores upstream
    values the old skin had replaced, e.g. #14b8a6).
  • Fonts: Inter 4.001 variable Latin subset (@fontsource-variable/inter 5.3.0, SIL OFL 1.1, byte-identical to the package
    file) replaces Geist Sans; Geist Mono stays; Chinese keeps MiSans loaded at runtime from Xiaomi's service.
    THIRD_PARTY_NOTICES.md and .downstream/native-domains.md updated.
  • Theme off still renders the upstream look (every new selector is scoped to flat-theme; scope check: 0 unscoped).

2. IP management copy formats

  • The copy button copies the standard socks5://user:pass@host:port (row protocol); a menu offers
    host:port:user:pass, user:pass@host:port and host:port. New spec ProxiesView.copyFormats.spec.ts.

3. Fixes found on the way

  • Distribution tables (models / groups / endpoints, admin and user dashboards) show full names instead of cutting them.
  • Search placeholders that bypassed the standard input (ops error list and others) are readable.
  • Usage-table cost/token popovers flip/clamp inside the viewport (at 1440px the right edge was cut; upstream has the
    same bug); request id / upstream request id / User-Agent cells wrap instead of truncating.
  • Batch account test: a failed model-list request showed [object Object]; it now shows the error text.
  • Ops error log no longer cuts messages at 200/150 characters in script.

Verification

  • Local, serialized: eslint on the 36 changed .vue/.ts/.js files (0 problems); vue-tsc --noEmit (0 errors);
    vitest on the specs that read the changed files — localeKeyCompleteness, AppSidebar, StripePaymentInline.contrast,
    ProxiesView.copyFormats (18 tests) plus the specs of every touched component (15 files, 105 tests) — all passed;
    SUB2API_ARTIFACT_BUILD=1 vite build (ok; Inter + Geist Mono emitted, no Geist Sans reference).
  • Visual: all captures against production data through a read-only proxy (every non-GET aborted in the browser, no
    masking). Pixel text contrast ≥ 4.5:1 everywhere except transient states where an open menu's shadow darkens text
    beneath it (it recovers when the menu closes) and one upstream disabled state; UI boundaries ≥ 3:1 except the white
    knob of an off switch (its track carries a 3:1 outline).
  • Previews approved by the site owner on real pages (v2), then rolled out page by page.

🤖 Generated with Claude Code

…ll names

- Console theme v2 (flat_theme_enabled): Apple HIG / Liquid Glass language.
  Colour only where upstream sub2api has colour (upstream primary becomes
  Apple blue), upstream platform colours, glass chrome, tactile controls,
  layered near-black dark mode; Inter (OFL, @fontsource-variable/inter 5.3.0)
  replaces Geist Sans. Rolled out to every page after a light/dark/mobile
  page sweep with pixel contrast audits; theme off still renders upstream.
- IP management: the copy button copies socks5://user:pass@host:port and a
  menu offers the other formats.
- Distribution tables show full model/group/endpoint names; readable
  placeholders.
- Usage popovers stay inside the viewport, batch-test errors show their text,
  charts read theme tokens (upstream colours when the theme is off), ops
  error messages are no longer cut in script.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@HTExplicit
HTExplicit merged commit fb7467b into main Sep 28, 2026
18 checks passed
@HTExplicit
HTExplicit deleted the release/codexrip-12 branch September 28, 2026 06:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant