@import "tailwindcss"; @custom-variant dark (&:is(.dark *)); /* ── CSS variable definitions (light / dark) ─────────────────────────────── */ :root { --background: hsl(42 35% 95%); --foreground: hsl(220 24% 14%); --card: hsl(44 32% 96%); --card-foreground: hsl(220 24% 14%); --popover: hsl(44 32% 96%); --popover-foreground: hsl(220 24% 14%); --primary: hsl(15 44% 34%); --primary-foreground: hsl(42 40% 97%); --secondary: hsl(38 24% 91%); --secondary-foreground: hsl(220 20% 20%); --muted: hsl(42 20% 90%); --muted-foreground: hsl(219 12% 39%); --accent: hsl(42 24% 90%); --accent-foreground: hsl(220 24% 14%); --destructive: hsl(0 84.2% 60.2%); --destructive-foreground: hsl(0 0% 98%); --border: hsl(35 23% 76%); --input: hsl(37 20% 80%); --ring: hsl(15 40% 38%); --radius: 0.5rem; --editorial-paper: hsl(48 37% 96%); --editorial-paper-strong: hsl(44 43% 92%); --editorial-ink: hsl(220 23% 14%); --editorial-muted: hsl(219 12% 39%); --editorial-line: hsl(36 24% 74%); --accent-dashboard: hsl(13 45% 39%); --accent-products: hsl(95 28% 33%); --accent-routines: hsl(186 27% 33%); --accent-skin: hsl(16 51% 44%); --accent-profile: hsl(198 29% 35%); --accent-health-labs: hsl(212 41% 39%); --accent-health-meds: hsl(140 31% 33%); --page-accent: var(--accent-dashboard); --page-accent-soft: hsl(24 42% 89%); } .dark { --background: hsl(240 10% 3.9%); --foreground: hsl(0 0% 98%); --card: hsl(240 10% 3.9%); --card-foreground: hsl(0 0% 98%); --popover: hsl(240 10% 3.9%); --popover-foreground: hsl(0 0% 98%); --primary: hsl(0 0% 98%); --primary-foreground: hsl(240 5.9% 10%); --secondary: hsl(240 3.7% 15.9%); --secondary-foreground: hsl(0 0% 98%); --muted: hsl(240 3.7% 15.9%); --muted-foreground: hsl(240 5% 64.9%); --accent: hsl(240 3.7% 15.9%); --accent-foreground: hsl(0 0% 98%); --destructive: hsl(0 62.8% 30.6%); --destructive-foreground: hsl(0 0% 98%); --border: hsl(240 3.7% 15.9%); --input: hsl(240 3.7% 15.9%); --ring: hsl(240 4.9% 83.9%); } /* ── Map CSS vars → Tailwind v4 design tokens ────────────────────────────── */ @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); --color-card: var(--card); --color-card-foreground: var(--card-foreground); --color-popover: var(--popover); --color-popover-foreground: var(--popover-foreground); --color-primary: var(--primary); --color-primary-foreground: var(--primary-foreground); --color-secondary: var(--secondary); --color-secondary-foreground: var(--secondary-foreground); --color-muted: var(--muted); --color-muted-foreground: var(--muted-foreground); --color-accent: var(--accent); --color-accent-foreground: var(--accent-foreground); --color-destructive: var(--destructive); --color-destructive-foreground: var(--destructive-foreground); --color-border: var(--border); --color-input: var(--input); --color-ring: var(--ring); --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) + 4px); } /* ── Base resets ─────────────────────────────────────────────────────────── */ * { border-color: var(--border); } body { background-color: var(--background); color: var(--foreground); font-family: 'Manrope', 'Segoe UI', sans-serif; background-image: radial-gradient(circle at 8% 4%, hsl(34 48% 90% / 0.62), transparent 36%), linear-gradient(hsl(42 26% 95%), hsl(40 20% 93%)); } .app-shell { --page-accent: var(--accent-dashboard); --page-accent-soft: hsl(18 40% 89%); display: flex; min-height: 100vh; flex-direction: column; } .domain-dashboard { --page-accent: var(--accent-dashboard); --page-accent-soft: hsl(18 40% 89%); } .domain-products { --page-accent: var(--accent-products); --page-accent-soft: hsl(95 28% 89%); } .domain-routines { --page-accent: var(--accent-routines); --page-accent-soft: hsl(186 28% 88%); } .domain-skin { --page-accent: var(--accent-skin); --page-accent-soft: hsl(20 52% 88%); } .domain-profile { --page-accent: var(--accent-profile); --page-accent-soft: hsl(196 30% 89%); } .domain-health-labs { --page-accent: var(--accent-health-labs); --page-accent-soft: hsl(208 38% 88%); } .domain-health-meds { --page-accent: var(--accent-health-meds); --page-accent-soft: hsl(135 28% 88%); } .app-mobile-header { border-bottom: 1px solid hsl(35 22% 76% / 0.7); background: linear-gradient(180deg, hsl(44 35% 97%), hsl(44 25% 94%)); } .app-mobile-title, .app-brand { font-family: 'Cormorant Infant', 'Times New Roman', serif; font-size: 1.2rem; font-weight: 600; letter-spacing: 0.02em; } .app-icon-button { display: flex; height: 2rem; width: 2rem; align-items: center; justify-content: center; border: 1px solid hsl(34 21% 75%); border-radius: 0.45rem; color: var(--muted-foreground); } .app-icon-button:hover { color: var(--foreground); border-color: var(--page-accent); background: var(--page-accent-soft); } .app-sidebar { border-right: 1px solid hsl(36 20% 73% / 0.75); background: linear-gradient(180deg, hsl(44 34% 97%), hsl(42 28% 94%)); } .app-sidebar a { border: 1px solid transparent; } .app-sidebar a:hover { border-color: hsl(35 23% 76% / 0.75); } .app-sidebar a.bg-accent { border-color: color-mix(in srgb, var(--page-accent) 45%, white); background: color-mix(in srgb, var(--page-accent) 13%, white); color: var(--foreground); } .app-main { flex: 1; overflow: auto; padding: 1rem; } .app-main > div { margin: 0 auto; width: min(1160px, 100%); } .app-main h2 { font-family: 'Cormorant Infant', 'Times New Roman', serif; font-size: clamp(1.9rem, 3.3vw, 2.7rem); line-height: 1.02; letter-spacing: 0.01em; } .app-main h3 { font-family: 'Cormorant Infant', 'Times New Roman', serif; } .editorial-page { width: min(1060px, 100%); margin: 0 auto; } .editorial-backlink { display: inline-flex; align-items: center; gap: 0.35rem; color: var(--muted-foreground); text-decoration: none; font-size: 0.875rem; } .editorial-backlink:hover { color: var(--foreground); } .editorial-toolbar { margin-top: 0.9rem; display: flex; flex-wrap: wrap; gap: 0.5rem; width: 100%; justify-content: flex-start; } .editorial-filter-row { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-bottom: 0.65rem; } .editorial-alert { border-radius: 0.7rem; border: 1px solid hsl(34 25% 75% / 0.8); background: hsl(42 36% 93%); padding: 0.72rem 0.85rem; font-size: 0.9rem; } .editorial-alert--error { border-color: hsl(3 53% 71%); background: hsl(4 72% 93%); color: hsl(3 62% 34%); } .editorial-alert--success { border-color: hsl(132 28% 72%); background: hsl(127 36% 92%); color: hsl(136 48% 26%); } .editorial-alert--warning { border-color: hsl(42 78% 68%); background: hsl(45 86% 92%); color: hsl(36 68% 28%); } .editorial-alert--info { border-color: hsl(204 56% 70%); background: hsl(207 72% 93%); color: hsl(207 78% 28%); } .products-table-shell { border: 1px solid hsl(35 24% 74% / 0.85); border-radius: 0.9rem; overflow: hidden; } .products-category-row { background: color-mix(in srgb, var(--page-accent) 10%, white); } .products-mobile-card { display: block; border: 1px solid hsl(35 21% 76% / 0.85); border-radius: 0.8rem; padding: 0.95rem; } .products-section-title { border-bottom: 1px dashed color-mix(in srgb, var(--page-accent) 35%, var(--border)); padding-bottom: 0.3rem; padding-top: 0.5rem; font-size: 0.72rem; font-weight: 700; letter-spacing: 0.13em; color: var(--muted-foreground); text-transform: uppercase; } .products-sticky-actions { border-color: color-mix(in srgb, var(--page-accent) 25%, var(--border)); } .products-meta-strip { display: flex; flex-wrap: wrap; align-items: center; gap: 0.45rem; color: var(--muted-foreground); font-size: 0.9rem; } .products-tabs [data-slot='tabs-list'], .editorial-tabs [data-slot='tabs-list'] { border: 1px solid hsl(35 22% 75% / 0.75); background: hsl(40 28% 93%); } .routine-ledger-row { display: flex; align-items: center; justify-content: space-between; border: 1px solid hsl(35 21% 76% / 0.82); border-radius: 0.75rem; padding: 0.75rem 0.9rem; text-decoration: none; color: inherit; transition: background-color 140ms ease, border-color 140ms ease, transform 140ms ease; } .routine-ledger-row:hover { transform: translateX(2px); border-color: color-mix(in srgb, var(--page-accent) 42%, var(--border)); background: var(--page-accent-soft); } .health-entry-row { border: 1px solid hsl(35 21% 76% / 0.82); border-radius: 0.75rem; padding: 0.8rem 0.9rem; background: linear-gradient(165deg, hsl(44 31% 96%), hsl(42 30% 94%)); } .health-kind-pill, .health-flag-pill { display: inline-flex; border: 1px solid transparent; border-radius: 999px; padding: 0.26rem 0.62rem; font-size: 0.7rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; } .health-kind-pill--prescription, .health-flag-pill--abnormal, .health-flag-pill--high { border-color: hsl(4 54% 70%); background: hsl(5 58% 91%); color: hsl(5 58% 31%); } .health-kind-pill--otc, .health-flag-pill--negative { border-color: hsl(206 40% 69%); background: hsl(205 45% 90%); color: hsl(208 53% 29%); } .health-kind-pill--supplement, .health-kind-pill--herbal, .health-flag-pill--normal { border-color: hsl(136 27% 67%); background: hsl(132 31% 90%); color: hsl(136 49% 26%); } .health-kind-pill--other { border-color: hsl(35 20% 70%); background: hsl(40 22% 89%); color: hsl(28 24% 29%); } .health-flag-pill--positive, .health-flag-pill--low { border-color: hsl(33 53% 67%); background: hsl(35 55% 90%); color: hsl(28 55% 30%); } .lab-results-meta-strip { margin-top: 0.65rem; display: flex; flex-wrap: wrap; gap: 0.35rem; max-width: 48ch; } .lab-results-meta-pill { border: 1px solid hsl(36 22% 74% / 0.9); border-radius: 999px; background: hsl(44 32% 93%); padding: 0.14rem 0.56rem; color: var(--editorial-muted); font-size: 0.69rem; font-weight: 700; letter-spacing: 0.07em; text-transform: uppercase; } .lab-results-meta-pill--alert { border-color: hsl(12 56% 69%); background: hsl(10 66% 90%); color: hsl(10 63% 30%); min-width: 2.25rem; justify-content: center; } .lab-results-filter-banner { border-style: dashed; border-color: color-mix(in srgb, var(--page-accent) 48%, var(--border)); background: color-mix(in srgb, var(--page-accent-soft) 52%, white); } .lab-results-pager { border-color: color-mix(in srgb, var(--page-accent) 26%, var(--border)); } .lab-results-table table { border-collapse: separate; border-spacing: 0; } .lab-results-row td { vertical-align: middle; } .lab-results-row-actions { opacity: 0.62; transition: opacity 120ms ease; } .lab-results-row:hover .lab-results-row-actions, .lab-results-row:focus-within .lab-results-row-actions { opacity: 1; } .lab-results-code-link { border-radius: 0.32rem; text-decoration: none; transition: color 120ms ease, background-color 120ms ease; } .lab-results-code-link:hover { color: var(--page-accent); text-decoration: underline; text-underline-offset: 3px; } .lab-results-code-link:focus-visible { outline: 2px solid var(--page-accent); outline-offset: 2px; } .lab-results-value-cell { font-variant-numeric: tabular-nums; font-feature-settings: 'tnum'; } .lab-results-mobile-grid .products-section-title { margin-top: 0.15rem; } .lab-results-mobile-card { gap: 0.45rem; background: linear-gradient(170deg, hsl(44 34% 96%), hsl(42 30% 94%)); } .lab-results-mobile-value { justify-content: space-between; } .lab-results-mobile-actions { margin-top: 0.1rem; } [data-slot='card'] { border-color: hsl(35 22% 75% / 0.8); background: linear-gradient(170deg, hsl(44 34% 97%), hsl(41 30% 95%)); } [data-slot='input'] { border-color: hsl(36 21% 74%); background: hsl(42 28% 96%); } [data-slot='input']:focus-visible { border-color: color-mix(in srgb, var(--page-accent) 58%, white); } [data-slot='button']:focus-visible, [data-slot='badge']:focus-visible { outline-color: var(--page-accent); } @media (min-width: 768px) { .app-shell { flex-direction: row; } .app-main { padding: 2rem; } .editorial-hero { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: 'kicker actions' 'title actions' 'subtitle actions'; column-gap: 1rem; align-items: start; } .editorial-kicker { grid-area: kicker; } .editorial-title { grid-area: title; } .editorial-subtitle { grid-area: subtitle; } .editorial-toolbar { grid-area: actions; margin-top: 0; width: auto; justify-content: flex-end; align-self: start; } } .editorial-dashboard { position: relative; margin: 0 auto; width: min(1100px, 100%); color: var(--editorial-ink); } .editorial-atmosphere { pointer-events: none; position: absolute; inset: -2.5rem -1rem auto; z-index: 0; height: 14rem; border-radius: 2rem; background: radial-gradient( circle at 18% 34%, color-mix(in srgb, var(--page-accent) 24%, white) 0%, transparent 47% ), radial-gradient(circle at 74% 16%, hsl(198 63% 85% / 0.52), transparent 39%), linear-gradient(130deg, hsl(45 48% 94%), hsl(34 38% 91%)); filter: saturate(110%); } .editorial-hero, .editorial-panel { position: relative; z-index: 1; overflow: hidden; border: 1px solid hsl(36 26% 74% / 0.8); background: linear-gradient(160deg, hsl(44 40% 95%), var(--editorial-paper)); box-shadow: 0 24px 48px -34px hsl(219 32% 14% / 0.44), inset 0 1px 0 hsl(0 0% 100% / 0.75); } .editorial-hero { margin-bottom: 1.1rem; border-radius: 1.5rem; padding: clamp(1.2rem, 2.6vw, 2rem); } .editorial-kicker { margin-bottom: 0.4rem; color: var(--editorial-muted); font-size: 0.74rem; font-weight: 700; letter-spacing: 0.18em; text-transform: uppercase; } .editorial-title { margin: 0; font-family: 'Cormorant Infant', 'Times New Roman', serif; font-size: clamp(2.2rem, 5vw, 3.6rem); font-weight: 600; line-height: 0.95; letter-spacing: 0.01em; } .editorial-subtitle { margin-top: 0.66rem; max-width: 48ch; color: var(--editorial-muted); font-size: 0.98rem; } .hero-strip { grid-column: 1 / -1; margin-top: 1.3rem; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.8rem; border-top: 1px dashed color-mix(in srgb, var(--page-accent) 30%, var(--editorial-line)); padding-top: 0.9rem; } .hero-strip-label { margin: 0; color: var(--editorial-muted); font-size: 0.72rem; font-weight: 600; letter-spacing: 0.16em; text-transform: uppercase; } .hero-strip-value { margin: 0.22rem 0 0; font-family: 'Cormorant Infant', 'Times New Roman', serif; font-size: 1.4rem; font-weight: 600; } .editorial-grid { position: relative; z-index: 1; display: grid; gap: 1rem; grid-template-columns: minmax(0, 1fr); } .editorial-panel { border-radius: 1.2rem; padding: 1rem; } .panel-header { margin-bottom: 0.9rem; display: flex; align-items: baseline; justify-content: space-between; gap: 0.75rem; border-bottom: 1px solid hsl(36 20% 73% / 0.72); padding-bottom: 0.6rem; } .panel-header h3 { margin: 0; font-family: 'Cormorant Infant', 'Times New Roman', serif; font-size: clamp(1.35rem, 2.4vw, 1.7rem); font-weight: 600; } .panel-index { margin: 0; color: var(--editorial-muted); font-size: 0.74rem; font-weight: 700; letter-spacing: 0.16em; } .panel-action-row { margin-bottom: 0.7rem; display: flex; } .snapshot-meta-row { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.7rem; } .snapshot-date { color: var(--editorial-muted); font-size: 0.9rem; font-weight: 600; } .state-pill, .routine-pill { display: inline-flex; border: 1px solid transparent; border-radius: 999px; padding: 0.28rem 0.68rem; font-size: 0.74rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; } .state-pill--excellent { border-color: hsl(145 34% 65%); background: hsl(146 42% 90%); color: hsl(144 48% 26%); } .state-pill--good { border-color: hsl(191 44% 68%); background: hsl(190 56% 90%); color: hsl(193 60% 24%); } .state-pill--fair { border-color: hsl(40 68% 67%); background: hsl(44 76% 90%); color: hsl(35 63% 30%); } .state-pill--poor { border-color: hsl(4 64% 67%); background: hsl(6 72% 89%); color: hsl(8 64% 33%); } .concern-cloud { margin-top: 0.92rem; display: flex; flex-wrap: wrap; gap: 0.44rem; } .concern-chip { border: 1px solid hsl(36 24% 71% / 0.88); border-radius: 0.42rem; background: hsl(42 36% 92%); padding: 0.36rem 0.52rem; color: hsl(220 20% 22%); font-size: 0.81rem; font-weight: 600; } .snapshot-notes { margin-top: 0.9rem; border-left: 2px solid hsl(37 34% 66% / 0.8); padding-left: 0.8rem; color: hsl(220 13% 34%); font-size: 0.94rem; line-height: 1.45; } .routine-list { margin: 0; padding: 0; list-style: none; } .routine-summary-strip { margin-bottom: 0.7rem; display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem; } .routine-summary-chip { border: 1px solid hsl(35 24% 71% / 0.85); border-radius: 999px; padding: 0.22rem 0.62rem; color: var(--editorial-muted); font-size: 0.74rem; font-weight: 700; letter-spacing: 0.08em; } .panel-action-link, .routine-summary-link { border: 1px solid color-mix(in srgb, var(--page-accent) 38%, var(--editorial-line)); border-radius: 999px; padding: 0.24rem 0.64rem; color: var(--page-accent); font-size: 0.76rem; font-weight: 700; letter-spacing: 0.08em; text-decoration: none; text-transform: uppercase; } .routine-summary-link { margin-left: auto; } .panel-action-link:hover, .routine-summary-link:hover { background: var(--page-accent-soft); } .routine-item + .routine-item { border-top: 1px dashed hsl(36 26% 72% / 0.7); } .routine-link { display: flex; align-items: center; gap: 0.6rem; padding: 0.78rem 0; text-decoration: none; color: inherit; transition: transform 140ms ease, color 160ms ease; } .routine-main { display: flex; width: 100%; min-width: 0; flex-direction: column; gap: 0.25rem; } .routine-topline { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; } .routine-meta { display: flex; flex-wrap: wrap; gap: 0.75rem; color: var(--editorial-muted); font-size: 0.8rem; } .routine-note-inline { overflow: hidden; max-width: 38ch; white-space: nowrap; text-overflow: ellipsis; } .routine-link:hover { transform: translateX(4px); color: var(--page-accent); } .routine-link:focus-visible { outline: 2px solid var(--page-accent); outline-offset: 3px; border-radius: 0.4rem; } .routine-date { font-size: 0.93rem; font-weight: 600; } .routine-pill--am { border-color: hsl(188 43% 66%); background: hsl(188 52% 89%); color: hsl(194 56% 24%); } .routine-pill--pm { border-color: hsl(21 58% 67%); background: hsl(23 68% 90%); color: hsl(14 56% 31%); } .empty-copy { margin: 0; color: var(--editorial-muted); font-size: 0.95rem; } .empty-actions { margin-top: 0.75rem; display: flex; } .reveal-1, .reveal-2, .reveal-3 { opacity: 0; transform: translateY(16px); animation: editorial-rise 620ms cubic-bezier(0.2, 0.85, 0.24, 1) forwards; } .reveal-2 { animation-delay: 90ms; } .reveal-3 { animation-delay: 160ms; } @keyframes editorial-rise { to { opacity: 1; transform: translateY(0); } } @media (max-width: 1024px) { .editorial-grid { grid-template-columns: minmax(0, 1fr); } } @media (max-width: 640px) { .editorial-title { font-size: 2.05rem; } .panel-header { align-items: center; } .panel-header h3 { font-size: 1.4rem; } .state-pill, .routine-pill { letter-spacing: 0.08em; } .lab-results-meta-strip { margin-top: 0.6rem; } .lab-results-meta-pill { letter-spacing: 0.05em; } .lab-results-filter-banner { align-items: flex-start; flex-direction: column; } } @media (min-width: 768px) { .lab-results-meta-strip { grid-column: 1 / 2; align-items: center; } } @media (prefers-reduced-motion: reduce) { .reveal-1, .reveal-2, .reveal-3 { opacity: 1; transform: none; animation: none; } .routine-link { transition: none; } }