<feed xmlns='http://www.w3.org/2005/Atom'>
<title>coinosv3.git/src/style.css, branch fdroid-v1.9</title>
<subtitle>coinos v3 — bitcoin, Ark, Lightning and nostr wallet (web + Android)</subtitle>
<id>https://git.coinos.io/coinosv3.git/atom?h=fdroid-v1.9</id>
<link rel='self' href='https://git.coinos.io/coinosv3.git/atom?h=fdroid-v1.9'/>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/'/>
<updated>2026-10-04T16:08:44Z</updated>
<entry>
<title>Feed pictures: a height-capped one's frame narrows with it (no empty bands)</title>
<updated>2026-10-04T16:08:44Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-04T16:08:44Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=630b14ef0483ff49a17993a16556047dff80305c'/>
<id>urn:sha1:630b14ef0483ff49a17993a16556047dff80305c</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_011bvzKaZosXGHkigcGcSzAR
</content>
</entry>
<entry>
<title>Feed pictures uncropped: the column's width at their own shape, height-capped</title>
<updated>2026-10-04T16:07:47Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-04T16:07:47Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=d5db8bf6226f2fe06a65eed05e706c80dd0d904c'/>
<id>urn:sha1:d5db8bf6226f2fe06a65eed05e706c80dd0d904c</id>
<content type='text'>
The 3:4 crop for tall pictures cut the top and bottom off comics. Now
nothing is cropped; a picture is as wide as the column allows up to
min(560px, 70vh) tall, and only one taller than that narrows.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_011bvzKaZosXGHkigcGcSzAR
</content>
</entry>
<entry>
<title>Feed: a tall picture fills a 3:4 frame as wide as the column, not a skinny strip</title>
<updated>2026-10-04T05:05:05Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-04T05:05:05Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=9cef505c9ee0565e7dabc193b3d52f3a8ef23331'/>
<id>urn:sha1:9cef505c9ee0565e7dabc193b3d52f3a8ef23331</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_011bvzKaZosXGHkigcGcSzAR
</content>
</entry>
<entry>
<title>Video tiles: a frame even when the size check fails; retry it later</title>
<updated>2026-10-03T22:32:41Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-03T22:32:41Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=d39a1b87358965bb0118cb88e4c8a86c89992a4c'/>
<id>urn:sha1:d39a1b87358965bb0118cb88e4c8a86c89992a4c</id>
<content type='text'>
Efrat's clip (blossom.primal.net → r2a.primal.net) showed a blank tile on
a phone: the 64 KB probe failed there (slow connection), the failure was
kept for good, and a tile with a failed probe never tried for a frame.

- A failed probe is dated and asked again after an hour (it was kept
  forever; old 'failed: true' entries are retried). The probe waits 10 s.
- A tile whose probe failed still tries for a first frame, giving up and
  letting go of the file after 8 s.
- Primal's CDN lets scripts read the bytes but not Content-Range, so the
  size was unknown: a HEAD's Content-Length (readable by any page) fills
  it in.
- No size in imeta but a bitrate and duration (Primal posts those): the
  size is estimated from them. 'dim 1080.0x1920.0' is understood.
- A tile with nothing to show is dark, like a video, not a pale gap.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01ULQZS9MQa6iAsXnrJUD9Du
</content>
</entry>
<entry>
<title>Videos opens on a grid of thumbnails; the pager waits for a tap</title>
<updated>2026-10-03T21:49:57Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-03T21:49:57Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=09ce0c7f213802757b13501898c02cfe309bfbf8'/>
<id>urn:sha1:09ce0c7f213802757b13501898c02cfe309bfbf8</id>
<content type='text'>
Choosing Videos no longer jumps into the full-screen pager: it shows
the vertical clips as a grid, like Images, and a tile opens the pager
on that clip.

Every tile gets a first frame when that costs only the start of the
file (the index leads, or the server serves ranges), whatever the
clip's size; a clip over budget wears its cost as a badge. Only an
index-last file from a server without ranges shows its cost instead.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01ULQZS9MQa6iAsXnrJUD9Du
</content>
</entry>
<entry>
<title>Videos: know what a clip costs before fetching it; vertical clips only</title>
<updated>2026-10-03T20:38:13Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-03T20:38:13Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=347deec6465a42f24154457fb05227418ee83385'/>
<id>urn:sha1:347deec6465a42f24154457fb05227418ee83385</id>
<content type='text'>
- What a clip costs is learned up front: the post's imeta (size, dim,
  image) when it says, else one 64 KB ranged request — the total from
  Content-Range, whether ranges are served, whether the MP4's index
  (moov) comes before its data, and the picture size from the track
  header. Up to three at a time; remembered across sessions. It also
  replaces the player-based shape probe the feed ran on every clip.
