FixedRelease bump: 3.63.0 was already on npm when the analysis report, the stat strip, the usage blocks, the margin layout and the button fix were versioned. #736
FixedRelease bump: 3.63.0 was already on npm when the analysis report, the stat strip, the usage blocks, the margin layout and the button fix were versioned. #736
FixedRelease bump: 3.63.0 was already on npm when the analysis report, the stat strip, the usage blocks, the margin layout and the button fix were versioned. #736
NewPage and Section take two more papers, paper="dot-grid" (a dot every 24 px) and paper="kraft" (brown paper, its ink at 7:1 or more on the darkest point of its grain, in light and in « carnet de nuit »). #733
New@krizaka/ui/analysis-report (web) and AnalysisReport in @krizaka/ui/native: the result of an AI analysis — a header with the studio, one sentence, the overall status and counts; findings grouped by status (the most… #730
New@krizaka/ui/embed-facade: EmbedFacade, a click-to-load facade for a TikTok, YouTube Shorts or Instagram video (Law 25: nothing is requested from a platform before the visitor asks). #733
NewPage and Section take two more papers, paper="dot-grid" (a dot every 24 px) and paper="kraft" (brown paper, its ink at 7:1 or more on the darkest point of its grain, in light and in « carnet de nuit »). #733
New@krizaka/ui/reviews: ReviewSummary (the score as a Stamp — "4,8 / 5" —, the verified count, five Meters for the distribution and its text equivalent; renders nothing under the host's minCount) and ReviewCard (first name… #733
NewSeparator variant="hand" with shape="stroke" | "wave" | "dash": an inline SVG path stretched to the width (vector-effect: non-scaling-stroke), 6 px tall, the hue at 60 % or the ink (tone), decorative unless… #733
NewServiceCard variant="index": a stamped index card (Cahier) — ruled with one Seyès line under the name, a punched hole, straight, the duration and the price as Stamps (tabular figures), what is included, the action as a… #733
NewStamp takes the tones ink (the page's ink) and hue (--kz-hue-text), an icon slot (a decorative glyph), size sm | md and straightText: the border keeps its askew, the text is straight (the default for size="sm"). #733
NewStickyAction hideWhileVisible="#hero-book": the phone's bar is hidden while the page's own action is on screen (an IntersectionObserver), so a storefront never shows two « Réserver » at once. #733
New@krizaka/ui/environment-notice (web) and EnvironmentNotice in @krizaka/ui/native: the « development version » band — a thin region above the app bar, in the page frame, with the title, the line and an optional link as… #715
NewMarginLayout and MarginItem (@krizaka/ui/margin-layout): numbered items with margin notes for product reading pages. #731
NewStatGrid variant="strip": two to four figures in one row (a dl), each with its label (truncated, the full text as its title), value, trend in words and a 64 × 18 Sparkline slot, plus a period slot for the switch. #732
New@krizaka/ui/usage: the blocks of a « Credits & usage » page, extracted from Orazaka's. #734
Fixedfix(button): a button never overflows a narrow container (GlowCard plans): it is capped to its container and its label wraps instead of bleeding past the border (#259). #729
FixedThe native form is documented on the root entry (createKrizakaForm and its fields live on @krizaka/ui/native/form, as the field names match the primitives), and a regression test guards the entry's exports, its subpath… #727
NewSiteFooter takes org (the organisation's public facts from @krizaka/org): its signature line is org.footer.line (« Une entreprise de Technologies Krizaka · Fait à Montréal ») and, without legal, the legal links are… #720
NewPlus Jakarta Sans is back, for the products' titles only (ADR-006 §2, krizaka-ui#670). #684
NewNavBar.Session: the bar's « who is here » island for every product, over one contract — GET /api/me answers 200 { signedIn, signupOpen, account? #687
NewPlus Jakarta Sans is back, for the products' titles only (ADR-006 §2, krizaka-ui#670). #684
NewNavBar.Session: the bar's « who is here » island for every product, over one contract — GET /api/me answers 200 { signedIn, signupOpen, account? #687
NewAppHeader becomes the family's top bar (#640), extracted from Orochia's: the slots search, language, messages, notifications, primary and account beside actions, drawn in a fixed order (search · language · actions ·… #687
NewDataTable phone="list" (#636): on a phone (under 36 rem, or always with layout="cards") each row draws as a list row instead of a card in a box — the selection's checkbox first, the title column with its priority: 2… #687
NewDataTable routeKey: the sort, the filters and the page live in the address (?clients.sort=visits.descending&clients.q.client=lea&clients.page=2), so back and forward, a reload and a shared link land on the same table. #687
NewDropOverlay gains a controlled form: active shows it (DOM listeners off, onFiles optional), for a desktop app's native drops. #687
NewPlus Jakarta Sans is back, for the products' titles only (ADR-006 §2, krizaka-ui#670). #684
NewNavBar.Session: the bar's « who is here » island for every product, over one contract — GET /api/me answers 200 { signedIn, signupOpen, account? #687
Security@krizaka/ui/notification-preferences: NotificationPreferences, categories by channels with a switch at each crossing, presets that set the whole matrix, a locked row for security. #687
New@krizaka/ui/quota-meter: QuotaMeter, space or time used against a plan: the figure in words, a Meter amber from 80 % and red from 95 %, the sentence for the level (a status when it matters), notices, small figures and… #687
NewRailNav (#647): shortcuts with shortcutsLabel adds the product's quick ways in (a saved view, a frequent client, « New invoice ») as a named group above the footer and the expand toggle, on desktop only. #689
NewReduction, batch 1 (ADR-006 §7, krizaka-ui#674): 28 entries with no user and no filed need are deprecated in 3.55 and removed in 4.0; nothing is removed in this minor. #687
New@krizaka/ui/stuck, @krizaka/ui/doodle, @krizaka/ui/signature: cards stuck into the notebook (krizaka-ui#554). #687
NewTabs variant="binder" (#648): binder dividers (intercalaires) to organise collections, tags and statuses. #686
NewAdd a configurable separator to BirdPlate captions, defaulting to a middle dot. #687
NewAdd RetroTv, a vertical video player presented in cabinet and portable television frames. #687
NewMake Markdown references readable on small screens: keyboard-scrollable table regions with token-based edge shadows, unbroken cell identifiers, overflow-safe prose and code, and an optional host-labelled generated chip… #687
FixedDataTable: on a phone, a card never scrolls sideways — values wrap (min-width: 0, overflow-wrap: anywhere) instead of being cut at the frame's edge, even with untyped columns. #687
FixedDependencies: radix-ui 1.8, TanStack Table 9.3 / Virtual 3.14.21 / Query 5.104.5 and zod 4.6.7 (the monthly grouped update). #687
FixedOne router context for the whole package: ChoiceGrid, the account settings and the code block (built apart from @krizaka/ui/router) bundled their own copy of it, so their routeKey ignored the adapter given to… #687
FixedThe product nav-bar example uses ProductBarActions: using the app is the primary action, no « Talk to us » button in the bar (Contact is in the footer). #687
FixedThe family names ts.krizaka.com « Krizaka TypeScript », never « Krizaka TS », in the bar, the switcher and every footer. #687
FixedErrors keep their cause: the « did not answer in time » TypeError of @krizaka/app-client carries the abort it comes from, and the AggregateError of @krizaka/payments (handler and give-back both failed) carries the… #666
FixedErrors keep their cause: the « did not answer in time » TypeError of @krizaka/app-client carries the abort it comes from, and the AggregateError of @krizaka/payments (handler and give-back both failed) carries the… #666
NewChapterIndex variant="album" (#621): each chapter's cover as a TapedPhoto beside its title, one short line (detail) and its period — the rows alternate left and right, the prints face each other, each keeps its own… #624
Newkrizaka/page-template (in krizakaStack, counted by krizaka-ratchet as pageTemplate): every App Router page declares the Krizaka UI template it composes (// @template: app-settings) or says why it composes none (custom:… #687
NewAdd localDay(instant, timeZone): the calendar day (yyyy-mm-dd) an instant falls on in a time zone, so a rule dated by a local day is not judged by the UTC day. #610
NewThe family knows Krizaka TS (ts.krizaka.com, the TypeScript backend building blocks on npm): SiteId gains "ts", so its bar and footer say « You are here », and the other open-source sites list it in the switcher and the… #529
NewSettingsLayout: the sections can be in titled groups (nav as SettingsNavGroup[]), carry a count or status (badge), and past five a phone gets one menu (a disclosure, no script) instead of a strip of chips. #520
New@krizaka/ui/agenda: Agenda, one day's appointments in time order (tabular times, client, service, status chip, a quiet action outside the row's link) with a « now » line between the ones past and the ones to come. #516
New@krizaka/ui/drop-overlay: DropOverlay — the whole window is the drop target (accept, rejected files handed back, motion from the tokens, instant under reduced motion). #512
NewProductBarActions and productBarActions (@krizaka/ui/nav-bar): the one definition of a product bar's right side — using the app is the primary action (« Sign in » while sign-up is closed, « Try » once it opens), « Sign… #506
NewPageTransition in @krizaka/ui/motion: wrap the root layout's children once and a navigation cross-fades and rises (React's ViewTransition where the runtime has it, plain children otherwise), from the --kz-motion-*… #499
FixedWeb and native share their logic: form/core now holds FormField, FieldArray and Watch; meter/model the Meter's ratio, tone, words and ring arcs; vertical-video/model the labels and the shared props. #501
FixedProducts wear plain Krizaka UI: under data-surface="product" on the root (an app themed at :root: set it on <html>) or a product brand (.brand-orazaka, -orochia, -yasakia, -yororis, -yomizaka, -kachizaka, -akinaza) the… #492
Newfeat: Krizaka Cahier, our own pen — derived from Caveat (SIL OFL 1.1, renamed, FONTLOG shipped), weight 500, tabular lining figures, a 1.25 em line box, French alphabet and § — as the cahier role: --kz-font-cahier… #474
Newfeat: Krizaka Cahier, our own pen — derived from Caveat (SIL OFL 1.1, renamed, FONTLOG shipped), weight 500, tabular lining figures, a 1.25 em line box, French alphabet and § — as the cahier role: --kz-font-cahier… #474
Newfeat: Elephant (@krizaka/ui/elephant) — the small flying-elephant mark of the neighbour joke (« the elephant with those ears can fly »), standing or flying, sage and sand, flat, in the Krizaka line (krizaka-ui#469). #474
NewDialog, Sheet, Popover and Tabs enter and leave with motion. #476
New@krizaka/ui/motion gains the page-transition helpers: runViewTransition, transitionPage, crossFallback, canViewTransition and sharedElementStyle. #475
NewNo more family switcher: krizaka.com is the only way back between the Krizaka sites (Oussama, 2026-10-22). #486
FixedAppShell and RailNav: collapsing the sidebar no longer lets the brand name or the footer text spill over the content. #484
NewFlock scenes: each bird does a short scene true to its promise — the owl reads a book and turns a leaf, the flamingo and the lovebird talk with a speech mark and their neighbour answers, the crane steps out and bows,… #466
Newfeat: the neighbourhood café — EspressoIcon, PlantIcon, WindowIcon, StoopIcon, ChairIcon, web and React Native, in the signature grammar (24 grid, 1.5 stroke, square caps, cut corners, one node) (krizaka-ui#472). #474
NewNine new signature icons: star, bolt, wave, flame, crown, leaf, mountain (a new « Emblems » group, to build marks and badges from) and medal, podium (ranks and standings). #465
FixedVercel is retired: its platform variable names are no longer allowed by the env-name rule (a VERCEL_ variable is refused like any vendor name). #467
Newfeat: Krizaka Cahier, our own pen — derived from Caveat (SIL OFL 1.1, renamed, FONTLOG shipped), weight 500, tabular lining figures, a 1.25 em line box, French alphabet and § — as the cahier role: --kz-font-cahier… #474
NewFirst release: the payments port, the Stripe adapter (Checkout, portal, price by lookup key, verified webhook), idempotent event application, a locale-aware price formatter and a catalogue setup from data. #481
NewFirst release: the bearer session over a storage port, the discovery client with a product's address and build inputs, and the API client, extracted from the Expo apps (krizaka/.github#178). #507
Fixed@krizaka/ui/sites: the products' public addresses are https://www.<product>.com (the real app, sign-up closed; the apex answers 308 with www). #454
Newfeat(flock): active (the bird the page points at looks up and jumps), greet (every bird jumps once as the flock first comes into view) and tempo (more frequent glances and deliveries) — the flock can be tied to the page… #448
Newfeat: Flock (@krizaka/ui/flock) and Mascot life — the birds at ease in character (the falcon watches, the owl reads, the duck builds, the flamingo answers, the pigeon delivers), two neighbours glancing at each other,… #441
Fixedfix(examples): the examples of the registry point at repositories and pages that exist (krizaka-build for Krizaka Java, the Discussions of krizaka-ui) — found by the documentation crawler. #439
NewLining figures (ADR-004, krizaka-ui#417): Young Serif draws old-style digits by default, so a statistic's « 4 514 » and « 39 » sat on uneven heights. #435
NewLining figures (ADR-004, krizaka-ui#417): Young Serif draws old-style digits by default, so a statistic's « 4 514 » and « 39 » sat on uneven heights. #435
NewSiteFooter is one calm band (krizaka-ui#434, peer review: « too much, a double footer »): the site's own columns beside the family's — Products · Open source (GitHub closes it) · Krizaka (our story, the blog, contact,… #438
NewLining figures (ADR-004, krizaka-ui#417): Young Serif draws old-style digits by default, so a statistic's « 4 514 » and « 39 » sat on uneven heights. #435
FixedCahier, the last pills (#417): ChipLink, the kanban's count, the video trimmer's « kept » label, the photo grid's « main » tag, the location picker's chip and button, the step showcase's pause button and the slider's… #433
NewCahier, the blocks' own corners and shadows (ADR-004, #417): every card corner of 10 px or more in blocks.css and motion.css is square paper, and every blurred shadow (the templates' coloured stage glow included) is… #431
NewCahier, the chrome (ADR-004, #417): the bar is square paper — the floating bar, its items, its icon buttons and menus lose the pill (2 px); badges, chips, tabs, the language switch, toasts, progress and meter tracks,… #428
Newsites: Krizaka Motion (the motion lab, krizaka.github.io/krizaka-motion) joins the family's open-source group — every family switcher (NavBar.Family) and family footer (SiteFooter) lists it after a bump, in English and… #412
NewRoute joins the motion vocabulary: easing (ease-out, linear, ease-in-out) shapes the drawing and the trips, and paused holds both where they are (on top of the off-screen pause). #414
NewTerminalReplay joins the motion vocabulary: speed, a multiplier on every delay (typing, lines, between commands) — 2 plays twice as fast, 0.5 half as fast. #415
NewNumberTicker joins the motion vocabulary: duration now drives the digit roll (trigger="change") as well as the climb, and the new easing (ease-out, linear, ease-in-out or any CSS easing) shapes both, through… #413
FixedButton: the « Sizes » example wraps on a narrow phone (360 px) instead of running 2 px past its frame. #408
FixedDayStrip: bringing the chosen day into view scrolls the strip only, never the page. #411
Fixed.kz-grow really grows a chart: it wipes the whole SVG in from the left (kz-grow-wipe) instead of drawing each path's stroke, which never matched the charts' markup (classes, not stroke attributes).
Newmotion.css: arrival and growth, moved out of the Krizaka Motion lab. #401
FixedMap follows the page's theme even when it flips before the engine has loaded: the map was created with the scheme of its first render and never corrected (a light page showed the dark basemap). #400
NewEngineFlow config, the first of Krizaka Motion's shared vocabulary: density (sparse · normal · dense: photons per conduit), trigger (always · hover · active: when they travel), easing (linear, ease-in-out or any CSS… #395
New@krizaka/ui/map motion: Route (a line that draws itself once when the map is on screen, and a courier that makes a trip — one, or repeatAfter while visible; finite frames, nothing runs afterwards), Pulse (a heat pulse… #395
Fixedexport-brand: the favicon's PNG sizes (favicon-32.png, apple-touch-icon.png 180, icon-192.png, icon-512.png) are exported next to favicon.svg for every brand, so a site's tab, home-screen and manifest icons come from… #375
FixedEngineFlow: the photons travel again and the engine breathes. #394
Fixedsites: Kachizaka and Akinaza now have their dev sites (dev.kachizaka.com, dev.akinaza.com), Yasakia's line says what it is (real people, introductions and photos checked before you see them) and Orazaka's is… #375
New@krizaka/ui/native chat: MessageBubble takes children (a Markdown answer in the same bubble shape), MessageComposer takes a meta line and ComposerMeta draws the model chip and a status line with a shield… #373
NewNavBar.Menu: the inline links of a short section (3 or fewer) now stand in the bar from lg up (inlineFrom, "md" | "lg" | "xl", default lg); between the phone panel and that breakpoint the section is the dropdown, so… #376
FixedRe-publish of 3.29.0: npm accepted @krizaka/ui@3.29.0 into staging but never released it (409 « previously staged », no staged version listed), while tokens and tailwind 3.29.0 are live and require @krizaka/ui ^3.29.0.
NewDocsHubPage: linksLayout="stack" puts one quick link per line in every collection (default wrap unchanged), so the first link of each card starts at the same height (krizaka-ui#212). #372
New@krizaka/ui/engine-flow: EngineFlow — an engine at the hub and the apps it serves around it, with photons travelling each conduit in (requests), out (results) or both, in the app's brand going in and the hub's coming… #371
New@krizaka/ui/chip-row: ChipRow and ChipRow.Item — a row of chip links that scrolls sideways with scroll-snap on a phone (fading edge, no scrollbar) and wraps from md; 44 px targets, aria-current, a badge (« Soon »),… #361
New@krizaka/ui/native: SettingsGroup and SettingsRow — a titled card of hairline-divided rows (icon tile, label, help, value or control, a chevron when the row opens something; a button named by its visible words). #367
New@krizaka/ui/language-switch/server: languagesFor, languageHref and languageNames without the "use client" banner, so a Server Component can call them (the language-switch entry stays client and re-exports them for… #347
NewNavBar.Menu: a section of three links or fewer is not a dropdown any more — its links stand in the bar as plain links, the current one marked (inlineUpTo, 3 by default; 0 keeps a dropdown, above the limit it is a… #346
FixedImageCropper (web): a picture that was already loaded before React attached (cache, server render) is measured on mount, so a portrait source covers the frame at any zoom; the box's percentages are rounded so float… #360
FixedlocateQuote (DocumentViewer): a quote starting in the middle of a text item is boxed from where its glyphs start (shared by sans-serif advance widths) instead of an even share of the item, so highlights no longer begin… #359
FixedlanguageHref: the path split no longer uses a backtracking regular expression (CodeQL polynomial ReDoS); a regression test guards a very long path. #357
FixedWuSamaMark shares Krizaka's contour: the hexagonal shield, the open vertex with a lit blue node and the centre W in Krizaka blue. #350
NewCahier (ADR-004, #417): the Krizaka faces are Young Serif (display, one weight), Atkinson Hyperlegible Next (text) and Courier Prime (mono: tags, captions, footnotes, code) — all SIL OFL 1.1, self-hosted, latin and… #423
NewNew @krizaka/ui/account-menu — AccountMenu, the menu under a signed-in person's avatar: identity first (picture from defaultAvatar or src, name, e-mail), profile and settings links, the language as a compact submenu… #333
New@krizaka/ui/changelog-page adds releasesFromPulls: for a repository that publishes no releases (a product in development), its merged pull requests become one changelog entry per week — conventional titles in plain… #338
NewSix blocks for a shop's storefront (Akinaza): ServiceCard (@krizaka/ui/service-card) — a service as a card with icon or photo, duration, capacity, price (« from » when it varies), inclusions, a « Popular » tag and one… #343
NewWuSamaMark: the founder's byline mark (Oussama's nickname, Wu-sama) — a gold W of five straight legs inside the Krizaka hexagon, split at its top and bottom vertices, ink and one amber, code-drawn SVG, still, cropped to… #339
Fixed--kz-text-muted now reaches WCAG AA (4.5:1) for small text on every surface, in both themes and under every brand (it was 4.11:1 on dark and 3.91:1 on light, between 3.05 and 4.17 across the surfaces). #320
NewNew marks for Yomizaka, Kachizaka, Akinaza, Yororis and Yasakia (web and native, same geometry), chosen from three directions per brand: Yomizaka "the watch" (the owl, two lenses under a calm brow), Kachizaka "the… #296
Newcaptcha: new Captcha and CaptchaDisclosure (@krizaka/ui/captcha) — Cloudflare Turnstile that stays hidden unless a challenge is needed (managed mode, appearance: "interaction-only"), a framed box on the tokens when it… #300
SecurityChangelogPage gains the security and breaking kinds (words and colour, both themes), and @krizaka/ui/changelog-page ships its data adapter: parseChangesets (a changesets CHANGELOG.md), parseReleaseBody (a GitHub… #323
NewDesktop (ADR-002: desktop is the web components in the Orazaka Mac app's Tauri window). #292
NewDocsNav (@krizaka/ui/docs-nav) — the pages of a documentation in quiet groups for the sidebar of DocsLayout / DocsArticlePage: each group folds, the group of the current page is open, only the current page is marked;… #310
NewMediaGrid can head its grid like its shelf (grid={{ label: "Videos" }}, the same heading style as “Shorts”), and both headings take a hint: a small “i” that opens the section's one-line definition and a link to the… #310
NewSiteFooter: variant — site (the full footer, unchanged), docs (compact: the site's columns in a row on the documentation's width, no site block, never the family) and app (one slim line for a signed-in product:… #281
NewNew RailNav (@krizaka/ui/rail-nav) and AppHeader (@krizaka/ui/app-header): the compact navigation of an application. #324
Newsettings-layout: a calm, flat settings screen. #327
NewNew Waveform (@krizaka/ui/waveform, and Waveform on @krizaka/ui/native): the bars of a sound drawn on their own, for a card or a banner. #318
Fixed--kz-text-muted now reaches WCAG AA (4.5:1) for small text on every surface, in both themes and under every brand (it was 4.11:1 on dark and 3.91:1 on light, between 3.05 and 4.17 across the surfaces). #320
FixedGenUi: a line that closes one brace too many keeps its first complete object (measured on Orazaka dev: a model's updateComponents line ended with }}}) — only stray } / ] may follow, the object is validated as any other;… #317
FixedNavBar test: let the hover-intent timer finish before Escape, so it cannot reopen the menu (red on every PR run on a slow runner). #331
FixedNavBar test: the Escape assertion waits for Radix's close instead of racing it (flaky on loaded CI runners, red on main). #328
FixedSiteFooter: a SiteFooter.Column with no link (empty, null or false children) now renders nothing instead of a heading over an empty list, the site's own columns share the row with an auto-fit grid (it was a fixed… #281
FixedTabs: add missing data-[state=inactive]:hidden to TabsContent to prevent ghost rendering and vertical stacking under forceMount (fixes #213). #244
NewData-driven UI (ADR-082, krizaka/orazaka#207): @krizaka/ui/genui draws the interface a model describes in A2UI v0.9 — GenUiStream (a model's answer, its prose and its a2ui fence, growing as it streams), GenUiSurface,… #314
NewNew MetaRow (@krizaka/ui/meta-row, web and @krizaka/ui/native): one quiet line of dot-separated facts ("HD 720p · 9:16 · 0:05 · 24 fps · Oct 16, 2026") with optional status chips at its end (a Badge). #309
NewUpdatePrompt (the soft invitation to update), ForceUpdateScreen (the blocking screen after a 426 or updateMode: force) and MaintenanceScreen (the service is down on purpose) — web and /native, for the app-version… #297
FixedTabs (pills) and the other sideways-scrolling rows (settings nav, shorts shelf, date-picker presets, day strip, table of contents) no longer draw a vertical scrollbar. #295
NewVerticalVideo takes fit="fill": in a box that has its own size (a bento tile, a grid cell) the clip covers it edge to edge instead of drawing a small 9:16 frame inside it; the caption's name line wraps and stays clear… #272
Newmedia-grid: the whole VideoCard opens the video (the title's stretched link now covers the picture too; badges and duration let the click through), the animated preview is requested only after the pointer or focus rests… #285
FixedLinear-time trimming of trailing slashes (defaultAvatarUrl) and of array indices (findUnused): CodeQL polynomial-ReDoS findings. #274
NewData-driven UI (ADR-082, krizaka/orazaka#207): @krizaka/ui/genui draws the interface a model describes in A2UI v0.9 — GenUiStream (a model's answer, its prose and its a2ui fence, growing as it streams), GenUiSurface,… #314
NewFour icons for a league of friends: SoccerIcon, HockeyIcon, BasketballIcon (the three games a multi-sport league follows) and TrophyIcon (the season's cup). #334
NewNew package: the app-version contract shared by every Krizaka backend and client — GET /api/v1/app-config, 426 Upgrade Required below the minimum, N-1 contracts with Deprecation/Sunset, soft/force/maintenance decisions,… #297
NewCardGrid takes a foundation: one wide card that the others stand on (an engine, a platform), a hairline stem joining it to a frame around the cards, an optional foundationLabel on the frame and foundationPosition (start… #254
Newfeat(chat): MessageComposer variant="pill" — one rounded field with leading (mode chip, attach) inside on the left, a round send inside on the right, a reserved status line under it; busy holds the send without moving… #250
FixedVideoCard: on a 9:16 card the count and the quick action move to a second line, so the creator's name is no longer cut to an initial on a shelf. #233
NewMedia grid (#228), web: @krizaka/ui/media-grid — MediaGrid for feeds of mixed orientations (split: the 9:16 clips on a ShortsShelf, the others in a uniform 16:9 grid; uniform: one frame, a clip of the other shape drawn… #231
Fixed@krizaka/ui/sites: Yomizaka is "In development" (its repository is public and it has a dev site), not "Coming soon" — the same honest status as krizaka.com's product list, in the family switcher and every footer. #219
New@krizaka/ui/document-viewer — DocumentViewer: a PDF drawn page by page with pdf.js (an optional peer the app loads with loadPdfjs={() => import("pdfjs-dist")}), and the passages of a report lit where they sit. #205
NewKachizaka (predictions among friends, points only) and Akinaza (the shop OS for Québec): their brands, marks and mascots. #202
FixedNew server-safe entry @krizaka/ui/avatar/defaults (defaultAvatarUrl, defaultAvatarSvg, …): the pure helpers of the default avatars can be called in a Server Component. #203
NewSiteFooter gets a product mode: family={false} drops the family columns — a deployed product is independent, so its footer holds only its own columns, the legal links, the version and one publisher line (“A Krizaka… #193
FixedShowcase: the slides' column is minmax(0, 1fr) — a slide holding a wide code block (a <pre>) no longer widens the slideshow past a phone's width. #190
FixedSiteFooter never makes a phone page scroll sideways: its frame and columns shrink to the screen (minmax(0, 1fr), #191
NewLinkCard pins its foot (the facts in extra, then the way in cta) to the bottom of the card, so in a CardGrid row whose sentences have different lengths the status chips and the links sit on one line and the card bottoms… #187
NewShowcase (@krizaka/ui/showcase, native in @krizaka/ui/native): a slideshow that advances by itself and shows it. #184