276 Commits

Author SHA1 Message Date
thejayman77 a74a363728 /play Bloom motif: center the flower vertically above the title (match other tiles)
Bloom used a hardcoded % anchor so it read top-heavy with a gap below. Wrap the
petals in a fixed-size .bloom-ring and flex-center it in the space above the foot
(padding-bottom clears the title) — robust, no guessed percentage.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 20:41:10 -04:00
thejayman77 60a1b50376 /play polish: center motifs, fill Daily Word 2nd row, tighten bubble aim
- Motifs (Word/Word Search/Memory Match) now vertically center in the space above
  the title bar (was top-anchored with dead space); Bloom flower nudged to match.
- Daily Word: second row filled (BYTE / CALM) so it's as lively as the others.
- Bubble Blaster: aim line now starts at the shooter (no gap) and the cluster has
  a single blue target bubble matching the shooter (others recolored) so the
  matching-shot read is clear.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 20:29:34 -04:00
thejayman77 5a7c90e7be /play: bubble shooter to the right aiming a blue center ball; space under top bar
- Bubble Blaster: shooter moves right (clear of the title), a diagonal dashed aim
  line runs up-left to a now-blue bubble at the cluster center (shooter + target
  share the blue — reads like lining up a matching shot).
- Add breathing room between HubBar and the Play header (arcade-head top margin).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 20:16:48 -04:00
thejayman77 f6ae44e126 /play motifs: shrink word-search + memory-match, smaller/raised bubbles w/ angled aim
- Word Search grid: smaller fixed cells, centered, sits clear of the title.
- Memory Match: smaller tiles (capped, centered) so the motif isn't oversized.
- Bubble Blaster: smaller bubbles raised into a tighter cluster (clears the
  title), shooter a touch smaller, and the aim line is now a diagonal dashed
  line tilted up — reads like the user is aiming.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 20:05:21 -04:00
thejayman77 aa15cf119c /play arcade tweaks: Back in header (right), real word-search grid, packed bubbles
- Back moves into the header row, right-justified and level with "Play" (the
  in-game step-back row stays for select/play views).
- Word Search motif is now a real 6×5 letter grid with BYTES "found" down the
  diagonal — reads as a search, not a single highlighted word.
- Bubble Blaster motif is a packed bubble cluster + dashed aim line + loaded
  shooter (like the actual game), not an evenly-spaced grid of balls.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 19:50:24 -04:00
thejayman77 6348835099 /play: arcade-tile hub redesign (presentation only; routing untouched)
Per CD's "Play - Arcade" + Codex's discipline note — replace just the hub
presentation; game selection/routing/URL-state/back all preserved.

- Colored game tiles, each with a motif of itself (Daily Word letter grid, Word
  Search letter rows, Bloom flower wheel, Memory Match dots), name + a calm daily
  clue on a gradient foot. Whole card tappable + a slight spring hover-lift (no
  hover-only CTA — works touch-first). Eyelash + Newsreader "Play" header.
- Bubble Blaster shown as a "Coming soon" ribbon tile (gentle bubble-pop puzzle,
  to build later); a "More coming soon" tile signals the area keeps growing.
- REMOVED from /play: the "Today's calm set" panel and the Zen Den tile. No
  dashboard/XP/streak/"played today" — Play stays pure games. Progress/achievements
  move to the opt-in /zen later (zen-reframe), done surgically.
- Fonts now match the rest of the hub (Newsreader / Hanken / Space Mono). Back
  button already present. Responsive: 3 cols → 2 (≤880) → 1 (≤560), no h-scroll.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 13:32:19 -04:00
thejayman77 89987b8316 /art: thickness affects rotated fullscreen; collapsible writeup on mobile
- Fullscreen (rotated landscape view) ignored the thickness slider because I'd
  hard-coded the frame rail/mat to fit after rotation. Let them scale with
  thickness again and pull the image's short-edge cap in (60vw) so the whole
  frame still fits even at max thickness.
- Mobile: the writeup is now a collapsible "About this piece" accordion between
  the artwork and the controls (open by default). Collapse it and the frame /
  thickness / palette controls rise up beside the artwork, so you can see frame
  changes live. Desktop unchanged (writeup always shown in the left column).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 21:09:28 -04:00
