feat(brand): "Letter D (sans)" app icon — favicon + sidebar chip

Implements ``Business/DataTools/app_icons.html`` §03 "Letter D (sans)"
as the canonical app mark.

- New ``src/gui/assets/datatools_icon.svg`` — 64×64 SVG, 14px corner
  radius, ink ground (#1c1917), cream "D" (#fef4ed) in
  Geist 700 / -0.04em tracking. Pure SVG so it renders sharp at
  every favicon size; font stack falls back through Geist →
  system sans where the webfont isn't installed (favicons can't load
  Google Fonts).

- ``_home.py``, ``_Activate.py``, ``99_Close.py``: page_icon now
  resolves the SVG path via ``Path(__file__).parent / "assets" /
  "datatools_icon.svg"`` instead of the broom 🧹 / 🔑 / 🛑
  emojis. Streamlit inlines it as a ``data:image/svg+xml;base64,...``
  link tag so the browser tab + OS app-icon for ``python -m src.gui``
  matches the sidebar chip.

- Sidebar ``.dt-brand-mark`` tightened to match the spec's "Letter D
  (sans)" rendering: ``font-weight: 700`` and
  ``letter-spacing: -0.04em`` (was 600 / -0.02em). The on-screen
  chip is now a scaled-up copy of the OS icon.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-19 01:50:18 +00:00
parent d436e34a45
commit 6c3939d21b
5 changed files with 34 additions and 5 deletions

View File

@@ -201,6 +201,10 @@ body, .stApp {
height: 100%;
flex: 1;
}
/* "Letter D (sans)" wordmark per Business/DataTools/app_icons.html
§03: 28px ink-filled rounded square, cream "D" in Geist 700 with
-0.04em tracking. Same shape used for the favicon SVG so the chip
in the sidebar reads as a scaled-up copy of the OS app icon. */
.dt-brand-mark {
width: 28px;
height: 28px;
@@ -211,9 +215,9 @@ body, .stApp {
justify-content: center;
color: var(--accent-fill);
font-family: var(--font-sans);
font-weight: 600;
font-weight: 700;
font-size: 16px;
letter-spacing: -0.02em;
letter-spacing: -0.04em;
line-height: 1;
flex-shrink: 0;
}