A gentle, warm, pastel baby-care tracking app built on soft-UI layered cards, playful emoji-style iconography, tinted category surfaces, and an editorial serif/sans pairing.
24px 4px 14px · card padding: 22px 20px 20px16pxfrom { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; }
from { transform: translateY(100%); } to { transform: none; }
| Field | Value |
|---|---|
| Site | Keyhan Bebek (omegabilisim.com.tr/bebek) |
| Analyzed | 2024 |
| Design language | Soft-UI pastel nursery, category-tinted cards |
| Overall mood | Warm, gentle, calm, friendly, domestic |
| Framework hints | Vanilla JS PWA (no framework libs); CSS custom properties; mobile-first, max-width 560px |
Signature: Cards use large corner radii (--r-lg: 26px), 1px borders that match the card's own tint (never a hard neutral grey), and large, low-opacity, warm-tinted ambient shadows — 0 8px 22px rgba(120,110,95,.08) and 0 6px 18px rgba(120,110,95,.06). The shadow color is a warm brown-grey (rgba 120,110,95) rather than pure black, keeping everything soft.
Where applied: big status cards, quick-action tiles, recent-activity panel, stat cards.
Rules for new pages:
#f6ecd6, sleep card → #e3ebf3), giving a "frosted candy" edge.Signature: Each functional domain has a dedicated pastel palette: Feed = amber, Sleep = blue, Diaper = mint, Note = lilac, Medicine = coral. Each has a "solid" token and a "-soft" background token.
Where applied: big cards, action tiles, timeline icon circles, timeline time-pills, chart bars.
Rules:
-soft tint, icon circle = a slightly deeper tint, label + time-pill text = the deepest saturated variant.#fbedd6/#c98a3b).Signature: border-radius: 999px on chips, avatars, icon circles, time pills, toasts, progress bars.
Rules: favour full-round pills for status/meta chips; use 50% circles for all icon containers.
#fefefe) and warm-brown shadow tint make even white cards feel cozy.| Token | Hex | RGB | HSL | Usage |
|---|---|---|---|---|
| --feed | #f0a868 | 240,168,104 | 30,80%,67% | Primary action, feed hue |
| --feed-soft | #fdf3e3 | 253,243,227 | 37,76%,94% | Feed card bg tint |
| --sleep | #6f8ad4 | 111,138,212 | 224,54%,63% | Sleep hue, secondary/links |
| --sleep-soft | #eef2fb | 238,242,251 | 222,68%,96% | Sleep card bg |
| --diaper | #7fc8a9 | 127,200,169 | 145,39%,64% | Diaper/mint hue |
| --diaper-soft | #eef7f1 | 238,247,241 | 140,38%,95% | Diaper card bg |
| --note | #c79fe0 | 199,159,224 | 277,48%,75% | Note/lilac hue |
| --note-soft | #f6eefb | 246,238,251 | 277,60%,96% | Note bg |
| --medicine | #e88a8a | 232,138,138 | 0,68%,73% | Medicine/coral hue |
| --medicine-soft | #fef7f1 | 254,247,241 | 28,72%,97% | Medicine bg |
| Token | Hex | Usage |
|---|---|---|
| --bg-0 / --bg-1 | #fefefe | Page background |
| --card | #ffffff | Card surface |
| --card-2 | #f3eee7 | Ghost button / toast bg |
| --line | #ece4d8 | Warm border/divider |
| --text | #2f3a44 | Primary text |
| --dim | #8a93a0 | Secondary/muted text |
| (meta) | #6a7480 | Card sub-text |
| (eyebrow) | #5b6675 | Section title text |
| --primary | #2a1c0d | Dark-brown text on amber buttons |
| Token | Hex | Usage |
|---|---|---|
| --danger | #e07a7a | Destructive text/border |
| insight-ok | #7fc8a9 | Positive accent bar |
| insight-warn | #e2a13c | Warning accent bar |
| Purpose | Hex |
|---|---|
| feed label | #d9943f |
| feed time-text | #c98a3b |
| diaper label/text | #4f9c79 |
| sleep time-text | #6b62b0 |
| medicine text | #c25c5c |
| note text | #9568bb |
Dark mode: not implemented.
| Name | CSS | Usage |
|---|---|---|
| Gate wash | linear-gradient(170deg, var(--bg-0) 0%, var(--bg-1) 100%) | Login overlay bg |
| Bar feed | linear-gradient(to top, var(--feed), #f6c79a) | Feed chart bars |
| Bar night | linear-gradient(to top, #5a72c0, #8fa3e0) | Night chart segment |
| Bar pee | linear-gradient(to top, #6fb3e0, #a7d2f0) | Diaper pee bars |
| Bar poop | linear-gradient(to top, #b98a5a, #d4a97c) | Diaper poop bars |
| Bar sleep | linear-gradient(to top, var(--sleep), #a6b8e8) | Sleep bars |
| Role | Stack | Source | Weights |
|---|---|---|---|
| Display / values | 'Fraunces', Georgia, serif | Google Fonts | 500,600,700 |
| UI / body | 'Inter', system-ui, sans-serif | Google Fonts | 400,500,600,700 |
Type scale:
| Token | Size | LH | Weight | Tracking | Usage |
|---|---|---|---|---|---|
| brand-name | 2.5rem | 1.05 | 700 (serif) | -0.01em | Baby name |
| hero-value | 2rem | 1.1 | 600 (serif) | 0 | Stat numbers |
| bigcard-main | 1.85rem | 1.1 | 700 (serif) | 0 | Card headline value |
| brand-hello | 1.15rem | — | 500 | 0 | "Merhaba," |
| body/button | 1.05rem | 1.45 | 400/600 | 0 | Body, buttons, list titles |
| meta | 0.95rem | — | 400 | 0 | Card sub |
| eyebrow/section | 0.82rem | 1.4 | 700 | 0.06em | UPPERCASE labels |
| bar-lbl | 0.72rem | — | 400 | 0 | Chart labels |
Base unit 8px. Common tokens: 4, 6, 8, 10, 12, 14, 16, 18, 22, 24, 32, 40px. Card gap 16px, action grid gap 12px. Tap target --tap: 56px.
max-width: 560px; margin: 0 auto..screens has 22px horizontal padding, top corners rounded 26px.1fr 1fr, gap 16px.repeat(4, 1fr), gap 12px.| Token | Value |
|---|---|
| --r-lg | 26px (cards, panels) |
| --r-md | 18px (buttons, inputs) |
| --r-sm | 14px (small controls) |
| pill | 999px (chips, avatars, time-pills) |
| circle | 50% (icon wells) |
Borders: 1px, tinted to surface hue or --line #ece4d8.
| Token | Value | Use |
|---|---|---|
| shadow-card | 0 8px 22px rgba(120,110,95,.08) | Big cards |
| shadow-card-soft | 0 6px 18px rgba(120,110,95,.06) | Stat/chart cards |
| shadow-panel | 0 8px 22px rgba(120,110,95,.06) | Recent panel |
| shadow-avatar | 0 4px 14px rgba(193,150,90,.25) | Brand avatar |
| shadow-chip | 0 4px 12px rgba(120,110,95,.08) | Caregiver chip |
| shadow-tab | 0 -4px 20px rgba(120,110,95,.06) | Bottom tab bar |
| shadow-overlay | 0 8px 24px rgba(0,0,0,.25–.4) | Toast/tooltip |
Strategy: single large soft warm-tinted ambient shadow per surface; only overlays use black shadows.
No backdrop-filter / glassmorphism present. Effects are limited to soft shadows, tinted fills, and grayscale/opacity icon filters on inactive tabs (filter: grayscale(1) opacity(.55)).
None. Background is a flat warm white (#fefefe).
Durations: 0.15s (tooltip), 0.2s (toast/backdrop), 0.25s (screen fade), 0.28s (sheet), 0.4s (bar height/width). Easing: ease default, cubic-bezier(.2,.8,.2,1) for the bottom sheet.
Keyframes:
@keyframes fade { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
@keyframes slideup { from { transform: translateY(100%); } to { transform: none; } }
.screen { animation: fade .25s ease; }slideup .28s cubic-bezier(.2,.8,.2,1).height/width .4s ease.transform: scale(.96–.98) on :active (transform .08s ease).@media (prefers-reduced-motion: reduce) disables all animation/transition.Mostly CSS-driven. JS is used for class-toggle state changes (is-medicine, is-multi, is-asleep, sheet-open) and could drive a light entrance stagger. The companion animations.js implements optional [data-reveal] fade-up reveals matching the fade keyframe. Not required for the static first viewport.
| Prop | Value | ||||||
|---|---|---|---|---|---|---|---|
| bg | #f0a868 | ||||||
| color | #2a1c0d | ||||||
| radius | 18px | min-height | 56px | weight | 600 | :active | scale(.98) |
bg #f3eee7, border 1px #ece4d8, color #2f3a44, radius 18px.
Radius 26px, padding 22px 20px 20px, 1px tinted border, shadow-card. Icon well 58px circle. Label = eyebrow (uppercase, 0.82rem, 700, category color). Main value = Fraunces 1.85rem 700. Divider = rgba(120,120,120,.14) 1px. Meta row 0.82rem #6a7480.
min-height 116px, radius 26px, tinted bg+border, centered 52px icon + 0.98rem 600 label. :active scale(.96).
grid auto 1fr auto; 50px circle icon well (tinted per category); title 1.05rem 700 with soft-weight (500, #6a7480) suffix; time-pill 999px radius, tinted bg + category text color, 700.
padding 6px 12px, radius 999px, category bg + category text, 700, tabular numerals.
white pill, 1px #ece4d8, radius 999px, padding 11px 16px, avatar 26px circle, shadow-chip.
height 56px, bg #fefefe, 1px #ece4d8, radius 18px, 1.05rem, padding 0 14px.
Illustrated/3D emoji-style PNG icons (bottle, diaper, medicine, note, moon) sitting inside tinted circular wells (50% radius): 58px in big cards, 56px in actions, 50px in timeline, 44px in stat cards. Icon image 40/52/36/32px respectively. For recreation, use rich colored inline SVG or emoji; never grey placeholders. Inactive tab icons are grayscale(1) opacity(.55).
Rounded profile avatar photo (62px circle, warm shadow). Category icons are the primary imagery — soft 3D illustration aesthetic. No large photography.
| Check | Status |
|---|---|
| Text contrast (body #2f3a44 on white) | Pass |
| Amber button dark text (#2a1c0d on #f0a868) | Pass |
Focus ring 3px solid var(--note) | Present |
| Tap targets ≥ 44–56px | Pass |
| Reduced-motion honored | Yes |
| Colour-only meaning | Icons + labels back up colour coding |
:root{
--bg-0:#fefefe; --bg-1:#fefefe; --card:#fff; --card-2:#f3eee7; --line:#ece4d8;
--text:#2f3a44; --dim:#8a93a0; --meta:#6a7480;
--feed:#f0a868; --feed-soft:#fdf3e3;
--sleep:#6f8ad4; --sleep-soft:#eef2fb;
--diaper:#7fc8a9; --diaper-soft:#eef7f1;
--note:#c79fe0; --note-soft:#f6eefb;
--medicine:#e88a8a; --medicine-soft:#fef7f1;
--danger:#e07a7a;
--r-lg:26px; --r-md:18px; --r-sm:14px; --tap:56px;
--serif:"Fraunces",Georgia,serif; --sans:"Inter",system-ui,sans-serif;
--shadow-card:0 8px 22px rgba(120,110,95,.08);
--shadow-soft:0 6px 18px rgba(120,110,95,.06);
}
rgba(120,110,95,...).#2a1c0d) text, never white.