thejayman77 420150a532 /art mobile: fix horizontal overflow (controls width:100% + margins)
The mobile controls card kept its base width:100% and also got side margins,
so 100%+margins overflowed the viewport → sideways scroll. Set width:auto
(flex stretch fills minus margins) + box-sizing:border-box, and add
overflow-x:clip on .room as a seatbelt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 20:54:10 -04:00
thejayman77 9c41da5fcc /art desktop: fix CTA overlap, widen card for a bigger piece, darken labels
- .body wasn't a flex container, so the "View at The Met" CTA's align-self was
  ignored and the inline link collapsed over the metadata. Make .head/.body flex
  columns → CTA sits correctly below the collection/rights.
- Widen the /art desktop card (max-width 1052→1280, art column 46→50%, tighter
  padding) so the framed piece is properly sized and the frame reads in better
  proportion — /art intentionally breaks the hub's 1180 column since the artwork
  is the point and mobile has its own layout.
- Darken the Space Mono micro-labels (Frame / Thickness / Colors / Collection /
  Rights) so they stand out.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 20:31:20 -04:00
thejayman77 5157c221ed /art redesign: "The Story" editorial page (writeup + palette + frame + share)
Rebuilt /art to CD's "The Story" hybrid: a warm-tan editorial card with the
Daily-Art purple accent. Left = guide write-up (kicker · title · attribution ·
the museum-guide blurb · Collection/Rights · View at The Met). Right = the framed
piece (our existing frame + thickness customizer, on one line each) on a deeper-
tan ground, then a divider, the "Colors in this piece" palette, and Share /
Download (Download gated on public-domain license; image is same-origin so it
just works). Self-hosted Space Mono for the curatorial micro-labels; Newsreader
display + Hanken UI like the rest of the hub.

Mobile: the left/right wrappers collapse (display:contents) so the blocks reflow
to head → artwork → writeup → controls — the art sits high, seen before it's read.
Kept HubBar, the Back button, and the fullscreen lightbox (incl. landscape rotate).
Save-to-account + framed-composite export deferred to Phase 2.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 20:22:06 -04:00
thejayman77 79ecb800af home3 News card: desktop gist fills to equal height (basis:0 fade), right never stretches
Desktop: the gist flex-fills the card with flex-basis:0 so it never inflates the
row height — the right column always sets it and is never stretched — and fades
softly into a comfortable margin above the read-time. Mobile keeps the clean
3-line clamp (natural height, no fade).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 16:37:40 -04:00
thejayman77 44610703c2 home3 News card: hug content (no stretch gap) + tighten mobile brief gap
- Desktop: .news align-self:start so it sizes to its content instead of stretching
  to the right column's height — the "1 min brief" footer sits just under the gist
  rather than floating at the bottom of a tall card. Right column sets row height;
  bento stays tight.
- Mobile: tighten the gap under the gist before "1 min brief" (was ~a full line).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 16:29:40 -04:00
thejayman77 376f6263fd home3 News card: clamp the gist (3 lines mobile / 4 desktop), pin Read-more bottom
It's already a summary, so show only a taste and let the reader click through.
This also stops the News card being the tallest element, which had stretched the
right column and spread its cards — they pack naturally again. Footer (brief ·
read-more) pinned to the card bottom via margin-top:auto.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 16:07:05 -04:00
thejayman77 8dc22afbdc home3: fix full-width regression — don't let the containment rule override .bento max-width
The min-width:0/max-width:100% containment rule included .bento, and being a later
rule of equal specificity it overrode .bento's own max-width:1180px → grid went
edge-to-edge. Scope the rule to the grid items + flex chain (.news/.rightcol/
.pair-wrap/.joys-shelf/.joys) instead; .bento keeps its 1180px cap.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 15:57:51 -04:00
thejayman77 5657494988 Fix joys regressions + self-host Work Sans for cards (Codex audit)
- Restore desktop/tablet two-up Small Joys (arrows rotate which two show); the
  swipe rail is now phone-only (≤520). One isNarrow flag drives both the DOM
  (2 vs 3 cards) and the layout, so they can't disagree.
