feat(ch08): A1 sign-in + A4 OTP screens per Figma baseline - #24
Conversation
AuthShell: 480px card r24, 4-layer shadow-card, 48/48/24 padding, 384px content column, -24 logo tile overlap, full-bleed hairlines. Wordmark footer tinted with decorative --lab-ink-faint (WCAG logotype exemption); "(c) 2026 Labpics" caption below. A1 (frames 1552:3908 / 1564:7602 / 1564:7506): - Header: title 20px SemiBold + subtitle 16px label-s - Social 2-up 184x48 (Yandex/Telegram brand SVG in public/brand/) - Passkeys full-width secondary button - Hairline - "ili" - hairline divider - Floating-label email input h48 r12 - Primary CTA "Poluchit kod" (bg-accent-finish on --lab-accent-blue-strong with gradient+inset; white label >=4.5:1) - States: empty (CTA disabled) / filled / error (border + 13px helper role=alert) / loading (spinner aria-busy) A4 (frame 1563:7321): - Same shell, no logo tile - 6-cell masked OTP via single hidden input (inputmode=numeric, autocomplete=one-time-code, paste-fill, auto-submit@6) - Resend CountdownLink 60s aria-live=polite - Back button to /auth/login - Error: cell border error + 13px helper role=alert Server seam: typed stubs requestOtpCode/verifyOtpCode (ch02 wires transport). Token purity (rubric-enforced): - var(--lab-*) only; no raw hex/rgb/hsl in TSX/CSS - Brand hex isolated in public/brand/*.svg only - Flask/wordmark/icons inline currentColor - transitions named-only; no transition-all - Interactive state matrix per DESIGN.md 6.3: default/hover/active(.97)/ focus-visible(2px outline)/disabled/loading(aria-busy) Base: main (after PR 21+22 merge)
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 23 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (11)
Comment |
Summary
Screens A1 (sign-in) and A4 (email OTP) per Figma taste-SSOT (file vFWveYl6n4pLqSut3GFQxk). Recreates closed PR #23 against main after its base branch (design/figma-baseline-reconcile) was merged+deleted.
All review findings from PR #23 (design-reconciler) are closed in the squashed commit: R2 CTA strong-member, R3 ink-faint wordmark, R4 @theme dedupe, R5 13px essential text, owner deltas (size=control on 5 buttons, single icons module).
Screens
A1 (frames 1552:3908 / 1564:7602 / 1564:7506):
A4 (frame 1563:7321):
Server seam
Typed server-action stubs (ch02 wires transport when identity ports land):
requestOtpCode(email):{ok:true} | {ok:false; code:'not_found'|'rate_limited'}verifyOtpCode(email, code):{ok:true} | {ok:false; code:'invalid'|'expired'|'locked'}Gates (verified before push)
Token purity (rubric-enforced)
Known issue
Full-repo bun test crashes in apps/api on cpu-features NAPI in WSL bun 1.3.14 when TEST_DATABASE_URL is unset (oven-sh/bun#18546). With TEST_DATABASE_URL pointing to Postgres 17 container the suite passes. CI unaffected (github-hosted ubuntu-latest doesn't hit this).
Stacking
Base: main (after PR #21 + #22 merge). Replaces PR #23 (auto-closed when its base was merged+deleted).