From b05bec66f456ede12a571f5a028ccfa36d50998c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=80=A7=E9=A9=8A?= Date: Thu, 5 Nov 2026 08:33:23 +0800 Subject: [PATCH] Pages: phone page fits narrow screens; long stat values a size smaller; ANYBOT_SHOT_PAGE Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa --- mobile/index.html | 13 ++++++++----- src/app.rs | 6 ++++++ src/app/markdown_ui.rs | 4 +++- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/mobile/index.html b/mobile/index.html index a9da53c..bccc044 100644 --- a/mobile/index.html +++ b/mobile/index.html @@ -101,7 +101,9 @@ header .sub{font-size:12px;color:var(--text3);font-weight:400} .pcard .note{font-size:12px;color:var(--text2);padding:0 16px 10px} .pglyph{flex:none} a.plink{color:var(--accent);text-decoration:underline;text-underline-offset:3px;cursor:pointer} -.page{padding:18px 18px calc(env(safe-area-inset-bottom) + 40px);max-width:760px;margin:0 auto;line-height:1.65;font-size:15.5px} +.page{padding:18px 18px calc(env(safe-area-inset-bottom) + 40px);max-width:760px;margin:0 auto;line-height:1.65;font-size:15.5px;box-sizing:border-box;width:100%;min-width:0;overflow-wrap:anywhere} +#pscroll{overflow-x:hidden} +#v-page header{min-width:0} .page h1.pt{font-size:25px;line-height:1.3;margin:0 0 6px} .page .meta{color:var(--text3);font-size:12.5px;margin-bottom:12px} .page .sum{font-size:16px;margin:0 0 6px} @@ -117,14 +119,15 @@ a.plink{color:var(--accent);text-decoration:underline;text-underline-offset:3px; .page pre code{background:none;padding:0} .page hr{border:0;border-top:1px solid var(--line);margin:1.2em 0} .page blockquote{margin:0 0 .8em;padding-left:12px;border-left:3px solid var(--line);color:var(--text2)} -.tw{overflow-x:auto;margin:0 0 1em;border:1px solid var(--line);border-radius:10px} +.tw{overflow-x:auto;margin:0 0 1em;border:1px solid var(--line);border-radius:10px;max-width:100%} +.page td{min-width:5em;overflow-wrap:normal;word-break:normal} .page table{border-collapse:collapse;width:100%;font-size:14px} .page th,.page td{padding:7px 10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top} .page th{background:var(--raise);font-weight:600;white-space:nowrap} .page tr:last-child td{border-bottom:0} .stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;margin:0 0 1em} .stat{background:var(--raise);border-radius:12px;padding:10px 12px} -.stat .k{font-size:12px;color:var(--text2)}.stat .v{font-size:21px;font-weight:700;line-height:1.3}.stat .s{font-size:11.5px;color:var(--text3)} +.stat .k{font-size:12px;color:var(--text2)}.stat .v{font-size:21px;font-weight:700;line-height:1.3}.stat .v.long{font-size:15.5px}.stat .s{font-size:11.5px;color:var(--text3)} .steps{margin:0 0 1em;padding:0;list-style:none} .steps li{position:relative;padding:0 0 14px 30px} .steps li:before{content:"";position:absolute;left:8px;top:20px;bottom:-2px;width:2px;background:var(--line)} @@ -144,7 +147,7 @@ a.plink{color:var(--accent);text-decoration:underline;text-underline-offset:3px; .call p:last-child{margin:0} .chart{margin:0 0 1em;text-align:center}.chart img{max-width:100%;height:auto} .chart .wait{color:var(--text3);font-size:13px;padding:20px} -#pver{border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:4px 6px;font-size:13px;color:var(--text);max-width:42%} +#pver{border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:4px 6px;font-size:13px;color:var(--text);max-width:42%;flex:none} .typing{display:inline-flex;gap:4px;padding:8px 4px} .typing i{width:6px;height:6px;border-radius:50%;background:var(--text3);animation:b 1.2s infinite} .typing i:nth-child(2){animation-delay:.15s}.typing i:nth-child(3){animation-delay:.3s} @@ -586,7 +589,7 @@ function pageMd(text, id, rev) { i++; if (lang === "mermaid") { out.push(`
圖表載入中…
`); continue; } if (lang === "stats") { - const tiles = body.map(cells).filter((c) => c.length >= 2 && c[0]).map((c) => `
${inl(c[0])}
${inl(c[1])}
${c[2] ? `
${inl(c[2])}
` : ""}
`); + const tiles = body.map(cells).filter((c) => c.length >= 2 && c[0]).map((c) => `
${inl(c[0])}
${inl(c[1])}
${c[2] ? `
${inl(c[2])}
` : ""}
`); if (tiles.length) { out.push(`
${tiles.join("")}
`); continue; } } if (lang === "steps") { diff --git a/src/app.rs b/src/app.rs index 4a6172e..ef18197 100644 --- a/src/app.rs +++ b/src/app.rs @@ -3054,6 +3054,12 @@ impl App { ctx.send_viewport_cmd(egui::ViewportCommand::InnerSize(vec2(w, h))); } } + // ANYBOT_SHOT_PAGE=id: open that page late (a screen gets its pages from the brain first). + if self.frames == need * 3 / 4 { + if let Some(id) = std::env::var("ANYBOT_SHOT_PAGE").ok().and_then(|v| v.parse().ok()) { + self.page_view = Some((id, None)); + } + } if self.frames >= need && !self.shot_requested { self.shot_requested = true; let slot = self.shot.clone(); diff --git a/src/app/markdown_ui.rs b/src/app/markdown_ui.rs index 64bb5e3..b64b322 100644 --- a/src/app/markdown_ui.rs +++ b/src/app/markdown_ui.rs @@ -609,7 +609,9 @@ impl App { ui.vertical(|ui| { ui.spacing_mut().item_spacing.y = 2.0; ui.add(egui::Label::new(RichText::new(label).size(12.0).color(p.text2)).wrap()); - ui.add(egui::Label::new(RichText::new(value).size(20.0).strong().color(p.text)).wrap()); + // A long value (a phrase, not a number) a size smaller, so it doesn't fill the tile. + let size = if value.chars().count() > 10 { 15.0 } else { 20.0 }; + ui.add(egui::Label::new(RichText::new(value).size(size).strong().color(p.text)).wrap()); if !note.is_empty() { ui.add(egui::Label::new(RichText::new(note).size(11.5).color(p.text3)).wrap()); }