/* ============================================================ ROOY · 10 单日汇总 ─────────────────────────────────────────────────────────── 需求:当日数据 + ROOY 小总结 + 右上一键跳 04a 镜头切换(按 session 日期筛选)。从 09 滑行历史列表点入。 结构:NavBar → 今日 track map hero(地图 + 路线)→ "今天"段 (雪况 + 累计合并)→ 滑行模式 → 高光时刻 → ROOY 见证。 italic anchor:当日里程(累计段)—— 复用 08 雪季汇总的 editorial 语汇,但 hero 从"巨大天数 italic"换成"今日路线图"(end-of-session 关心的是这条路)。 跟 08 的差异:没有"最常去"和"雪况分布"——单日没这两个概念。 ============================================================ */ function DailyScreen({ onNav }) { const [showShare, setShowShare] = React.useState(false); return (
onNav && onNav('back')} title="今天" right={ } />
{/* ── HERO · 今日轨迹地图 ─────────────────────── */}
{/* ── 今天 · 雪况 + 累计 一组 ─────────────────── */}
{/* 雪况 — single-day report. Inline italic spans for short numeric fragments give it visual rhythm without becoming a full italic stat row. Sits at the TOP of the today-group. */} {/* 累计 stat rows — all italic 32 (matches 08b's BStatRow rhythm) */}
{/* ── 高光时刻 ───────────────────────────────── */} 高光时刻
{/* ── 滑行模式 ───────────────────────────────── */} 滑行模式
{/* ── ROOY 见证 · 今日里程碑 ─────────────────── */} ROOY 见证
{[ { n: '右弯立刃 40°', d: '今早 10:42', kind: 'trophy', hi: true }, { n: '连三趟稳定', d: '今早 11:05', kind: 'flag' }]. map((m, i, arr) =>
{}} style={{ flexShrink: 0, width: 148, minHeight: 124, padding: '16px 16px', borderRadius: B.card, background: R.card, cursor: 'pointer', marginRight: i === arr.length - 1 ? 16 : 0, border: m.hi ? `1px solid ${R.gold}33` : 'none' }}>
{m.kind === 'trophy' && } {m.kind === 'flag' && }

{m.n}

{m.d}

)}
{showShare && (
{ if (t === 'back') setShowShare(false); }}/>
)}
); } /* ── DailyTrackMap — 今日轨迹卡 ──────────────────────────── Card sits in the hero slot. Subtle topographic contour lines as bg, ski-track polyline plotted on top with carved S-curves. Start (top) and finish (bottom) pins distinguish direction. Inline labels for place (top-left), altitude range (right edge), and a duration footer along the bottom. */ function DailyTrackMap() { return (
{/* Topographic contours — faint, hand-drawn feel */} {/* Subtle ROOY-color terrain tint at top, gold valley below */} {/* Contour lines — 5 条软等高线, opacity 0.18 → 0.10 让 hero 不被 背景纹理压住 */} {/* Ski track — 单线 ink S-curve. 去掉 gold halo underlay (hero 重心还给地形 + 文字, 不靠光晕 sell completion). */} {/* Start pin — 小 ink dot (高海拔起点) */} {/* End pin — gold check (低海拔完成态, 单 accent) */} {/* Top-left — place narrative. Zermatt 改 N.hero 非 italic, 把 italic anchor 让给下方"累计 8.4 km" (HANDOFF: 每屏 1 锚). */}

今日轨迹

Zermatt

Stockhorn — Furi

{/* 海拔 inline labels — 紧跟 pin, 不再 corner anchor 跟 pin 撞角. "最高/最低" eyebrow 标签删掉, 数字 + m 单位本身自明. 关键弯·3 annotation 也删 — metadata 已下沉到 review 屏. */}

3 532 m

1 620 m

); } /* DSnowReportRow — 雪况 row sitting at top of today's stat group. 3 fragments share the SAME italic 22pt N.italic + small inline unit treatment so the eye reads them as a uniform set of facts (was: 硬粉 italic 22 vs −5°C / 12cm in body+subhead → mixed sizes felt random). Drop "C" suffix on temp: ° is universally read as temperature in this context and the tiny C felt like noise next to the bigger 硬粉. */ function DSnowReportRow() { const numStyle = { ...N.italic, fontSize: 24, color: R.ink, lineHeight: 1, fontWeight: 900, letterSpacing: '-0.02em' }; const unitStyle = { ...T.subhead, color: R.ink3, fontWeight: 500, marginLeft: 2 }; return (
雪况
硬粉 −5° 12 cm
); } /* DStatRow — 累计 stat row. Unified italic anchor across all today's accumulated values (距离 / 垂降 / 时长 / 心流) — keeps the visual rhythm consistent with 08b's BStatRow vocabulary. */ function DStatRow({ label, value, unit, valueColor }) { return (
{label}
{value} {unit && {unit} }
); } /* DRecordRow — single record row for 高光时刻. Copy of BRecordRow shape, scoped here so the daily file is self-contained. */ function DRecordRow({ label, value, unit, where, when, first }) { return (

{label}

{where} · {when}

{value} {unit && {unit} }
); } Object.assign(window, { DailyScreen, DailyTrackMap, DSnowReportRow, DStatRow, DRecordRow });