Upcoming appointment
Annual physical
–
AO
Patient app · Friday, 23 October
Your visit with Dr. Okafor is at 10:30 AM. Two short questions and you're ready.
Upcoming appointment
–
AO
Pick one. You can still change it at the front desk.
Insurance
We checked your plan this morning. There's nothing you need to do.
Clinician workspace
Same patient, same morning. Mostly neutral, so the one critical value finds you first.
Annual physical · 23 Oct, 10:30 AM
Locked at signing. Any change from here is an addendum, shown after the original.
Patient · usually replies within an hour
Is it okay to take ibuprofen before my visit today?
Good morning, Maya. Yes, that's fine. Skip it from now until your labs are drawn.
Perfect, thank you. See you at 10:30 AM!
Kuro design system / foundations
Stone, paper, olive and clay for the calm. One violet for the moment that matters, and a clear next step on every screen.
01 / Color
Authored in OKLCH, one hue per family. Ratios are computed live from the rendered swatch against white (w) and against stone-950 (k).
Components reference these, never the ramps. Each tile shows the three text tiers on that surface.
02 / Clinical status
Every status carries an icon and a word. Violet is never a status, olive is never anything but a call, and normal results stay neutral.
02b / Two greens
Lightness does the separating, so it survives colour blindness. Calls always carry a handset; approvals always carry a check or a signature.
02c / Action rule (open question)
Proposal: everyday primary buttons are sumi ink. Violet is kept for brand moments and the one key action per screen, so it still pops against the natural base.
The "Primary rule" switch in the rail applies the alternative to every primary button on this page.
03 / Contrast
Every pair the foundations use, checked in light, dark and both contrast-more themes at build time. Text needs 4.5:1 with no large-text exemption; controls and the focus ring need 3:1.
04 / Type
Blubird speaks: headlines at 24px and up, light subheads, thin accents. Inter does the work: every label, sentence and number.
05 / Space, radius, elevation
Lift means you can act on it. Tint means it is telling you something.
Semantic radii follow density: control, card, panel and tag step down one size in compact.
06 / Focus and density
One stroke, never two. A bordered control's own border turns deep violet at 2px. A filled button gets nothing outside it: its fill steps darker or lighter and a 1px stroke of its own hue appears just inside the edge.
Switch density in the rail. These values come from density.*.json and re-flow everything on the page, including the compositions below.
06b / Avatars
Patient photos are approved for the chart header. Without one, initials sit on an earthy tint picked from the person's ID, never olive or forest.
MRxl 80, photo (initials fallback)07 / Layers, breakpoints, motion
Named layers instead of raw z-index. Breakpoints for the page shell only. Motion values are placeholders until the motion phase.
08 / Bento grid
Tiles declare width and height in grid units. Rows are one unit tall, with one gap both ways, so two 2-unit tiles stack to exactly one 4-unit tile. Below 360px it is one column, in reading order.
Each tile prints its live span (columns × row units) for the width it is at now. Resize the window: the spans and column counts change per container tier (narrow 360, medium 560, wide 800, xwide 1040), and the order you read and tab through never changes.
columns { narrow: 2 } · copay 1×2 and prior auth 1×2 stack beside deductible 1×4columns { narrow: 2, wide: 4, xwide: 6 } · link tiles; widths change per tier, the order never doescolumns { narrow: 2, medium: 3, xwide: 6 } · blood pressure keeps 2 columns, the rest fill in09 / Compositions
No component library yet. These shells use tokens and plain HTML, to prove the foundations can carry real clinical content.
We checked your plan before you arrived. There is nothing you need to do.
So the clinic can bill your plan directly. Your card photo is stored with your chart and never shared.
We check your coverage before you arrive, so the front desk has nothing to chase.
10 / Layout and composition
One grid per breakpoint, one spacing ladder, and a short list of things that never break. Space groups, a shared tint gathers, and a hairline encloses only what you can act on.
Tier . Resize the window: the margin and column count change at the breakpoints (600, 900, 1200, 1600); the gutter follows density, so it matches the gap between cards.
grid.columns, layout.margin, space.gutter, rail and pane widths