- Contain the overflow that let the phone rail widen the whole page: min-width:0
  + max-width:100% down the chain (bento/rightcol/pair-wrap/joys-shelf/joys),
  mobile bento column to minmax(0,1fr), and overflow-x:clip on .page as a seatbelt.
- Read-time badge: overflow-wrap:anywhere + line-height so a long
  "1 min brief · ~N min full story" never causes width pressure.
- Self-host Work Sans (latin variable woff2, OFL) and apply it to the cards —
  the bolder/darker look from CD's mockup; headings stay Newsreader.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 13:57:55 -04:00
thejayman77 1c6c907f7f home3 + play: CD-guided card polish, scrollable Small Joys, consistent Back
- /play: hub view now shows a "Back" row under HubBar too (leaves Play to where
  you came from), so every hub page has the same bar+back rhythm — no shift.
- Eyelash on every card: each .label now opens with a short accent dash (via
  currentColor, so each label's colour drives it) + tighter tracking (.18em, 600),
  on desktop and mobile alike.
- Card headings to Newsreader 500 (calmer), body to 15px/1.5 #5a5346 (per CD).
- Small Joys is now a single swipeable row (all 3 cards in a scroll-snap rail, the
  next peeking; arrows scroll, counter tracks the snapped card) instead of a
  2-up rotation — more elegant, and the 1/3 ‹ › affordance is honest.
- Daily Art card: more breathing room before "View today".

Note: used our self-hosted Hanken Grotesk for the card sans (CD's mockup used
Google Work Sans) — same metrics applied; can self-host Work Sans if preferred.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 13:41:04 -04:00
thejayman77 f0e02b40e5 One consistent top bar across the whole hub (HubBar everywhere)
There were three different top bars (home3/detail vs /play vs /art). Unify on the
shared HubBar:
- HubBar is now fully self-contained (own @font-face + hardcoded hub colors) so it
  renders identically regardless of the host page's tokens/fonts.
- /art: dropped its bespoke gallery bar for <HubBar active="art" />.
- /play: dropped its bar for <HubBar active="games" />; the contextual in-game
  step-back (Game Selection / Play Hub) moves into the page body as a secondary
  ".gameback" control, shown only in game views (the global nav is in HubBar).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 13:11:18 -04:00
thejayman77 8a79b14c80 /art: add a Back button (matches the hub's single-history behavior)
Daily Art had no Back. Add a top-left "‹ Back" in its own gallery bar styling:
history.back() when arrived via in-app nav, else goto('/home3', {replaceState})
on a cold deep-link — same rule as the hub detail pages.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 09:38:54 -04:00
thejayman77 eaeb8d3139 WOTD Listen button: always blue, no sticky hover or tap-highlight box on mobile
- Filled blue by default (a little colour on a calm page) instead of outline-fills-
  on-hover, which on touch "stuck" lit until you tapped elsewhere.
- Hover gated to (hover: hover) so it only darkens on real pointers (no sticky
  mobile hover); :active gives a press shade everywhere.
- -webkit-tap-highlight-color: transparent + user-select: none kill the selection/
  highlight box mobile drew on tap.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 09:29:08 -04:00
thejayman77 1150ae916b /art rotate: keep the whole frame on-screen (short-edge cap + modest fixed frame)
The rotated fullscreen clipped the top rail: the image's short edge plus rail/mat
exceeded the phone's narrow width. Cap the short edge (max-height pre-rotation),
use a modest fixed rail/mat in this view so the moulding always fits regardless
of the thickness slider, and hide the (now-sideways) caption — the placard is on
the page anyway.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 09:22:17 -04:00
thejayman77 06dd293da0 /art: landscape paintings rotate to fill the screen in fullscreen on portrait phones
Conditional 90° rotate of the fullscreen stage (frame + caption together): only
when the artwork is landscape AND the screen is a narrow portrait phone — so a
wide painting fills the long axis (turn phone to view level, tap to close).
Portrait/square art and desktop stay upright. Landscape detected from the loaded
image's natural dimensions; CSS decides WHEN via (orientation: portrait). Image
caps use swapped vh/vw units post-rotation so the whole framed piece always fits.
No screen-orientation lock API (unreliable on mobile web) — pure CSS transform.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 09:15:56 -04:00
thejayman77 4720ded29c Mobile combing: WOTD watermark, Entertainment card breathing, Art lightbox fit
- WOTD /word: watermark was nudged too far down last round; bring it back up to
  sit JUST below the date (clears it by a few px instead of dropping markedly).
- home3 Entertainment card: stacked on mobile it lost the height it borrowed from
  Play on desktop and felt crowded — add vertical breathing (padding + gaps), not
  as tall as desktop.
- /art lightbox: on a narrow portrait phone the framed piece (image + mat + rail)
  overflowed the viewport (rail clipped → looked distorted). Cap the image so the
  WHOLE frame fits, leaving room for the caption.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 09:06:36 -04:00
thejayman77 cf66d99e21 home3 News card: "1 min brief · ~N min full story" badge
Per the convo with Codex: keep the value proposition on the card rather than
hiding everything when full-story time is unknown.
- summary + full-story time → "1 min brief · ~10 min full story"
- summary only → "1 min brief"
- no brief/summary → hide the row
"brief" over "summary" (more editorial); full-story time still never faked.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 08:44:40 -04:00
thejayman77 dc23277b38 Read-time: full-article "Full story · ~N min" badge (Option B)
Replaces the gist-based read-time with the SOURCE article's full read time — the
contrast that sells the gist ("calm 1-min version here; ~10 min for the deep dive").

- goodnews/readtime.py: word_count_from_html (strips script/style/nav/header/
  footer/form/button/aside furniture before counting) + source_read_minutes
  (~225 wpm, 200-word floor, None when extraction looks failed/too thin).
- articles.source_words + read_checked_at columns (count only, never the body;
  fits the privacy posture). Idempotent migration.
- enrich.fetch_source_words + enrich_read_times: a bounded, retry-guarded cycle
  step (mirrors the image enrichers) that counts words for recent accepted
  articles. Only ever writes a real count; never overwrites good with zero. Wired
  into the cycle after recent-image enrichment.
- queries: source_words flows through _ARTICLE_COLUMNS; api exposes
  source_read_minutes on Article (null when unknown).
- home3: News card shows "Full story · ~N min", hidden entirely when null (no
  misleading "1 min").
- Tests: furniture stripping, threshold/rounding, enrich idempotency + no
  zero-overwrite, API null handling. 412 backend.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 08:09:00 -04:00
thejayman77 26b23a8f09 #6: computed News read-time + per-page OG/canonical for hub detail pages
- News card "3 min read" → computed from our own gist (~200 wpm, floor 1). We
  summarize, so it's honestly ~"1 min read" — the good news in about a minute.
- Generalized the build-time head patch (patch-play-head → patch-static-heads):
  now also rewrites build/word.html, quote.html, onthisday.html so each ships
  its own <title>/description/canonical/OG/Twitter tags instead of the homepage
  head + canonical="/". Non-JS scrapers and canonical dedup are correct before
  these pages are ever un-noindexed. Same fail-loud guard as before.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 06:51:40 -04:00
thejayman77 ccdc764b2b WOTD /word polish: larger IPA + part-of-speech label, watermark clears the date
- IPA pronunciation bumped to 23px (it reads small at body size).
- Vertical part-of-speech label 11px -> 13px and darkened (#7fa0bd -> #5f86a6).
- Watermark nudged down so the glyph's top curve no longer overlaps the date.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 06:40:00 -04:00
thejayman77 cebbed58ab WOTD #4/#5 content quality + Editorial Asymmetric /word page (CD)
Content quality ("LLM polishes, dictionary anchors"):
- New wotd._polish: rewrites the real dictionary gloss into ONE warm plain
  sentence + two clear everyday example sentences, grounded in the real
  definition (no invented meanings). Stored in new wotd_pool/daily_wotd columns
  gloss + usage, alongside the raw definition/examples which stay the anchor.
- harvest() polishes each new word; pick_daily() lazily polishes + caches back
  any older pooled word that lacks a gloss (client threaded through run_daily).
- Admin word-add polishes on insert; re-pick passes an LLM client so quote
  meaning / word gloss fill on a forced fresh pick.
- /api/word/today now prefers gloss + usage, falling back to the raw dictionary
  def/examples when polish is absent (so it's always safe).
- db._migrate adds gloss/usage to wotd_pool + daily_wotd (idempotent ALTER).

Frontend — /word redesigned to CD's "Editorial Asymmetric": faded oversized
initial bleeding off the right, vertical part-of-speech rail, big Newsreader
word, airy definition, left-ruled italic example sentences, outline Listen
button + date. (Uses our self-hosted Newsreader/Hanken stack rather than the
mockup's Google fonts; the made-up syllable respelling is omitted since we only
have real IPA.)

Tests: _polish parse/trim/cap, harvest stores gloss/usage, pick lazy-polishes
older words, admin gloss flows through to /api/word/today. 403 backend + 27 fe.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 06:08:14 -04:00
thejayman77 e5f3d942e2 hub: back-button replaceState trapdoor + hamburger resize-safety
Codex audit polish:
- Cold deep-link Back now goto('/home3', { replaceState: true }) instead of
  pushing a new entry, so the browser Back from the hub can't bounce the reader
  straight back into the detail page. In-app arrivals still history.back().
- HubBar closes the hamburger when crossing to desktop width (matchMedia change),
  so `open` can't go stale and reappear if the viewport shrinks back to mobile.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 05:56:46 -04:00
thejayman77 d3c7282850 hub detail pages: shared Back button with proper single-history
#3 Back buttons: HubShell now renders a top-left "‹ Back" on each detail page
(/word /quote /onthisday). It mirrors the News reader's rule — if you arrived by
an in-app navigation, history.back() returns you to the hub with state/scroll
intact (and the browser Back button traverses the same single history); a direct
deep-link has no app history, so it falls back to goto('/home3'). Opt-out via
back={false}; relabel via backLabel.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 22:08:39 -04:00
thejayman77 b174d8d2a7 home3/hub: shared HubBar with mobile hamburger + Art-card mobile crop fix
#2 Mobile top bar → hamburger: extracted the editorial bar (brand + nav + new
collapsible hamburger drop-panel) into a shared lib/components/HubBar.svelte,
used by both /home3 and HubShell (the /word /quote /onthisday detail pages), so
there's one nav to maintain/audit. Full horizontal nav ≥721px; hamburger + drop
panel ≤720px. Escape + link-click close it; panel is hidden on desktop as a
safety. Removed the duplicated bar markup/CSS from home3 + HubShell.

#1 Mobile layout / Art card: on phones the Art card now stacks image-first with
the painting in a proper 3:2 frame (aspect-ratio) instead of a stubby fixed
130px band that cropped the work to a sliver. Also drop the News gist's bottom
fade once the bento is single-column (natural height = no truncation, so the
fade was just dimming the final line), and let the joys header wrap on phones.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 21:55:36 -04:00
thejayman77 84b1fb514f Small joys: Codex audit #2 fixes (route resolution, noindex, sense/tone, exclude-current re-pick)
- Admin joy item route moved to /api/admin/joys/{kind}/items/{item_id} so the
  /add and /repick verbs resolve to their own routes instead of 422-ing as a
  non-int item id (the launch blocker). Frontend mutate URL updated to match.
- Re-pick now excludes the currently-shown item: the endpoint reads today's
  daily pool_id and passes it as `avoid`, so "Re-pick today" yields a different
  item. Added `avoid` to pick_daily/_candidates across wotd/quote/onthisday.
- WOTD sense selection: the LLM now proposes word + intended part of speech, and
  _lookup prefers that sense (fixes "serene" returning the archaic noun).
- On This Day tone prompt tightened to favor genuinely uplifting events and
  exclude merely procedural/political-administrative ones.
- Caddy @hidden now also noindexes /word /quote /onthisday /admin (+ .html).
- Regression tests: add/repick resolve (401 not 422), add/feature/block/delete,
  re-pick excludes current; WOTD pos-preference + proposal parsing units.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 20:19:02 -04:00
thejayman77 3bde6534e9 Small joys: wire homepage rail to live data + rich pages (/word /quote /onthisday) + admin
- /home3: small-joys rail now reads live /api/word|quote|onthisday/today (placeholders only
  as fallback); each cell links to its detail page.
- HubShell component (shared bar/footer/fonts/tokens) for the hub + detail pages.
- /word: big word, IPA, Listen (cached clip + browser-TTS fallback), definition, sentences.
- /quote: the quote, attribution, and the AI "what it means".
- /onthisday: the date, year + fact, image, summary, source.
- Admin "Small Joys" tab: per-pool list with feature/block/delete/add + re-pick, for all
  three kinds. New admin API: GET/POST /api/admin/joys/{kind}[/{id}|/add|/repick].

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 18:52:38 -04:00
thejayman77 ea85e9cdfb home3 news footer: 3-min-read back to the right; 'Read more good news' is blue now
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 15:50:41 -04:00
thejayman77 48a0cc1111 home3 news: remove redundant 'Read article' (block is clickable), keep read-time; darken footer divider
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 15:36:48 -04:00
thejayman77 147701e7dc home3 news: summary clickable (->article); drop Read-article underline, add divider before Read-more-good-news
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 14:48:04 -04:00
thejayman77 de53873b4f home3: Entertainment nav is a non-clickable soon item (drop dead href=#)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 14:39:46 -04:00
thejayman77 440e8391d6 home3: clickable news photo + headline (-> article); top bar = Home(active)/News/Games/Art/Entertainment
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 14:37:47 -04:00
thejayman77 d3017598a2 home3 Entertainment: icon tiles (palette/smiley/sparkle) instead of teaser boxes, centered motif
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 14:11:24 -04:00
thejayman77 18e950bbf7 home3 news headline: drop JS char-slice, use CSS line-clamp:2 (word-boundary, fills 2 lines)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 13:20:32 -04:00
thejayman77 319c5f6b7e home3 news figure matte: fade silvery->white downward so it melts into the card
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 12:37:56 -04:00
thejayman77 6925a6951b home3 news image: photos display full-bleed (cover); only wide/tall figures get the framed plate (aspect-detected on load)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 12:30:12 -04:00
thejayman77 390bf5f43d home3: news image as tinted-matte framed plate (CD); Entertainment uses blurred teaser boxes (no play button) + non-video copy
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 12:22:14 -04:00
thejayman77 1ffc9c6e92 home3: news image contain-on-matte (figures sit whole); Entertainment centered play-glyph empty-state
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 12:10:41 -04:00
thejayman77 8037e72f17 home3 joys: clamp all cards to WORD card's height (min-height 170, no squish); darken WOTD definition
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 11:57:26 -04:00
thejayman77 772cb47d69 home3 joys: tighten WORD card (word line-height:1, phonetics up+darker), lower shared min-height so all rotations match
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 11:43:15 -04:00
thejayman77 e38081733d home3: small-joys equal height + trimmed spacing + fresh palette (sky/rose/clay); news summary fills the room
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 11:11:09 -04:00
thejayman77 89352e7123 home3: small-joys rail -> rotating two-up shelf (option A: label + dots + arrows)
Two jewel cards at a time, reader-advanced (no auto-motion); 3 cells total, wraps. Keeps
each card at generous size instead of cramming three.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 10:58:55 -04:00
thejayman77 8cf061d214 home3: small-joys rail polished to 'little jewels' (CD spec — focal points, watermarks, accent tags, gradients)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 10:36:12 -04:00
thejayman77 3c519a5f50 home3: small-joys rail (WOTD/QOTD crafted + 'good thing today' SOON), whole-word headline clamp, 16px gaps
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 10:18:00 -04:00
thejayman77 2173802c70 home3: rename Daily Moment -> Entertainment; add skinny Word/Quote-of-the-day strip (placeholder)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 09:39:02 -04:00