- Clips over 25 MB (8 MB on 2G/3G, 3 MB with data saver), above 1080p,
  index-last files over 8 MB from servers without ranges, or clips that
  couldn't be measured wait for a tap: a cover saying what they cost
  ("50 MB", "4K"). Settings → Nostr → Videos: Autoplay large videos.
- The pager loads only the clip on screen in full; the next gets its
  opening if within budget; everything else holds nothing. Sizes are
  asked three slides ahead.
- Feed clips fetch nothing until they're about to play (preload none),
  with the post's still as a poster.
- Video grid tiles show a first frame only for small clips that start
  quickly; others show their cost.
- Videos lists only clips known to stand taller than wide; one of unknown
  shape is measured and joins when it qualifies; choosing Videos with none
  known yet opens the pager on the first that turns up.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01ULQZS9MQa6iAsXnrJUD9Du
</content>
</entry>
<entry>
<title>Feed media views: a grid of pictures, videos to flip through</title>
<updated>2026-10-03T20:12:30Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-03T20:12:30Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=543a66ca70323921acf4da9b8e4fca8128cf0b58'/>
<id>urn:sha1:543a66ca70323921acf4da9b8e4fca8128cf0b58</id>
<content type='text'>
All / Images / Videos sits under the feed chips (remembered).
- Images lays the feed's pictures out as a three-column grid.
- Videos opens straight into a full-screen pager: one clip per screen,
  snapping, the one on screen playing with sound (muted with an Unmute
  button when the browser refuses), the next a flick or ↓ away. Closing
  it leaves a grid of the clips.
- The pager shows only the media until tapped; a tap shows the author
  (tap for their profile), the post's words as a caption without the
  media links (tap to expand), and likes and sats in the bottom right,
  which also like and zap.
- It is a place: Back or Escape closes it. Built outside the morph, so a
  repaint never restarts a clip; off-screen clips let go of their media.
- Near the end of the grid or the pager the feed fetches older posts and
  new slides are appended.
- Toasts now sit above full-screen viewers.

tools/feed-media-views-test.js

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01ULQZS9MQa6iAsXnrJUD9Du
</content>
</entry>
<entry>
<title>Align chat composer controls at a shared 44px height</title>
<updated>2026-10-03T05:59:53Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-03T05:59:53Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=dccc4a5559f23424d6092009e71375c11efe3784'/>
<id>urn:sha1:dccc4a5559f23424d6092009e71375c11efe3784</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Send: the recipient field grows to show it all; history steps aside while sending</title>
<updated>2026-10-02T21:35:25Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-02T21:35:25Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=db8b88b973635b7329cfd5f234c6f8dd6e9e2ccf'/>
<id>urn:sha1:db8b88b973635b7329cfd5f234c6f8dd6e9e2ccf</id>
<content type='text'>
- The recipient is a one-line textarea that wraps and grows (rows from
  the text's length over the field's measured width), so a whole address
  is in view in the field itself — no second copy in small type below.
  Enter doesn't break it and pasted line breaks are dropped. Empty, it is
  as tall as its hint (measured in the hint's own face), so that's whole
  too.
- Past the recipient — the amount, a review, a Lightning/Ark
  confirmation, a raw tx to broadcast — the history list below the send
  pane is left out.
- tools/send-dest-test.js (390px and 1280px).

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01Dmcrt9KyNDKVWFKnb8BREo
</content>
</entry>
<entry>
<title>Recovery words stay inside the card</title>
<updated>2026-10-02T21:19:18Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-02T21:19:18Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=12b129de5e579e0596c87f65524bd48cfbbe3e87'/>
<id>urn:sha1:12b129de5e579e0596c87f65524bd48cfbbe3e87</id>
<content type='text'>
The grid's 1fr columns wouldn't shrink below their words, so an
eight-letter word pushed the third column out past the card's padding.
minmax(0, 1fr) columns, slightly tighter cells, and two columns up to
480px wide (was 420).

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01Dmcrt9KyNDKVWFKnb8BREo
</content>
</entry>
</feed>
